TextViewTest.java revision 02c09dc324e915d3786f0188704ad1753039bd40
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; 89c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cookimport android.view.inputmethod.InputConnection; 90c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunneimport android.widget.EditText; 91bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsuimport android.widget.FrameLayout; 9262808562ee0218f6ea3c07d333f7a65fc57c122fBrian Muramatsuimport android.widget.LinearLayout; 93fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.widget.Scroller; 94fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.widget.TextView; 95fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.widget.TextView.BufferType; 9672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.widget.TextView.OnEditorActionListener; 97fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 98fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport java.io.IOException; 99b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonakaimport java.util.Locale; 100fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 101fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su/** 102fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * Test {@link TextView}. 103fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 1044ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luopublic class TextViewTest extends ActivityInstrumentationTestCase2<TextViewCtsActivity> { 105fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView mTextView; 107fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Activity mActivity; 108fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Instrumentation mInstrumentation; 109fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static final String LONG_TEXT = "This is a really long string which exceeds " 1107375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "the width of the view. New devices have a much larger screen which " 1117375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "actually enables long strings to be displayed with no fading. " 1127375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "I have made this string longer to fix this case. If you are correcting " 1137375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "this text, I would love to see the kind of devices you guys now use!"; 114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static final long TIMEOUT = 5000; 11522d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root private CharSequence mTransformedText; 116fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public TextViewTest() { 1184ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luo super("com.android.cts.widget", TextViewCtsActivity.class); 119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 122fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected void setUp() throws Exception { 123fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su super.setUp(); 124fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity = getActivity(); 1254594468cc37000395ee2a000da08651e73e78508keunyoung new PollingCheck() { 1264594468cc37000395ee2a000da08651e73e78508keunyoung @Override 1274594468cc37000395ee2a000da08651e73e78508keunyoung protected boolean check() { 1284594468cc37000395ee2a000da08651e73e78508keunyoung return mActivity.hasWindowFocus(); 1294594468cc37000395ee2a000da08651e73e78508keunyoung } 1304594468cc37000395ee2a000da08651e73e78508keunyoung }.run(); 131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation = getInstrumentation(); 132fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 133fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 13428715a6877392e4e63cb2b0170c1592fb50079dcJames Cook /** 13528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook * Promotes the TextView to editable and places focus in it to allow simulated typing. 13628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook */ 13728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook private void initTextViewForTyping() { 13828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mActivity.runOnUiThread(new Runnable() { 13928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook public void run() { 14028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView = findTextView(R.id.textview_text); 14128715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView.setKeyListener(QwertyKeyListener.getInstance(false, Capitalize.NONE)); 14228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView.setText("", BufferType.EDITABLE); 14328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView.requestFocus(); 14428715a6877392e4e63cb2b0170c1592fb50079dcJames Cook } 14528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook }); 14628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mInstrumentation.waitForIdleSync(); 14728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook } 14828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testConstructor() { 150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new TextView(mActivity); 151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new TextView(mActivity, null); 153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new TextView(mActivity, null, 0); 155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 156fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 157fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 158fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessText() { 159fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 160fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String expected = mActivity.getResources().getString(R.string.text_view_hello); 162fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(expected); 163fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, tv.getText().toString()); 164fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 165fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(null); 166fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 167fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 168fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 169fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLineHeight() { 170fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 171fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineHeight() > 0); 172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLineSpacing(1.2f, 1.5f); 174fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineHeight() > 0); 175fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 176fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 177fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLayout() { 178fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER); 182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 184fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView.getLayout()); 186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TestLayoutRunnable runnable = new TestLayoutRunnable(mTextView) { 188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the text of TextView. 190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Hello, Android!"); 191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveLayout(); 192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }; 194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(runnable); 195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(runnable.getLayout()); 197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView.getLayout()); 198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessKeyListener() { 201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 202fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 203fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 204fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 205fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 206fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 207fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 208fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getKeyListener()); 209fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 210fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final KeyListener digitsKeyListener = DigitsKeyListener.getInstance(); 211fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 212fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 213fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 214fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(digitsKeyListener); 215fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 216fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 217fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 218fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(digitsKeyListener, mTextView.getKeyListener()); 219fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 220fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final QwertyKeyListener qwertyKeyListener 221fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su = QwertyKeyListener.getInstance(false, Capitalize.NONE); 222fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 223fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 224fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(qwertyKeyListener); 225fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 226fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 227fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 228fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(qwertyKeyListener, mTextView.getKeyListener()); 229fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 230fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 231fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessMovementMethod() { 232fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence LONG_TEXT = "Scrolls the specified widget to the specified " 233fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + "coordinates, except constrains the X scrolling position to the horizontal " 234fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + "regions of the text that will be visible after scrolling to " 235fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + "the specified Y position."; 236fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int selectionStart = 10; 237fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int selectionEnd = LONG_TEXT.length(); 238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final MovementMethod movementMethod = ArrowKeyMovementMethod.getInstance(); 239fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 240fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 241fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 242fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMovementMethod(movementMethod); 243fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(LONG_TEXT, BufferType.EDITABLE); 244fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Editable) mTextView.getText(), 245fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su selectionStart, selectionEnd); 246fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 247fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 248fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 249fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 250fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 251fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(movementMethod, mTextView.getMovementMethod()); 252fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 253fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, Selection.getSelectionEnd(mTextView.getText())); 254fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_ALT_LEFT, 255fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su KeyEvent.KEYCODE_DPAD_UP); 256fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the selection has been removed. 257fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 258fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionEnd(mTextView.getText())); 259fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 260fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 261fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 262fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMovementMethod(null); 263fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Editable) mTextView.getText(), 264fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su selectionStart, selectionEnd); 265fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 266fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 267fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 268fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 269fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 270fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getMovementMethod()); 271fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 272fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, Selection.getSelectionEnd(mTextView.getText())); 273fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_ALT_LEFT, 274fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su KeyEvent.KEYCODE_DPAD_UP); 275fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the selection will not be changed. 276fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 277fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, Selection.getSelectionEnd(mTextView.getText())); 278fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 279fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 280fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 281fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testLength() { 282fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 283fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 284fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String content = "This is content"; 285fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(content); 286fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(content.length(), mTextView.length()); 287fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 288fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(""); 289fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.length()); 290fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 291fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(null); 292fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.length()); 293fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 294fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 295fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 296fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessGravity() { 297fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_gravity); 298fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 299fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_default); 3004bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.TOP | Gravity.START, mTextView.getGravity()); 301fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 302fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_bottom); 3034bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.BOTTOM | Gravity.START, mTextView.getGravity()); 304fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 305fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_right); 306fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.TOP | Gravity.RIGHT, mTextView.getGravity()); 307fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 308fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_center); 309fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.CENTER, mTextView.getGravity()); 310fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 311fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_fill); 312fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.FILL, mTextView.getGravity()); 313fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 314fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_center_vertical_right); 315fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.CENTER_VERTICAL | Gravity.RIGHT, mTextView.getGravity()); 316fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 317fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); 318fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, mTextView.getGravity()); 319fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.FILL); 320fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.FILL, mTextView.getGravity()); 321fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER); 322fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.CENTER, mTextView.getGravity()); 323fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 324fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.NO_GRAVITY); 3254bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.TOP | Gravity.START, mTextView.getGravity()); 326fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 327fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.RIGHT); 328fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.TOP | Gravity.RIGHT, mTextView.getGravity()); 329fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 330fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.FILL_VERTICAL); 3314bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.FILL_VERTICAL | Gravity.START, mTextView.getGravity()); 332fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 333fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //test negative input value. 334fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(-1); 335fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getGravity()); 336fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 337fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 338fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessAutoLinkMask() { 339fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 340fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text1 = 341fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new SpannableString("URL: http://www.google.com. mailto: account@gmail.com"); 342fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 343fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 344fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setAutoLinkMask(Linkify.ALL); 345fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text1, BufferType.EDITABLE); 346fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 347fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 348fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 349fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.ALL, mTextView.getAutoLinkMask()); 350fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 351fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Spannable spanString = (Spannable) mTextView.getText(); 352fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su URLSpan[] spans = spanString.getSpans(0, spanString.length(), URLSpan.class); 353fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(spans); 354fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, spans.length); 355fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("http://www.google.com", spans[0].getURL()); 356fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("mailto:account@gmail.com", spans[1].getURL()); 357fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 358fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text2 = 359fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new SpannableString("name: Jack. tel: +41 44 800 8999"); 360fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 361fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 362fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setAutoLinkMask(Linkify.PHONE_NUMBERS); 363fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text2, BufferType.EDITABLE); 364fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 365fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 366fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 367fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.PHONE_NUMBERS, mTextView.getAutoLinkMask()); 368fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 369fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spanString = (Spannable) mTextView.getText(); 370fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = spanString.getSpans(0, spanString.length(), URLSpan.class); 371fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(spans); 372fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, spans.length); 373fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("tel:+41448008999", spans[0].getURL()); 374fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 375fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(R.layout.textview_autolink); 376fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 1 for web, 2 for email, 4 for phone, 7 for all(web|email|phone) 377fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, getAutoLinkMask(R.id.autolink_default)); 378fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.WEB_URLS, getAutoLinkMask(R.id.autolink_web)); 379fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.EMAIL_ADDRESSES, getAutoLinkMask(R.id.autolink_email)); 380fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.PHONE_NUMBERS, getAutoLinkMask(R.id.autolink_phone)); 381fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.ALL, getAutoLinkMask(R.id.autolink_all)); 382fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.WEB_URLS | Linkify.EMAIL_ADDRESSES, 383fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound1)); 384fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.WEB_URLS | Linkify.PHONE_NUMBERS, 385fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound2)); 386fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS, 387fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound3)); 388fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.PHONE_NUMBERS | Linkify.ALL, 389fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound4)); 390fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 391fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 392fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessTextSize() { 393fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su DisplayMetrics metrics = mActivity.getResources().getDisplayMetrics(); 394fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 395fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 396fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20f); 397fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20f, metrics), 398fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 399fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 400fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20f); 401fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20f, metrics), 402fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 403fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 404fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f); 405fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, metrics), 406fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 407fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 408fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // setTextSize by default unit "sp" 409fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(20f); 410fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, metrics), 411fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 412fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 413fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(200f); 414fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 200f, metrics), 415fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 416fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 417fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 418fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessTextColor() { 419fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 420fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 421fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(Color.GREEN); 422fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.GREEN, mTextView.getCurrentTextColor()); 423fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.GREEN), mTextView.getTextColors()); 424fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 425fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(Color.BLACK); 426fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getCurrentTextColor()); 427fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.BLACK), mTextView.getTextColors()); 428fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 429fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(Color.RED); 430fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.RED, mTextView.getCurrentTextColor()); 431fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.RED), mTextView.getTextColors()); 432fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 433fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using ColorStateList 434fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 435fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ColorStateList colors = new ColorStateList(new int[][] { 436fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { android.R.attr.state_focused}, new int[0] }, 437fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { Color.rgb(0, 255, 0), Color.BLACK }); 438fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(colors); 439fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(colors, mTextView.getTextColors()); 440fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getCurrentTextColor()); 441fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 442fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // exceptional 443fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 444fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(null); 445fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should thrown exception if the colors is null"); 446fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e){ 447fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 448fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 449fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 450325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette public void testGetTextColor() { 451325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette // TODO: How to get a suitable TypedArray to test this method. 452325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette 453325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette try { 454325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette TextView.getTextColor(mActivity, null, -1); 455325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette fail("There should be a NullPointerException thrown out."); 456325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette } catch (NullPointerException e) { 457325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette } 458325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette } 459325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette 460fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetHighlightColor() { 461fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 462fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 463fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHighlightColor(0x00ff00ff); 464fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 465fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 466fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetShadowLayer() { 467fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 468fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 469fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // shadow is placed to the left and below the text 470fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setShadowLayer(1.0f, 0.3f, 0.3f, Color.CYAN); 471fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.isPaddingOffsetRequired()); 472fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getLeftPaddingOffset()); 473fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getTopPaddingOffset()); 474fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, textView.getRightPaddingOffset()); 475fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, textView.getBottomPaddingOffset()); 476fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 477fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // shadow is placed to the right and above the text 478fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setShadowLayer(1.0f, -0.8f, -0.8f, Color.CYAN); 479fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.isPaddingOffsetRequired()); 480fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getLeftPaddingOffset()); 481fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getTopPaddingOffset()); 482fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getRightPaddingOffset()); 483fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getBottomPaddingOffset()); 484fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 485fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // no shadow 486fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setShadowLayer(0.0f, 0.0f, 0.0f, Color.CYAN); 487fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(textView.isPaddingOffsetRequired()); 488fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getLeftPaddingOffset()); 489fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getTopPaddingOffset()); 490fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getRightPaddingOffset()); 491fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getBottomPaddingOffset()); 492fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 493fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 494fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 495fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetSelectAllOnFocus() { 496fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_selectallonfocus); 497fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String content = "This is the content"; 498fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String blank = ""; 499fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.selectAllOnFocus_default); 500fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(blank, BufferType.SPANNABLE); 501fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 502fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 503fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 504fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 505fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 506fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 507fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 508fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 509fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 510fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(content, BufferType.SPANNABLE); 511fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(true); 512fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 513fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 514fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 515fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 516fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 517fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 518fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 519fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(content.length(), mTextView.getSelectionEnd()); 520fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 521fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 0); 522fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(false); 523fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 524fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 525fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 526fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 527fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 528fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 529fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 530fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionEnd()); 531fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 532fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(blank, BufferType.SPANNABLE); 533fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(true); 534fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 535fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 536fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 537fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 538fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 539fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 540fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 541fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(blank.length(), mTextView.getSelectionEnd()); 542fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 543fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 0); 544fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(false); 545fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 546fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 547fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 548fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 549fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 550fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 551fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 552fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionEnd()); 553fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 554fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 555fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetPaint() { 556fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 557fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextPaint tp = mTextView.getPaint(); 558fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(tp); 559fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 560fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaintFlags(), tp.getFlags()); 561fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 562fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 563fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 564fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessLinksClickable() { 565fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_hint_linksclickable_freezestext); 566fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 567fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_linksClickable_freezesText_default); 568fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLinksClickable()); 569fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 570fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.linksClickable_true); 571fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLinksClickable()); 572fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 573fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.linksClickable_false); 574fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getLinksClickable()); 575fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 576fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinksClickable(false); 577fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getLinksClickable()); 578fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 579fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinksClickable(true); 580fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLinksClickable()); 581fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 582fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getMovementMethod()); 583fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 584fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text = new SpannableString("name: Jack. tel: +41 44 800 8999"); 585fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 586fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setAutoLinkMask(Linkify.PHONE_NUMBERS); 587fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 588fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 589fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Movement method will be automatically set to LinkMovementMethod 590fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getMovementMethod() instanceof LinkMovementMethod); 591fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 592fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 593fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessHintTextColor() { 594fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 595fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using int values 596fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 597fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(Color.GREEN); 598fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.GREEN, mTextView.getCurrentHintTextColor()); 599fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.GREEN), mTextView.getHintTextColors()); 600fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 601fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(Color.BLUE); 602fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.BLUE), mTextView.getHintTextColors()); 603fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLUE, mTextView.getCurrentHintTextColor()); 604fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 605fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(Color.RED); 606fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.RED), mTextView.getHintTextColors()); 607fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.RED, mTextView.getCurrentHintTextColor()); 608fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 609fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using ColorStateList 610fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 611fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ColorStateList colors = new ColorStateList(new int[][] { 612fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { android.R.attr.state_focused}, new int[0] }, 613fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { Color.rgb(0, 255, 0), Color.BLACK }); 614fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(colors); 615fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(colors, mTextView.getHintTextColors()); 616fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getCurrentHintTextColor()); 617fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 618fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // exceptional 619fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(null); 620fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getHintTextColors()); 621fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCurrentTextColor(), mTextView.getCurrentHintTextColor()); 622fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 623fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 624fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessLinkTextColor() { 625fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 626fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 627fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(Color.GRAY); 628fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.GRAY), mTextView.getLinkTextColors()); 629fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.GRAY, mTextView.getPaint().linkColor); 630fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 631fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(Color.YELLOW); 632fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.YELLOW), mTextView.getLinkTextColors()); 633fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.YELLOW, mTextView.getPaint().linkColor); 634fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 635fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(Color.WHITE); 636fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.WHITE), mTextView.getLinkTextColors()); 637fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.WHITE, mTextView.getPaint().linkColor); 638fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 639fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ColorStateList colors = new ColorStateList(new int[][] { 640fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { android.R.attr.state_expanded}, new int[0] }, 641fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { Color.rgb(0, 255, 0), Color.BLACK }); 642fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(colors); 643fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(colors, mTextView.getLinkTextColors()); 644fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getPaint().linkColor); 645fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 646fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(null); 647fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getLinkTextColors()); 648fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getPaint().linkColor); 649fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 650fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 651fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessPaintFlags() { 652fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 65353959f211c113aa7b2a2ebaf80e10b79ddcccef1Victoria Lease assertEquals(Paint.DEV_KERN_TEXT_FLAG | Paint.EMBEDDED_BITMAP_TEXT_FLAG 65453959f211c113aa7b2a2ebaf80e10b79ddcccef1Victoria Lease | Paint.ANTI_ALIAS_FLAG, mTextView.getPaintFlags()); 655fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 656fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG | Paint.FAKE_BOLD_TEXT_FLAG); 657fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Paint.UNDERLINE_TEXT_FLAG | Paint.FAKE_BOLD_TEXT_FLAG, 658fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getPaintFlags()); 659fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 660fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.LINEAR_TEXT_FLAG); 661fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Paint.STRIKE_THRU_TEXT_FLAG | Paint.LINEAR_TEXT_FLAG, 662fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getPaintFlags()); 663fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 664fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 665fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testHeightAndWidth() { 666fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 667fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 668fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 3); 669fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalHeight = mTextView.getHeight(); 670fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 671fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(originalHeight + 1); 672fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 673fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 674fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(originalHeight - 1); 675fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight - 1, mTextView.getHeight()); 676fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 677fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(-1); 678fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getHeight()); 679fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 680fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(Integer.MAX_VALUE); 681fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 682fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 683fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(originalHeight + 1); 684fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight + 1, mTextView.getHeight()); 685fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 686fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(originalHeight - 1); 687fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 688fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 689fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(-1); 690fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 691fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 692fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(0); 693fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(Integer.MAX_VALUE); 694fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 695fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(originalHeight + 1); 696fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight + 1, mTextView.getHeight()); 697fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 698fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(originalHeight - 1); 699fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight - 1, mTextView.getHeight()); 700fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 701fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(-1); 702fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getHeight()); 703fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 704fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(originalHeight); 705fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 706fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 707fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth >> 3, mTextView.getWidth()); 708fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 709fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Min Width 710fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinWidth(originalWidth + 1); 711fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 712fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth + 1, mTextView.getWidth()); 713fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 714fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinWidth(originalWidth - 1); 7159c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu assertEquals(2, mTextView.getLineCount()); 7169c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu assertEquals(originalWidth - 1, mTextView.getWidth()); 717fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 718fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Width 719fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(originalWidth + 1); 720fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 721fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth + 1, mTextView.getWidth()); 722fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 723fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(originalWidth - 1); 7249c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu assertEquals(2, mTextView.getLineCount()); 725fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth - 1, mTextView.getWidth()); 726fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 727fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 728fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMinEms() { 729fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 730fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 7319c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu 732fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 733fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalEms = originalWidth / mTextView.getLineHeight(); 734fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 735fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinEms(originalEms + 1); 736fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms + 1) * mTextView.getLineHeight(), mTextView.getWidth()); 737fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 738fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinEms(originalEms - 1); 739fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth, mTextView.getWidth()); 740fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 741fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 742fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMaxEms() { 743fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 744fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 745fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 746fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalEms = originalWidth / mTextView.getLineHeight(); 747fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 748fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxEms(originalEms + 1); 749fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 750fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth, mTextView.getWidth()); 751fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 752fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxEms(originalEms - 1); 753fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(1 < mTextView.getLineCount()); 754fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms - 1) * mTextView.getLineHeight(), 755fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getWidth()); 756fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 757fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 758fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetEms() { 759fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 760fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("check height", 1, mTextView.getLineCount()); 761fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 762fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalEms = originalWidth / mTextView.getLineHeight(); 763fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 764fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setEms(originalEms + 1); 765fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 766fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms + 1) * mTextView.getLineHeight(), 767fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getWidth()); 768fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 769fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setEms(originalEms - 1); 770fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((1 < mTextView.getLineCount())); 771fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms - 1) * mTextView.getLineHeight(), 772fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getWidth()); 773fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 774fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 775fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetLineSpacing() { 776fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 777fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalLineHeight = mTextView.getLineHeight(); 778fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 779fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 780fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float add = 1.2f; 781fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float mult = 1.4f; 782fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 783fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 784fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = 0.0f; 785fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = 1.4f; 786fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 787fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 788fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 789fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // abnormal 790fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = -1.2f; 791fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = 1.4f; 792fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 793fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 794fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = -1.2f; 795fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = -1.4f; 796fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 797fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 798fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = 1.2f; 799fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = 0.0f; 800fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 801fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 802fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 803fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // edge 804fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = Float.MIN_VALUE; 805fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = Float.MIN_VALUE; 806fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 807fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float expected = originalLineHeight * mult + add; 808fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(expected), mTextView.getLineHeight()); 809fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = Float.MAX_VALUE; 810fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = Float.MAX_VALUE; 811fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 812fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su expected = originalLineHeight * mult + add; 813fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(expected), mTextView.getLineHeight()); 814fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 815fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 816fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testInstanceState() { 817fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 818fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 819fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 820fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessFreezesText() throws Throwable { 821fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(R.layout.textview_hint_linksclickable_freezestext); 822fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 823fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_linksClickable_freezesText_default); 824fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getFreezesText()); 825fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 826fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_true); 827fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getFreezesText()); 828fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 829fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_false); 830fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getFreezesText()); 831fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 832fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFreezesText(false); 833fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getFreezesText()); 834fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 835fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text = "Hello, TextView."; 836fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 837fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 838fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 839fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 840fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 841fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 842fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 843fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final URLSpan urlSpan = new URLSpan("ctstest://TextView/test"); 84472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // TODO: How to simulate the TextView in frozen icicles. 845fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Instrumentation instrumentation = getInstrumentation(); 846fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ActivityMonitor am = instrumentation.addMonitor(MockURLSpanTestActivity.class.getName(), 847fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su null, false); 848fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 849fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 850fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 851fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Uri uri = Uri.parse(urlSpan.getURL()); 852fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Intent intent = new Intent(Intent.ACTION_VIEW, uri); 853fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.startActivity(intent); 854fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 855fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 856fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 857fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Activity newActivity = am.waitForActivityWithTimeout(TIMEOUT); 858fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(newActivity); 859fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su newActivity.finish(); 86072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach instrumentation.removeMonitor(am); 861fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text of TextView is removed. 862fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_false); 86372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 86472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(text.toString(), mTextView.getText().toString()); 865fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 866fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFreezesText(true); 867fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getFreezesText()); 868fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 869fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 870fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 871fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 872fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 873fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 874fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 87572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // TODO: How to simulate the TextView in frozen icicles. 876fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su am = instrumentation.addMonitor(MockURLSpanTestActivity.class.getName(), 877fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su null, false); 878fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 879fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 880fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 881fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Uri uri = Uri.parse(urlSpan.getURL()); 882fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Intent intent = new Intent(Intent.ACTION_VIEW, uri); 883fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.startActivity(intent); 884fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 885fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 886fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 88707b9d3406e116f2f6b92932925783eed79503de0Mist Liao Activity oldActivity = newActivity; 88807b9d3406e116f2f6b92932925783eed79503de0Mist Liao while (true) { 88907b9d3406e116f2f6b92932925783eed79503de0Mist Liao newActivity = am.waitForActivityWithTimeout(TIMEOUT); 89007b9d3406e116f2f6b92932925783eed79503de0Mist Liao assertNotNull(newActivity); 89107b9d3406e116f2f6b92932925783eed79503de0Mist Liao if (newActivity != oldActivity) { 89207b9d3406e116f2f6b92932925783eed79503de0Mist Liao break; 89307b9d3406e116f2f6b92932925783eed79503de0Mist Liao } 89407b9d3406e116f2f6b92932925783eed79503de0Mist Liao } 895fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su newActivity.finish(); 89672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach instrumentation.removeMonitor(am); 897fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text of TextView is still there. 898fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_false); 899fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text.toString(), mTextView.getText().toString()); 900fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 901fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 902fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetEditableFactory() { 903fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 904fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "sample"; 905fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockEditableFactory factory = new MockEditableFactory(); 906fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEditableFactory(factory); 907fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 908fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 909fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 910fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(factory.hasCalledNewEditable()); 911fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 912fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 913fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.SPANNABLE); 914fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(factory.hasCalledNewEditable()); 915fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 916fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 917fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.NORMAL); 918fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(factory.hasCalledNewEditable()); 919fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 920fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 921fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 922fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(factory.hasCalledNewEditable()); 923fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 924fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 925fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(DigitsKeyListener.getInstance()); 926fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 927fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 928fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(factory.hasCalledNewEditable()); 929fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 930fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 931fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 932fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEditableFactory(null); 933fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("The factory can not set to null!"); 934fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 935fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 936fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 937fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 938fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetSpannableFactory() { 939fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 940fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "sample"; 941fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockSpannableFactory factory = new MockSpannableFactory(); 942fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSpannableFactory(factory); 943fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 944fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 945fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 946e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertFalse(factory.hasCalledNewSpannable()); 947fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 948fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 949fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 950e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertFalse(factory.hasCalledNewSpannable()); 951fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 952fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 953fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.NORMAL); 954e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertFalse(factory.hasCalledNewSpannable()); 955fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 956fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 957fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.SPANNABLE); 958e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertTrue(factory.hasCalledNewSpannable()); 959fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 960fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 961fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMovementMethod(LinkMovementMethod.getInstance()); 962fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 963fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.NORMAL); 964e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertTrue(factory.hasCalledNewSpannable()); 965fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 966fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 967fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 968fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSpannableFactory(null); 969fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("The factory can not set to null!"); 970fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 971fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 972fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 973fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 974fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testTextChangedListener() { 975fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 976fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextWatcher watcher0 = new MockTextWatcher(); 977fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextWatcher watcher1 = new MockTextWatcher(); 978fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 979fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.addTextChangedListener(watcher0); 980fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.addTextChangedListener(watcher1); 981fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 982fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 983fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 984fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Changed"); 985fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 986fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 987fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 988fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledBeforeTextChanged()); 989fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledOnTextChanged()); 990fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledAfterTextChanged()); 991fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 992fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 993fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 994fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // BeforeTextChanged and OnTextChanged are called though the strings are same 995fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Changed"); 996fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 997fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 998fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 999fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledBeforeTextChanged()); 1000fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledOnTextChanged()); 1001fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledAfterTextChanged()); 1002fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1003fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 1004fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 1005fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // BeforeTextChanged and OnTextChanged are called twice (The text is not 1006fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Editable, so in Append() it calls setText() first) 1007fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("and appended"); 1008fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 1009fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 1010fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 1011fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledBeforeTextChanged()); 1012fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledOnTextChanged()); 1013fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledAfterTextChanged()); 1014fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1015fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 1016fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 1017fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Methods are not called if the string does not change 1018fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append(""); 1019fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher0.hasCalledBeforeTextChanged()); 1020fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher0.hasCalledOnTextChanged()); 1021fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher0.hasCalledAfterTextChanged()); 1022fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledBeforeTextChanged()); 1023fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledOnTextChanged()); 1024fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledAfterTextChanged()); 1025fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1026fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 1027fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 1028fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.removeTextChangedListener(watcher1); 1029fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(null); 1030fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 1031fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 1032fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 1033fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledBeforeTextChanged()); 1034fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledOnTextChanged()); 1035fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledAfterTextChanged()); 1036fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1037fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1038fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetTextKeepState1() { 1039fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1040fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1041fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String longString = "very long content"; 1042fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String shortString = "short"; 1043fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1044fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is inside the short string 1045fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString, BufferType.SPANNABLE); 1046fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 3); 1047fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1048fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1049fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionStart()); 1050fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionEnd()); 1051fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1052fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is outside the short string 1053fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1054fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), shortString.length() + 1); 1055fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1056fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1057fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1058fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1059fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1060fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which is inside the short string 1061fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1062fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1, 4); 1063fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1064fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1065fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getSelectionStart()); 1066fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(4, mTextView.getSelectionEnd()); 1067fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1068fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which ends outside the short string 1069fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1070fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 2, shortString.length() + 1); 1071fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1072fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1073fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, mTextView.getSelectionStart()); 1074fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1075fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1076fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which is outside the short string 1077fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1078fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1079fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su shortString.length() + 1, shortString.length() + 3); 1080fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1081fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1082fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1083fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1084fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1085fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1086fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1087fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetEditableText() { 1088fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1089fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1090fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "Hello"; 1091fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(text, BufferType.EDITABLE); 1092fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, tv.getText().toString()); 1093fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Editable); 1094fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, tv.getEditableText().toString()); 1095fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1096fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(text, BufferType.SPANNABLE); 1097fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, tv.getText().toString()); 1098fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Spannable); 1099fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(tv.getEditableText()); 1100fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1101fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(null, BufferType.EDITABLE); 1102fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 1103fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Editable); 1104fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getEditableText().toString()); 1105fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(null, BufferType.SPANNABLE); 1107fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 1108fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Spannable); 1109fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(tv.getEditableText()); 1110fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1111fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1112fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1113fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText2() { 1114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String string = "This is a test for setting text content by char array"; 1115fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su char[] input = string.toCharArray(); 1116fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1118fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 0, input.length); 1119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(string, tv.getText().toString()); 1120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 0, 5); 1122fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(string.substring(0, 5), tv.getText().toString()); 1123fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1124fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1125fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, -1, input.length); 1126fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if the start position is negative!"); 1127fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IndexOutOfBoundsException exception) { 1128fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1129fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1130fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 0, -1); 1132fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if the length is negative!"); 1133fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IndexOutOfBoundsException exception) { 1134fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1135fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1136fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1137fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 1, input.length); 1138fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if the end position is out of index!"); 1139fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IndexOutOfBoundsException exception) { 1140fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1141fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1142fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 1, 0); 1143fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 1144fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1145fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1146fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1147fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText1() { 1148fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String longString = "very long content"; 1151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String shortString = "short"; 1152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is inside the short string 1154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString, BufferType.SPANNABLE); 1155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 3); 1156fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1157fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1158fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1159fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1160fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionStart()); 1161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionEnd()); 1162fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1163fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1164fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1165fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1166fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1167fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1168fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1169fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1170fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1171fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is outside the short string 1172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), longString.length()); 1174fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1175fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1176fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1177fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1178fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1184fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which is inside the short string 1190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1, shortString.length() - 1); 1192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getSelectionStart()); 1197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length() - 1, mTextView.getSelectionEnd()); 1198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1202fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1203fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1204fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1205fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1206fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1207fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which ends outside the short string 1208fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1209fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 2, longString.length()); 1210fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1211fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1212fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1213fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1214fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, mTextView.getSelectionStart()); 1215fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1216fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1217fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1218fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1219fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1220fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1221fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1222fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1223fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1224fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1225fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which is outside the short string 1226fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1227fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1228fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su shortString.length() + 1, shortString.length() + 3); 1229fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1230fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1231fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1232fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1233fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1234fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1235fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1236fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1237fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1239fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1240fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1241fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1242fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1243fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1244fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1245fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1246fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText3() { 1247fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1248fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1249fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int resId = R.string.text_view_hint; 1250fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String result = mActivity.getResources().getString(resId); 1251fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1252fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(resId); 1253fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(result, tv.getText().toString()); 1254fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1255fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1256fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(-1); 1257fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception with illegal id"); 1258fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NotFoundException e) { 1259fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1260fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1261fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1262c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_insert() { 126328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook initTextViewForTyping(); 12645b51f77b99861d48fec1c327252416f726b3b01aJames Cook 12655b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Type some text. 12665b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.sendStringSync("abc"); 12675b51f77b99861d48fec1c327252416f726b3b01aJames Cook mActivity.runOnUiThread(new Runnable() { 12685b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void run() { 126928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Precondition: The cursor is at the end of the text. 127028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(3, mTextView.getSelectionStart()); 12715b51f77b99861d48fec1c327252416f726b3b01aJames Cook 12725b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Undo removes the typed string in one step. 12735b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 12745b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 127528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(0, mTextView.getSelectionStart()); 12765b51f77b99861d48fec1c327252416f726b3b01aJames Cook 127728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Redo restores the text and cursor position. 12785b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.redo); 12795b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("abc", mTextView.getText().toString()); 128028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(3, mTextView.getSelectionStart()); 12815b51f77b99861d48fec1c327252416f726b3b01aJames Cook 12825b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Undoing the redo clears the text again. 12835b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 12845b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 12855b51f77b99861d48fec1c327252416f726b3b01aJames Cook 12865b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Undo when the undo stack is empty does nothing. 12875b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 12885b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 12895b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 12905b51f77b99861d48fec1c327252416f726b3b01aJames Cook }); 12915b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.waitForIdleSync(); 129228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook } 12935b51f77b99861d48fec1c327252416f726b3b01aJames Cook 1294c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_delete() { 129528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook initTextViewForTyping(); 12965b51f77b99861d48fec1c327252416f726b3b01aJames Cook 129728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Simulate deleting text and undoing it. 129828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mInstrumentation.sendStringSync("xyz"); 129928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook sendKeys(KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DEL); 13005b51f77b99861d48fec1c327252416f726b3b01aJames Cook mActivity.runOnUiThread(new Runnable() { 13015b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void run() { 130228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Precondition: The text was actually deleted. 130328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals("", mTextView.getText().toString()); 130428715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(0, mTextView.getSelectionStart()); 130528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 130628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Undo restores the typed string and cursor position in one step. 13075b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 130828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals("xyz", mTextView.getText().toString()); 130928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(3, mTextView.getSelectionStart()); 13105b51f77b99861d48fec1c327252416f726b3b01aJames Cook 131128715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Redo removes the text in one step. 131228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView.onTextContextMenuItem(android.R.id.redo); 131328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals("", mTextView.getText().toString()); 131428715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(0, mTextView.getSelectionStart()); 13155b51f77b99861d48fec1c327252416f726b3b01aJames Cook 131628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Undoing the redo restores the text again. 131728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 131828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals("xyz", mTextView.getText().toString()); 131928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(3, mTextView.getSelectionStart()); 132028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 132128715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Undoing again undoes the original typing. 13225b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 13235b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 132428715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals(0, mTextView.getSelectionStart()); 13255b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 13265b51f77b99861d48fec1c327252416f726b3b01aJames Cook }); 13275b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.waitForIdleSync(); 132828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook } 13295b51f77b99861d48fec1c327252416f726b3b01aJames Cook 1330c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // Initialize the text view for simulated IME typing. Must be called on UI thread. 1331c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook private InputConnection initTextViewForSimulatedIme() { 1332c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView = findTextView(R.id.textview_text); 1333c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView.setKeyListener(QwertyKeyListener.getInstance(false, Capitalize.NONE)); 1334c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView.setText("", BufferType.EDITABLE); 1335c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook return mTextView.onCreateInputConnection(new EditorInfo()); 1336c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook } 1337c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1338c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // Simulates IME composing text behavior. 1339c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook private void setComposingTextInBatch(InputConnection input, CharSequence text) { 1340c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.beginBatchEdit(); 1341c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.setComposingText(text, 1); // Leave cursor at end. 1342c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.endBatchEdit(); 1343c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook } 1344c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1345c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook @UiThreadTest 1346c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_imeInsertLatin() { 1347c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook InputConnection input = initTextViewForSimulatedIme(); 1348c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1349c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // Simulate IME text entry behavior. The Latin IME enters text by replacing partial words, 1350c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // such as "c" -> "ca" -> "cat" -> "cat ". 1351c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook setComposingTextInBatch(input, "c"); 1352c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook setComposingTextInBatch(input, "ca"); 1353c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1354c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // The completion and space are added in the same batch. 1355c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.beginBatchEdit(); 1356c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.commitText("cat", 1); 1357c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.commitText(" ", 1); 1358c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.endBatchEdit(); 1359c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1360c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // The repeated replacements undo in a single step. 1361c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1362c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook assertEquals("", mTextView.getText().toString()); 1363c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook } 1364c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1365c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook @UiThreadTest 1366c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_imeInsertJapanese() { 1367c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook InputConnection input = initTextViewForSimulatedIme(); 1368c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1369c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // The Japanese IME does repeated replacements of Latin characters to hiragana to kanji. 1370c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook final String HA = "\u306F"; // HIRAGANA LETTER HA 1371c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook final String NA = "\u306A"; // HIRAGANA LETTER NA 1372c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook setComposingTextInBatch(input, "h"); 1373c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook setComposingTextInBatch(input, HA); 1374c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook setComposingTextInBatch(input, HA + "n"); 1375c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook setComposingTextInBatch(input, HA + NA); 1376c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1377c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // The result may be a surrogate pair. The composition ends in the same batch. 1378c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.beginBatchEdit(); 1379c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.commitText("\uD83C\uDF37", 1); // U+1F337 TULIP 1380c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.setComposingText("", 1); 1381c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.endBatchEdit(); 1382c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1383c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // The repeated replacements are a single undo step. 1384c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1385c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook assertEquals("", mTextView.getText().toString()); 1386c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook } 1387c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1388c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook @UiThreadTest 1389c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_imeCancel() { 1390c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook InputConnection input = initTextViewForSimulatedIme(); 1391c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView.setText("flower"); 1392c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1393c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // Start typing a composition. 1394c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook final String HA = "\u306F"; // HIRAGANA LETTER HA 1395c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook setComposingTextInBatch(input, "h"); 1396c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook setComposingTextInBatch(input, HA); 1397c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook setComposingTextInBatch(input, HA + "n"); 1398c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1399c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // Cancel the composition. 1400c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook setComposingTextInBatch(input, ""); 1401c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1402c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // Undo and redo do nothing. 1403c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1404c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook assertEquals("flower", mTextView.getText().toString()); 1405c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView.onTextContextMenuItem(android.R.id.redo); 1406c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook assertEquals("flower", mTextView.getText().toString()); 1407c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook } 1408c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1409c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook @UiThreadTest 1410c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_imeEmptyBatch() { 1411c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook InputConnection input = initTextViewForSimulatedIme(); 1412c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView.setText("flower"); 1413c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1414c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // Send an empty batch edit. This happens if the IME is hidden and shown. 1415c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.beginBatchEdit(); 1416c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook input.endBatchEdit(); 1417c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1418c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // Undo and redo do nothing. 1419c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1420c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook assertEquals("flower", mTextView.getText().toString()); 1421c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mTextView.onTextContextMenuItem(android.R.id.redo); 1422c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook assertEquals("flower", mTextView.getText().toString()); 1423c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook } 1424c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook 1425c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_setText() { 1426277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook initTextViewForTyping(); 142728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 1428c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // Create two undo operations, an insert and a delete. 1429c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook mInstrumentation.sendStringSync("xyz"); 1430c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook sendKeys(KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DEL); 1431277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mActivity.runOnUiThread(new Runnable() { 1432277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void run() { 1433c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook // Calling setText() clears both undo operations, so undo doesn't happen. 1434277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.setText("Hello", BufferType.EDITABLE); 1435277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1436277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("Hello", mTextView.getText().toString()); 143728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 1438277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Clearing text programmatically does not undo either. 1439277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.setText("", BufferType.EDITABLE); 1440277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1441277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("", mTextView.getText().toString()); 1442277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1443277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook }); 1444277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.waitForIdleSync(); 1445277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 144628715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 1447c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testRedo_setText() { 1448277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook initTextViewForTyping(); 1449277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1450277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Type some text. This creates an undo entry. 1451277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.sendStringSync("abc"); 1452277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mActivity.runOnUiThread(new Runnable() { 1453277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void run() { 1454277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Undo the typing to create a redo entry. 1455277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1456277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1457277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Calling setText() clears the redo stack, so redo doesn't happen. 1458277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.setText("Hello", BufferType.EDITABLE); 1459277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.redo); 1460277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("Hello", mTextView.getText().toString()); 1461277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1462277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook }); 1463277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.waitForIdleSync(); 1464277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1465277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1466c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_directAppend() { 1467277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook initTextViewForTyping(); 146828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 1469277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Type some text. 1470277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.sendStringSync("abc"); 1471277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mActivity.runOnUiThread(new Runnable() { 1472277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void run() { 1473277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Programmatically append some text. 1474277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.append("def"); 1475277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("abcdef", mTextView.getText().toString()); 1476277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1477277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Undo removes the append as a separate step. 1478277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1479277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("abc", mTextView.getText().toString()); 1480277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1481277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Another undo removes the original typing. 1482277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1483277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("", mTextView.getText().toString()); 1484277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1485277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook }); 1486277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.waitForIdleSync(); 1487277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1488277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1489c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_directInsert() { 1490277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook initTextViewForTyping(); 1491277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1492277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Type some text. 1493277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.sendStringSync("abc"); 1494277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mActivity.runOnUiThread(new Runnable() { 1495277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void run() { 1496277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Directly modify the underlying Editable to insert some text. 1497277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // NOTE: This is a violation of the API of getText() which specifies that the 1498277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // returned object should not be modified. However, some apps do this anyway and 1499277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // the framework needs to handle it. 1500277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook Editable text = (Editable) mTextView.getText(); 1501277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook text.insert(0, "def"); 1502277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("defabc", mTextView.getText().toString()); 1503277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1504277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Undo removes the insert as a separate step. 1505277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1506277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("abc", mTextView.getText().toString()); 1507277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1508277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Another undo removes the original typing. 1509277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1510277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("", mTextView.getText().toString()); 1511277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1512277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook }); 1513277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.waitForIdleSync(); 1514277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1515277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1516c530472a02205f0b7d87f9f06140c56ca0849816James Cook public void testUndo_noCursor() { 1517c530472a02205f0b7d87f9f06140c56ca0849816James Cook initTextViewForTyping(); 1518c530472a02205f0b7d87f9f06140c56ca0849816James Cook 1519c530472a02205f0b7d87f9f06140c56ca0849816James Cook mActivity.runOnUiThread(new Runnable() { 1520c530472a02205f0b7d87f9f06140c56ca0849816James Cook public void run() { 1521c530472a02205f0b7d87f9f06140c56ca0849816James Cook // Append some text to create an undo operation. There is no cursor present. 1522c530472a02205f0b7d87f9f06140c56ca0849816James Cook mTextView.append("cat"); 1523c530472a02205f0b7d87f9f06140c56ca0849816James Cook 1524c530472a02205f0b7d87f9f06140c56ca0849816James Cook // Place the cursor at the end of the text so the undo will have to change it. 1525c530472a02205f0b7d87f9f06140c56ca0849816James Cook Selection.setSelection((Spannable) mTextView.getText(), 3); 1526c530472a02205f0b7d87f9f06140c56ca0849816James Cook 1527c530472a02205f0b7d87f9f06140c56ca0849816James Cook // Undo the append. This should not crash, despite not having a valid cursor 1528c530472a02205f0b7d87f9f06140c56ca0849816James Cook // position in the undo operation. 1529c530472a02205f0b7d87f9f06140c56ca0849816James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1530c530472a02205f0b7d87f9f06140c56ca0849816James Cook } 1531c530472a02205f0b7d87f9f06140c56ca0849816James Cook }); 1532c530472a02205f0b7d87f9f06140c56ca0849816James Cook mInstrumentation.waitForIdleSync(); 1533c530472a02205f0b7d87f9f06140c56ca0849816James Cook } 1534c530472a02205f0b7d87f9f06140c56ca0849816James Cook 1535c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_textWatcher() { 1536277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook initTextViewForTyping(); 1537277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1538277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Add a TextWatcher that converts the text to spaces on each change. 1539277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.addTextChangedListener(new ConvertToSpacesTextWatcher()); 1540277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1541277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Type some text. 1542277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.sendStringSync("abc"); 1543277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mActivity.runOnUiThread(new Runnable() { 1544277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void run() { 1545277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // TextWatcher altered the text. 1546277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals(" ", mTextView.getText().toString()); 1547277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 1548277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Undo reverses both changes in one step. 1549277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1550277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertEquals("", mTextView.getText().toString()); 1551277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 1552277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook }); 1553277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mInstrumentation.waitForIdleSync(); 1554c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook } 1555c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook 1556c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook public void testUndo_textWatcherDirectAppend() { 1557c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook initTextViewForTyping(); 1558c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook 1559c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook // Add a TextWatcher that converts the text to spaces on each change. 1560c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook mTextView.addTextChangedListener(new ConvertToSpacesTextWatcher()); 1561c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook 1562c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook mActivity.runOnUiThread(new Runnable() { 1563c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook public void run() { 1564c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook // Programmatically append some text. The TextWatcher changes it to spaces. 1565c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook mTextView.append("abc"); 1566c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook assertEquals(" ", mTextView.getText().toString()); 1567c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook 1568c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook // Undo reverses both changes in one step. 1569c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 1570c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook assertEquals("", mTextView.getText().toString()); 1571c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook } 1572c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook }); 1573c4dca4185874f3a78380439d678f1a8fa86f7a66James Cook mInstrumentation.waitForIdleSync(); 157428715a6877392e4e63cb2b0170c1592fb50079dcJames Cook } 157528715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 1576c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_shortcuts() { 157728715a6877392e4e63cb2b0170c1592fb50079dcJames Cook initTextViewForTyping(); 157828715a6877392e4e63cb2b0170c1592fb50079dcJames Cook 157928715a6877392e4e63cb2b0170c1592fb50079dcJames Cook // Type some text. 158028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook mInstrumentation.sendStringSync("abc"); 15815b51f77b99861d48fec1c327252416f726b3b01aJames Cook mActivity.runOnUiThread(new Runnable() { 15825b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void run() { 15835b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Pressing Control-Z triggers undo. 15845b51f77b99861d48fec1c327252416f726b3b01aJames Cook KeyEvent control = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_Z, 0, 15855b51f77b99861d48fec1c327252416f726b3b01aJames Cook KeyEvent.META_CTRL_LEFT_ON); 1586277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertTrue(mTextView.onKeyShortcut(KeyEvent.KEYCODE_Z, control)); 15875b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 15885b51f77b99861d48fec1c327252416f726b3b01aJames Cook 15895b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Pressing Control-Shift-Z triggers redo. 15905b51f77b99861d48fec1c327252416f726b3b01aJames Cook KeyEvent controlShift = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_Z, 15915b51f77b99861d48fec1c327252416f726b3b01aJames Cook 0, KeyEvent.META_CTRL_LEFT_ON | KeyEvent.META_SHIFT_LEFT_ON); 1592277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook assertTrue(mTextView.onKeyShortcut(KeyEvent.KEYCODE_Z, controlShift)); 159328715a6877392e4e63cb2b0170c1592fb50079dcJames Cook assertEquals("abc", mTextView.getText().toString()); 15945b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 15955b51f77b99861d48fec1c327252416f726b3b01aJames Cook }); 15965b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.waitForIdleSync(); 15975b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 15985b51f77b99861d48fec1c327252416f726b3b01aJames Cook 1599c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_saveInstanceState() { 160028715a6877392e4e63cb2b0170c1592fb50079dcJames Cook initTextViewForTyping(); 16015b51f77b99861d48fec1c327252416f726b3b01aJames Cook 16025b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Type some text to create an undo operation. 16035b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.sendStringSync("abc"); 16045b51f77b99861d48fec1c327252416f726b3b01aJames Cook mActivity.runOnUiThread(new Runnable() { 16055b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void run() { 16065b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Parcel and unparcel the TextView. 16075b51f77b99861d48fec1c327252416f726b3b01aJames Cook Parcelable state = mTextView.onSaveInstanceState(); 16085b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onRestoreInstanceState(state); 16095b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 16105b51f77b99861d48fec1c327252416f726b3b01aJames Cook }); 16115b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.waitForIdleSync(); 16125b51f77b99861d48fec1c327252416f726b3b01aJames Cook 16135b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Delete a character to create a new undo operation. 16145b51f77b99861d48fec1c327252416f726b3b01aJames Cook sendKeys(KeyEvent.KEYCODE_DEL); 16155b51f77b99861d48fec1c327252416f726b3b01aJames Cook mActivity.runOnUiThread(new Runnable() { 16165b51f77b99861d48fec1c327252416f726b3b01aJames Cook public void run() { 16175b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("ab", mTextView.getText().toString()); 16185b51f77b99861d48fec1c327252416f726b3b01aJames Cook 16195b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Undo the delete. 16205b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 16215b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("abc", mTextView.getText().toString()); 16225b51f77b99861d48fec1c327252416f726b3b01aJames Cook 16235b51f77b99861d48fec1c327252416f726b3b01aJames Cook // Undo the typing, which verifies that the original undo operation was parceled 16245b51f77b99861d48fec1c327252416f726b3b01aJames Cook // correctly. 16255b51f77b99861d48fec1c327252416f726b3b01aJames Cook mTextView.onTextContextMenuItem(android.R.id.undo); 16265b51f77b99861d48fec1c327252416f726b3b01aJames Cook assertEquals("", mTextView.getText().toString()); 16275f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook 16285f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // Parcel and unparcel the undo stack (which is empty but has been used and may 16295f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // contain other state). 16305f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook Parcelable state = mTextView.onSaveInstanceState(); 16315f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onRestoreInstanceState(state); 16325f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook } 16335f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook }); 16345f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mInstrumentation.waitForIdleSync(); 16355f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook } 16365f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook 1637c1198c0aa7c7e9b52a32d9e2c0d663c69ee131c6James Cook public void testUndo_saveInstanceStateEmpty() { 16385f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook initTextViewForTyping(); 16395f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook 16405f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // Type and delete to create two new undo operations. 16415f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mInstrumentation.sendStringSync("a"); 16425f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook sendKeys(KeyEvent.KEYCODE_DEL); 16435f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mActivity.runOnUiThread(new Runnable() { 16445f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook public void run() { 16455f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // Empty the undo stack then parcel and unparcel the TextView. While the undo 16465f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // stack contains no operations it may contain other state. 16475f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 16485f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 16495f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook Parcelable state = mTextView.onSaveInstanceState(); 16505f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onRestoreInstanceState(state); 16515f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook } 16525f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook }); 16535f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mInstrumentation.waitForIdleSync(); 16545f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook 16555f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // Create two more undo operations. 16565f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mInstrumentation.sendStringSync("b"); 16575f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook sendKeys(KeyEvent.KEYCODE_DEL); 16585f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mActivity.runOnUiThread(new Runnable() { 16595f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook public void run() { 16605f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook // Verify undo still works. 16615f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 16625f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook assertEquals("b", mTextView.getText().toString()); 16635f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook mTextView.onTextContextMenuItem(android.R.id.undo); 16645f31960d0d0e9aac4b48e895ee8fd144791a5109James Cook assertEquals("", mTextView.getText().toString()); 16655b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 16665b51f77b99861d48fec1c327252416f726b3b01aJames Cook }); 16675b51f77b99861d48fec1c327252416f726b3b01aJames Cook mInstrumentation.waitForIdleSync(); 16685b51f77b99861d48fec1c327252416f726b3b01aJames Cook } 16695b51f77b99861d48fec1c327252416f726b3b01aJames Cook 1670fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1671fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText() { 1672fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1673fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1674fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int resId = R.string.text_view_hint; 1675fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String result = mActivity.getResources().getString(resId); 1676fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1677fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(resId, BufferType.EDITABLE); 1678fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(result, tv.getText().toString()); 1679fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Editable); 1680fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1681fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(resId, BufferType.SPANNABLE); 1682fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(result, tv.getText().toString()); 1683fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Spannable); 1684fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1685fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1686fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(-1, BufferType.EDITABLE); 1687fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception with illegal id"); 1688fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NotFoundException e) { 1689fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1690fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1691fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1692fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1693fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessHint() { 1694fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_hint_linksclickable_freezestext); 1695fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1696fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_linksClickable_freezesText_default); 1697fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getHint()); 1698fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1699fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_blank); 1700fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", mTextView.getHint()); 1701fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1702fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_string); 1703fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getString(R.string.text_view_simple_hint), 1704fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHint()); 1705fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1706fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_resid); 1707fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getString(R.string.text_view_hint), 1708fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHint()); 1709fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1710fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHint("This is hint"); 1711fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("This is hint", mTextView.getHint().toString()); 1712fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1713fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHint(R.string.text_view_hello); 1714fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getString(R.string.text_view_hello), 1715fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHint().toString()); 1716fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1717fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Non-exist resid 1718fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1719fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHint(-1); 1720fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if id is illegal"); 1721fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NotFoundException e) { 1722fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1723fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1724fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1725fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessError() { 1726fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1727fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1728fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 172953b55f734fb3cf52df49a79cf76d410a77fbe8f5Craig Mautner final String errorText = "Oops! There is an error"; 1730fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1731fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1732fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1733fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(null); 1734fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1735fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1736fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1737fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1738fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 17399776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable icon = getDrawable(R.drawable.failed); 1740fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1741fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1742fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(errorText, icon); 1743fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1744fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1745fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1746fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(errorText, mTextView.getError().toString()); 1747fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // can not check whether the drawable is set correctly 1748fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1749fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1750fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1751fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(null, null); 1752fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1753fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1754fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1755fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1756fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1757fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1758fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1759300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setKeyListener(DigitsKeyListener.getInstance("")); 1760fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("", BufferType.EDITABLE); 1761fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(errorText); 1762fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 1763fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1764fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1765fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1766fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1767fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(errorText, mTextView.getError().toString()); 1768fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1769dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("a"); 1770fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // a key event that will not change the TextView's text 1771fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", mTextView.getText().toString()); 1772fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // The icon and error message will not be reset to null 177353b55f734fb3cf52df49a79cf76d410a77fbe8f5Craig Mautner assertEquals(errorText, mTextView.getError().toString()); 1774fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1775300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mActivity.runOnUiThread(new Runnable() { 1776300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu public void run() { 1777300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setKeyListener(DigitsKeyListener.getInstance()); 1778300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setText("", BufferType.EDITABLE); 1779300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setError(errorText); 1780300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.requestFocus(); 1781300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu } 1782300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu }); 1783300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mInstrumentation.waitForIdleSync(); 1784300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu 1785dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("1"); 1786fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // a key event cause changes to the TextView's text 1787fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("1", mTextView.getText().toString()); 1788fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the error message and icon will be cleared. 1789fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1790fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1791fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1792fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessFilters() { 1793fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final InputFilter[] expected = { new InputFilter.AllCaps(), 1794fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new InputFilter.LengthFilter(2) }; 1795fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1796fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final QwertyKeyListener qwertyKeyListener 1797fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su = QwertyKeyListener.getInstance(false, Capitalize.NONE); 1798fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1799fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1800fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1801fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(qwertyKeyListener); 1802fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("", BufferType.EDITABLE); 1803fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFilters(expected); 1804fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 1805fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1806fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1807fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1808fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1809fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(expected, mTextView.getFilters()); 1810fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1811dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("a"); 1812fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text is capitalized by InputFilter.AllCaps 1813fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("A", mTextView.getText().toString()); 1814dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("b"); 1815fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text is capitalized by InputFilter.AllCaps 1816fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("AB", mTextView.getText().toString()); 1817dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("c"); 1818fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 'C' could not be accepted, because there is a length filter. 1819fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("AB", mTextView.getText().toString()); 1820fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1821fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1822fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFilters(null); 1823fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw IllegalArgumentException!"); 1824fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IllegalArgumentException e) { 1825fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1826fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1827fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1828fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetFocusedRect() { 1829fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Rect rc = new Rect(); 1830fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1831fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio // Basic 1832fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1833fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(rc); 1834fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX(), rc.left); 1835fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX() + mTextView.getWidth(), rc.right); 1836fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY(), rc.top); 1837fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY() + mTextView.getHeight(), rc.bottom); 1838fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1839fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio // Single line 1840fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1841fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(rc); 1842fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX(), rc.left); 1843fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX() + mTextView.getWidth(), rc.right); 1844fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY(), rc.top); 1845fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY() + mTextView.getHeight(), rc.bottom); 1846fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1847fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1848fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1849fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelected(true); 1850fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su SpannableString text = new SpannableString(mTextView.getText()); 1851fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection(text, 3, 13); 1852fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 1853fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1854fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1855fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1856fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(rc); 1857fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView.getLayout()); 1858fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien /* Cursor coordinates from getPrimaryHorizontal() may have a fractional 1859fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * component, while the result of getFocusedRect is in int coordinates. 1860fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * It's not practical for these to match exactly, so we compare that the 1861fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * integer components match - there can be a fractional pixel 1862fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * discrepancy, which should be okay for all practical applications. */ 1863fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(3), rc.left); 1864fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(13), rc.right); 1865fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1866fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(0), rc.bottom); 1867fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1868fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mActivity.runOnUiThread(new Runnable() { 1869fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio public void run() { 1870fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setSelected(true); 1871fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio SpannableString text = new SpannableString(mTextView.getText()); 1872fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Selection.setSelection(text, 13, 3); 1873fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setText(text); 1874fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio } 1875fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio }); 1876fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mInstrumentation.waitForIdleSync(); 1877fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1878fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertNotNull(mTextView.getLayout()); 1879fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(3) - 2, rc.left); 1880fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(3) + 2, rc.right); 1881fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1882fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(0), rc.bottom); 1883fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1884fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio // Multi lines 1885fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView = findTextView(R.id.textview_text_two_lines); 1886fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1887fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollX(), rc.left); 1888fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollX() + mTextView.getWidth(), rc.right); 1889fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollY(), rc.top); 1890fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollY() + mTextView.getHeight(), rc.bottom); 1891fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1892fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mActivity.runOnUiThread(new Runnable() { 1893fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio public void run() { 1894fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setSelected(true); 1895fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio SpannableString text = new SpannableString(mTextView.getText()); 1896fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Selection.setSelection(text, 2, 4); 1897fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setText(text); 1898fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio } 1899fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio }); 1900fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mInstrumentation.waitForIdleSync(); 1901fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1902fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertNotNull(mTextView.getLayout()); 1903fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(2), rc.left); 1904fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(4), rc.right); 1905fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1906fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(0), rc.bottom); 1907fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1908fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mActivity.runOnUiThread(new Runnable() { 1909fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio public void run() { 1910fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setSelected(true); 1911fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio SpannableString text = new SpannableString(mTextView.getText()); 1912fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Selection.setSelection(text, 2, 10); // cross the "\n" and two lines 1913fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setText(text); 1914fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio } 1915fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio }); 1916fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mInstrumentation.waitForIdleSync(); 1917fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1918fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Path path = new Path(); 1919fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getLayout().getSelectionPath(2, 10, path); 1920fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio RectF rcf = new RectF(); 1921fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio path.computeBounds(rcf, true); 1922fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertNotNull(mTextView.getLayout()); 1923fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(rcf.left - 1, (float) rc.left); 1924fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(rcf.right + 1, (float) rc.right); 1925fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1926fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(1), rc.bottom); 1927fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1928fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Exception 1929fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1930fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(null); 1931fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw NullPointerException!"); 1932fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 1933fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1934fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1935fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1936fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLineCount() { 1937fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1938fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // this is an one line text with default setting. 1939fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 1940fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1941fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make it multi-lines 1942fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxWidth(mTextView.getWidth() / 3); 1943fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(1 < mTextView.getLineCount()); 1944fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1945fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make it to an one line 1946fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxWidth(Integer.MAX_VALUE); 1947fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 1948fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1949fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set min lines don't effect the lines count for actual text. 1950fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinLines(12); 1951fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 1952fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1953fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1954fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the internal Layout has not been built. 1955fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getLayout()); 1956fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getLineCount()); 1957fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1958fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1959fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLineBounds() { 1960fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Rect rc = new Rect(); 1961fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1962fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getLineBounds(0, null)); 1963fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1964fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getLineBounds(0, rc)); 1965fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.left); 1966fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.right); 1967fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.top); 1968fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.bottom); 1969fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1970fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1971fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getBaseline(), mTextView.getLineBounds(0, null)); 1972fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1973fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getBaseline(), mTextView.getLineBounds(0, rc)); 1974fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.left); 1975fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getWidth(), rc.right); 1976fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.top); 1977fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getHeight(), rc.bottom); 1978fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1979fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1980fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1981fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(1, 2, 3, 4); 1982fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 1983fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1984fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1985fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1986fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getBaseline(), mTextView.getLineBounds(0, rc)); 1987fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getTotalPaddingLeft(), rc.left); 1988fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getWidth() - mTextView.getTotalPaddingRight(), rc.right); 1989fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getTotalPaddingTop(), rc.top); 1990fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getHeight() - mTextView.getTotalPaddingBottom(), rc.bottom); 1991fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1992fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1993fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetBaseLine() { 1994fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1995fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getBaseline()); 1996fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1997fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1998fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getLayout().getLineBaseline(0), mTextView.getBaseline()); 1999fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2000fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2001fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2002fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(1, 2, 3, 4); 2003fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 2004fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2005fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2006fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2007fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int expected = mTextView.getTotalPaddingTop() + mTextView.getLayout().getLineBaseline(0); 2008fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, mTextView.getBaseline()); 2009fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2010fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2011fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testPressKey() { 201228715a6877392e4e63cb2b0170c1592fb50079dcJames Cook initTextViewForTyping(); 2013fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2014dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("a"); 2015fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("a", mTextView.getText().toString()); 2016dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("b"); 2017fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("ab", mTextView.getText().toString()); 2018fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys(KeyEvent.KEYCODE_DEL); 2019fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("a", mTextView.getText().toString()); 2020fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2021fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2022fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetIncludeFontPadding() { 2023fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2024fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2025fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2026fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(mTextView.getWidth() / 3); 2027fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(1, 2, 3, 4); 2028fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 2029fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2030fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2031fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2032fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2033fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int oldHeight = mTextView.getHeight(); 2034fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2035fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2036fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setIncludeFontPadding(false); 2037fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2038fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2039fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2040fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2041fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getHeight() < oldHeight); 2042fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2043fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2044fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testScroll() { 2045fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2046fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2047fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollX()); 2048fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollY()); 2049fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2050fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //don't set the Scroller, nothing changed. 2051fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.computeScroll(); 2052fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollX()); 2053fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollY()); 2054fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2055fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //set the Scroller 2056fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Scroller s = new Scroller(mActivity); 2057fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(s); 2058fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su s.startScroll(0, 0, 320, 480, 0); 2059fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su s.abortAnimation(); 2060fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su s.forceFinished(false); 2061fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setScroller(s); 2062fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2063fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.computeScroll(); 2064fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(320, mTextView.getScrollX()); 2065fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(480, mTextView.getScrollY()); 2066fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2067fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2068fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testDebug() { 2069fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2070fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.debug(0); 2071fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2072fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Hello!"); 2073fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(mTextView); 2074fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.debug(1); 2075fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2076fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2077fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSelection() { 2078fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2079fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "This is the content"; 2080fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.SPANNABLE); 2081fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.hasSelection()); 2082fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2083fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.selectAll((Spannable) mTextView.getText()); 2084fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 2085fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text.length(), mTextView.getSelectionEnd()); 2086fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.hasSelection()); 2087fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2088fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int selectionStart = 5; 2089fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int selectionEnd = 7; 2090fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), selectionStart); 2091fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, mTextView.getSelectionStart()); 2092fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, mTextView.getSelectionEnd()); 2093fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.hasSelection()); 2094fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2095fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), selectionStart, selectionEnd); 2096fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, mTextView.getSelectionStart()); 2097fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, mTextView.getSelectionEnd()); 2098fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.hasSelection()); 2099fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2100fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2101fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2102fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessEllipsize() { 2103fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_ellipsize); 2104fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2105fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_default); 2106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getEllipsize()); 2107fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2108fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_none); 2109fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getEllipsize()); 2110fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2111fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_start); 2112fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TruncateAt.START, mTextView.getEllipsize()); 2113fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_middle); 2115fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TruncateAt.MIDDLE, mTextView.getEllipsize()); 2116fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_end); 2118fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TruncateAt.END, mTextView.getEllipsize()); 2119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.START); 2121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.START, mTextView.getEllipsize()); 2122fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2123fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.MIDDLE); 2124fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.MIDDLE, mTextView.getEllipsize()); 2125fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2126fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.END); 2127fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.END, mTextView.getEllipsize()); 2128fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2129fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(null); 2130fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getEllipsize()); 2131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2132fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(10); 2133fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.START); 2134fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("ThisIsAVeryLongVeryLongVeryLongVeryLongVeryLongWord"); 2135fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.invalidate(); 2136fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2137fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.START, mTextView.getEllipsize()); 2138fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no method to check if '...yLongVeryLongWord' is painted in the screen. 2139fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2140fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2141fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetCursorVisible() { 2142fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2143fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2144fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCursorVisible(true); 2145fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCursorVisible(false); 2146fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2147fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2148fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnWindowFocusChanged() { 2149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnTouchEvent() { 2153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2156fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnTrackballEvent() { 2157fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2158fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2159fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2160fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTextColors() { 2161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // TODO: How to get a suitable TypedArray to test this method. 2162fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2163fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2164fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnKeyShortcut() { 2165fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2166fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2167fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2168fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2169fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testPerformLongClick() { 2170fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2171fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("This is content"); 2172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnLongClickListener onLongClickListener = new MockOnLongClickListener(true); 2173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnCreateContextMenuListener onCreateContextMenuListener 2174fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su = new MockOnCreateContextMenuListener(false); 2175fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnLongClickListener(onLongClickListener); 2176fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnCreateContextMenuListener(onCreateContextMenuListener); 2177fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.performLongClick()); 2178fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onLongClickListener.hasLongClicked()); 2179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(onCreateContextMenuListener.hasCreatedContextMenu()); 2180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su onLongClickListener = new MockOnLongClickListener(false); 2182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnLongClickListener(onLongClickListener); 2183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnCreateContextMenuListener(onCreateContextMenuListener); 2184fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.performLongClick()); 2185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onLongClickListener.hasLongClicked()); 2186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onCreateContextMenuListener.hasCreatedContextMenu()); 2187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnLongClickListener(null); 2189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su onCreateContextMenuListener = new MockOnCreateContextMenuListener(true); 2190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnCreateContextMenuListener(onCreateContextMenuListener); 2191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.performLongClick()); 2192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onCreateContextMenuListener.hasCreatedContextMenu()); 2193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testTextAttr() { 2197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_textAttr); 2198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getText 2199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getString(R.string.text_view_hello), mTextView.getText().toString()); 2200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getCurrentTextColor 2202fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.black), 2203fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentTextColor()); 2204fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.red), 2205fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentHintTextColor()); 2206fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.red), 2207fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHintTextColors().getDefaultColor()); 2208fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.blue), 2209fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getLinkTextColors().getDefaultColor()); 2210fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2211fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getTextScaleX 2212fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1.2f, mTextView.getTextScaleX(), 0.01f); 2213fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2214fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // setTextScaleX 2215fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextScaleX(2.4f); 2216fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2.4f, mTextView.getTextScaleX(), 0.01f); 2217fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2218fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextScaleX(0f); 2219fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0f, mTextView.getTextScaleX(), 0.01f); 2220fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2221fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextScaleX(- 2.4f); 2222fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(- 2.4f, mTextView.getTextScaleX(), 0.01f); 2223fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2224fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getTextSize 2225fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(20f, mTextView.getTextSize(), 0.01f); 2226fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2227fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getTypeface 2228119351956fc53fdd61bfbfb0d1ab43857cf7a6d7Peter Eliasson // getTypeface will be null if android:typeface is set to normal, 2229c02a9f453c5c1255d668bbd8970f4585ab5ff494Alan Viverette // and android:style is not set or is set to normal, and 2230c02a9f453c5c1255d668bbd8970f4585ab5ff494Alan Viverette // android:fontFamily is not set 2231fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getTypeface()); 2232fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2233fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(Typeface.DEFAULT); 2234fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(Typeface.DEFAULT, mTextView.getTypeface()); 2235fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // null type face 2236fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(null); 2237fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getTypeface()); 2238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2239fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // default type face, bold style, note: the type face will be changed 2240fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // after call set method 2241fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(Typeface.DEFAULT, Typeface.BOLD); 2242fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(Typeface.BOLD, mTextView.getTypeface().getStyle()); 2243fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2244fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // null type face, BOLD style 2245fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(null, Typeface.BOLD); 2246fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(Typeface.BOLD, mTextView.getTypeface().getStyle()); 2247fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2248fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // old type face, null style 2249fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(Typeface.DEFAULT, 0); 2250fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Typeface.NORMAL, mTextView.getTypeface().getStyle()); 2251fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2252fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2253fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2254fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAppend() { 2255fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2256fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2257fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 1: check the original length, should be blank as initialised. 2258fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getText().length()); 2259fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2260fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 2: append a string use append(CharSquence) into the original blank 2261fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // buffer, check the content. And upgrading it to BufferType.EDITABLE if it was 2262fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // not already editable. 2263fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getText() instanceof Editable); 2264fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append."); 2265fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("Append.", mTextView.getText().toString()); 2266fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 2267fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2268fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 3: append a string from 0~3. 2269fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", 0, 3); 2270fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("Append.App", mTextView.getText().toString()); 2271fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 2272fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2273fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 4: append a string from 0~0, nothing will be append as expected. 2274fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", 0, 0); 2275fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("Append.App", mTextView.getText().toString()); 2276fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 2277fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2278fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 5: append a string from -3~3. check the wrong left edge. 2279fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 2280fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", -3, 3); 2281fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw StringIndexOutOfBoundsException"); 2282fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (StringIndexOutOfBoundsException e) { 2283fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2284fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2285fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 6: append a string from 3~10. check the wrong right edge. 2286fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 2287fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", 3, 10); 2288fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw StringIndexOutOfBoundsException"); 2289fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (StringIndexOutOfBoundsException e) { 2290fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2291fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2292fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 7: append a null string. 2293fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 2294fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append(null); 2295fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw NullPointerException"); 2296fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 2297fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2298fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2299fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2300fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessTransformationMethod() { 2301fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check the password attribute in xml 2302fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_password); 2303fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView); 2304fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(PasswordTransformationMethod.getInstance(), 2305fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTransformationMethod()); 2306fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2307fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check the singleLine attribute in xml 2308fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_singleLine); 2309fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView); 2310fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(SingleLineTransformationMethod.getInstance(), 2311fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTransformationMethod()); 2312fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2313fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final QwertyKeyListener qwertyKeyListener = QwertyKeyListener.getInstance(false, 2314fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Capitalize.NONE); 2315fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final TransformationMethod method = PasswordTransformationMethod.getInstance(); 2316fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change transformation method by function 2317fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2318fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2319fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(qwertyKeyListener); 2320fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTransformationMethod(method); 232122d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root mTransformedText = method.getTransformation(mTextView.getText(), mTextView); 2322fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2323fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 2324fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2325fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2326fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2327fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(PasswordTransformationMethod.getInstance(), 2328fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTransformationMethod()); 2329fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2330fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys("H E 2*L O"); 2331fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2332fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2333fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append(" "); 2334fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2335fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2336fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2337fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2338fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // it will get transformed after a while 23390162547f44173f0604d8a80143c128d9892460a1Kristian Monsen new PollingCheck(TIMEOUT) { 2340fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 2341fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected boolean check() { 2342fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // "******" 234322d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root return mTransformedText.toString() 234422d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root .equals("\u2022\u2022\u2022\u2022\u2022\u2022"); 2345fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2346fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }.run(); 2347fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2348fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set null 2349fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2350fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2351fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTransformationMethod(null); 2352fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2353fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2354fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2355fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getTransformationMethod()); 2356fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2357fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2358fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2359fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testCompound() { 2360fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2361fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int padding = 3; 2362fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Drawable[] drawables = mTextView.getCompoundDrawables(); 2363fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[0]); 2364fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[1]); 2365fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[2]); 2366fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 2367fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2368fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test setCompoundDrawablePadding and getCompoundDrawablePadding 2369fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawablePadding(padding); 2370fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(padding, mTextView.getCompoundDrawablePadding()); 2371fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2372fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using resid, 0 represents null 2373fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.start, R.drawable.pass, 2374fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su R.drawable.failed, 0); 2375fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su drawables = mTextView.getCompoundDrawables(); 2376fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2377fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableLeft 2378fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su WidgetTestUtils.assertEquals(getBitmap(R.drawable.start), 2379fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ((BitmapDrawable) drawables[0]).getBitmap()); 2380fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableTop 2381fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su WidgetTestUtils.assertEquals(getBitmap(R.drawable.pass), 2382fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ((BitmapDrawable) drawables[1]).getBitmap()); 2383fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableRight 2384fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su WidgetTestUtils.assertEquals(getBitmap(R.drawable.failed), 2385fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ((BitmapDrawable) drawables[2]).getBitmap()); 2386fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableBottom 2387fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 2388fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 23899776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable left = getDrawable(R.drawable.blue); 23909776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable right = getDrawable(R.drawable.yellow); 23919776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable top = getDrawable(R.drawable.red); 2392fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2393fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using drawables directly 2394fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawablesWithIntrinsicBounds(left, top, right, null); 2395fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su drawables = mTextView.getCompoundDrawables(); 2396fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2397fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableLeft 2398fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(left, drawables[0]); 2399fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableTop 2400fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(top, drawables[1]); 2401fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableRight 2402fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(right, drawables[2]); 2403fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableBottom 2404fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 2405fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2406fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check compound padding 2407fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingLeft() + padding + left.getIntrinsicWidth(), 2408fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingLeft()); 2409fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingTop() + padding + top.getIntrinsicHeight(), 2410fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingTop()); 2411fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingRight() + padding + right.getIntrinsicWidth(), 2412fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingRight()); 2413fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingBottom(), mTextView.getCompoundPaddingBottom()); 2414fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2415fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set bounds to drawables and set them again. 2416fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su left.setBounds(0, 0, 1, 2); 2417fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su right.setBounds(0, 0, 3, 4); 2418fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su top.setBounds(0, 0, 5, 6); 2419fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // usinf drawables 2420fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(left, top, right, null); 2421fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su drawables = mTextView.getCompoundDrawables(); 2422fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2423fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableLeft 2424fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(left, drawables[0]); 2425fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableTop 2426fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(top, drawables[1]); 2427fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableRight 2428fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(right, drawables[2]); 2429fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableBottom 2430fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 2431fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2432fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check compound padding 2433fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingLeft() + padding + left.getBounds().width(), 2434fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingLeft()); 2435fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingTop() + padding + top.getBounds().height(), 2436fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingTop()); 2437fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingRight() + padding + right.getBounds().width(), 2438fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingRight()); 2439fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingBottom(), mTextView.getCompoundPaddingBottom()); 2440fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2441fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2442fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSingleLine() { 2443013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu final TextView textView = new TextView(mActivity); 2444013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu setSpannableText(textView, "This is a really long sentence" 2445013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu + " which can not be placed in one line on the screen."); 2446013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu 2447013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu // Narrow layout assures that the text will get wrapped. 2448013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu FrameLayout innerLayout = new FrameLayout(mActivity); 2449013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu innerLayout.setLayoutParams(new ViewGroup.LayoutParams(100, 100)); 2450013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu innerLayout.addView(textView); 2451013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu 2452013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu final FrameLayout layout = new FrameLayout(mActivity); 2453013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu layout.addView(innerLayout); 2454013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu 2455013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu mActivity.runOnUiThread(new Runnable() { 2456013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu public void run() { 2457013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu mActivity.setContentView(layout); 2458013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.setSingleLine(true); 2459013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu } 2460013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu }); 2461013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu mInstrumentation.waitForIdleSync(); 2462fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2463fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(SingleLineTransformationMethod.getInstance(), 2464013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.getTransformationMethod()); 2465da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu 2466da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu int singleLineWidth = 0; 2467da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu int singleLineHeight = 0; 2468da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu 2469da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu if (textView.getLayout() != null) { 2470da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu singleLineWidth = textView.getLayout().getWidth(); 2471da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu singleLineHeight = textView.getLayout().getHeight(); 2472da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu } 2473fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2474fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2475fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2476013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.setSingleLine(false); 2477fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2478fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2479fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2480013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu assertEquals(null, textView.getTransformationMethod()); 2481da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu 2482da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu if (textView.getLayout() != null) { 2483da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu assertTrue(textView.getLayout().getHeight() > singleLineHeight); 2484da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu assertTrue(textView.getLayout().getWidth() < singleLineWidth); 2485da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu } 2486fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2487fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // same behaviours as setSingLine(true) 2488fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2489fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2490013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.setSingleLine(); 2491fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2492fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2493fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2494fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(SingleLineTransformationMethod.getInstance(), 2495013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.getTransformationMethod()); 2496da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu 2497da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu if (textView.getLayout() != null) { 2498da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu assertEquals(singleLineHeight, textView.getLayout().getHeight()); 2499da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu assertEquals(singleLineWidth, textView.getLayout().getWidth()); 2500da492b574cec4f919a3952d3e03b098e7eb01ffeWei Liu } 2501fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2502fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2503fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2504fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMaxLines() { 2505fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2506fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2507fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float[] widths = new float[LONG_TEXT.length()]; 2508fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getPaint().getTextWidths(LONG_TEXT, widths); 2509fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float totalWidth = 0.0f; 2510fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su for (float f : widths) { 2511fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su totalWidth += f; 2512fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2513fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int stringWidth = (int) totalWidth; 2514fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(stringWidth >> 2); 2515fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(LONG_TEXT); 2516fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2517fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int maxLines = 2; 2518fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineCount() > maxLines); 2519fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2520fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxLines(maxLines); 2521fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestLayout(); 2522fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2523fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getHeight() <= maxLines * mTextView.getLineHeight()); 2524fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2525fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2526fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2527fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMaxLinesException() { 252872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 252972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mActivity.setContentView(mTextView); 2530fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(mTextView.getWidth() >> 3); 253172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setMaxLines(-1); 2532fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2533fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2534fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMinLines() { 2535fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2536fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 3); 2537fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalHeight = mTextView.getHeight(); 2538fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalLines = mTextView.getLineCount(); 2539fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2540fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinLines(originalLines - 1); 2541fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines - 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2542fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2543fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinLines(originalLines + 1); 2544fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines + 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2545fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2546fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2547fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetLines() { 2548fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2549fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make it multiple lines 2550fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 3); 2551fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalLines = mTextView.getLineCount(); 2552fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2553fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(originalLines - 1); 2554fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines - 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2555fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2556fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(originalLines + 1); 2557fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines + 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2558fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2559fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2560fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2561fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetLinesException() { 256272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 256372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mActivity.setContentView(mTextView); 256472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setWidth(mTextView.getWidth() >> 3); 256572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setLines(-1); 2566fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2567fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2568fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2569fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetExtendedPaddingTop() { 2570fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2571fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2572fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getExtendedPaddingTop()); 2573fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2574fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 25759776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable top = getDrawable(R.drawable.red); 2576fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su top.setBounds(0, 0, 100, 10); 2577fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, top, null, null); 2578fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingTop(), mTextView.getExtendedPaddingTop()); 2579fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2580fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2581fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2582fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 2583fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2584fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getExtendedPaddingTop() > 0); 2585fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2586fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2587fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2588fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetExtendedPaddingBottom() { 2589fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2590fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2591fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getExtendedPaddingBottom()); 2592fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2593fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 25949776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable bottom = getDrawable(R.drawable.red); 2595fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su bottom.setBounds(0, 0, 100, 10); 2596fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, null, null, bottom); 2597fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingBottom(), mTextView.getExtendedPaddingBottom()); 2598fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2599fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2600fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2601fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER_VERTICAL); 2602fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2603fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getExtendedPaddingBottom() > 0); 2604fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2605fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2606fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingTop() { 2607fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2608fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2609fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingTop()); 2610fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2611fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 26129776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable top = getDrawable(R.drawable.red); 2613fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su top.setBounds(0, 0, 100, 10); 2614fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2615fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2616fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, top, null, null); 2617fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2618fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 2619fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2620fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2621fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2622fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getExtendedPaddingTop(), mTextView.getTotalPaddingTop()); 2623fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2624fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2625fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(mTextView.getLineCount() + 1); 2626fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int expected = mTextView.getHeight() 2627fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getExtendedPaddingBottom() 2628fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getLayout().getLineTop(mTextView.getLineCount()); 2629fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, mTextView.getTotalPaddingTop()); 2630fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2631fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2632fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingBottom() { 2633fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2634fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2635fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingBottom()); 2636fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2637fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 26389776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable bottom = getDrawable(R.drawable.red); 2639fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su bottom.setBounds(0, 0, 100, 10); 2640fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2641fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2642fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, null, null, bottom); 2643fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2644fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER_VERTICAL); 2645fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2646fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2647fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2648fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getExtendedPaddingBottom(), mTextView.getTotalPaddingBottom()); 2649fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2650fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2651fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(mTextView.getLineCount() + 1); 2652fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int expected = ((mTextView.getHeight() 2653fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getExtendedPaddingBottom() 2654fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getExtendedPaddingTop() 2655fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getLayout().getLineBottom(mTextView.getLineCount())) >> 1) 2656fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + mTextView.getExtendedPaddingBottom(); 2657fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, mTextView.getTotalPaddingBottom()); 2658fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2659fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2660fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2661fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingLeft() { 2662fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2663fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2664fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingLeft()); 2665fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2666fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 26679776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable left = getDrawable(R.drawable.red); 2668fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su left.setBounds(0, 0, 10, 100); 2669fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(left, null, null, null); 2670fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.RIGHT); 2671fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingLeft(), mTextView.getTotalPaddingLeft()); 2672fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2673fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change width 2674fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(Integer.MAX_VALUE); 2675fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingLeft(), mTextView.getTotalPaddingLeft()); 2676fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2677fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2678fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2679fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingRight() { 2680fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2681fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2682fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingRight()); 2683fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2684fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 26859776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable right = getDrawable(R.drawable.red); 2686fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su right.setBounds(0, 0, 10, 100); 2687fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, null, right, null); 2688fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER_HORIZONTAL); 2689fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingRight(), mTextView.getTotalPaddingRight()); 2690fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2691fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change width 2692fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(Integer.MAX_VALUE); 2693fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingRight(), mTextView.getTotalPaddingRight()); 2694fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2695fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2696fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetUrls() { 2697fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2698fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2699fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su URLSpan[] spans = mTextView.getUrls(); 2700fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, spans.length); 2701fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2702fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String url = "http://www.google.com"; 2703fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String email = "name@gmail.com"; 2704fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String string = url + " mailto:" + email; 2705fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su SpannableString spannable = new SpannableString(string); 2706fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spannable.setSpan(new URLSpan(url), 0, url.length(), 0); 2707fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(spannable, BufferType.SPANNABLE); 2708fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = mTextView.getUrls(); 2709fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, spans.length); 2710fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(url, spans[0].getURL()); 2711fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2712fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spannable.setSpan(new URLSpan(email), 0, email.length(), 0); 2713fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(spannable, BufferType.SPANNABLE); 2714fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2715fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = mTextView.getUrls(); 2716fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, spans.length); 2717fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(url, spans[0].getURL()); 2718fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(email, spans[1].getURL()); 2719fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2720fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test the situation that param what is not a URLSpan 2721fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spannable.setSpan(new Object(), 0, 9, 0); 2722fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(spannable, BufferType.SPANNABLE); 2723fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = mTextView.getUrls(); 2724fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, spans.length); 2725fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2726fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2727fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetPadding() { 2728fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2729fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2730fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(0, 1, 2, 4); 2731fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getPaddingLeft()); 2732fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getPaddingTop()); 2733fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, mTextView.getPaddingRight()); 2734fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(4, mTextView.getPaddingBottom()); 2735fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2736fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(10, 20, 30, 40); 2737fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(10, mTextView.getPaddingLeft()); 2738fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(20, mTextView.getPaddingTop()); 2739fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(30, mTextView.getPaddingRight()); 2740fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(40, mTextView.getPaddingBottom()); 2741fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2742fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2743fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetTextAppearance() { 2744fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2745fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2746fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_All); 2747fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.black), 2748fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentTextColor()); 2749fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(20f, mTextView.getTextSize(), 0.01f); 2750fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Typeface.BOLD, mTextView.getTypeface().getStyle()); 2751fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.red), 2752fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentHintTextColor()); 2753fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.blue), 2754fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getLinkTextColors().getDefaultColor()); 2755fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2756fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_Colors); 2757fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.black), 2758fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentTextColor()); 2759fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.blue), 2760fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentHintTextColor()); 2761fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.yellow), 2762fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getLinkTextColors().getDefaultColor()); 2763fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2764fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_NotColors); 2765fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(17f, mTextView.getTextSize(), 0.01f); 2766fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Typeface.NORMAL, mTextView.getTypeface().getStyle()); 2767fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2768fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_Style); 2769fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(null, mTextView.getTypeface()); 2770fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2771fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2772fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnPreDraw() { 2773fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2774fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2775fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2776fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetHorizontallyScrolling() { 2777fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make the text view has more than one line 2778fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2779fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 1); 2780fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineCount() > 1); 2781fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2782fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHorizontallyScrolling(true); 2783fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 2784fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2785fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHorizontallyScrolling(false); 2786fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineCount() > 1); 2787fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2788fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2789fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testComputeHorizontalScrollRange() { 2790fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2791fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test when layout is null 2792fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getLayout()); 2793fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getWidth(), textView.computeHorizontalScrollRange()); 2794fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2795fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setFrame(0, 0, 40, 50); 2796fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getWidth(), textView.computeHorizontalScrollRange()); 2797fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2798fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set the layout 2799fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(textView); 2800fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getLayout().getWidth(), textView.computeHorizontalScrollRange()); 2801fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2802fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2803fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testComputeVerticalScrollRange() { 2804fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2805fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test when layout is null 2806fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getLayout()); 2807fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.computeVerticalScrollRange()); 2808fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2809fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setFrame(0, 0, 40, 50); 2810fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getHeight(), textView.computeVerticalScrollRange()); 2811fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2812fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //set the layout 2813fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(textView); 2814fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getLayout().getHeight(), textView.computeVerticalScrollRange()); 2815fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2816fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2817fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testDrawableStateChanged() { 2818fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2819fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2820fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.reset(); 2821fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.refreshDrawableState(); 2822fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.hasCalledDrawableStateChanged()); 2823fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2824fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2825fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetDefaultEditable() { 2826fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2827fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2828fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //the TextView#getDefaultEditable() does nothing, and always return false. 2829fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(textView.getDefaultEditable()); 2830fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2831fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2832fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetDefaultMovementMethod() { 2833fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2834fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2835fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //the TextView#getDefaultMovementMethod() does nothing, and always return null. 2836fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getDefaultMovementMethod()); 2837fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2838fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2839fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnCreateContextMenu() { 2840fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2841fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2842fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2843fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnDetachedFromWindow() { 2844fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2845fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2846fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2847fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnDraw() { 2848fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2849fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2850fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2851fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnFocusChanged() { 2852fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2853fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2854fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2855fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnMeasure() { 2856fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2857fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2858fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2859fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnTextChanged() { 2860fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2861fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2862fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2863fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetFrame() { 2864fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2865fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2866fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //Assign a new size to this view 2867fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.setFrame(0, 0, 320, 480)); 2868fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getFrameLeft()); 2869fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getFrameTop()); 2870fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(320, textView.getFrameRight()); 2871fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(480, textView.getFrameBottom()); 2872fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2873fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //Assign a same size to this view 2874fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(textView.setFrame(0, 0, 320, 480)); 2875fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2876fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //negative input 2877fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.setFrame(-1, -1, -1, -1)); 2878fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameLeft()); 2879fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameTop()); 2880fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameRight()); 2881fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameBottom()); 2882fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2883fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2884fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetFadingEdgeStrength() { 288541f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio final MockTextView textViewLeft = (MockTextView) mActivity.findViewById( 288641f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio R.id.mock_textview_left); 2887fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2888fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 288941f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio textViewLeft.setEllipsize(null); 2890fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2891fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2892fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2893fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2894fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on right side if the text aligns left 289541f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(0.0f, textViewLeft.getLeftFadingEdgeStrength(), 0.01f); 289641f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewLeft.getRightFadingEdgeStrength(), 0.01f); 2897fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 289841f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio final MockTextView textViewRight = (MockTextView) mActivity.findViewById( 289941f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio R.id.mock_textview_right); 2900fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2901fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 290241f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio textViewRight.setEllipsize(null); 2903fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2904fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2905fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2906fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on left side if the text aligns right 290741f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewRight.getLeftFadingEdgeStrength(), 0.01f); 290841f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(0.0f, textViewRight.getRightFadingEdgeStrength(), 0.01f); 2909fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 291041f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio final MockTextView textViewCenter = (MockTextView) mActivity.findViewById( 291141f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio R.id.mock_textview_center); 2912fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2913fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 291441f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio textViewCenter.setEllipsize(null); 2915fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2916fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2917fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2918fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on both sides if the text aligns center 291941f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewCenter.getLeftFadingEdgeStrength(), 0.01f); 292041f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewCenter.getRightFadingEdgeStrength(), 0.01f); 2921fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2922fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2923bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu 2924fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testMarquee() { 2925fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final MockTextView textView = new MockTextView(mActivity); 2926fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(LONG_TEXT); 2927fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSingleLine(); 2928fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setEllipsize(TruncateAt.MARQUEE); 2929bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu textView.setLayoutParams(new ViewGroup.LayoutParams(100, 100)); 2930bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu 2931bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu final FrameLayout layout = new FrameLayout(mActivity); 2932bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu layout.addView(textView); 2933bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu 2934fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make the fading to be shown 2935fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setHorizontalFadingEdgeEnabled(true); 2936fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2937fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2938fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2939bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu mActivity.setContentView(layout); 2940fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2941fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2942fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2943fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2944fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TestSelectedRunnable runnable = new TestSelectedRunnable(textView) { 2945fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2946fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setMarqueeRepeatLimit(-1); 2947fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // force the marquee to start 2948fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected1(); 2949fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSelected(true); 2950fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected2(); 2951fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2952fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }; 2953fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(runnable); 2954fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2955fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // wait for the marquee to run 2956fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on both sides if the marquee runs for a while 29570162547f44173f0604d8a80143c128d9892460a1Kristian Monsen new PollingCheck(TIMEOUT) { 2958fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 2959fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected boolean check() { 2960fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return textView.getLeftFadingEdgeStrength() > 0.0f 2961fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su && textView.getRightFadingEdgeStrength() > 0.0f; 2962fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2963fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }.run(); 2964fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 296572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach final float leftFadingEdgeStrength = textView.getLeftFadingEdgeStrength(); 296672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach final float rightFadingEdgeStrength = textView.getRightFadingEdgeStrength(); 296772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 2968fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // wait for the marquee to continue 2969fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the left fading becomes thicker while the right fading becomes thiner 2970fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // as the text moves towards left 29710162547f44173f0604d8a80143c128d9892460a1Kristian Monsen new PollingCheck(TIMEOUT) { 2972fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 2973fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected boolean check() { 2974fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return leftFadingEdgeStrength < textView.getLeftFadingEdgeStrength() 2975fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su && rightFadingEdgeStrength > textView.getRightFadingEdgeStrength(); 2976fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2977fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }.run(); 2978fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(runnable.getIsSelected1()); 2979fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(runnable.getIsSelected2()); 2980fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2981fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su runnable = new TestSelectedRunnable(textView) { 2982fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2983fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setMarqueeRepeatLimit(0); 2984fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // force the marquee to stop 2985fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected1(); 2986fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSelected(false); 2987fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected2(); 2988fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setGravity(Gravity.LEFT); 2989fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2990fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }; 2991fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // force the marquee to stop 2992fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(runnable); 2993fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2994fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(runnable.getIsSelected1()); 2995fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(runnable.getIsSelected2()); 2996fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0.0f, textView.getLeftFadingEdgeStrength(), 0.01f); 2997fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getRightFadingEdgeStrength() > 0.0f); 2998fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2999fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3000fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3001fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setGravity(Gravity.RIGHT); 3002fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3003fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3004fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3005fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getLeftFadingEdgeStrength() > 0.0f); 3006fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0.0f, textView.getRightFadingEdgeStrength(), 0.01f); 3007fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3008fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3009fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3010fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setGravity(Gravity.CENTER_HORIZONTAL); 3011fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3012fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3013fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3014fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no left fading (Is it correct?) 3015fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0.0f, textView.getLeftFadingEdgeStrength(), 0.01f); 3016fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getRightFadingEdgeStrength() > 0.0f); 3017fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3018fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3019fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnKeyMultiple() { 3020fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 3021fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3022fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3023fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessInputExtras() throws XmlPullParserException, IOException { 3024fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView textView = new TextView(mActivity); 3025fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(null, BufferType.EDITABLE); 3026fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT); 3027fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3028fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // do not create the extras 3029fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getInputExtras(false)); 3030fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3031fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // create if it does not exist 3032fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Bundle inputExtras = textView.getInputExtras(true); 3033fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(inputExtras); 3034fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(inputExtras.isEmpty()); 3035fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3036fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // it is created already 3037fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(textView.getInputExtras(false)); 3038fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3039fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 3040fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputExtras(R.xml.input_extras); 3041fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw NullPointerException!"); 3042fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 3043fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3044fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3045fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3046fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessContentType() { 3047fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView textView = new TextView(mActivity); 3048fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(null, BufferType.EDITABLE); 3049fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setKeyListener(null); 3050fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setTransformationMethod(null); 3051fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3052fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_DATETIME 3053fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL); 3054fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 3055fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL, textView.getInputType()); 3056fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof DateTimeKeyListener); 3057fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3058fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_DATETIME 3059fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE); 3060fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 3061fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE, textView.getInputType()); 3062fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof DateKeyListener); 3063fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3064fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_DATETIME 3065fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME); 3066fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 3067fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME, textView.getInputType()); 3068fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof TimeKeyListener); 3069fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3070fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_NUMBER 3071fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 3072fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED); 3073fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_NUMBER 3074fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 3075fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED, textView.getInputType()); 3076fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), DigitsKeyListener.getInstance(true, true)); 3077fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3078fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_PHONE); 3079fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_PHONE, textView.getInputType()); 3080fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof DialerKeyListener); 3081fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3082fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 3083fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); 3084fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3085fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT, textView.getInputType()); 3086fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), TextKeyListener.getInstance(true, Capitalize.NONE)); 3087fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3088fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSingleLine(); 3089fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3090fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 3091fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 3092fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); 3093fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3094fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 3095fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS, textView.getInputType()); 3096fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), 3097fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextKeyListener.getInstance(false, Capitalize.CHARACTERS)); 3098fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3099fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3100fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 3101fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 3102fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3103fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS, textView.getInputType()); 3104fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), 3105fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextKeyListener.getInstance(false, Capitalize.WORDS)); 3106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3107fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3108fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 3109fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); 3110fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3111fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES, textView.getInputType()); 3112fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), 3113fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextKeyListener.getInstance(false, Capitalize.SENTENCES)); 3114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3115fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_NULL); 3116fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_NULL, textView.getInputType()); 3117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof TextKeyListener); 3118fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessRawContentType() { 3121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView textView = new TextView(mActivity); 3122fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(null, BufferType.EDITABLE); 3123fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setKeyListener(null); 3124fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setTransformationMethod(null); 3125fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3126fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_DATETIME 3127fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL); 3128fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 3129fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL, textView.getInputType()); 3130fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3132fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3133fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_DATETIME 3134fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE); 3135fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 3136fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE, textView.getInputType()); 3137fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3138fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3139fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3140fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_DATETIME 3141fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME); 3142fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 3143fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME, textView.getInputType()); 3144fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3145fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3146fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3147fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_NUMBER 3148fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 3149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED); 3150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_NUMBER 3151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 3152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED, textView.getInputType()); 3153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3156fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_PHONE); 3157fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_PHONE, textView.getInputType()); 3158fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3159fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3160fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 3162fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); 3163fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3164fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT, textView.getInputType()); 3165fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 3166fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3167fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3168fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSingleLine(); 3169fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3170fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 3171fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 3172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); 3173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3174fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 3175fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS, textView.getInputType()); 3176fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3177fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3178fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 3180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 3181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS, textView.getInputType()); 3183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3184fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 3187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); 3188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 3189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES, textView.getInputType()); 3190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_NULL); 3194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 3195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 3196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnPrivateIMECommand() { 3199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 3200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 320272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testFoo() { 320372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // Do not test. Implementation details. 320472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 320572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 320672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testVerifyDrawable() { 320772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach MockTextView textView = new MockTextView(mActivity); 320872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 32099776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable d = getDrawable(R.drawable.pass); 321072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(textView.verifyDrawable(d)); 321172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 321272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach textView.setCompoundDrawables(null, d, null, null); 321372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(textView.verifyDrawable(d)); 321472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 321572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 321672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testAccessPrivateImeOptions() { 321772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 321872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertNull(mTextView.getPrivateImeOptions()); 321972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 322072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setPrivateImeOptions("com.example.myapp.SpecialMode=3"); 322172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals("com.example.myapp.SpecialMode=3", mTextView.getPrivateImeOptions()); 322272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 322372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setPrivateImeOptions(null); 322472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertNull(mTextView.getPrivateImeOptions()); 322572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 322672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 322772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testSetOnEditorActionListener() { 322872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 322972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 323072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach MockOnEditorActionListener listener = new MockOnEditorActionListener(); 323172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(listener.isOnEditorActionCalled()); 323272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 323372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setOnEditorActionListener(listener); 323472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(listener.isOnEditorActionCalled()); 323572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 323672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.onEditorAction(EditorInfo.IME_ACTION_DONE); 323772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(listener.isOnEditorActionCalled()); 323872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 323972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 324072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testAccessImeOptions() { 324172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 324272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_NULL, mTextView.getImeOptions()); 324372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 324472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeOptions(EditorInfo.IME_ACTION_GO); 324572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_ACTION_GO, mTextView.getImeOptions()); 324672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 324772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeOptions(EditorInfo.IME_ACTION_DONE); 324872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_ACTION_DONE, mTextView.getImeOptions()); 324972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 325072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeOptions(EditorInfo.IME_NULL); 325172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_NULL, mTextView.getImeOptions()); 325272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 325372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 325472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testAccessImeActionLabel() { 325572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 325672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertNull(mTextView.getImeActionLabel()); 325772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, mTextView.getImeActionId()); 325872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 325972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeActionLabel("pinyin", 1); 326072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals("pinyin", mTextView.getImeActionLabel().toString()); 326172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(1, mTextView.getImeActionId()); 326272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 326372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 3264c873101a88e7ba584065de5e912508237378ca99Victoria Lease public void testSetTextLong() { 3265f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader mActivity.runOnUiThread(new Runnable() { 3266f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader public void run() { 3267f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader final int MAX_COUNT = 1 << 21; 3268f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader char[] longText = new char[MAX_COUNT]; 3269f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader for (int n = 0; n < MAX_COUNT; n++) { 3270f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader longText[n] = 'm'; 3271f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader } 3272f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader mTextView = findTextView(R.id.textview_text); 3273f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader mTextView.setText(new String(longText)); 3274f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader } 3275f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader }); 3276f08da5962f03bcdf92fc5d34b7884a48c0aebab1Roozbeh Pournader mInstrumentation.waitForIdleSync(); 3277c873101a88e7ba584065de5e912508237378ca99Victoria Lease } 3278c873101a88e7ba584065de5e912508237378ca99Victoria Lease 3279c873101a88e7ba584065de5e912508237378ca99Victoria Lease @UiThreadTest 328072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testSetExtractedText() { 328172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 328272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(mActivity.getResources().getString(R.string.text_view_hello), 328372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.getText().toString()); 328472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 328572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach ExtractedText et = new ExtractedText(); 328672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach et.text = "test"; 328772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 328872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setExtractedText(et); 328972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals("test", mTextView.getText().toString()); 329072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 329172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 329272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testMoveCursorToVisibleOffset() throws Throwable { 329372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 329472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 329572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // not a spannable text 329672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 329772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 329872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.moveCursorToVisibleOffset()); 329972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 330072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 330172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 330272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 330372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // a selection range 330472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach final String spannableText = "text"; 330572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 330672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 330772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 330872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 330972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setText(spannableText, BufferType.SPANNABLE); 331072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 331172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 331272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 331372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach Selection.setSelection((Spannable) mTextView.getText(), 0, spannableText.length()); 331472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 331572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, mTextView.getSelectionStart()); 331672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(spannableText.length(), mTextView.getSelectionEnd()); 331772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 331872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 331972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.moveCursorToVisibleOffset()); 332072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 332172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 332272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 332372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 332472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // a spannable without range 332572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 332672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 332772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 332872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setText(spannableText, BufferType.SPANNABLE); 332972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 333072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 333172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 333272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 333372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 333472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 333572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.moveCursorToVisibleOffset()); 333672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 333772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 333872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 333972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 334072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 3341afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu public void testIsInputMethodTarget() throws Throwable { 334272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 334372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.isInputMethodTarget()); 334472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 334572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.isFocused()); 3346afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu runTestOnUiThread(new Runnable() { 3347afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu @Override 3348afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu public void run() { 3349afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu mTextView.setFocusable(true); 3350afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu mTextView.requestFocus(); 3351afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu } 3352afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu }); 3353afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu mInstrumentation.waitForIdleSync(); 3354afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu assertTrue(mTextView.isFocused()); 335504d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu 335604d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu new PollingCheck() { 335704d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu @Override 335804d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu protected boolean check() { 335904d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu return mTextView.isInputMethodTarget(); 336004d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu } 336104d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu }.run(); 336272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 336372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 336472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testBeginEndBatchEdit() { 336572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 336672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 336772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.beginBatchEdit(); 336872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.endBatchEdit(); 336972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 337072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 337172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach @UiThreadTest 337272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testBringPointIntoView() throws Throwable { 337372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 337472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.bringPointIntoView(1)); 337572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 337672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.layout(0, 0, 100, 100); 337772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.bringPointIntoView(2)); 337872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 337972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 338072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testCancelLongPress() { 338172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 338272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach TouchUtils.longClickView(this, mTextView); 338372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.cancelLongPress(); 338472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 338572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 338672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach @UiThreadTest 338772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testClearComposingText() { 338872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 338972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setText("Hello world!", BufferType.SPANNABLE); 339072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach Spannable text = (Spannable) mTextView.getText(); 339172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 339272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 339372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 339472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 339572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach BaseInputConnection.setComposingSpans((Spannable) mTextView.getText()); 339672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, BaseInputConnection.getComposingSpanStart(text)); 339772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, BaseInputConnection.getComposingSpanStart(text)); 339872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 339972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.clearComposingText(); 340072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 340172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 340272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 340372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 340472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testComputeVerticalScrollExtent() { 340572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach MockTextView textView = new MockTextView(mActivity); 340672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, textView.computeVerticalScrollExtent()); 340772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 34089776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable d = getDrawable(R.drawable.pass); 340972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach textView.setCompoundDrawables(null, d, null, d); 341072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 341172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, textView.computeVerticalScrollExtent()); 341272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 341372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 341472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach @UiThreadTest 341572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testDidTouchFocusSelect() { 3416c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne mTextView = new EditText(mActivity); 341772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.didTouchFocusSelect()); 341872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 341972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setFocusable(true); 342072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.requestFocus(); 342172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.didTouchFocusSelect()); 342272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 342372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 34240ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka public void testSelectAllJustAfterTap() { 34250ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka // Prepare an EditText with focus. 34260ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka mActivity.runOnUiThread(new Runnable() { 34270ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka public void run() { 34280ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka mTextView = new EditText(mActivity); 34290ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka mActivity.setContentView(mTextView); 34300ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka 34310ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka assertFalse(mTextView.didTouchFocusSelect()); 34320ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka mTextView.setFocusable(true); 34330ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka mTextView.requestFocus(); 34340ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka assertTrue(mTextView.didTouchFocusSelect()); 34350ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka 34360ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka mTextView.setText("Hello, World.", BufferType.SPANNABLE); 34370ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka } 34380ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka }); 34390ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka mInstrumentation.waitForIdleSync(); 34400ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka 34410ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka // Tap the view to show InsertPointController. 34420ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka TouchUtils.tapView(this, mTextView); 34430ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka 34440ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka // Execute SelectAll context menu. 34450ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka mActivity.runOnUiThread(new Runnable() { 34460ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka public void run() { 34470ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka mTextView.onTextContextMenuItem(android.R.id.selectAll); 34480ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka } 34490ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka }); 34500ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka mInstrumentation.waitForIdleSync(); 34510ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka 34520ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka // The selection must be whole of the text contents. 34530ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka assertEquals(0, mTextView.getSelectionStart()); 34540ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka assertEquals(mTextView.length(), mTextView.getSelectionEnd()); 34550ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka } 34560ddd054a4a00b9843563a38ab236fe3e47c99e9aSeigo Nonaka 345772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testExtractText() { 345872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 345972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 346072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach ExtractedTextRequest request = new ExtractedTextRequest(); 346172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach ExtractedText outText = new ExtractedText(); 346272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 346372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.token = 0; 346472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.flags = 10; 346572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.hintMaxLines = 2; 346672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.hintMaxChars = 20; 346772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.extractText(request, outText)); 346872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 346972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 347072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.extractText(request, outText)); 347172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 347272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(mActivity.getResources().getString(R.string.text_view_hello), 347372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach outText.text.toString()); 3474c778c0d53d612a73b39cbf965f5068a3b0a10695Yoshiki Iguchi 3475c778c0d53d612a73b39cbf965f5068a3b0a10695Yoshiki Iguchi // Tests for invalid arguments. 3476c778c0d53d612a73b39cbf965f5068a3b0a10695Yoshiki Iguchi assertFalse(mTextView.extractText(request, null)); 3477c778c0d53d612a73b39cbf965f5068a3b0a10695Yoshiki Iguchi assertFalse(mTextView.extractText(null, outText)); 3478c778c0d53d612a73b39cbf965f5068a3b0a10695Yoshiki Iguchi assertFalse(mTextView.extractText(null, null)); 347972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 348072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 348194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 348294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testTextDirectionDefault() { 3483c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 34842a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_INHERIT, tv.getRawTextDirection()); 348594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 348694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 348794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 348894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testSetGetTextDirection() { 3489c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 349094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 349194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 34922a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getRawTextDirection()); 349394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 349494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 34952a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getRawTextDirection()); 349694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 349794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 34982a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_INHERIT, tv.getRawTextDirection()); 349994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 350094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 35012a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getRawTextDirection()); 350294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 350394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 35042a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getRawTextDirection()); 350594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 350694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 35072a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getRawTextDirection()); 350802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 350902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_LTR); 351002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_LTR, tv.getRawTextDirection()); 351102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 351202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_RTL); 351302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_RTL, tv.getRawTextDirection()); 351494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 351594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 351694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 351794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionLtr() { 3518c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 351994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("this is a test"); 352094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 35212a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 352294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 352394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 35242a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 352594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 352694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 35272a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 352894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 352994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 35302a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 353194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 353294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 35332a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 353494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 353594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 35362a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 353794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 353894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 35392a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 354002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 354102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_LTR); 354202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_LTR, tv.getTextDirection()); 354302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 354402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_RTL); 354502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_RTL, tv.getTextDirection()); 354694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 354794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 354894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 354994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionLtrWithInheritance() { 3550c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne LinearLayout ll = new LinearLayout(mActivity); 355194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 355294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3553c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 355494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("this is a test"); 355594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.addView(tv); 355694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 355794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 35582a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 355994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 356094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 35612a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 356294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 356394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 35642a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 356594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 356694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 35672a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 356894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 356994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 35702a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 357194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 357294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 35732a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 357402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 357502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_LTR); 357602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_LTR, tv.getTextDirection()); 357702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 357802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_RTL); 357902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_RTL, tv.getTextDirection()); 358094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 358194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 358294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 358394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionRtl() { 3584c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 358594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("\u05DD\u05DE"); // hebrew 358694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 35872a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 358894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 358994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 35902a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 359194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 359294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 35932a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 359494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 359594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 35962a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 359794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 359894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 35992a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 360094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 360194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 36022a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 360394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 360494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 36052a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 360602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 360702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_LTR); 360802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_LTR, tv.getTextDirection()); 360902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 361002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_RTL); 361102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_RTL, tv.getTextDirection()); 361294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 361394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 361494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 361594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionRtlWithInheritance() { 3616c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne LinearLayout ll = new LinearLayout(mActivity); 361794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 361894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3619c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 362094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("\u05DD\u05DE"); // hebrew 362194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.addView(tv); 362294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 362394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 36242a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 362594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 362694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 36272a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 362894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 362994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 36302a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 363194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 363294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 36332a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 363494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 363594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 36362a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 363794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 363894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 36392a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 364094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 364102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_LTR); 364202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_LTR, tv.getTextDirection()); 364302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 364402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_RTL); 364502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_RTL, tv.getTextDirection()); 364602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 364794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio // Force to RTL text direction on the layout 364894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_RTL); 364994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 365094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 36512a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 365294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 365394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 36542a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 365594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 365694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 36572a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 365894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 365994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 36602a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 366194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 366294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 36632a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 366494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 366594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 36662a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 366702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 366802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_LTR); 366902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_LTR, tv.getTextDirection()); 367002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 367102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_RTL); 367202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_RTL, tv.getTextDirection()); 367394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 367494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 367594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 367694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testResetTextDirection() { 3677c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne LinearLayout ll = (LinearLayout) mActivity.findViewById(R.id.layout_textviewtest); 3678c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = (TextView) mActivity.findViewById(R.id.textview_rtl); 367994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 368094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_RTL); 368194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 36822a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 368394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3684f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio // No reset when we remove the view 368594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.removeView(tv); 3686f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 3687f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio 3688f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio // Reset is done when we add the view 3689f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio ll.addView(tv); 36902a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 369194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 369294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 369302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka @UiThreadTest 369402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka public void testTextDirectionFirstStrongLtr() { 369502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka { 369602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka // The first directional character is LTR, the paragraph direction is LTR. 369702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka LinearLayout ll = new LinearLayout(mActivity); 369802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 369902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka TextView tv = new TextView(mActivity); 370002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setText("this is a test"); 370102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka ll.addView(tv); 370202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 370302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_LTR); 370402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_LTR, tv.getTextDirection()); 370502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 370602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.onPreDraw(); // For freezing layout. 370702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka Layout layout = tv.getLayout(); 370802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(Layout.DIR_LEFT_TO_RIGHT, layout.getParagraphDirection(0)); 370902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka } 371002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka { 371102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka // The first directional character is RTL, the paragraph direction is RTL. 371202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka LinearLayout ll = new LinearLayout(mActivity); 371302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 371402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka TextView tv = new TextView(mActivity); 371502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setText("\u05DD\u05DE"); // Hebrew 371602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka ll.addView(tv); 371702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 371802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_LTR); 371902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_LTR, tv.getTextDirection()); 372002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 372102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.onPreDraw(); // For freezing layout. 372202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka Layout layout = tv.getLayout(); 372302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(Layout.DIR_RIGHT_TO_LEFT, layout.getParagraphDirection(0)); 372402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka } 372502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka { 372602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka // The first directional character is not a strong directional character, the paragraph 372702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka // direction is LTR. 372802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka LinearLayout ll = new LinearLayout(mActivity); 372902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 373002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka TextView tv = new TextView(mActivity); 373102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setText("\uFFFD"); // REPLACEMENT CHARACTER. Neutral direction. 373202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka ll.addView(tv); 373302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 373402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_LTR); 373502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_LTR, tv.getTextDirection()); 373602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 373702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.onPreDraw(); // For freezing layout. 373802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka Layout layout = tv.getLayout(); 373902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(Layout.DIR_LEFT_TO_RIGHT, layout.getParagraphDirection(0)); 374002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka } 374102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka } 374202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 374302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka @UiThreadTest 374402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka public void testTextDirectionFirstStrongRtl() { 374502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka { 374602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka // The first directional character is LTR, the paragraph direction is LTR. 374702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka LinearLayout ll = new LinearLayout(mActivity); 374802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 374902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka TextView tv = new TextView(mActivity); 375002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setText("this is a test"); 375102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka ll.addView(tv); 375202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 375302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_RTL); 375402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_RTL, tv.getTextDirection()); 375502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 375602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.onPreDraw(); // For freezing layout. 375702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka Layout layout = tv.getLayout(); 375802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(Layout.DIR_LEFT_TO_RIGHT, layout.getParagraphDirection(0)); 375902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka } 376002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka { 376102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka // The first directional character is RTL, the paragraph direction is RTL. 376202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka LinearLayout ll = new LinearLayout(mActivity); 376302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 376402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka TextView tv = new TextView(mActivity); 376502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setText("\u05DD\u05DE"); // Hebrew 376602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka ll.addView(tv); 376702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 376802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_RTL); 376902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_RTL, tv.getTextDirection()); 377002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 377102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.onPreDraw(); // For freezing layout. 377202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka Layout layout = tv.getLayout(); 377302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(Layout.DIR_RIGHT_TO_LEFT, layout.getParagraphDirection(0)); 377402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka } 377502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka { 377602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka // The first directional character is not a strong directional character, the paragraph 377702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka // direction is RTL. 377802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka LinearLayout ll = new LinearLayout(mActivity); 377902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 378002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka TextView tv = new TextView(mActivity); 378102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setText("\uFFFD"); // REPLACEMENT CHARACTER. Neutral direction. 378202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka ll.addView(tv); 378302c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 378402c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG_RTL); 378502c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(View.TEXT_DIRECTION_FIRST_STRONG_RTL, tv.getTextDirection()); 378602c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 378702c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka tv.onPreDraw(); // For freezing layout. 378802c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka Layout layout = tv.getLayout(); 378902c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka assertEquals(Layout.DIR_RIGHT_TO_LEFT, layout.getParagraphDirection(0)); 379002c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka } 379102c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka } 379202c09dc324e915d3786f0188704ad1753039bd40Seigo Nonaka 3793b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka public void testAllCapsLocalization() { 3794b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka String testString = "abcdefghijklmnopqrstuvwxyz"; 3795b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka 3796b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka // The capitalized characters of "i" on Turkish and Azerbaijani are different from English. 3797b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka Locale[] testLocales = { 3798b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka new Locale("az", "AZ"), 3799b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka new Locale("tr", "TR"), 3800b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka new Locale("en", "US"), 3801b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka }; 3802b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka 3803b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka TextView tv = new TextView(mActivity); 3804b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka tv.setAllCaps(true); 3805b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka for (Locale locale: testLocales) { 3806b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka tv.setTextLocale(locale); 3807b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka assertEquals("Locale: " + locale.getDisplayName(), 3808b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka testString.toUpperCase(locale), 3809b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka tv.getTransformationMethod().getTransformation(testString, tv).toString()); 3810b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka } 3811b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka } 3812b8eb7fd352a5fac5911460ebcedf53e6270c97dbSeigo Nonaka 3813dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3814dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testTextAlignmentDefault() { 3815dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 38167fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getRawTextAlignment()); 3817dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // resolved default text alignment is GRAVITY 38187fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3819dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3820dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3821dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3822dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testSetGetTextAlignment() { 3823dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 3824dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3825dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); 38267fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getRawTextAlignment()); 3827dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3828dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 38297fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getRawTextAlignment()); 3830dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3831dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 38327fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_START, tv.getRawTextAlignment()); 3833dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3834dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 38357fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_END, tv.getRawTextAlignment()); 3836dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3837dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 38387fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_START, tv.getRawTextAlignment()); 3839dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3840dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 38417fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_END, tv.getRawTextAlignment()); 3842dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3843dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3844dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3845dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testGetResolvedTextAlignment() { 3846dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 3847dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 38487fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3849dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3850757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio // Test center alignment first so that we dont hit the default case 3851dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 38527fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3853dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3854757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio // Test the default case too 3855757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); 3856757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3857757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio 3858dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 38597fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_START, tv.getTextAlignment()); 3860dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3861dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 38627fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_END, tv.getTextAlignment()); 3863dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3864dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 38657fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_START, tv.getTextAlignment()); 3866dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3867dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 38687fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_END, tv.getTextAlignment()); 3869dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3870dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3871dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3872dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testGetResolvedTextAlignmentWithInheritance() { 3873dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio LinearLayout ll = new LinearLayout(getActivity()); 3874dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); 3875dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3876dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 3877dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.addView(tv); 3878dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3879dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // check defaults 38807fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getRawTextAlignment()); 3881dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3882dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3883dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // set inherit and check that child is following parent 3884dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_INHERIT); 38857fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_INHERIT, tv.getRawTextAlignment()); 3886dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3887dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 38887fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3889dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3890dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 38917fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_START, tv.getTextAlignment()); 3892dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3893dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 38947fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_END, tv.getTextAlignment()); 3895dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3896dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 38977fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_START, tv.getTextAlignment()); 3898dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3899dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 39007fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_END, tv.getTextAlignment()); 3901dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3902dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // now get rid of the inheritance but still change the parent 3903dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 3904dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3905dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 39067fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3907dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3908dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 39097fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3910dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3911dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 39127fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3913dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3914dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 39157fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3916dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3917dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 39187fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3919dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3920dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3921dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3922dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testResetTextAlignment() { 39234ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luo TextViewCtsActivity activity = getActivity(); 3924dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3925dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio LinearLayout ll = (LinearLayout) activity.findViewById(R.id.layout_textviewtest); 3926dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = (TextView) activity.findViewById(R.id.textview_rtl); 3927dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3928dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 3929dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_INHERIT); 39307fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3931dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 39324f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio // No reset when we remove the view 3933dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.removeView(tv); 39344f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 39354f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio 39364f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio // Reset is done when we add the view 39374f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio // Default text alignment is GRAVITY 39384f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio ll.addView(tv); 39397fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3940dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3941dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3942b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio @UiThreadTest 3943b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio public void testDrawableResolution() { 3944b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int LEFT = 0; 3945b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int TOP = 1; 3946b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int RIGHT = 2; 3947b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int BOTTOM = 3; 3948b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 39494ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luo TextViewCtsActivity activity = getActivity(); 3950b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3951b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 1.1: left / right drawable defined in default LTR mode 3952b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio TextView tv = (TextView) activity.findViewById(R.id.textview_drawable_1_1); 3953b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio Drawable[] drawables = tv.getCompoundDrawables(); 3954b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3955b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3956b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3957b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3958b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3959b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3960b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3961b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3962b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3963b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3964b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 1.2: left / right drawable defined in default RTL mode 3965b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_1_2); 3966b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3967b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3968b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3969b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3970b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3971b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3972b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3973b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3974b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3975b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3976b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3977b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 2.1: start / end drawable defined in LTR mode 3978b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_2_1); 3979b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3980b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3981b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3982b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3983b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3984b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3985b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3986b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3987b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3988b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3989b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3990b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 2.2: start / end drawable defined in RTL mode 3991b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_2_2); 3992b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3993b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3994b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3995b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3996b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3997b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3998b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3999b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 4000b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 4001b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 4002b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4003b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 3.1: left / right / start / end drawable defined in LTR mode 4004b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_1); 4005b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 4006b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4007b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 4008b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 4009b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 4010b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 4011b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 4012b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 4013b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 4014b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 4015b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4016b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 3.2: left / right / start / end drawable defined in RTL mode 4017b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_2); 4018b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 4019b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4020b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 4021b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 4022b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 4023b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 4024b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 4025b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 4026b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 4027b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 4028b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4029b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 4.1: start / end drawable defined in LTR mode inside a layout 4030b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 4031b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_4_1); 4032b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 4033b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4034b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 4035b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 4036b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 4037b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 4038b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 4039b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 4040b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 4041b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 4042b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4043b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 4.2: start / end drawable defined in RTL mode inside a layout 4044b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 4045b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_4_2); 4046b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 4047b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4048b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 4049b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 4050b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 4051b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 4052b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 4053b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 4054b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 4055b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 4056b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4057b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 5.1: left / right / start / end drawable defined in LTR mode inside a layout 4058b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 4059b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_1); 4060b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 4061b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4062b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 4063b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 4064b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 4065b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 4066b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 4067b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 4068b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 4069b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 4070b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4071b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 5.2: left / right / start / end drawable defined in RTL mode inside a layout 4072b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 4073b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_2); 4074b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 4075b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 4076b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 4077b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 4078b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 4079b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 4080b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 4081b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 4082b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 4083b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 4084b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio } 4085b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 40869776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio @UiThreadTest 40879776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio public void testDrawableResolution2() { 40889776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int LEFT = 0; 40899776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int TOP = 1; 40909776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int RIGHT = 2; 40919776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int BOTTOM = 3; 40929776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 40934ca04c0729a0e810b5af16edcd52bb8cb59bf55eChenjie Luo TextViewCtsActivity activity = getActivity(); 40949776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 40959776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio // Case 1.1: left / right drawable defined in default LTR mode 40969776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio TextView tv = (TextView) activity.findViewById(R.id.textview_drawable_1_1); 40979776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable[] drawables = tv.getCompoundDrawables(); 40989776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 40999776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 41009776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 41019776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 41029776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 41039776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 41049776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 41059776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 41069776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 41079776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41089776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawables(null, null, getDrawable(R.drawable.icon_yellow), null); 41099776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 41109776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41119776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[LEFT]); 41129776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 41139776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 41149776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 41159776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 41169776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41179776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_1_2); 41189776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 41199776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41209776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 41219776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 41229776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 41239776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 41249776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 41259776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 41269776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 41279776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 41289776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41299776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawables(getDrawable(R.drawable.icon_yellow), null, null, null); 41309776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 41319776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41329776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 41339776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 41349776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[RIGHT]); 41359776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 41369776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 41379776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41389776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_ltr); 41399776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 41409776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41419776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[LEFT]); 41429776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[RIGHT]); 41439776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 41449776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 41459776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41469776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawables(getDrawable(R.drawable.icon_blue), null, getDrawable(R.drawable.icon_red), null); 41479776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 41489776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41499776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 41509776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 41519776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 41529776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 41539776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 41549776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 41559776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41569776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawablesRelative(getDrawable(R.drawable.icon_yellow), null, null, null); 41579776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 41589776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 41599776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 41609776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 41619776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[RIGHT]); 41629776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 41639776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 41649776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio } 41659776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 416672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach private static class MockOnEditorActionListener implements OnEditorActionListener { 416772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach private boolean isOnEditorActionCalled; 416872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 416972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 417072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach isOnEditorActionCalled = true; 417172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach return true; 417272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 417372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 417472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public boolean isOnEditorActionCalled() { 417572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach return isOnEditorActionCalled; 417672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 417772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 417872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 4179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void layout(final TextView textView) { 4180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(textView); 4183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4184fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void layout(final int layoutId) { 4189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(layoutId); 4192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView findTextView(int id) { 4198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return (TextView) mActivity.findViewById(id); 4199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private int getAutoLinkMask(int id) { 4202fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return findTextView(id).getAutoLinkMask(); 4203fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4204fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4205fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Bitmap getBitmap(int resid) { 42069776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio return ((BitmapDrawable) getDrawable(resid)).getBitmap(); 42079776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio } 42089776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 42099776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio private Drawable getDrawable(int resid) { 42109776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio return mActivity.getResources().getDrawable(resid); 4211fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4212fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4213fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMaxWidth(final int pixels) { 4214fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4215fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4216fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxWidth(pixels); 4217fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4218fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4219fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4220fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4221fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4222fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinWidth(final int pixels) { 4223fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4224fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4225fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinWidth(pixels); 4226fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4227fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4228fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4229fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4230fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4231fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMaxHeight(final int pixels) { 4232fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4233fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4234fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxHeight(pixels); 4235fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4236fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4237fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4239fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4240fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinHeight(final int pixels) { 4241fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4242fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4243fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinHeight(pixels); 4244fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4245fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4246fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4247fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4248fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4249fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinLines(final int minlines) { 4250fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4251fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4252fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinLines(minlines); 4253fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4254fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4255fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4256fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4257fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4258fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su /** 4259fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * Convenience for {@link TextView#setText(CharSequence, BufferType)}. And 4260fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * the buffer type is fixed to SPANNABLE. 4261fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 4262fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @param tv the text view 4263fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @param content the content 4264fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 4265fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setSpannableText(final TextView tv, final String content) { 4266fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4267fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4268fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(content, BufferType.SPANNABLE); 4269fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4270fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4271fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4272fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4273fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4274fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setLines(final int lines) { 4275fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4276fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4277fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(lines); 4278fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4279fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4280fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4281fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4282fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4283fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setHorizontallyScrolling(final boolean whether) { 4284fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4285fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4286fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHorizontallyScrolling(whether); 4287fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4288fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4289fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4290fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4291fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4292fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setWidth(final int pixels) { 4293fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4294fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4295fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(pixels); 4296fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4297fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4298fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4299fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4300fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4301fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setHeight(final int pixels) { 4302fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4303fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4304fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHeight(pixels); 4305fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4306fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4307fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4308fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4309fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4310fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinEms(final int ems) { 4311fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4312fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4313fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinEms(ems); 4314fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4315fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4316fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4317fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4318fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4319fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMaxEms(final int ems) { 4320fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4321fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4322fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxEms(ems); 4323fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4324fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4325fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4326fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4327fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4328fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setEms(final int ems) { 4329fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4330fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4331fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEms(ems); 4332fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4333fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4334fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4335fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4336fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4337fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setLineSpacing(final float add, final float mult) { 4338fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 4339fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 4340fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLineSpacing(add, mult); 4341fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4342fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 4343fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 4344fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4345fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4346fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static abstract class TestSelectedRunnable implements Runnable { 4347fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView mTextView; 4348fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mIsSelected1; 4349fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mIsSelected2; 4350fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4351fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public TestSelectedRunnable(TextView textview) { 4352fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = textview; 4353fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4354fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4355fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean getIsSelected1() { 4356fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mIsSelected1; 4357fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4358fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4359fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean getIsSelected2() { 4360fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mIsSelected2; 4361fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4362fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4363fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void saveIsSelected1() { 4364fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mIsSelected1 = mTextView.isSelected(); 4365fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4366fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4367fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void saveIsSelected2() { 4368fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mIsSelected2 = mTextView.isSelected(); 4369fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4370fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4371fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4372fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static abstract class TestLayoutRunnable implements Runnable { 4373fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView mTextView; 4374fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Layout mLayout; 4375fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4376fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public TestLayoutRunnable(TextView textview) { 4377fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = textview; 4378fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4379fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4380fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public Layout getLayout() { 4381fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mLayout; 4382fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4383fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4384fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void saveLayout() { 4385fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mLayout = mTextView.getLayout(); 4386fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4387fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4388fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4389fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private class MockEditableFactory extends Editable.Factory { 4390fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mhasCalledNewEditable; 4391fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private CharSequence mSource; 4392fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4393fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledNewEditable() { 4394fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mhasCalledNewEditable; 4395fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4396fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4397fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset() { 4398fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mhasCalledNewEditable = false; 4399fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = null; 4400fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4401fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4402fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public CharSequence getSource() { 4403fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mSource; 4404fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4405fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4406fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 4407fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public Editable newEditable(CharSequence source) { 4408fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mhasCalledNewEditable = true; 4409fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = source; 4410fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return super.newEditable(source); 4411fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4412fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4413fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4414fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private class MockSpannableFactory extends Spannable.Factory { 4415fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCalledNewSpannable; 4416fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private CharSequence mSource; 4417fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4418e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne public boolean hasCalledNewSpannable() { 4419fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCalledNewSpannable; 4420fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4421fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4422fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset() { 4423fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledNewSpannable = false; 4424fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = null; 4425fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4426fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4427fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public CharSequence getSource() { 4428fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mSource; 4429fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4430fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4431fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 4432fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public Spannable newSpannable(CharSequence source) { 4433fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledNewSpannable = true; 4434fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = source; 4435fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return super.newSpannable(source); 4436fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4437fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4438fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4439fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static class MockTextWatcher implements TextWatcher { 4440fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCalledAfterTextChanged; 4441fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCalledBeforeTextChanged; 4442fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasOnTextChanged; 4443fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4444fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset(){ 4445fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledAfterTextChanged = false; 4446fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledBeforeTextChanged = false; 4447fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasOnTextChanged = false; 4448fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4449fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4450fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledAfterTextChanged() { 4451fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCalledAfterTextChanged; 4452fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4453fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4454fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledBeforeTextChanged() { 4455fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCalledBeforeTextChanged; 4456fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4457fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4458fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledOnTextChanged() { 4459fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasOnTextChanged; 4460fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4461fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4462fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void afterTextChanged(Editable s) { 4463fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledAfterTextChanged = true; 4464fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4465fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4466fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void beforeTextChanged(CharSequence s, int start, int count, int after) { 4467fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledBeforeTextChanged = true; 4468fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4469fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4470fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void onTextChanged(CharSequence s, int start, int before, int count) { 4471fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasOnTextChanged = true; 4472fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4473fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4474fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4475fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su /** 4476fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * The listener interface for receiving mockOnLongClick events. The class 4477fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * that is interested in processing a mockOnLongClick event implements this 4478fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * interface, and the object created with that class is registered with a 4479fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * component using the component's 4480fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * <code>addMockOnLongClickListener<code> method. When 4481fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * the mockOnLongClick event occurs, that object's appropriate 4482fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * method is invoked. 4483fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 4484fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @see MockOnLongClickEvent 4485fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 4486fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static class MockOnLongClickListener implements OnLongClickListener { 4487fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mExpectedOnLongClickResult; 4488fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasLongClicked; 4489fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4490fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnLongClickListener(boolean result) { 4491fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mExpectedOnLongClickResult = result; 4492fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4493fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4494fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasLongClicked() { 4495fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasLongClicked; 4496fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4497fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4498fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean onLongClick(View v) { 4499fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasLongClicked = true; 4500fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mExpectedOnLongClickResult; 4501fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4502fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4503fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4504fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su /** 4505fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * The listener interface for receiving mockOnCreateContextMenu events. The 4506fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * class that is interested in processing a mockOnCreateContextMenu event 4507fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * implements this interface, and the object created with that class is 4508fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * registered with a component using the component's 4509fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * <code>addMockOnCreateContextMenuListener<code> method. When the 4510fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * mockOnCreateContextMenu event occurs, that object's appropriate method is 4511fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * invoked. 4512fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 4513fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @see MockOnCreateContextMenuEvent 4514fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 4515fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static class MockOnCreateContextMenuListener implements OnCreateContextMenuListener { 4516fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mIsMenuItemsBlank; 4517fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCreatedContextMenu; 4518fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4519fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnCreateContextMenuListener(boolean isBlank) { 4520fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su this.mIsMenuItemsBlank = isBlank; 4521fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4522fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4523fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCreatedContextMenu() { 4524fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCreatedContextMenu; 4525fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4526fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4527fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset() { 4528fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCreatedContextMenu = false; 4529fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4530fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 4531fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 4532fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCreatedContextMenu = true; 4533fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su if (!mIsMenuItemsBlank) { 4534fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su menu.add("menu item"); 4535fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4536fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4537fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 4538277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 4539277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook /** 4540277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook * A TextWatcher that converts the text to spaces whenever the text changes. 4541277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook */ 4542277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook private static class ConvertToSpacesTextWatcher implements TextWatcher { 4543277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook boolean mChangingText; 4544277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 4545277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook @Override 4546277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void beforeTextChanged(CharSequence s, int start, int count, int after) { 4547277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4548277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 4549277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook @Override 4550277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void onTextChanged(CharSequence s, int start, int before, int count) { 4551277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4552277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook 4553277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook @Override 4554277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook public void afterTextChanged(Editable s) { 4555277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Avoid infinite recursion. 4556277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook if (mChangingText) { 4557277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook return; 4558277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4559277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mChangingText = true; 4560277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook // Create a string of s.length() spaces. 4561277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook StringBuilder builder = new StringBuilder(s.length()); 4562277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook for (int i = 0; i < s.length(); i++) { 4563277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook builder.append(' '); 4564277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4565277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook s.replace(0, s.length(), builder.toString()); 4566277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook mChangingText = false; 4567277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4568277fd69e9d1f08b601cd6f12ff5f13e200a6b63aJames Cook } 4569fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su} 4570