TextViewTest.java revision c02a9f453c5c1255d668bbd8970f4585ab5ff494
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 19fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport com.android.cts.stub.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; 31fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.Bitmap; 32fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.Color; 33fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.Paint; 34afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.graphics.Path; 35fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.Rect; 36afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.graphics.RectF; 37fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.Typeface; 38fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.drawable.BitmapDrawable; 39fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.graphics.drawable.Drawable; 40fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.net.Uri; 41fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.os.Bundle; 42fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.test.ActivityInstrumentationTestCase2; 4372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.test.TouchUtils; 44fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.test.UiThreadTest; 45fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.Editable; 46fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.InputFilter; 47fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.InputType; 48fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.Layout; 49fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.Selection; 50fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.Spannable; 51fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.SpannableString; 52fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.TextPaint; 53fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.TextUtils; 54fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.TextUtils.TruncateAt; 55afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.text.TextWatcher; 56fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.ArrowKeyMovementMethod; 57fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.DateKeyListener; 58fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.DateTimeKeyListener; 59fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.DialerKeyListener; 60fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.DigitsKeyListener; 61fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.KeyListener; 62fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.LinkMovementMethod; 63fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.MovementMethod; 64fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.PasswordTransformationMethod; 65fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.QwertyKeyListener; 66fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.SingleLineTransformationMethod; 67fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.TextKeyListener; 68afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.text.method.TextKeyListener.Capitalize; 69fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.TimeKeyListener; 70fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.method.TransformationMethod; 71fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.style.URLSpan; 72fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.style.cts.MockURLSpanTestActivity; 73fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.text.util.Linkify; 74fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.util.DisplayMetrics; 75fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.util.TypedValue; 76fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.ContextMenu; 77afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.view.ContextMenu.ContextMenuInfo; 78fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.Gravity; 79fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.KeyEvent; 80fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.View; 81fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.View.OnCreateContextMenuListener; 82fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.view.View.OnLongClickListener; 83afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsuimport android.view.ViewGroup; 8472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.view.inputmethod.BaseInputConnection; 8572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.view.inputmethod.EditorInfo; 8672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.view.inputmethod.ExtractedText; 8772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.view.inputmethod.ExtractedTextRequest; 88c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunneimport android.widget.EditText; 89bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsuimport android.widget.FrameLayout; 9062808562ee0218f6ea3c07d333f7a65fc57c122fBrian Muramatsuimport android.widget.LinearLayout; 91fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.widget.Scroller; 92fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.widget.TextView; 93fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport android.widget.TextView.BufferType; 9472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubachimport android.widget.TextView.OnEditorActionListener; 95fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 96fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Suimport java.io.IOException; 97fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 98fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su/** 99fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * Test {@link TextView}. 100fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 101fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Supublic class TextViewTest extends ActivityInstrumentationTestCase2<TextViewStubActivity> { 102fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 103fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView mTextView; 104fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Activity mActivity; 105fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Instrumentation mInstrumentation; 106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static final String LONG_TEXT = "This is a really long string which exceeds " 1077375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "the width of the view. New devices have a much larger screen which " 1087375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "actually enables long strings to be displayed with no fading. " 1097375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "I have made this string longer to fix this case. If you are correcting " 1107375565c2caf62392b32049cafb7df0730373794Gilles Debunne + "this text, I would love to see the kind of devices you guys now use!"; 111fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static final long TIMEOUT = 5000; 11222d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root private CharSequence mTransformedText; 113fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public TextViewTest() { 115fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su super("com.android.cts.stub", TextViewStubActivity.class); 116fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 118fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected void setUp() throws Exception { 120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su super.setUp(); 121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity = getActivity(); 1224594468cc37000395ee2a000da08651e73e78508keunyoung new PollingCheck() { 1234594468cc37000395ee2a000da08651e73e78508keunyoung @Override 1244594468cc37000395ee2a000da08651e73e78508keunyoung protected boolean check() { 1254594468cc37000395ee2a000da08651e73e78508keunyoung return mActivity.hasWindowFocus(); 1264594468cc37000395ee2a000da08651e73e78508keunyoung } 1274594468cc37000395ee2a000da08651e73e78508keunyoung }.run(); 128fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation = getInstrumentation(); 129fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 130fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testConstructor() { 132fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new TextView(mActivity); 133fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 134fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new TextView(mActivity, null); 135fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 136fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new TextView(mActivity, null, 0); 137fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 138fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 139fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 140fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessText() { 141fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 142fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 143fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String expected = mActivity.getResources().getString(R.string.text_view_hello); 144fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(expected); 145fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, tv.getText().toString()); 146fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 147fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(null); 148fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLineHeight() { 152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineHeight() > 0); 154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLineSpacing(1.2f, 1.5f); 156fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineHeight() > 0); 157fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 158fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 159fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLayout() { 160fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 162fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 163fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER); 164fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 165fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 166fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 167fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView.getLayout()); 168fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 169fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TestLayoutRunnable runnable = new TestLayoutRunnable(mTextView) { 170fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 171fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the text of TextView. 172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Hello, Android!"); 173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveLayout(); 174fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 175fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }; 176fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(runnable); 177fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 178fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(runnable.getLayout()); 179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView.getLayout()); 180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessKeyListener() { 183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 184fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getKeyListener()); 191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final KeyListener digitsKeyListener = DigitsKeyListener.getInstance(); 193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(digitsKeyListener); 197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(digitsKeyListener, mTextView.getKeyListener()); 201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 202fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final QwertyKeyListener qwertyKeyListener 203fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su = QwertyKeyListener.getInstance(false, Capitalize.NONE); 204fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 205fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 206fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(qwertyKeyListener); 207fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 208fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 209fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 210fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(qwertyKeyListener, mTextView.getKeyListener()); 211fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 212fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 213fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessMovementMethod() { 214fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence LONG_TEXT = "Scrolls the specified widget to the specified " 215fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + "coordinates, except constrains the X scrolling position to the horizontal " 216fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + "regions of the text that will be visible after scrolling to " 217fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + "the specified Y position."; 218fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int selectionStart = 10; 219fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int selectionEnd = LONG_TEXT.length(); 220fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final MovementMethod movementMethod = ArrowKeyMovementMethod.getInstance(); 221fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 222fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 223fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 224fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMovementMethod(movementMethod); 225fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(LONG_TEXT, BufferType.EDITABLE); 226fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Editable) mTextView.getText(), 227fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su selectionStart, selectionEnd); 228fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 229fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 230fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 231fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 232fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 233fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(movementMethod, mTextView.getMovementMethod()); 234fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 235fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, Selection.getSelectionEnd(mTextView.getText())); 236fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_ALT_LEFT, 237fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su KeyEvent.KEYCODE_DPAD_UP); 238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the selection has been removed. 239fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 240fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionEnd(mTextView.getText())); 241fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 242fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 243fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 244fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMovementMethod(null); 245fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Editable) mTextView.getText(), 246fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su selectionStart, selectionEnd); 247fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 248fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 249fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 250fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 251fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 252fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getMovementMethod()); 253fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 254fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, Selection.getSelectionEnd(mTextView.getText())); 255fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys(KeyEvent.KEYCODE_SHIFT_LEFT, KeyEvent.KEYCODE_ALT_LEFT, 256fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su KeyEvent.KEYCODE_DPAD_UP); 257fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the selection will not be changed. 258fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, Selection.getSelectionStart(mTextView.getText())); 259fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, Selection.getSelectionEnd(mTextView.getText())); 260fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 261fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 262fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 263fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testLength() { 264fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 265fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 266fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String content = "This is content"; 267fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(content); 268fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(content.length(), mTextView.length()); 269fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 270fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(""); 271fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.length()); 272fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 273fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(null); 274fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.length()); 275fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 276fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 277fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 278fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessGravity() { 279fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_gravity); 280fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 281fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_default); 2824bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.TOP | Gravity.START, mTextView.getGravity()); 283fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 284fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_bottom); 2854bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.BOTTOM | Gravity.START, mTextView.getGravity()); 286fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 287fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_right); 288fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.TOP | Gravity.RIGHT, mTextView.getGravity()); 289fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 290fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_center); 291fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.CENTER, mTextView.getGravity()); 292fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 293fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_fill); 294fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.FILL, mTextView.getGravity()); 295fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 296fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.gravity_center_vertical_right); 297fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.CENTER_VERTICAL | Gravity.RIGHT, mTextView.getGravity()); 298fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 299fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); 300fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, mTextView.getGravity()); 301fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.FILL); 302fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.FILL, mTextView.getGravity()); 303fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER); 304fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.CENTER, mTextView.getGravity()); 305fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 306fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.NO_GRAVITY); 3074bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.TOP | Gravity.START, mTextView.getGravity()); 308fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 309fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.RIGHT); 310fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Gravity.TOP | Gravity.RIGHT, mTextView.getGravity()); 311fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 312fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.FILL_VERTICAL); 3134bb7d555a927c5f7a8747fdd85f7c94e1c0d2f19Fabrice Di Meglio assertEquals(Gravity.FILL_VERTICAL | Gravity.START, mTextView.getGravity()); 314fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 315fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //test negative input value. 316fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(-1); 317fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getGravity()); 318fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 319fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 320fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessAutoLinkMask() { 321fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 322fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text1 = 323fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new SpannableString("URL: http://www.google.com. mailto: account@gmail.com"); 324fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 325fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 326fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setAutoLinkMask(Linkify.ALL); 327fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text1, BufferType.EDITABLE); 328fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 329fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 330fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 331fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.ALL, mTextView.getAutoLinkMask()); 332fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 333fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Spannable spanString = (Spannable) mTextView.getText(); 334fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su URLSpan[] spans = spanString.getSpans(0, spanString.length(), URLSpan.class); 335fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(spans); 336fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, spans.length); 337fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("http://www.google.com", spans[0].getURL()); 338fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("mailto:account@gmail.com", spans[1].getURL()); 339fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 340fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text2 = 341fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new SpannableString("name: Jack. tel: +41 44 800 8999"); 342fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 343fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 344fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setAutoLinkMask(Linkify.PHONE_NUMBERS); 345fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text2, BufferType.EDITABLE); 346fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 347fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 348fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 349fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.PHONE_NUMBERS, mTextView.getAutoLinkMask()); 350fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 351fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spanString = (Spannable) mTextView.getText(); 352fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = spanString.getSpans(0, spanString.length(), URLSpan.class); 353fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(spans); 354fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, spans.length); 355fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("tel:+41448008999", spans[0].getURL()); 356fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 357fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(R.layout.textview_autolink); 358fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 1 for web, 2 for email, 4 for phone, 7 for all(web|email|phone) 359fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, getAutoLinkMask(R.id.autolink_default)); 360fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.WEB_URLS, getAutoLinkMask(R.id.autolink_web)); 361fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.EMAIL_ADDRESSES, getAutoLinkMask(R.id.autolink_email)); 362fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.PHONE_NUMBERS, getAutoLinkMask(R.id.autolink_phone)); 363fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.ALL, getAutoLinkMask(R.id.autolink_all)); 364fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.WEB_URLS | Linkify.EMAIL_ADDRESSES, 365fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound1)); 366fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.WEB_URLS | Linkify.PHONE_NUMBERS, 367fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound2)); 368fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS, 369fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound3)); 370fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Linkify.PHONE_NUMBERS | Linkify.ALL, 371fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su getAutoLinkMask(R.id.autolink_compound4)); 372fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 373fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 374fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessTextSize() { 375fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su DisplayMetrics metrics = mActivity.getResources().getDisplayMetrics(); 376fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 377fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 378fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 20f); 379fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 20f, metrics), 380fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 381fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 382fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20f); 383fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20f, metrics), 384fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 385fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 386fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f); 387fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, metrics), 388fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 389fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 390fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // setTextSize by default unit "sp" 391fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(20f); 392fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20f, metrics), 393fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 394fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 395fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextSize(200f); 396fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 200f, metrics), 397fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTextSize(), 0.01f); 398fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 399fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 400fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessTextColor() { 401fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 402fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 403fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(Color.GREEN); 404fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.GREEN, mTextView.getCurrentTextColor()); 405fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.GREEN), mTextView.getTextColors()); 406fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 407fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(Color.BLACK); 408fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getCurrentTextColor()); 409fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.BLACK), mTextView.getTextColors()); 410fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 411fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(Color.RED); 412fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.RED, mTextView.getCurrentTextColor()); 413fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.RED), mTextView.getTextColors()); 414fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 415fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using ColorStateList 416fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 417fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ColorStateList colors = new ColorStateList(new int[][] { 418fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { android.R.attr.state_focused}, new int[0] }, 419fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { Color.rgb(0, 255, 0), Color.BLACK }); 420fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(colors); 421fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(colors, mTextView.getTextColors()); 422fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getCurrentTextColor()); 423fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 424fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // exceptional 425fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 426fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextColor(null); 427fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should thrown exception if the colors is null"); 428fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e){ 429fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 430fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 431fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 432325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette public void testGetTextColor() { 433325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette // TODO: How to get a suitable TypedArray to test this method. 434325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette 435325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette try { 436325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette TextView.getTextColor(mActivity, null, -1); 437325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette fail("There should be a NullPointerException thrown out."); 438325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette } catch (NullPointerException e) { 439325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette } 440325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette } 441325d45563875cb6915e40070f3f687a3d92566f2Alan Viverette 442fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetHighlightColor() { 443fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 444fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 445fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHighlightColor(0x00ff00ff); 446fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 447fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 448fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetShadowLayer() { 449fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 450fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 451fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // shadow is placed to the left and below the text 452fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setShadowLayer(1.0f, 0.3f, 0.3f, Color.CYAN); 453fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.isPaddingOffsetRequired()); 454fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getLeftPaddingOffset()); 455fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getTopPaddingOffset()); 456fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, textView.getRightPaddingOffset()); 457fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, textView.getBottomPaddingOffset()); 458fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 459fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // shadow is placed to the right and above the text 460fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setShadowLayer(1.0f, -0.8f, -0.8f, Color.CYAN); 461fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.isPaddingOffsetRequired()); 462fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getLeftPaddingOffset()); 463fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getTopPaddingOffset()); 464fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getRightPaddingOffset()); 465fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getBottomPaddingOffset()); 466fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 467fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // no shadow 468fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setShadowLayer(0.0f, 0.0f, 0.0f, Color.CYAN); 469fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(textView.isPaddingOffsetRequired()); 470fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getLeftPaddingOffset()); 471fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getTopPaddingOffset()); 472fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getRightPaddingOffset()); 473fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getBottomPaddingOffset()); 474fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 475fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 476fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 477fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetSelectAllOnFocus() { 478fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_selectallonfocus); 479fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String content = "This is the content"; 480fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String blank = ""; 481fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.selectAllOnFocus_default); 482fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(blank, BufferType.SPANNABLE); 483fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 484fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 485fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 486fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 487fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 488fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 489fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 490fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 491fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 492fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(content, BufferType.SPANNABLE); 493fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(true); 494fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 495fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 496fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 497fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 498fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 499fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 500fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 501fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(content.length(), mTextView.getSelectionEnd()); 502fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 503fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 0); 504fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(false); 505fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 506fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 507fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 508fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 509fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 510fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 511fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 512fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionEnd()); 513fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 514fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(blank, BufferType.SPANNABLE); 515fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(true); 516fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 517fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 518fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 519fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 520fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 521fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 522fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 523fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(blank.length(), mTextView.getSelectionEnd()); 524fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 525fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 0); 526fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelectAllOnFocus(false); 527fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change the focus 528fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su findTextView(R.id.selectAllOnFocus_dummy).requestFocus(); 529fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.isFocused()); 530fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 531fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.isFocused()); 532fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 533fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 534fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionEnd()); 535fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 536fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 537fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetPaint() { 538fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 539fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextPaint tp = mTextView.getPaint(); 540fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(tp); 541fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 542fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaintFlags(), tp.getFlags()); 543fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 544fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 545fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 546fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessLinksClickable() { 547fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_hint_linksclickable_freezestext); 548fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 549fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_linksClickable_freezesText_default); 550fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLinksClickable()); 551fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 552fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.linksClickable_true); 553fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLinksClickable()); 554fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 555fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.linksClickable_false); 556fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getLinksClickable()); 557fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 558fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinksClickable(false); 559fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getLinksClickable()); 560fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 561fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinksClickable(true); 562fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLinksClickable()); 563fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 564fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getMovementMethod()); 565fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 566fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text = new SpannableString("name: Jack. tel: +41 44 800 8999"); 567fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 568fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setAutoLinkMask(Linkify.PHONE_NUMBERS); 569fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 570fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 571fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Movement method will be automatically set to LinkMovementMethod 572fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getMovementMethod() instanceof LinkMovementMethod); 573fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 574fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 575fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessHintTextColor() { 576fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 577fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using int values 578fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 579fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(Color.GREEN); 580fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.GREEN, mTextView.getCurrentHintTextColor()); 581fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.GREEN), mTextView.getHintTextColors()); 582fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 583fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(Color.BLUE); 584fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.BLUE), mTextView.getHintTextColors()); 585fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLUE, mTextView.getCurrentHintTextColor()); 586fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 587fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(Color.RED); 588fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.RED), mTextView.getHintTextColors()); 589fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.RED, mTextView.getCurrentHintTextColor()); 590fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 591fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using ColorStateList 592fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 593fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ColorStateList colors = new ColorStateList(new int[][] { 594fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { android.R.attr.state_focused}, new int[0] }, 595fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { Color.rgb(0, 255, 0), Color.BLACK }); 596fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(colors); 597fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(colors, mTextView.getHintTextColors()); 598fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getCurrentHintTextColor()); 599fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 600fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // exceptional 601fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHintTextColor(null); 602fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getHintTextColors()); 603fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCurrentTextColor(), mTextView.getCurrentHintTextColor()); 604fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 605fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 606fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessLinkTextColor() { 607fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 608fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 609fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(Color.GRAY); 610fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.GRAY), mTextView.getLinkTextColors()); 611fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.GRAY, mTextView.getPaint().linkColor); 612fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 613fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(Color.YELLOW); 614fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.YELLOW), mTextView.getLinkTextColors()); 615fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.YELLOW, mTextView.getPaint().linkColor); 616fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 617fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(Color.WHITE); 618fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(ColorStateList.valueOf(Color.WHITE), mTextView.getLinkTextColors()); 619fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.WHITE, mTextView.getPaint().linkColor); 620fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 621fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ColorStateList colors = new ColorStateList(new int[][] { 622fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { android.R.attr.state_expanded}, new int[0] }, 623fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new int[] { Color.rgb(0, 255, 0), Color.BLACK }); 624fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(colors); 625fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(colors, mTextView.getLinkTextColors()); 626fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getPaint().linkColor); 627fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 628fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLinkTextColor(null); 629fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getLinkTextColors()); 630fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Color.BLACK, mTextView.getPaint().linkColor); 631fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 632fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 633fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessPaintFlags() { 634fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 63553959f211c113aa7b2a2ebaf80e10b79ddcccef1Victoria Lease assertEquals(Paint.DEV_KERN_TEXT_FLAG | Paint.EMBEDDED_BITMAP_TEXT_FLAG 63653959f211c113aa7b2a2ebaf80e10b79ddcccef1Victoria Lease | Paint.ANTI_ALIAS_FLAG, mTextView.getPaintFlags()); 637fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 638fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG | Paint.FAKE_BOLD_TEXT_FLAG); 639fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Paint.UNDERLINE_TEXT_FLAG | Paint.FAKE_BOLD_TEXT_FLAG, 640fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getPaintFlags()); 641fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 642fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.LINEAR_TEXT_FLAG); 643fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Paint.STRIKE_THRU_TEXT_FLAG | Paint.LINEAR_TEXT_FLAG, 644fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getPaintFlags()); 645fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 646fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 647fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testHeightAndWidth() { 648fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 649fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 650fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 3); 651fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalHeight = mTextView.getHeight(); 652fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 653fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(originalHeight + 1); 654fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 655fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 656fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(originalHeight - 1); 657fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight - 1, mTextView.getHeight()); 658fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 659fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(-1); 660fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getHeight()); 661fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 662fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(Integer.MAX_VALUE); 663fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 664fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 665fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(originalHeight + 1); 666fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight + 1, mTextView.getHeight()); 667fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 668fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(originalHeight - 1); 669fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 670fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 671fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(-1); 672fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 673fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 674fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinHeight(0); 675fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxHeight(Integer.MAX_VALUE); 676fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 677fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(originalHeight + 1); 678fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight + 1, mTextView.getHeight()); 679fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 680fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(originalHeight - 1); 681fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight - 1, mTextView.getHeight()); 682fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 683fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(-1); 684fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getHeight()); 685fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 686fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHeight(originalHeight); 687fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalHeight, mTextView.getHeight()); 688fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 689fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth >> 3, mTextView.getWidth()); 690fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 691fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Min Width 692fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinWidth(originalWidth + 1); 693fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 694fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth + 1, mTextView.getWidth()); 695fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 696fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinWidth(originalWidth - 1); 6979c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu assertEquals(2, mTextView.getLineCount()); 6989c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu assertEquals(originalWidth - 1, mTextView.getWidth()); 699fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 700fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Width 701fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(originalWidth + 1); 702fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 703fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth + 1, mTextView.getWidth()); 704fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 705fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(originalWidth - 1); 7069c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu assertEquals(2, mTextView.getLineCount()); 707fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth - 1, mTextView.getWidth()); 708fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 709fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 710fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMinEms() { 711fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 712fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 7139c3b459233e30a88d24e7178cc7514731fa56f55Brian Muramatsu 714fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 715fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalEms = originalWidth / mTextView.getLineHeight(); 716fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 717fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinEms(originalEms + 1); 718fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms + 1) * mTextView.getLineHeight(), mTextView.getWidth()); 719fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 720fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinEms(originalEms - 1); 721fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth, mTextView.getWidth()); 722fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 723fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 724fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMaxEms() { 725fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 726fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 727fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 728fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalEms = originalWidth / mTextView.getLineHeight(); 729fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 730fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxEms(originalEms + 1); 731fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 732fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(originalWidth, mTextView.getWidth()); 733fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 734fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxEms(originalEms - 1); 735fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(1 < mTextView.getLineCount()); 736fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms - 1) * mTextView.getLineHeight(), 737fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getWidth()); 738fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 739fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 740fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetEms() { 741fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 742fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("check height", 1, mTextView.getLineCount()); 743fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalWidth = mTextView.getWidth(); 744fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalEms = originalWidth / mTextView.getLineHeight(); 745fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 746fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setEms(originalEms + 1); 747fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 748fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms + 1) * mTextView.getLineHeight(), 749fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getWidth()); 750fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 751fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setEms(originalEms - 1); 752fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((1 < mTextView.getLineCount())); 753fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals((originalEms - 1) * mTextView.getLineHeight(), 754fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getWidth()); 755fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 756fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 757fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetLineSpacing() { 758fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 759fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalLineHeight = mTextView.getLineHeight(); 760fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 761fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // normal 762fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float add = 1.2f; 763fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float mult = 1.4f; 764fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 765fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 766fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = 0.0f; 767fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = 1.4f; 768fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 769fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 770fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 771fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // abnormal 772fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = -1.2f; 773fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = 1.4f; 774fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 775fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 776fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = -1.2f; 777fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = -1.4f; 778fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 779fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 780fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = 1.2f; 781fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = 0.0f; 782fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 783fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(originalLineHeight * mult + add), mTextView.getLineHeight()); 784fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 785fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // edge 786fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = Float.MIN_VALUE; 787fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = Float.MIN_VALUE; 788fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 789fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float expected = originalLineHeight * mult + add; 790fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(expected), mTextView.getLineHeight()); 791fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su add = Float.MAX_VALUE; 792fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mult = Float.MAX_VALUE; 793fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLineSpacing(add, mult); 794fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su expected = originalLineHeight * mult + add; 795fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(FastMath.round(expected), mTextView.getLineHeight()); 796fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 797fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 798fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testInstanceState() { 799fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 800fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 801fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 802fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessFreezesText() throws Throwable { 803fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(R.layout.textview_hint_linksclickable_freezestext); 804fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 805fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_linksClickable_freezesText_default); 806fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getFreezesText()); 807fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 808fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_true); 809fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getFreezesText()); 810fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 811fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_false); 812fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getFreezesText()); 813fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 814fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFreezesText(false); 815fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getFreezesText()); 816fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 817fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final CharSequence text = "Hello, TextView."; 818fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 819fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 820fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 821fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 822fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 823fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 824fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 825fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final URLSpan urlSpan = new URLSpan("ctstest://TextView/test"); 82672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // TODO: How to simulate the TextView in frozen icicles. 827fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Instrumentation instrumentation = getInstrumentation(); 828fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ActivityMonitor am = instrumentation.addMonitor(MockURLSpanTestActivity.class.getName(), 829fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su null, false); 830fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 831fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 832fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 833fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Uri uri = Uri.parse(urlSpan.getURL()); 834fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Intent intent = new Intent(Intent.ACTION_VIEW, uri); 835fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.startActivity(intent); 836fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 837fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 838fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 839fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Activity newActivity = am.waitForActivityWithTimeout(TIMEOUT); 840fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(newActivity); 841fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su newActivity.finish(); 84272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach instrumentation.removeMonitor(am); 843fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text of TextView is removed. 844fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_false); 84572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 84672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(text.toString(), mTextView.getText().toString()); 847fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 848fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFreezesText(true); 849fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getFreezesText()); 850fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 851fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 852fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 853fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 854fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 855fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 856fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 85772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // TODO: How to simulate the TextView in frozen icicles. 858fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su am = instrumentation.addMonitor(MockURLSpanTestActivity.class.getName(), 859fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su null, false); 860fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 861fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 862fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 863fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Uri uri = Uri.parse(urlSpan.getURL()); 864fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Intent intent = new Intent(Intent.ACTION_VIEW, uri); 865fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.startActivity(intent); 866fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 867fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 868fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 86907b9d3406e116f2f6b92932925783eed79503de0Mist Liao Activity oldActivity = newActivity; 87007b9d3406e116f2f6b92932925783eed79503de0Mist Liao while (true) { 87107b9d3406e116f2f6b92932925783eed79503de0Mist Liao newActivity = am.waitForActivityWithTimeout(TIMEOUT); 87207b9d3406e116f2f6b92932925783eed79503de0Mist Liao assertNotNull(newActivity); 87307b9d3406e116f2f6b92932925783eed79503de0Mist Liao if (newActivity != oldActivity) { 87407b9d3406e116f2f6b92932925783eed79503de0Mist Liao break; 87507b9d3406e116f2f6b92932925783eed79503de0Mist Liao } 87607b9d3406e116f2f6b92932925783eed79503de0Mist Liao } 877fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su newActivity.finish(); 87872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach instrumentation.removeMonitor(am); 879fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text of TextView is still there. 880fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.freezesText_false); 881fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text.toString(), mTextView.getText().toString()); 882fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 883fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 884fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetEditableFactory() { 885fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 886fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "sample"; 887fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockEditableFactory factory = new MockEditableFactory(); 888fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEditableFactory(factory); 889fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 890fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 891fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 892fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(factory.hasCalledNewEditable()); 893fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 894fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 895fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.SPANNABLE); 896fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(factory.hasCalledNewEditable()); 897fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 898fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 899fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.NORMAL); 900fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(factory.hasCalledNewEditable()); 901fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 902fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 903fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 904fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(factory.hasCalledNewEditable()); 905fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 906fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 907fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(DigitsKeyListener.getInstance()); 908fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 909fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 910fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(factory.hasCalledNewEditable()); 911fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 912fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 913fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 914fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEditableFactory(null); 915fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("The factory can not set to null!"); 916fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 917fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 918fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 919fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 920fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetSpannableFactory() { 921fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 922fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "sample"; 923fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockSpannableFactory factory = new MockSpannableFactory(); 924fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSpannableFactory(factory); 925fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 926fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 927fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 928e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertFalse(factory.hasCalledNewSpannable()); 929fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 930fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 931fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.EDITABLE); 932e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertFalse(factory.hasCalledNewSpannable()); 933fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 934fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 935fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.NORMAL); 936e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertFalse(factory.hasCalledNewSpannable()); 937fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 938fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 939fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.SPANNABLE); 940e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertTrue(factory.hasCalledNewSpannable()); 941fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 942fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 943fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMovementMethod(LinkMovementMethod.getInstance()); 944fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su factory.reset(); 945fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.NORMAL); 946e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne assertTrue(factory.hasCalledNewSpannable()); 947fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, factory.getSource()); 948fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 949fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 950fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSpannableFactory(null); 951fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("The factory can not set to null!"); 952fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 953fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 954fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 955fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 956fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testTextChangedListener() { 957fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 958fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextWatcher watcher0 = new MockTextWatcher(); 959fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextWatcher watcher1 = new MockTextWatcher(); 960fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 961fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.addTextChangedListener(watcher0); 962fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.addTextChangedListener(watcher1); 963fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 964fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 965fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 966fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Changed"); 967fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 968fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 969fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 970fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledBeforeTextChanged()); 971fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledOnTextChanged()); 972fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledAfterTextChanged()); 973fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 974fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 975fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 976fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // BeforeTextChanged and OnTextChanged are called though the strings are same 977fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Changed"); 978fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 979fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 980fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 981fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledBeforeTextChanged()); 982fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledOnTextChanged()); 983fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledAfterTextChanged()); 984fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 985fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 986fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 987fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // BeforeTextChanged and OnTextChanged are called twice (The text is not 988fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Editable, so in Append() it calls setText() first) 989fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("and appended"); 990fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 991fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 992fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 993fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledBeforeTextChanged()); 994fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledOnTextChanged()); 995fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher1.hasCalledAfterTextChanged()); 996fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 997fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 998fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 999fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Methods are not called if the string does not change 1000fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append(""); 1001fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher0.hasCalledBeforeTextChanged()); 1002fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher0.hasCalledOnTextChanged()); 1003fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher0.hasCalledAfterTextChanged()); 1004fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledBeforeTextChanged()); 1005fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledOnTextChanged()); 1006fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledAfterTextChanged()); 1007fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1008fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher0.reset(); 1009fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su watcher1.reset(); 1010fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.removeTextChangedListener(watcher1); 1011fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(null); 1012fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledBeforeTextChanged()); 1013fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledOnTextChanged()); 1014fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(watcher0.hasCalledAfterTextChanged()); 1015fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledBeforeTextChanged()); 1016fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledOnTextChanged()); 1017fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(watcher1.hasCalledAfterTextChanged()); 1018fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1019fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1020fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetTextKeepState1() { 1021fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1022fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1023fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String longString = "very long content"; 1024fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String shortString = "short"; 1025fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1026fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is inside the short string 1027fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString, BufferType.SPANNABLE); 1028fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 3); 1029fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1030fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1031fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionStart()); 1032fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionEnd()); 1033fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1034fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is outside the short string 1035fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1036fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), shortString.length() + 1); 1037fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1038fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1039fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1040fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1041fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1042fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which is inside the short string 1043fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1044fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1, 4); 1045fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1046fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1047fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getSelectionStart()); 1048fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(4, mTextView.getSelectionEnd()); 1049fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1050fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which ends outside the short string 1051fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1052fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 2, shortString.length() + 1); 1053fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1054fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1055fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, mTextView.getSelectionStart()); 1056fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1057fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1058fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // select the sub string which is outside the short string 1059fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1060fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1061fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su shortString.length() + 1, shortString.length() + 3); 1062fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString); 1063fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1064fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1065fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1066fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1067fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1068fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1069fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetEditableText() { 1070fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1071fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1072fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "Hello"; 1073fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(text, BufferType.EDITABLE); 1074fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, tv.getText().toString()); 1075fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Editable); 1076fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, tv.getEditableText().toString()); 1077fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1078fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(text, BufferType.SPANNABLE); 1079fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text, tv.getText().toString()); 1080fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Spannable); 1081fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(tv.getEditableText()); 1082fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1083fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(null, BufferType.EDITABLE); 1084fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 1085fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Editable); 1086fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getEditableText().toString()); 1087fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1088fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(null, BufferType.SPANNABLE); 1089fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 1090fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Spannable); 1091fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(tv.getEditableText()); 1092fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1093fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1094fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1095fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText2() { 1096fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String string = "This is a test for setting text content by char array"; 1097fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su char[] input = string.toCharArray(); 1098fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1099fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1100fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 0, input.length); 1101fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(string, tv.getText().toString()); 1102fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1103fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 0, 5); 1104fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(string.substring(0, 5), tv.getText().toString()); 1105fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1107fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, -1, input.length); 1108fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if the start position is negative!"); 1109fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IndexOutOfBoundsException exception) { 1110fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1111fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1112fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1113fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 0, -1); 1114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if the length is negative!"); 1115fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IndexOutOfBoundsException exception) { 1116fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1118fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 1, input.length); 1120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if the end position is out of index!"); 1121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IndexOutOfBoundsException exception) { 1122fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1123fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1124fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(input, 1, 0); 1125fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", tv.getText().toString()); 1126fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1127fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1128fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1129fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText1() { 1130fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1132fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String longString = "very long content"; 1133fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String shortString = "short"; 1134fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1135fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is inside the short string 1136fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString, BufferType.SPANNABLE); 1137fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 3); 1138fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1139fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1140fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1141fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1142fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionStart()); 1143fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(3, mTextView.getSelectionEnd()); 1144fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1145fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1146fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1147fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1148fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // selection is at the exact place which is outside the short string 1154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), longString.length()); 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(shortString.length(), mTextView.getSelectionStart()); 1161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), 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 // select the sub string which is inside the short string 1172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1, shortString.length() - 1); 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(1, mTextView.getSelectionStart()); 1179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length() - 1, 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 ends outside the short string 1190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 2, longString.length()); 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(2, mTextView.getSelectionStart()); 1197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), 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 is outside the short string 1208fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(longString); 1209fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), 1210fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su shortString.length() + 1, shortString.length() + 3); 1211fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextKeepState(shortString, BufferType.EDITABLE); 1212fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1213fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1214fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1215fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionStart()); 1216fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString.length(), mTextView.getSelectionEnd()); 1217fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1218fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(shortString, BufferType.EDITABLE); 1219fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1220fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getText().toString()); 1221fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(shortString, mTextView.getEditableText().toString()); 1222fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no selection. 1223fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionStart()); 1224fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getSelectionEnd()); 1225fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1226fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1227fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1228fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText3() { 1229fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1230fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1231fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int resId = R.string.text_view_hint; 1232fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String result = mActivity.getResources().getString(resId); 1233fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1234fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(resId); 1235fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(result, tv.getText().toString()); 1236fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1237fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(-1); 1239fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception with illegal id"); 1240fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NotFoundException e) { 1241fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1242fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1243fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1244fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1245fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetText() { 1246fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView tv = findTextView(R.id.textview_text); 1247fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1248fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int resId = R.string.text_view_hint; 1249fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String result = mActivity.getResources().getString(resId); 1250fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1251fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(resId, BufferType.EDITABLE); 1252fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(result, tv.getText().toString()); 1253fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Editable); 1254fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1255fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(resId, BufferType.SPANNABLE); 1256fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(result, tv.getText().toString()); 1257fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(tv.getText() instanceof Spannable); 1258fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1259fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1260fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(-1, BufferType.EDITABLE); 1261fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception with illegal id"); 1262fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NotFoundException e) { 1263fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1264fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1265fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1266fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1267fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessHint() { 1268fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_hint_linksclickable_freezestext); 1269fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1270fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_linksClickable_freezesText_default); 1271fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getHint()); 1272fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1273fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_blank); 1274fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", mTextView.getHint()); 1275fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1276fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_string); 1277fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getString(R.string.text_view_simple_hint), 1278fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHint()); 1279fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1280fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.hint_resid); 1281fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getString(R.string.text_view_hint), 1282fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHint()); 1283fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1284fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHint("This is hint"); 1285fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("This is hint", mTextView.getHint().toString()); 1286fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1287fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHint(R.string.text_view_hello); 1288fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getString(R.string.text_view_hello), 1289fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHint().toString()); 1290fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1291fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Non-exist resid 1292fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1293fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHint(-1); 1294fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw exception if id is illegal"); 1295fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NotFoundException e) { 1296fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1297fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1298fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1299fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessError() { 1300fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1301fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1302fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 130353b55f734fb3cf52df49a79cf76d410a77fbe8f5Craig Mautner final String errorText = "Oops! There is an error"; 1304fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1305fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1306fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1307fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(null); 1308fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1309fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1310fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1311fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1312fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 13139776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable icon = getDrawable(R.drawable.failed); 1314fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1315fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1316fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(errorText, icon); 1317fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1318fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1319fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1320fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(errorText, mTextView.getError().toString()); 1321fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // can not check whether the drawable is set correctly 1322fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1323fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1324fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1325fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(null, null); 1326fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1327fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1328fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1329fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1330fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1331fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1332fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1333300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setKeyListener(DigitsKeyListener.getInstance("")); 1334fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("", BufferType.EDITABLE); 1335fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setError(errorText); 1336fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 1337fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1338fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1339fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1340fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1341fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(errorText, mTextView.getError().toString()); 1342fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1343dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("a"); 1344fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // a key event that will not change the TextView's text 1345fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("", mTextView.getText().toString()); 1346fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // The icon and error message will not be reset to null 134753b55f734fb3cf52df49a79cf76d410a77fbe8f5Craig Mautner assertEquals(errorText, mTextView.getError().toString()); 1348fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1349300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mActivity.runOnUiThread(new Runnable() { 1350300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu public void run() { 1351300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setKeyListener(DigitsKeyListener.getInstance()); 1352300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setText("", BufferType.EDITABLE); 1353300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.setError(errorText); 1354300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mTextView.requestFocus(); 1355300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu } 1356300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu }); 1357300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu mInstrumentation.waitForIdleSync(); 1358300d755fcaa7274f1570f53d34c7a657bc420ab6Brian Muramatsu 1359dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("1"); 1360fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // a key event cause changes to the TextView's text 1361fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("1", mTextView.getText().toString()); 1362fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the error message and icon will be cleared. 1363fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getError()); 1364fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1365fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1366fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessFilters() { 1367fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final InputFilter[] expected = { new InputFilter.AllCaps(), 1368fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su new InputFilter.LengthFilter(2) }; 1369fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1370fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final QwertyKeyListener qwertyKeyListener 1371fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su = QwertyKeyListener.getInstance(false, Capitalize.NONE); 1372fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1373fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1374fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1375fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(qwertyKeyListener); 1376fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("", BufferType.EDITABLE); 1377fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFilters(expected); 1378fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 1379fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1380fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1381fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1382fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1383fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(expected, mTextView.getFilters()); 1384fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1385dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("a"); 1386fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text is capitalized by InputFilter.AllCaps 1387fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("A", mTextView.getText().toString()); 1388dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("b"); 1389fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the text is capitalized by InputFilter.AllCaps 1390fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("AB", mTextView.getText().toString()); 1391dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("c"); 1392fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 'C' could not be accepted, because there is a length filter. 1393fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("AB", mTextView.getText().toString()); 1394fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1395fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1396fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setFilters(null); 1397fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw IllegalArgumentException!"); 1398fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (IllegalArgumentException e) { 1399fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1400fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1401fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1402fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetFocusedRect() { 1403fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Rect rc = new Rect(); 1404fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1405fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio // Basic 1406fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1407fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(rc); 1408fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX(), rc.left); 1409fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX() + mTextView.getWidth(), rc.right); 1410fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY(), rc.top); 1411fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY() + mTextView.getHeight(), rc.bottom); 1412fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1413fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio // Single line 1414fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1415fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(rc); 1416fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX(), rc.left); 1417fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollX() + mTextView.getWidth(), rc.right); 1418fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY(), rc.top); 1419fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getScrollY() + mTextView.getHeight(), rc.bottom); 1420fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1421fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1422fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1423fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setSelected(true); 1424fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su SpannableString text = new SpannableString(mTextView.getText()); 1425fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection(text, 3, 13); 1426fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text); 1427fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1428fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1429fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1430fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(rc); 1431fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView.getLayout()); 1432fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien /* Cursor coordinates from getPrimaryHorizontal() may have a fractional 1433fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * component, while the result of getFocusedRect is in int coordinates. 1434fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * It's not practical for these to match exactly, so we compare that the 1435fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * integer components match - there can be a fractional pixel 1436fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien * discrepancy, which should be okay for all practical applications. */ 1437fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(3), rc.left); 1438fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(13), rc.right); 1439fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1440fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(0), rc.bottom); 1441fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1442fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mActivity.runOnUiThread(new Runnable() { 1443fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio public void run() { 1444fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setSelected(true); 1445fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio SpannableString text = new SpannableString(mTextView.getText()); 1446fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Selection.setSelection(text, 13, 3); 1447fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setText(text); 1448fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio } 1449fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio }); 1450fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mInstrumentation.waitForIdleSync(); 1451fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1452fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertNotNull(mTextView.getLayout()); 1453fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(3) - 2, rc.left); 1454fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(3) + 2, rc.right); 1455fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1456fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(0), rc.bottom); 1457fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1458fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio // Multi lines 1459fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView = findTextView(R.id.textview_text_two_lines); 1460fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1461fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollX(), rc.left); 1462fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollX() + mTextView.getWidth(), rc.right); 1463fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollY(), rc.top); 1464fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getScrollY() + mTextView.getHeight(), rc.bottom); 1465fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1466fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mActivity.runOnUiThread(new Runnable() { 1467fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio public void run() { 1468fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setSelected(true); 1469fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio SpannableString text = new SpannableString(mTextView.getText()); 1470fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Selection.setSelection(text, 2, 4); 1471fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setText(text); 1472fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio } 1473fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio }); 1474fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mInstrumentation.waitForIdleSync(); 1475fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1476fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertNotNull(mTextView.getLayout()); 1477fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(2), rc.left); 1478fe2fb182b7998f5384f78a6956962966b10b5699Raph Levien assertEquals((int) mTextView.getLayout().getPrimaryHorizontal(4), rc.right); 1479fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1480fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(0), rc.bottom); 1481fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio 1482fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mActivity.runOnUiThread(new Runnable() { 1483fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio public void run() { 1484fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setSelected(true); 1485fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio SpannableString text = new SpannableString(mTextView.getText()); 1486fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Selection.setSelection(text, 2, 10); // cross the "\n" and two lines 1487fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.setText(text); 1488fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio } 1489fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio }); 1490fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mInstrumentation.waitForIdleSync(); 1491fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getFocusedRect(rc); 1492fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio Path path = new Path(); 1493fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio mTextView.getLayout().getSelectionPath(2, 10, path); 1494fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio RectF rcf = new RectF(); 1495fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio path.computeBounds(rcf, true); 1496fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertNotNull(mTextView.getLayout()); 1497fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(rcf.left - 1, (float) rc.left); 1498fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(rcf.right + 1, (float) rc.right); 1499fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getLayout().getLineTop(0), rc.top); 1500fb0961aa68799b42121f3d8cac094b341c2f9084Fabrice Di Meglio assertEquals(mTextView.getLayout().getLineBottom(1), rc.bottom); 1501fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1502fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Exception 1503fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1504fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getFocusedRect(null); 1505fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw NullPointerException!"); 1506fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 1507fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1508fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1509fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1510fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLineCount() { 1511fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1512fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // this is an one line text with default setting. 1513fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 1514fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1515fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make it multi-lines 1516fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxWidth(mTextView.getWidth() / 3); 1517fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(1 < mTextView.getLineCount()); 1518fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1519fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make it to an one line 1520fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMaxWidth(Integer.MAX_VALUE); 1521fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 1522fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1523fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set min lines don't effect the lines count for actual text. 1524fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinLines(12); 1525fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 1526fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1527fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1528fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the internal Layout has not been built. 1529fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getLayout()); 1530fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getLineCount()); 1531fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1532fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1533fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetLineBounds() { 1534fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Rect rc = new Rect(); 1535fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1536fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getLineBounds(0, null)); 1537fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1538fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getLineBounds(0, rc)); 1539fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.left); 1540fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.right); 1541fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.top); 1542fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.bottom); 1543fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1544fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1545fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getBaseline(), mTextView.getLineBounds(0, null)); 1546fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1547fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getBaseline(), mTextView.getLineBounds(0, rc)); 1548fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.left); 1549fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getWidth(), rc.right); 1550fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, rc.top); 1551fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getHeight(), rc.bottom); 1552fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1553fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1554fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1555fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(1, 2, 3, 4); 1556fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 1557fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1558fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1559fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1560fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getBaseline(), mTextView.getLineBounds(0, rc)); 1561fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getTotalPaddingLeft(), rc.left); 1562fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getWidth() - mTextView.getTotalPaddingRight(), rc.right); 1563fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getTotalPaddingTop(), rc.top); 1564fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getHeight() - mTextView.getTotalPaddingBottom(), rc.bottom); 1565fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1566fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1567fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetBaseLine() { 1568fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1569fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, mTextView.getBaseline()); 1570fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1571fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1572fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getLayout().getLineBaseline(0), mTextView.getBaseline()); 1573fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1574fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1575fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1576fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(1, 2, 3, 4); 1577fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 1578fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1579fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1580fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1581fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int expected = mTextView.getTotalPaddingTop() + mTextView.getLayout().getLineBaseline(0); 1582fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, mTextView.getBaseline()); 1583fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1584fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1585fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testPressKey() { 1586fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final QwertyKeyListener qwertyKeyListener 1587fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su = QwertyKeyListener.getInstance(false, Capitalize.NONE); 1588fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1589fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1590fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1591fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(qwertyKeyListener); 1592fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("", BufferType.EDITABLE); 1593fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 1594fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1595fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1596fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1597fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1598dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("a"); 1599fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("a", mTextView.getText().toString()); 1600dc4fcb2f0b734c9e5ca03a97429bf3bd9b189abaBrian Muramatsu mInstrumentation.sendStringSync("b"); 1601fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("ab", mTextView.getText().toString()); 1602fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys(KeyEvent.KEYCODE_DEL); 1603fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("a", mTextView.getText().toString()); 1604fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1605fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1606fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetIncludeFontPadding() { 1607fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1608fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1609fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1610fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(mTextView.getWidth() / 3); 1611fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(1, 2, 3, 4); 1612fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 1613fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1614fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1615fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1616fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1617fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int oldHeight = mTextView.getHeight(); 1618fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1619fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1620fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setIncludeFontPadding(false); 1621fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1622fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1623fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1624fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1625fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getHeight() < oldHeight); 1626fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1627fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1628fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testScroll() { 1629fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1630fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1631fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollX()); 1632fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollY()); 1633fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1634fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //don't set the Scroller, nothing changed. 1635fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.computeScroll(); 1636fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollX()); 1637fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getScrollY()); 1638fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1639fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //set the Scroller 1640fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Scroller s = new Scroller(mActivity); 1641fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(s); 1642fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su s.startScroll(0, 0, 320, 480, 0); 1643fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su s.abortAnimation(); 1644fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su s.forceFinished(false); 1645fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setScroller(s); 1646fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1647fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.computeScroll(); 1648fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(320, mTextView.getScrollX()); 1649fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(480, mTextView.getScrollY()); 1650fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1651fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1652fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testDebug() { 1653fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1654fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.debug(0); 1655fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1656fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("Hello!"); 1657fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(mTextView); 1658fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.debug(1); 1659fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1660fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1661fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSelection() { 1662fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1663fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String text = "This is the content"; 1664fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(text, BufferType.SPANNABLE); 1665fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.hasSelection()); 1666fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1667fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.selectAll((Spannable) mTextView.getText()); 1668fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getSelectionStart()); 1669fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(text.length(), mTextView.getSelectionEnd()); 1670fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.hasSelection()); 1671fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1672fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int selectionStart = 5; 1673fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int selectionEnd = 7; 1674fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), selectionStart); 1675fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, mTextView.getSelectionStart()); 1676fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, mTextView.getSelectionEnd()); 1677fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.hasSelection()); 1678fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1679fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Selection.setSelection((Spannable) mTextView.getText(), selectionStart, selectionEnd); 1680fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionStart, mTextView.getSelectionStart()); 1681fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(selectionEnd, mTextView.getSelectionEnd()); 1682fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.hasSelection()); 1683fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1684fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1685fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1686fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessEllipsize() { 1687fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(R.layout.textview_ellipsize); 1688fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1689fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_default); 1690fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getEllipsize()); 1691fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1692fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_none); 1693fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getEllipsize()); 1694fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1695fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_start); 1696fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TruncateAt.START, mTextView.getEllipsize()); 1697fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1698fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_middle); 1699fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TruncateAt.MIDDLE, mTextView.getEllipsize()); 1700fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1701fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.ellipsize_end); 1702fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TruncateAt.END, mTextView.getEllipsize()); 1703fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1704fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.START); 1705fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.START, mTextView.getEllipsize()); 1706fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1707fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.MIDDLE); 1708fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.MIDDLE, mTextView.getEllipsize()); 1709fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1710fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.END); 1711fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.END, mTextView.getEllipsize()); 1712fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1713fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(null); 1714fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getEllipsize()); 1715fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1716fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(10); 1717fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEllipsize(TextUtils.TruncateAt.START); 1718fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("ThisIsAVeryLongVeryLongVeryLongVeryLongVeryLongWord"); 1719fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.invalidate(); 1720fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1721fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(TextUtils.TruncateAt.START, mTextView.getEllipsize()); 1722fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no method to check if '...yLongVeryLongWord' is painted in the screen. 1723fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1724fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1725fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetCursorVisible() { 1726fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1727fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1728fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCursorVisible(true); 1729fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCursorVisible(false); 1730fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1731fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1732fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnWindowFocusChanged() { 1733fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 1734fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1735fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1736fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnTouchEvent() { 1737fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 1738fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1739fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1740fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnTrackballEvent() { 1741fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 1742fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1743fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1744fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTextColors() { 1745fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // TODO: How to get a suitable TypedArray to test this method. 1746fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1747fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1748fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnKeyShortcut() { 1749fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 1750fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1751fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1752fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1753fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testPerformLongClick() { 1754fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 1755fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText("This is content"); 1756fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnLongClickListener onLongClickListener = new MockOnLongClickListener(true); 1757fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnCreateContextMenuListener onCreateContextMenuListener 1758fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su = new MockOnCreateContextMenuListener(false); 1759fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnLongClickListener(onLongClickListener); 1760fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnCreateContextMenuListener(onCreateContextMenuListener); 1761fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.performLongClick()); 1762fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onLongClickListener.hasLongClicked()); 1763fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(onCreateContextMenuListener.hasCreatedContextMenu()); 1764fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1765fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su onLongClickListener = new MockOnLongClickListener(false); 1766fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnLongClickListener(onLongClickListener); 1767fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnCreateContextMenuListener(onCreateContextMenuListener); 1768fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.performLongClick()); 1769fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onLongClickListener.hasLongClicked()); 1770fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onCreateContextMenuListener.hasCreatedContextMenu()); 1771fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1772fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnLongClickListener(null); 1773fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su onCreateContextMenuListener = new MockOnCreateContextMenuListener(true); 1774fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setOnCreateContextMenuListener(onCreateContextMenuListener); 1775fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.performLongClick()); 1776fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(onCreateContextMenuListener.hasCreatedContextMenu()); 1777fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1778fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1779fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1780fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testTextAttr() { 1781fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_textAttr); 1782fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getText 1783fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getString(R.string.text_view_hello), mTextView.getText().toString()); 1784fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1785fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getCurrentTextColor 1786fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.black), 1787fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentTextColor()); 1788fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.red), 1789fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentHintTextColor()); 1790fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.red), 1791fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getHintTextColors().getDefaultColor()); 1792fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.blue), 1793fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getLinkTextColors().getDefaultColor()); 1794fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1795fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getTextScaleX 1796fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1.2f, mTextView.getTextScaleX(), 0.01f); 1797fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1798fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // setTextScaleX 1799fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextScaleX(2.4f); 1800fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2.4f, mTextView.getTextScaleX(), 0.01f); 1801fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1802fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextScaleX(0f); 1803fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0f, mTextView.getTextScaleX(), 0.01f); 1804fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1805fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextScaleX(- 2.4f); 1806fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(- 2.4f, mTextView.getTextScaleX(), 0.01f); 1807fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1808fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getTextSize 1809fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(20f, mTextView.getTextSize(), 0.01f); 1810fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1811fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // getTypeface 1812119351956fc53fdd61bfbfb0d1ab43857cf7a6d7Peter Eliasson // getTypeface will be null if android:typeface is set to normal, 1813c02a9f453c5c1255d668bbd8970f4585ab5ff494Alan Viverette // and android:style is not set or is set to normal, and 1814c02a9f453c5c1255d668bbd8970f4585ab5ff494Alan Viverette // android:fontFamily is not set 1815fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getTypeface()); 1816fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1817fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(Typeface.DEFAULT); 1818fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(Typeface.DEFAULT, mTextView.getTypeface()); 1819fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // null type face 1820fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(null); 1821fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getTypeface()); 1822fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1823fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // default type face, bold style, note: the type face will be changed 1824fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // after call set method 1825fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(Typeface.DEFAULT, Typeface.BOLD); 1826fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(Typeface.BOLD, mTextView.getTypeface().getStyle()); 1827fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1828fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // null type face, BOLD style 1829fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(null, Typeface.BOLD); 1830fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(Typeface.BOLD, mTextView.getTypeface().getStyle()); 1831fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1832fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // old type face, null style 1833fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTypeface(Typeface.DEFAULT, 0); 1834fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Typeface.NORMAL, mTextView.getTypeface().getStyle()); 1835fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1836fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1837fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1838fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAppend() { 1839fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1840fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1841fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 1: check the original length, should be blank as initialised. 1842fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getText().length()); 1843fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1844fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 2: append a string use append(CharSquence) into the original blank 1845fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // buffer, check the content. And upgrading it to BufferType.EDITABLE if it was 1846fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // not already editable. 1847fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(mTextView.getText() instanceof Editable); 1848fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append."); 1849fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("Append.", mTextView.getText().toString()); 1850fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1851fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1852fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 3: append a string from 0~3. 1853fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", 0, 3); 1854fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("Append.App", mTextView.getText().toString()); 1855fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1856fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1857fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 4: append a string from 0~0, nothing will be append as expected. 1858fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", 0, 0); 1859fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals("Append.App", mTextView.getText().toString()); 1860fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getText() instanceof Editable); 1861fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1862fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 5: append a string from -3~3. check the wrong left edge. 1863fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1864fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", -3, 3); 1865fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw StringIndexOutOfBoundsException"); 1866fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (StringIndexOutOfBoundsException e) { 1867fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1868fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1869fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 6: append a string from 3~10. check the wrong right edge. 1870fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1871fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append("Append", 3, 10); 1872fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw StringIndexOutOfBoundsException"); 1873fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (StringIndexOutOfBoundsException e) { 1874fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1875fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1876fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // 7: append a null string. 1877fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 1878fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append(null); 1879fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw NullPointerException"); 1880fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 1881fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1882fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1883fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1884fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessTransformationMethod() { 1885fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check the password attribute in xml 1886fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_password); 1887fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView); 1888fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(PasswordTransformationMethod.getInstance(), 1889fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTransformationMethod()); 1890fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1891fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check the singleLine attribute in xml 1892fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_singleLine); 1893fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(mTextView); 1894fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(SingleLineTransformationMethod.getInstance(), 1895fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTransformationMethod()); 1896fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1897fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final QwertyKeyListener qwertyKeyListener = QwertyKeyListener.getInstance(false, 1898fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Capitalize.NONE); 1899fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final TransformationMethod method = PasswordTransformationMethod.getInstance(); 1900fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // change transformation method by function 1901fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1902fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1903fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setKeyListener(qwertyKeyListener); 1904fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTransformationMethod(method); 190522d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root mTransformedText = method.getTransformation(mTextView.getText(), mTextView); 1906fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1907fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestFocus(); 1908fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1909fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1910fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1911fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(PasswordTransformationMethod.getInstance(), 1912fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getTransformationMethod()); 1913fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1914fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su sendKeys("H E 2*L O"); 1915fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1916fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1917fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.append(" "); 1918fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1919fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1920fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1921fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1922fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // it will get transformed after a while 19230162547f44173f0604d8a80143c128d9892460a1Kristian Monsen new PollingCheck(TIMEOUT) { 1924fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 1925fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected boolean check() { 1926fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // "******" 192722d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root return mTransformedText.toString() 192822d40a1fcc078329a7e5a34ff5eeadeca9c70d49Kenny Root .equals("\u2022\u2022\u2022\u2022\u2022\u2022"); 1929fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1930fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }.run(); 1931fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1932fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set null 1933fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 1934fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 1935fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTransformationMethod(null); 1936fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1937fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 1938fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 1939fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(mTextView.getTransformationMethod()); 1940fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 1941fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1942fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 1943fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testCompound() { 1944fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 1945fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int padding = 3; 1946fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Drawable[] drawables = mTextView.getCompoundDrawables(); 1947fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[0]); 1948fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[1]); 1949fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[2]); 1950fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 1951fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1952fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test setCompoundDrawablePadding and getCompoundDrawablePadding 1953fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawablePadding(padding); 1954fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(padding, mTextView.getCompoundDrawablePadding()); 1955fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1956fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using resid, 0 represents null 1957fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawablesWithIntrinsicBounds(R.drawable.start, R.drawable.pass, 1958fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su R.drawable.failed, 0); 1959fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su drawables = mTextView.getCompoundDrawables(); 1960fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1961fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableLeft 1962fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su WidgetTestUtils.assertEquals(getBitmap(R.drawable.start), 1963fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ((BitmapDrawable) drawables[0]).getBitmap()); 1964fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableTop 1965fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su WidgetTestUtils.assertEquals(getBitmap(R.drawable.pass), 1966fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ((BitmapDrawable) drawables[1]).getBitmap()); 1967fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableRight 1968fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su WidgetTestUtils.assertEquals(getBitmap(R.drawable.failed), 1969fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su ((BitmapDrawable) drawables[2]).getBitmap()); 1970fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableBottom 1971fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 1972fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 19739776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable left = getDrawable(R.drawable.blue); 19749776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable right = getDrawable(R.drawable.yellow); 19759776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable top = getDrawable(R.drawable.red); 1976fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1977fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // using drawables directly 1978fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawablesWithIntrinsicBounds(left, top, right, null); 1979fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su drawables = mTextView.getCompoundDrawables(); 1980fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1981fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableLeft 1982fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(left, drawables[0]); 1983fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableTop 1984fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(top, drawables[1]); 1985fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableRight 1986fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(right, drawables[2]); 1987fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableBottom 1988fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 1989fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1990fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check compound padding 1991fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingLeft() + padding + left.getIntrinsicWidth(), 1992fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingLeft()); 1993fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingTop() + padding + top.getIntrinsicHeight(), 1994fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingTop()); 1995fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingRight() + padding + right.getIntrinsicWidth(), 1996fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingRight()); 1997fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingBottom(), mTextView.getCompoundPaddingBottom()); 1998fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 1999fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set bounds to drawables and set them again. 2000fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su left.setBounds(0, 0, 1, 2); 2001fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su right.setBounds(0, 0, 3, 4); 2002fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su top.setBounds(0, 0, 5, 6); 2003fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // usinf drawables 2004fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(left, top, right, null); 2005fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su drawables = mTextView.getCompoundDrawables(); 2006fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2007fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableLeft 2008fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(left, drawables[0]); 2009fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableTop 2010fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(top, drawables[1]); 2011fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableRight 2012fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(right, drawables[2]); 2013fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // drawableBottom 2014fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(drawables[3]); 2015fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2016fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // check compound padding 2017fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingLeft() + padding + left.getBounds().width(), 2018fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingLeft()); 2019fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingTop() + padding + top.getBounds().height(), 2020fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingTop()); 2021fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingRight() + padding + right.getBounds().width(), 2022fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCompoundPaddingRight()); 2023fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getPaddingBottom(), mTextView.getCompoundPaddingBottom()); 2024fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2025fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2026fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSingleLine() { 2027013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu final TextView textView = new TextView(mActivity); 2028013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu setSpannableText(textView, "This is a really long sentence" 2029013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu + " which can not be placed in one line on the screen."); 2030013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu 2031013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu // Narrow layout assures that the text will get wrapped. 2032013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu FrameLayout innerLayout = new FrameLayout(mActivity); 2033013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu innerLayout.setLayoutParams(new ViewGroup.LayoutParams(100, 100)); 2034013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu innerLayout.addView(textView); 2035013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu 2036013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu final FrameLayout layout = new FrameLayout(mActivity); 2037013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu layout.addView(innerLayout); 2038013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu 2039013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu mActivity.runOnUiThread(new Runnable() { 2040013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu public void run() { 2041013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu mActivity.setContentView(layout); 2042013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.setSingleLine(true); 2043013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu } 2044013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu }); 2045013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu mInstrumentation.waitForIdleSync(); 2046fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2047fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(SingleLineTransformationMethod.getInstance(), 2048013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.getTransformationMethod()); 2049013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu int singleLineWidth = textView.getLayout().getWidth(); 2050013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu int singleLineHeight = textView.getLayout().getHeight(); 2051fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2052fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2053fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2054013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.setSingleLine(false); 2055fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2056fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2057fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2058013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu assertEquals(null, textView.getTransformationMethod()); 2059013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu assertTrue(textView.getLayout().getHeight() > singleLineHeight); 2060013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu assertTrue(textView.getLayout().getWidth() < singleLineWidth); 2061fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2062fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // same behaviours as setSingLine(true) 2063fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2064fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2065013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.setSingleLine(); 2066fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2067fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2068fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2069fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(SingleLineTransformationMethod.getInstance(), 2070013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu textView.getTransformationMethod()); 2071013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu assertEquals(singleLineHeight, textView.getLayout().getHeight()); 2072013d5ee5428a0fde1cbe1befa4587b0d7a5e39c1Brian Muramatsu assertEquals(singleLineWidth, textView.getLayout().getWidth()); 2073fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2074fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2075fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2076fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMaxLines() { 2077fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2078fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2079fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float[] widths = new float[LONG_TEXT.length()]; 2080fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getPaint().getTextWidths(LONG_TEXT, widths); 2081fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su float totalWidth = 0.0f; 2082fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su for (float f : widths) { 2083fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su totalWidth += f; 2084fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2085fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int stringWidth = (int) totalWidth; 2086fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(stringWidth >> 2); 2087fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(LONG_TEXT); 2088fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2089fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final int maxLines = 2; 2090fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineCount() > maxLines); 2091fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2092fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxLines(maxLines); 2093fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.requestLayout(); 2094fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2095fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getHeight() <= maxLines * mTextView.getLineHeight()); 2096fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2097fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2098fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2099fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMaxLinesException() { 210072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 210172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mActivity.setContentView(mTextView); 2102fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(mTextView.getWidth() >> 3); 210372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setMaxLines(-1); 2104fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2105fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2106fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetMinLines() { 2107fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2108fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 3); 2109fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalHeight = mTextView.getHeight(); 2110fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalLines = mTextView.getLineCount(); 2111fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2112fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinLines(originalLines - 1); 2113fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines - 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2114fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2115fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setMinLines(originalLines + 1); 2116fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines + 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2117fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2118fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2119fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetLines() { 2120fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2121fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make it multiple lines 2122fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 3); 2123fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int originalLines = mTextView.getLineCount(); 2124fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2125fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(originalLines - 1); 2126fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines - 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2127fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2128fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(originalLines + 1); 2129fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue((originalLines + 1) * mTextView.getLineHeight() <= mTextView.getHeight()); 2130fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2131fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2132fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2133fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetLinesException() { 213472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 213572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mActivity.setContentView(mTextView); 213672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setWidth(mTextView.getWidth() >> 3); 213772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setLines(-1); 2138fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2139fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2140fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2141fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetExtendedPaddingTop() { 2142fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2143fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2144fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getExtendedPaddingTop()); 2145fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2146fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 21479776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable top = getDrawable(R.drawable.red); 2148fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su top.setBounds(0, 0, 100, 10); 2149fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, top, null, null); 2150fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingTop(), mTextView.getExtendedPaddingTop()); 2151fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2152fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2153fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2154fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 2155fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2156fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getExtendedPaddingTop() > 0); 2157fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2158fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2159fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2160fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetExtendedPaddingBottom() { 2161fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2162fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2163fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getExtendedPaddingBottom()); 2164fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2165fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 21669776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable bottom = getDrawable(R.drawable.red); 2167fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su bottom.setBounds(0, 0, 100, 10); 2168fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, null, null, bottom); 2169fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingBottom(), mTextView.getExtendedPaddingBottom()); 2170fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2171fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2172fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2173fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER_VERTICAL); 2174fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2175fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getExtendedPaddingBottom() > 0); 2176fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2177fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2178fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingTop() { 2179fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2180fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2181fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingTop()); 2182fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2183fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 21849776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable top = getDrawable(R.drawable.red); 2185fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su top.setBounds(0, 0, 100, 10); 2186fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2187fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2188fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, top, null, null); 2189fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2190fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.BOTTOM); 2191fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2192fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2193fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2194fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getExtendedPaddingTop(), mTextView.getTotalPaddingTop()); 2195fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2196fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2197fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(mTextView.getLineCount() + 1); 2198fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int expected = mTextView.getHeight() 2199fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getExtendedPaddingBottom() 2200fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getLayout().getLineTop(mTextView.getLineCount()); 2201fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, mTextView.getTotalPaddingTop()); 2202fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2203fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2204fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingBottom() { 2205fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2206fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2207fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingBottom()); 2208fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2209fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 22109776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final Drawable bottom = getDrawable(R.drawable.red); 2211fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su bottom.setBounds(0, 0, 100, 10); 2212fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2213fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2214fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, null, null, bottom); 2215fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(mTextView.getLineCount() - 1); 2216fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER_VERTICAL); 2217fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2218fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2219fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2220fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getExtendedPaddingBottom(), mTextView.getTotalPaddingBottom()); 2221fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2222fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change line count 2223fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setLines(mTextView.getLineCount() + 1); 2224fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su int expected = ((mTextView.getHeight() 2225fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getExtendedPaddingBottom() 2226fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getExtendedPaddingTop() 2227fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su - mTextView.getLayout().getLineBottom(mTextView.getLineCount())) >> 1) 2228fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su + mTextView.getExtendedPaddingBottom(); 2229fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(expected, mTextView.getTotalPaddingBottom()); 2230fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2231fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2232fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2233fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingLeft() { 2234fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2235fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2236fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingLeft()); 2237fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2238fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 22399776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable left = getDrawable(R.drawable.red); 2240fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su left.setBounds(0, 0, 10, 100); 2241fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(left, null, null, null); 2242fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.RIGHT); 2243fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingLeft(), mTextView.getTotalPaddingLeft()); 2244fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2245fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change width 2246fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(Integer.MAX_VALUE); 2247fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingLeft(), mTextView.getTotalPaddingLeft()); 2248fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2249fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2250fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @UiThreadTest 2251fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetTotalPaddingRight() { 2252fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2253fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Initialized value 2254fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getTotalPaddingRight()); 2255fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2256fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // After Set a Drawable 22579776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable right = getDrawable(R.drawable.red); 2258fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su right.setBounds(0, 0, 10, 100); 2259fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setCompoundDrawables(null, null, right, null); 2260fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setGravity(Gravity.CENTER_HORIZONTAL); 2261fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingRight(), mTextView.getTotalPaddingRight()); 2262fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2263fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Change width 2264fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(Integer.MAX_VALUE); 2265fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mTextView.getCompoundPaddingRight(), mTextView.getTotalPaddingRight()); 2266fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2267fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2268fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetUrls() { 2269fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2270fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2271fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su URLSpan[] spans = mTextView.getUrls(); 2272fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, spans.length); 2273fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2274fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String url = "http://www.google.com"; 2275fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String email = "name@gmail.com"; 2276fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su String string = url + " mailto:" + email; 2277fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su SpannableString spannable = new SpannableString(string); 2278fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spannable.setSpan(new URLSpan(url), 0, url.length(), 0); 2279fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(spannable, BufferType.SPANNABLE); 2280fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = mTextView.getUrls(); 2281fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, spans.length); 2282fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(url, spans[0].getURL()); 2283fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2284fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spannable.setSpan(new URLSpan(email), 0, email.length(), 0); 2285fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(spannable, BufferType.SPANNABLE); 2286fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2287fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = mTextView.getUrls(); 2288fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, spans.length); 2289fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(url, spans[0].getURL()); 2290fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(email, spans[1].getURL()); 2291fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2292fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test the situation that param what is not a URLSpan 2293fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spannable.setSpan(new Object(), 0, 9, 0); 2294fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setText(spannable, BufferType.SPANNABLE); 2295fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su spans = mTextView.getUrls(); 2296fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, spans.length); 2297fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2298fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2299fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetPadding() { 2300fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2301fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2302fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(0, 1, 2, 4); 2303fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, mTextView.getPaddingLeft()); 2304fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getPaddingTop()); 2305fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(2, mTextView.getPaddingRight()); 2306fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(4, mTextView.getPaddingBottom()); 2307fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2308fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setPadding(10, 20, 30, 40); 2309fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(10, mTextView.getPaddingLeft()); 2310fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(20, mTextView.getPaddingTop()); 2311fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(30, mTextView.getPaddingRight()); 2312fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(40, mTextView.getPaddingBottom()); 2313fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2314fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2315fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetTextAppearance() { 2316fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = new TextView(mActivity); 2317fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2318fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_All); 2319fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.black), 2320fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentTextColor()); 2321fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(20f, mTextView.getTextSize(), 0.01f); 2322fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Typeface.BOLD, mTextView.getTypeface().getStyle()); 2323fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.red), 2324fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentHintTextColor()); 2325fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.blue), 2326fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getLinkTextColors().getDefaultColor()); 2327fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2328fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_Colors); 2329fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.black), 2330fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentTextColor()); 2331fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.blue), 2332fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getCurrentHintTextColor()); 2333fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(mActivity.getResources().getColor(R.drawable.yellow), 2334fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.getLinkTextColors().getDefaultColor()); 2335fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2336fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_NotColors); 2337fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(17f, mTextView.getTextSize(), 0.01f); 2338fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(Typeface.NORMAL, mTextView.getTypeface().getStyle()); 2339fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2340fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setTextAppearance(mActivity, R.style.TextAppearance_Style); 2341fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(null, mTextView.getTypeface()); 2342fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2343fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2344fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnPreDraw() { 2345fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2346fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2347fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2348fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetHorizontallyScrolling() { 2349fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make the text view has more than one line 2350fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = findTextView(R.id.textview_text); 2351fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setWidth(mTextView.getWidth() >> 1); 2352fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineCount() > 1); 2353fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2354fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHorizontallyScrolling(true); 2355fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(1, mTextView.getLineCount()); 2356fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2357fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su setHorizontallyScrolling(false); 2358fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(mTextView.getLineCount() > 1); 2359fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2360fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2361fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testComputeHorizontalScrollRange() { 2362fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2363fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test when layout is null 2364fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getLayout()); 2365fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getWidth(), textView.computeHorizontalScrollRange()); 2366fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2367fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setFrame(0, 0, 40, 50); 2368fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getWidth(), textView.computeHorizontalScrollRange()); 2369fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2370fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // set the layout 2371fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(textView); 2372fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getLayout().getWidth(), textView.computeHorizontalScrollRange()); 2373fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2374fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2375fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testComputeVerticalScrollRange() { 2376fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2377fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // test when layout is null 2378fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getLayout()); 2379fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.computeVerticalScrollRange()); 2380fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2381fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setFrame(0, 0, 40, 50); 2382fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getHeight(), textView.computeVerticalScrollRange()); 2383fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2384fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //set the layout 2385fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su layout(textView); 2386fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(textView.getLayout().getHeight(), textView.computeVerticalScrollRange()); 2387fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2388fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2389fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testDrawableStateChanged() { 2390fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2391fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2392fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.reset(); 2393fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.refreshDrawableState(); 2394fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.hasCalledDrawableStateChanged()); 2395fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2396fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2397fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetDefaultEditable() { 2398fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2399fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2400fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //the TextView#getDefaultEditable() does nothing, and always return false. 2401fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(textView.getDefaultEditable()); 2402fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2403fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2404fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetDefaultMovementMethod() { 2405fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2406fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2407fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //the TextView#getDefaultMovementMethod() does nothing, and always return null. 2408fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getDefaultMovementMethod()); 2409fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2410fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2411fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnCreateContextMenu() { 2412fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2413fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2414fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2415fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnDetachedFromWindow() { 2416fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2417fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2418fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2419fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnDraw() { 2420fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2421fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2422fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2423fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnFocusChanged() { 2424fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2425fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2426fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2427fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnMeasure() { 2428fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2429fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2430fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2431fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnTextChanged() { 2432fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2433fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2434fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2435fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testSetFrame() { 2436fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockTextView textView = new MockTextView(mActivity); 2437fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2438fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //Assign a new size to this view 2439fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.setFrame(0, 0, 320, 480)); 2440fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getFrameLeft()); 2441fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0, textView.getFrameTop()); 2442fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(320, textView.getFrameRight()); 2443fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(480, textView.getFrameBottom()); 2444fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2445fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //Assign a same size to this view 2446fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(textView.setFrame(0, 0, 320, 480)); 2447fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2448fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su //negative input 2449fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.setFrame(-1, -1, -1, -1)); 2450fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameLeft()); 2451fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameTop()); 2452fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameRight()); 2453fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(-1, textView.getFrameBottom()); 2454fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2455fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2456fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testGetFadingEdgeStrength() { 245741f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio final MockTextView textViewLeft = (MockTextView) mActivity.findViewById( 245841f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio R.id.mock_textview_left); 2459fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2460fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 246141f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio textViewLeft.setEllipsize(null); 2462fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2463fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2464fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2465fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2466fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on right side if the text aligns left 246741f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(0.0f, textViewLeft.getLeftFadingEdgeStrength(), 0.01f); 246841f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewLeft.getRightFadingEdgeStrength(), 0.01f); 2469fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 247041f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio final MockTextView textViewRight = (MockTextView) mActivity.findViewById( 247141f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio R.id.mock_textview_right); 2472fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2473fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 247441f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio textViewRight.setEllipsize(null); 2475fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2476fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2477fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2478fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on left side if the text aligns right 247941f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewRight.getLeftFadingEdgeStrength(), 0.01f); 248041f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(0.0f, textViewRight.getRightFadingEdgeStrength(), 0.01f); 2481fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 248241f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio final MockTextView textViewCenter = (MockTextView) mActivity.findViewById( 248341f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio R.id.mock_textview_center); 2484fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2485fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 248641f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio textViewCenter.setEllipsize(null); 2487fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2488fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2489fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2490fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on both sides if the text aligns center 249141f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewCenter.getLeftFadingEdgeStrength(), 0.01f); 249241f2159687011d968e1ce3ac2a5b3fcba2e6af83Fabrice Di Meglio assertEquals(1.0f, textViewCenter.getRightFadingEdgeStrength(), 0.01f); 2493fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2494fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2495bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu 2496fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testMarquee() { 2497fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su final MockTextView textView = new MockTextView(mActivity); 2498fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(LONG_TEXT); 2499fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSingleLine(); 2500fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setEllipsize(TruncateAt.MARQUEE); 2501bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu textView.setLayoutParams(new ViewGroup.LayoutParams(100, 100)); 2502bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu 2503bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu final FrameLayout layout = new FrameLayout(mActivity); 2504bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu layout.addView(textView); 2505bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu 2506fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // make the fading to be shown 2507fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setHorizontalFadingEdgeEnabled(true); 2508fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2509fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2510fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2511bed9d222439713a766c3d5c91fae1526b5bc35dcBrian Muramatsu mActivity.setContentView(layout); 2512fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2513fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2514fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2515fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2516fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TestSelectedRunnable runnable = new TestSelectedRunnable(textView) { 2517fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2518fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setMarqueeRepeatLimit(-1); 2519fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // force the marquee to start 2520fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected1(); 2521fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSelected(true); 2522fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected2(); 2523fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2524fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }; 2525fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(runnable); 2526fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2527fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // wait for the marquee to run 2528fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // fading is shown on both sides if the marquee runs for a while 25290162547f44173f0604d8a80143c128d9892460a1Kristian Monsen new PollingCheck(TIMEOUT) { 2530fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 2531fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected boolean check() { 2532fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return textView.getLeftFadingEdgeStrength() > 0.0f 2533fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su && textView.getRightFadingEdgeStrength() > 0.0f; 2534fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2535fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }.run(); 2536fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 253772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach final float leftFadingEdgeStrength = textView.getLeftFadingEdgeStrength(); 253872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach final float rightFadingEdgeStrength = textView.getRightFadingEdgeStrength(); 253972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 2540fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // wait for the marquee to continue 2541fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // the left fading becomes thicker while the right fading becomes thiner 2542fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // as the text moves towards left 25430162547f44173f0604d8a80143c128d9892460a1Kristian Monsen new PollingCheck(TIMEOUT) { 2544fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 2545fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su protected boolean check() { 2546fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return leftFadingEdgeStrength < textView.getLeftFadingEdgeStrength() 2547fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su && rightFadingEdgeStrength > textView.getRightFadingEdgeStrength(); 2548fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2549fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }.run(); 2550fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(runnable.getIsSelected1()); 2551fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(runnable.getIsSelected2()); 2552fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2553fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su runnable = new TestSelectedRunnable(textView) { 2554fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2555fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setMarqueeRepeatLimit(0); 2556fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // force the marquee to stop 2557fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected1(); 2558fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSelected(false); 2559fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su saveIsSelected2(); 2560fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setGravity(Gravity.LEFT); 2561fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2562fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }; 2563fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // force the marquee to stop 2564fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(runnable); 2565fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2566fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(runnable.getIsSelected1()); 2567fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertFalse(runnable.getIsSelected2()); 2568fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0.0f, textView.getLeftFadingEdgeStrength(), 0.01f); 2569fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getRightFadingEdgeStrength() > 0.0f); 2570fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2571fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2572fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2573fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setGravity(Gravity.RIGHT); 2574fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2575fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2576fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2577fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getLeftFadingEdgeStrength() > 0.0f); 2578fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0.0f, textView.getRightFadingEdgeStrength(), 0.01f); 2579fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2580fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 2581fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 2582fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setGravity(Gravity.CENTER_HORIZONTAL); 2583fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2584fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 2585fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 2586fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // there is no left fading (Is it correct?) 2587fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(0.0f, textView.getLeftFadingEdgeStrength(), 0.01f); 2588fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getRightFadingEdgeStrength() > 0.0f); 2589fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2590fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2591fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnKeyMultiple() { 2592fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2593fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2594fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2595fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessInputExtras() throws XmlPullParserException, IOException { 2596fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView textView = new TextView(mActivity); 2597fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(null, BufferType.EDITABLE); 2598fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT); 2599fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2600fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // do not create the extras 2601fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getInputExtras(false)); 2602fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2603fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // create if it does not exist 2604fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su Bundle inputExtras = textView.getInputExtras(true); 2605fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(inputExtras); 2606fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(inputExtras.isEmpty()); 2607fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2608fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // it is created already 2609fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNotNull(textView.getInputExtras(false)); 2610fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2611fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su try { 2612fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputExtras(R.xml.input_extras); 2613fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su fail("Should throw NullPointerException!"); 2614fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } catch (NullPointerException e) { 2615fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2616fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2617fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2618fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessContentType() { 2619fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView textView = new TextView(mActivity); 2620fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(null, BufferType.EDITABLE); 2621fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setKeyListener(null); 2622fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setTransformationMethod(null); 2623fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2624fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_DATETIME 2625fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL); 2626fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2627fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL, textView.getInputType()); 2628fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof DateTimeKeyListener); 2629fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2630fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_DATETIME 2631fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE); 2632fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2633fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE, textView.getInputType()); 2634fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof DateKeyListener); 2635fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2636fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_DATETIME 2637fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME); 2638fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2639fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME, textView.getInputType()); 2640fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof TimeKeyListener); 2641fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2642fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_NUMBER 2643fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 2644fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED); 2645fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_NUMBER 2646fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 2647fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED, textView.getInputType()); 2648fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), DigitsKeyListener.getInstance(true, true)); 2649fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2650fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_PHONE); 2651fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_PHONE, textView.getInputType()); 2652fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof DialerKeyListener); 2653fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2654fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 2655fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); 2656fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2657fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT, textView.getInputType()); 2658fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), TextKeyListener.getInstance(true, Capitalize.NONE)); 2659fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2660fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSingleLine(); 2661fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 2662fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 2663fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 2664fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); 2665fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2666fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 2667fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS, textView.getInputType()); 2668fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), 2669fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextKeyListener.getInstance(false, Capitalize.CHARACTERS)); 2670fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 2671fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2672fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 2673fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 2674fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2675fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS, textView.getInputType()); 2676fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), 2677fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextKeyListener.getInstance(false, Capitalize.WORDS)); 2678fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 2679fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2680fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_CLASS_TEXT 2681fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); 2682fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2683fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES, textView.getInputType()); 2684fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertSame(textView.getKeyListener(), 2685fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextKeyListener.getInstance(false, Capitalize.SENTENCES)); 2686fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2687fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setInputType(InputType.TYPE_NULL); 2688fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_NULL, textView.getInputType()); 2689fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getKeyListener() instanceof TextKeyListener); 2690fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2691fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2692fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testAccessRawContentType() { 2693fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su TextView textView = new TextView(mActivity); 2694fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setText(null, BufferType.EDITABLE); 2695fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setKeyListener(null); 2696fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setTransformationMethod(null); 2697fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2698fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_DATETIME 2699fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL); 2700fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2701fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_NORMAL, textView.getInputType()); 2702fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 2703fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2704fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2705fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_DATETIME 2706fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE); 2707fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2708fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_DATE, textView.getInputType()); 2709fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 2710fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2711fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2712fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_DATETIME 2713fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME); 2714fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_DATETIME 2715fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_DATETIME_VARIATION_TIME, textView.getInputType()); 2716fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 2717fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2718fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2719fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_NUMBER 2720fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 2721fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED); 2722fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_NUMBER 2723fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_DECIMAL 2724fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_NUMBER_FLAG_SIGNED, textView.getInputType()); 2725fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 2726fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2727fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2728fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_PHONE); 2729fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_PHONE, textView.getInputType()); 2730fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 2731fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2732fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2733fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 2734fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); 2735fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2736fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT, textView.getInputType()); 2737fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getTransformationMethod()); 2738fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2739fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2740fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setSingleLine(); 2741fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 2742fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 2743fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 2744fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS); 2745fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2746fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_MULTI_LINE 2747fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS, textView.getInputType()); 2748fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 2749fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2750fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2751fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 2752fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS); 2753fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2754fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_WORDS, textView.getInputType()); 2755fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 2756fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2757fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2758fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_CLASS_TEXT 2759fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); 2760fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertEquals(InputType.TYPE_CLASS_TEXT 2761fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES, textView.getInputType()); 2762fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 2763fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2764fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2765fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su textView.setRawInputType(InputType.TYPE_NULL); 2766fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertTrue(textView.getTransformationMethod() instanceof SingleLineTransformationMethod); 2767fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su assertNull(textView.getKeyListener()); 2768fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2769fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 2770fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void testOnPrivateIMECommand() { 2771fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su // Do not test. Implementation details. 2772fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 2773fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 277472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testFoo() { 277572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // Do not test. Implementation details. 277672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 277772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 277872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testVerifyDrawable() { 277972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach MockTextView textView = new MockTextView(mActivity); 278072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 27819776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable d = getDrawable(R.drawable.pass); 278272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(textView.verifyDrawable(d)); 278372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 278472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach textView.setCompoundDrawables(null, d, null, null); 278572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(textView.verifyDrawable(d)); 278672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 278772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 278872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testAccessPrivateImeOptions() { 278972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 279072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertNull(mTextView.getPrivateImeOptions()); 279172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 279272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setPrivateImeOptions("com.example.myapp.SpecialMode=3"); 279372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals("com.example.myapp.SpecialMode=3", mTextView.getPrivateImeOptions()); 279472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 279572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setPrivateImeOptions(null); 279672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertNull(mTextView.getPrivateImeOptions()); 279772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 279872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 279972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testSetOnEditorActionListener() { 280072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 280172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 280272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach MockOnEditorActionListener listener = new MockOnEditorActionListener(); 280372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(listener.isOnEditorActionCalled()); 280472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 280572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setOnEditorActionListener(listener); 280672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(listener.isOnEditorActionCalled()); 280772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 280872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.onEditorAction(EditorInfo.IME_ACTION_DONE); 280972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(listener.isOnEditorActionCalled()); 281072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 281172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 281272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testAccessImeOptions() { 281372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 281472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_NULL, mTextView.getImeOptions()); 281572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 281672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeOptions(EditorInfo.IME_ACTION_GO); 281772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_ACTION_GO, mTextView.getImeOptions()); 281872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 281972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeOptions(EditorInfo.IME_ACTION_DONE); 282072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_ACTION_DONE, mTextView.getImeOptions()); 282172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 282272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeOptions(EditorInfo.IME_NULL); 282372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(EditorInfo.IME_NULL, mTextView.getImeOptions()); 282472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 282572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 282672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testAccessImeActionLabel() { 282772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 282872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertNull(mTextView.getImeActionLabel()); 282972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, mTextView.getImeActionId()); 283072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 283172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setImeActionLabel("pinyin", 1); 283272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals("pinyin", mTextView.getImeActionLabel().toString()); 283372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(1, mTextView.getImeActionId()); 283472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 283572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 283672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach @UiThreadTest 2837c873101a88e7ba584065de5e912508237378ca99Victoria Lease public void testSetTextLong() { 2838c873101a88e7ba584065de5e912508237378ca99Victoria Lease final int MAX_COUNT = 1 << 21; 2839c873101a88e7ba584065de5e912508237378ca99Victoria Lease char[] longText = new char[MAX_COUNT]; 2840c873101a88e7ba584065de5e912508237378ca99Victoria Lease for (int n = 0; n < MAX_COUNT; n++) { 2841c873101a88e7ba584065de5e912508237378ca99Victoria Lease longText[n] = 'm'; 2842c873101a88e7ba584065de5e912508237378ca99Victoria Lease } 2843c873101a88e7ba584065de5e912508237378ca99Victoria Lease mTextView = findTextView(R.id.textview_text); 2844c873101a88e7ba584065de5e912508237378ca99Victoria Lease mTextView.setText(new String(longText)); 2845c873101a88e7ba584065de5e912508237378ca99Victoria Lease } 2846c873101a88e7ba584065de5e912508237378ca99Victoria Lease 2847c873101a88e7ba584065de5e912508237378ca99Victoria Lease @UiThreadTest 284872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testSetExtractedText() { 284972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 285072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(mActivity.getResources().getString(R.string.text_view_hello), 285172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.getText().toString()); 285272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 285372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach ExtractedText et = new ExtractedText(); 285472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach et.text = "test"; 285572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 285672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setExtractedText(et); 285772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals("test", mTextView.getText().toString()); 285872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 285972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 286072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testMoveCursorToVisibleOffset() throws Throwable { 286172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 286272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 286372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // not a spannable text 286472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 286572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 286672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.moveCursorToVisibleOffset()); 286772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 286872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 286972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 287072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 287172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // a selection range 287272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach final String spannableText = "text"; 287372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 287472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 287572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 287672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 287772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setText(spannableText, BufferType.SPANNABLE); 287872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 287972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 288072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 288172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach Selection.setSelection((Spannable) mTextView.getText(), 0, spannableText.length()); 288272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 288372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, mTextView.getSelectionStart()); 288472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(spannableText.length(), mTextView.getSelectionEnd()); 288572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 288672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 288772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.moveCursorToVisibleOffset()); 288872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 288972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 289072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 289172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 289272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach // a spannable without range 289372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 289472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 289572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 289672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setText(spannableText, BufferType.SPANNABLE); 289772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 289872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 289972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 290072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 290172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach runTestOnUiThread(new Runnable() { 290272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void run() { 290372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.moveCursorToVisibleOffset()); 290472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 290572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach }); 290672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mInstrumentation.waitForIdleSync(); 290772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 290872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 2909afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu public void testIsInputMethodTarget() throws Throwable { 291072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 291172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.isInputMethodTarget()); 291272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 291372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.isFocused()); 2914afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu runTestOnUiThread(new Runnable() { 2915afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu @Override 2916afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu public void run() { 2917afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu mTextView.setFocusable(true); 2918afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu mTextView.requestFocus(); 2919afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu } 2920afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu }); 2921afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu mInstrumentation.waitForIdleSync(); 2922afefb471cb741d3787da90aa03338f28c5cb6d87Brian Muramatsu assertTrue(mTextView.isFocused()); 292304d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu 292404d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu new PollingCheck() { 292504d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu @Override 292604d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu protected boolean check() { 292704d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu return mTextView.isInputMethodTarget(); 292804d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu } 292904d12809ae731ea2aea678707bcc606f05efb23aBrian Muramatsu }.run(); 293072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 293172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 293272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testBeginEndBatchEdit() { 293372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 293472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 293572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.beginBatchEdit(); 293672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.endBatchEdit(); 293772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 293872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 293972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach @UiThreadTest 294072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testBringPointIntoView() throws Throwable { 294172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 294272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.bringPointIntoView(1)); 294372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 294472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.layout(0, 0, 100, 100); 294572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.bringPointIntoView(2)); 294672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 294772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 294872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testCancelLongPress() { 294972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 295072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach TouchUtils.longClickView(this, mTextView); 295172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.cancelLongPress(); 295272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 295372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 295472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach @UiThreadTest 295572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testClearComposingText() { 295672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 295772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setText("Hello world!", BufferType.SPANNABLE); 295872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach Spannable text = (Spannable) mTextView.getText(); 295972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 296072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 296172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 296272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 296372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach BaseInputConnection.setComposingSpans((Spannable) mTextView.getText()); 296472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, BaseInputConnection.getComposingSpanStart(text)); 296572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, BaseInputConnection.getComposingSpanStart(text)); 296672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 296772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.clearComposingText(); 296872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 296972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(-1, BaseInputConnection.getComposingSpanStart(text)); 297072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 297172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 297272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testComputeVerticalScrollExtent() { 297372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach MockTextView textView = new MockTextView(mActivity); 297472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, textView.computeVerticalScrollExtent()); 297572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 29769776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable d = getDrawable(R.drawable.pass); 297772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach textView.setCompoundDrawables(null, d, null, d); 297872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 297972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(0, textView.computeVerticalScrollExtent()); 298072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 298172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 298272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach @UiThreadTest 298372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testDidTouchFocusSelect() { 2984c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne mTextView = new EditText(mActivity); 298572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertFalse(mTextView.didTouchFocusSelect()); 298672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 298772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.setFocusable(true); 298872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView.requestFocus(); 298972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.didTouchFocusSelect()); 299072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 299172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 299272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public void testExtractText() { 299372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = new TextView(mActivity); 299472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 299572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach ExtractedTextRequest request = new ExtractedTextRequest(); 299672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach ExtractedText outText = new ExtractedText(); 299772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 299872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.token = 0; 299972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.flags = 10; 300072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.hintMaxLines = 2; 300172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach request.hintMaxChars = 20; 300272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.extractText(request, outText)); 300372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 300472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach mTextView = findTextView(R.id.textview_text); 300572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertTrue(mTextView.extractText(request, outText)); 300672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 300772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach assertEquals(mActivity.getResources().getString(R.string.text_view_hello), 300872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach outText.text.toString()); 300972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 301072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 301194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 301294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testTextDirectionDefault() { 3013c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 30142a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_INHERIT, tv.getRawTextDirection()); 301594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 301694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 301794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 301894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testSetGetTextDirection() { 3019c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 302094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 302194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 30222a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getRawTextDirection()); 302394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 302494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 30252a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getRawTextDirection()); 302694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 302794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 30282a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_INHERIT, tv.getRawTextDirection()); 302994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 303094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 30312a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getRawTextDirection()); 303294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 303394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 30342a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getRawTextDirection()); 303594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 303694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 30372a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getRawTextDirection()); 303894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 303994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 304094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 304194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionLtr() { 3042c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 304394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("this is a test"); 304494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 30452a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 304694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 304794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 30482a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 304994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 305094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 30512a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 305294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 305394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 30542a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 305594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 305694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 30572a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 305894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 305994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 30602a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 306194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 306294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 30632a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 306494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 306594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 306694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 306794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionLtrWithInheritance() { 3068c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne LinearLayout ll = new LinearLayout(mActivity); 306994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 307094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3071c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 307294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("this is a test"); 307394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.addView(tv); 307494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 307594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 30762a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 307794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 307894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 30792a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 308094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 308194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 30822a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 308394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 308494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 30852a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 308694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 308794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 30882a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 308994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 309094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 30912a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 309294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 309394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 309494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 309594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionRtl() { 3096c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 309794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("\u05DD\u05DE"); // hebrew 309894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 30992a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 310094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 310194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 31022a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 310394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 310494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 31052a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 310694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 310794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 31082a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 310994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 311094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 31112a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 311294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 311394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 31142a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 311594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 311694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 31172a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 311894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 311994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 312094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 312194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testGetResolvedTextDirectionRtlWithInheritance() { 3122c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne LinearLayout ll = new LinearLayout(mActivity); 312394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 312494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3125c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = new TextView(mActivity); 312694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setText("\u05DD\u05DE"); // hebrew 312794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.addView(tv); 312894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 312994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 31302a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 313194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 313294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 31332a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 313494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 313594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 31362a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 313794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 313894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 31392a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 314094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 314194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 31422a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 314394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 314494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 31452a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 314694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 314794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio // Force to RTL text direction on the layout 314894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_RTL); 314994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 315094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_FIRST_STRONG); 31512a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 315294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 315394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_ANY_RTL); 31542a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_ANY_RTL, tv.getTextDirection()); 315594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 315694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 31572a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 315894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 315994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LTR); 31602a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LTR, tv.getTextDirection()); 316194c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 316294c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_RTL); 31632a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 316494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 316594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_LOCALE); 31662a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_LOCALE, tv.getTextDirection()); 316794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 316894c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 316994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio @UiThreadTest 317094c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio public void testResetTextDirection() { 3171c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne LinearLayout ll = (LinearLayout) mActivity.findViewById(R.id.layout_textviewtest); 3172c2499432269114271f4b8ec17d07b469d2966fbeGilles Debunne TextView tv = (TextView) mActivity.findViewById(R.id.textview_rtl); 317394c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 317494c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.setTextDirection(View.TEXT_DIRECTION_RTL); 317594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio tv.setTextDirection(View.TEXT_DIRECTION_INHERIT); 31762a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 317794c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3178f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio // No reset when we remove the view 317994c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio ll.removeView(tv); 3180f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_RTL, tv.getTextDirection()); 3181f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio 3182f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio // Reset is done when we add the view 3183f0d2af33ae194bead489caef9b461f2bee6f45a6Fabrice Di Meglio ll.addView(tv); 31842a9c5b3b05fd5fae0fd01352283739c5f85ea8e0Fabrice Di Meglio assertEquals(View.TEXT_DIRECTION_FIRST_STRONG, tv.getTextDirection()); 318594c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio } 318694c94377f8f741065c7f15d52e4398699dae0844Fabrice Di Meglio 3187dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3188dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testTextAlignmentDefault() { 3189dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 31907fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getRawTextAlignment()); 3191dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // resolved default text alignment is GRAVITY 31927fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3193dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3194dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3195dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3196dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testSetGetTextAlignment() { 3197dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 3198dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3199dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); 32007fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getRawTextAlignment()); 3201dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3202dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 32037fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getRawTextAlignment()); 3204dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3205dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 32067fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_START, tv.getRawTextAlignment()); 3207dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3208dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 32097fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_END, tv.getRawTextAlignment()); 3210dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3211dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 32127fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_START, tv.getRawTextAlignment()); 3213dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3214dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 32157fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_END, tv.getRawTextAlignment()); 3216dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3217dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3218dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3219dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testGetResolvedTextAlignment() { 3220dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 3221dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 32227fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3223dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3224757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio // Test center alignment first so that we dont hit the default case 3225dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 32267fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3227dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3228757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio // Test the default case too 3229757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); 3230757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3231757ec4fdfd1798a8e28d050433c67e628a7f578dFabrice Di Meglio 3232dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 32337fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_START, tv.getTextAlignment()); 3234dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3235dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 32367fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_END, tv.getTextAlignment()); 3237dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3238dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 32397fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_START, tv.getTextAlignment()); 3240dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3241dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 32427fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_END, tv.getTextAlignment()); 3243dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3244dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3245dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3246dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testGetResolvedTextAlignmentWithInheritance() { 3247dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio LinearLayout ll = new LinearLayout(getActivity()); 3248dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); 3249dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3250dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = new TextView(getActivity()); 3251dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.addView(tv); 3252dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3253dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // check defaults 32547fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getRawTextAlignment()); 3255dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3256dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3257dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // set inherit and check that child is following parent 3258dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_INHERIT); 32597fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_INHERIT, tv.getRawTextAlignment()); 3260dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3261dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 32627fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3263dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3264dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 32657fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_START, tv.getTextAlignment()); 3266dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3267dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 32687fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_TEXT_END, tv.getTextAlignment()); 3269dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3270dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 32717fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_START, tv.getTextAlignment()); 3272dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3273dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 32747fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_VIEW_END, tv.getTextAlignment()); 3275dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3276dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio // now get rid of the inheritance but still change the parent 3277dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 3278dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3279dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 32807fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3281dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3282dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START); 32837fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3284dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3285dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_END); 32867fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3287dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3288dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START); 32897fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3290dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3291dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END); 32927fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3293dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3294dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3295dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio @UiThreadTest 3296dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio public void testResetTextAlignment() { 3297dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextViewStubActivity activity = getActivity(); 3298dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3299dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio LinearLayout ll = (LinearLayout) activity.findViewById(R.id.layout_textviewtest); 3300dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio TextView tv = (TextView) activity.findViewById(R.id.textview_rtl); 3301dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3302dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 3303dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio tv.setTextAlignment(View.TEXT_ALIGNMENT_INHERIT); 33047fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 3305dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 33064f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio // No reset when we remove the view 3307dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio ll.removeView(tv); 33084f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_CENTER, tv.getTextAlignment()); 33094f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio 33104f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio // Reset is done when we add the view 33114f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio // Default text alignment is GRAVITY 33124f6c5d77dfc74b490b8567d0b21adec0ccd72d22Fabrice Di Meglio ll.addView(tv); 33137fc94900b8661e27f89ae21523bd952127d510eaFabrice Di Meglio assertEquals(View.TEXT_ALIGNMENT_GRAVITY, tv.getTextAlignment()); 3314dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio } 3315dd7e30e4e18f67c4257379adecaa1df2bbe1992cFabrice Di Meglio 3316b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio @UiThreadTest 3317b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio public void testDrawableResolution() { 3318b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int LEFT = 0; 3319b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int TOP = 1; 3320b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int RIGHT = 2; 3321b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio final int BOTTOM = 3; 3322b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3323b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio TextViewStubActivity activity = getActivity(); 3324b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3325b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 1.1: left / right drawable defined in default LTR mode 3326b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio TextView tv = (TextView) activity.findViewById(R.id.textview_drawable_1_1); 3327b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio Drawable[] drawables = tv.getCompoundDrawables(); 3328b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3329b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3330b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3331b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3332b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3333b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3334b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3335b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3336b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3337b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3338b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 1.2: left / right drawable defined in default RTL mode 3339b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_1_2); 3340b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3341b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3342b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3343b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3344b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3345b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3346b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3347b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3348b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3349b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3350b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3351b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 2.1: start / end drawable defined in LTR mode 3352b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_2_1); 3353b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3354b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3355b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3356b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3357b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3358b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3359b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3360b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3361b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3362b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3363b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3364b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 2.2: start / end drawable defined in RTL mode 3365b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_2_2); 3366b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3367b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3368b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3369b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3370b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3371b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3372b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3373b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3374b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3375b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3376b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3377b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 3.1: left / right / start / end drawable defined in LTR mode 3378b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_1); 3379b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3380b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3381b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3382b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3383b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3384b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3385b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3386b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3387b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3388b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3389b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3390b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 3.2: left / right / start / end drawable defined in RTL mode 3391b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_2); 3392b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3393b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3394b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3395b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3396b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3397b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3398b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3399b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3400b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3401b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3402b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3403b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 4.1: start / end drawable defined in LTR mode inside a layout 3404b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 3405b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_4_1); 3406b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3407b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3408b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3409b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3410b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3411b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3412b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3413b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3414b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3415b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3416b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3417b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 4.2: start / end drawable defined in RTL mode inside a layout 3418b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 3419b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_4_2); 3420b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3421b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3422b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3423b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3424b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3425b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3426b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3427b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3428b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3429b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3430b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3431b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 5.1: left / right / start / end drawable defined in LTR mode inside a layout 3432b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 3433b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_1); 3434b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3435b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3436b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3437b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3438b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3439b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3440b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3441b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3442b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3443b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3444b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3445b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // Case 5.2: left / right / start / end drawable defined in RTL mode inside a layout 3446b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio // that defines the layout direction 3447b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_3_2); 3448b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio drawables = tv.getCompoundDrawables(); 3449b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 3450b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 3451b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 3452b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 3453b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 3454b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 3455b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 3456b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 3457b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 3458b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio } 3459b44fc868dc396032a3dae2ba8871168df95e620aFabrice Di Meglio 34609776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio @UiThreadTest 34619776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio public void testDrawableResolution2() { 34629776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int LEFT = 0; 34639776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int TOP = 1; 34649776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int RIGHT = 2; 34659776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio final int BOTTOM = 3; 34669776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 34679776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio TextViewStubActivity activity = getActivity(); 34689776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 34699776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio // Case 1.1: left / right drawable defined in default LTR mode 34709776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio TextView tv = (TextView) activity.findViewById(R.id.textview_drawable_1_1); 34719776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio Drawable[] drawables = tv.getCompoundDrawables(); 34729776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 34739776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 34749776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 34759776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 34769776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 34779776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 34789776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 34799776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 34809776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 34819776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 34829776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawables(null, null, getDrawable(R.drawable.icon_yellow), null); 34839776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 34849776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 34859776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[LEFT]); 34869776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 34879776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 34889776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 34899776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 34909776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 34919776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_drawable_1_2); 34929776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 34939776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 34949776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 34959776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 34969776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 34979776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 34989776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_green), 34999776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[TOP]).getBitmap()); 35009776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 35019776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[BOTTOM]).getBitmap()); 35029776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 35039776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawables(getDrawable(R.drawable.icon_yellow), null, null, null); 35049776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 35059776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 35069776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 35079776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 35089776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[RIGHT]); 35099776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 35109776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 35119776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 35129776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv = (TextView) activity.findViewById(R.id.textview_ltr); 35139776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 35149776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 35159776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[LEFT]); 35169776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[RIGHT]); 35179776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 35189776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 35199776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 35209776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawables(getDrawable(R.drawable.icon_blue), null, getDrawable(R.drawable.icon_red), null); 35219776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 35229776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 35239776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_blue), 35249776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 35259776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_red), 35269776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[RIGHT]).getBitmap()); 35279776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 35289776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 35299776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 35309776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio tv.setCompoundDrawablesRelative(getDrawable(R.drawable.icon_yellow), null, null, null); 35319776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio drawables = tv.getCompoundDrawables(); 35329776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 35339776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio WidgetTestUtils.assertEquals(getBitmap(R.drawable.icon_yellow), 35349776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio ((BitmapDrawable) drawables[LEFT]).getBitmap()); 35359776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[RIGHT]); 35369776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[TOP]); 35379776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio assertNull(drawables[BOTTOM]); 35389776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio } 35399776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 354072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach private static class MockOnEditorActionListener implements OnEditorActionListener { 354172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach private boolean isOnEditorActionCalled; 354272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 354372b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 354472b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach isOnEditorActionCalled = true; 354572b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach return true; 354672b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 354772b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 354872b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach public boolean isOnEditorActionCalled() { 354972b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach return isOnEditorActionCalled; 355072b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 355172b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach } 355272b705b4df314c5cb81a9db2347fb6a6f9384b9aPhil Dubach 3553fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void layout(final TextView textView) { 3554fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3555fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3556fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(textView); 3557fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3558fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3559fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3560fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3561fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3562fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void layout(final int layoutId) { 3563fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3564fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3565fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.setContentView(layoutId); 3566fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3567fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3568fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3569fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3570fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3571fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView findTextView(int id) { 3572fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return (TextView) mActivity.findViewById(id); 3573fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3574fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3575fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private int getAutoLinkMask(int id) { 3576fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return findTextView(id).getAutoLinkMask(); 3577fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3578fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3579fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Bitmap getBitmap(int resid) { 35809776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio return ((BitmapDrawable) getDrawable(resid)).getBitmap(); 35819776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio } 35829776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio 35839776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio private Drawable getDrawable(int resid) { 35849776f6746985a3740892cec4df71fbbc94bdaf84Fabrice Di Meglio return mActivity.getResources().getDrawable(resid); 3585fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3586fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3587fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMaxWidth(final int pixels) { 3588fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3589fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3590fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxWidth(pixels); 3591fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3592fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3593fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3594fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3595fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3596fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinWidth(final int pixels) { 3597fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3598fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3599fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinWidth(pixels); 3600fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3601fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3602fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3603fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3604fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3605fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMaxHeight(final int pixels) { 3606fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3607fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3608fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxHeight(pixels); 3609fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3610fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3611fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3612fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3613fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3614fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinHeight(final int pixels) { 3615fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3616fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3617fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinHeight(pixels); 3618fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3619fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3620fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3621fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3622fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3623fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinLines(final int minlines) { 3624fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3625fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3626fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinLines(minlines); 3627fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3628fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3629fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3630fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3631fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3632fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su /** 3633fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * Convenience for {@link TextView#setText(CharSequence, BufferType)}. And 3634fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * the buffer type is fixed to SPANNABLE. 3635fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 3636fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @param tv the text view 3637fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @param content the content 3638fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 3639fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setSpannableText(final TextView tv, final String content) { 3640fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3641fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3642fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su tv.setText(content, BufferType.SPANNABLE); 3643fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3644fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3645fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3646fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3647fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3648fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setLines(final int lines) { 3649fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3650fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3651fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLines(lines); 3652fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3653fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3654fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3655fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3656fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3657fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setHorizontallyScrolling(final boolean whether) { 3658fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3659fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3660fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHorizontallyScrolling(whether); 3661fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3662fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3663fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3664fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3665fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3666fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setWidth(final int pixels) { 3667fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3668fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3669fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setWidth(pixels); 3670fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3671fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3672fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3673fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3674fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3675fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setHeight(final int pixels) { 3676fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3677fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3678fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setHeight(pixels); 3679fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3680fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3681fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3682fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3683fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3684fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMinEms(final int ems) { 3685fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3686fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3687fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMinEms(ems); 3688fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3689fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3690fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3691fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3692fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3693fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setMaxEms(final int ems) { 3694fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3695fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3696fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setMaxEms(ems); 3697fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3698fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3699fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3700fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3701fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3702fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setEms(final int ems) { 3703fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3704fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3705fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setEms(ems); 3706fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3707fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3708fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3709fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3710fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3711fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private void setLineSpacing(final float add, final float mult) { 3712fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mActivity.runOnUiThread(new Runnable() { 3713fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void run() { 3714fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView.setLineSpacing(add, mult); 3715fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3716fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su }); 3717fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mInstrumentation.waitForIdleSync(); 3718fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3719fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3720fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static abstract class TestSelectedRunnable implements Runnable { 3721fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView mTextView; 3722fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mIsSelected1; 3723fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mIsSelected2; 3724fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3725fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public TestSelectedRunnable(TextView textview) { 3726fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = textview; 3727fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3728fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3729fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean getIsSelected1() { 3730fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mIsSelected1; 3731fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3732fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3733fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean getIsSelected2() { 3734fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mIsSelected2; 3735fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3736fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3737fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void saveIsSelected1() { 3738fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mIsSelected1 = mTextView.isSelected(); 3739fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3740fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3741fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void saveIsSelected2() { 3742fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mIsSelected2 = mTextView.isSelected(); 3743fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3744fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3745fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3746fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static abstract class TestLayoutRunnable implements Runnable { 3747fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private TextView mTextView; 3748fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private Layout mLayout; 3749fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3750fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public TestLayoutRunnable(TextView textview) { 3751fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mTextView = textview; 3752fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3753fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3754fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public Layout getLayout() { 3755fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mLayout; 3756fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3757fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3758fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void saveLayout() { 3759fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mLayout = mTextView.getLayout(); 3760fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3761fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3762fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3763fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private class MockEditableFactory extends Editable.Factory { 3764fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mhasCalledNewEditable; 3765fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private CharSequence mSource; 3766fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3767fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledNewEditable() { 3768fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mhasCalledNewEditable; 3769fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3770fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3771fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset() { 3772fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mhasCalledNewEditable = false; 3773fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = null; 3774fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3775fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3776fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public CharSequence getSource() { 3777fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mSource; 3778fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3779fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3780fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 3781fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public Editable newEditable(CharSequence source) { 3782fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mhasCalledNewEditable = true; 3783fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = source; 3784fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return super.newEditable(source); 3785fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3786fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3787fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3788fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private class MockSpannableFactory extends Spannable.Factory { 3789fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCalledNewSpannable; 3790fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private CharSequence mSource; 3791fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3792e1233dfb12fbfc0452d7680a161982577c7db106Gilles Debunne public boolean hasCalledNewSpannable() { 3793fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCalledNewSpannable; 3794fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3795fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3796fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset() { 3797fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledNewSpannable = false; 3798fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = null; 3799fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3800fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3801fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public CharSequence getSource() { 3802fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mSource; 3803fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3804fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3805fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su @Override 3806fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public Spannable newSpannable(CharSequence source) { 3807fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledNewSpannable = true; 3808fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mSource = source; 3809fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return super.newSpannable(source); 3810fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3811fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3812fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3813fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static class MockTextWatcher implements TextWatcher { 3814fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCalledAfterTextChanged; 3815fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCalledBeforeTextChanged; 3816fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasOnTextChanged; 3817fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3818fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset(){ 3819fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledAfterTextChanged = false; 3820fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledBeforeTextChanged = false; 3821fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasOnTextChanged = false; 3822fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3823fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3824fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledAfterTextChanged() { 3825fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCalledAfterTextChanged; 3826fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3827fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3828fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledBeforeTextChanged() { 3829fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCalledBeforeTextChanged; 3830fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3831fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3832fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCalledOnTextChanged() { 3833fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasOnTextChanged; 3834fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3835fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3836fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void afterTextChanged(Editable s) { 3837fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledAfterTextChanged = true; 3838fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3839fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3840fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void beforeTextChanged(CharSequence s, int start, int count, int after) { 3841fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCalledBeforeTextChanged = true; 3842fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3843fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3844fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void onTextChanged(CharSequence s, int start, int before, int count) { 3845fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasOnTextChanged = true; 3846fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3847fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3848fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3849fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su /** 3850fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * The listener interface for receiving mockOnLongClick events. The class 3851fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * that is interested in processing a mockOnLongClick event implements this 3852fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * interface, and the object created with that class is registered with a 3853fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * component using the component's 3854fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * <code>addMockOnLongClickListener<code> method. When 3855fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * the mockOnLongClick event occurs, that object's appropriate 3856fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * method is invoked. 3857fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 3858fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @see MockOnLongClickEvent 3859fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 3860fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static class MockOnLongClickListener implements OnLongClickListener { 3861fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mExpectedOnLongClickResult; 3862fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasLongClicked; 3863fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3864fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnLongClickListener(boolean result) { 3865fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mExpectedOnLongClickResult = result; 3866fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3867fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3868fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasLongClicked() { 3869fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasLongClicked; 3870fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3871fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3872fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean onLongClick(View v) { 3873fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasLongClicked = true; 3874fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mExpectedOnLongClickResult; 3875fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3876fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3877fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3878fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su /** 3879fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * The listener interface for receiving mockOnCreateContextMenu events. The 3880fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * class that is interested in processing a mockOnCreateContextMenu event 3881fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * implements this interface, and the object created with that class is 3882fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * registered with a component using the component's 3883fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * <code>addMockOnCreateContextMenuListener<code> method. When the 3884fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * mockOnCreateContextMenu event occurs, that object's appropriate method is 3885fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * invoked. 3886fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * 3887fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su * @see MockOnCreateContextMenuEvent 3888fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su */ 3889fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private static class MockOnCreateContextMenuListener implements OnCreateContextMenuListener { 3890fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mIsMenuItemsBlank; 3891fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su private boolean mHasCreatedContextMenu; 3892fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3893fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su MockOnCreateContextMenuListener(boolean isBlank) { 3894fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su this.mIsMenuItemsBlank = isBlank; 3895fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3896fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3897fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public boolean hasCreatedContextMenu() { 3898fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su return mHasCreatedContextMenu; 3899fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3900fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3901fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void reset() { 3902fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCreatedContextMenu = false; 3903fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3904fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su 3905fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 3906fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su mHasCreatedContextMenu = true; 3907fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su if (!mIsMenuItemsBlank) { 3908fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su menu.add("menu item"); 3909fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3910fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3911fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su } 3912fa0bdcfa2bdacc555a6cecd0e5e0ed46afa06970Scott Su} 3913