blob: 49d9115319e8cae87cbb03b6ff6bffd5e3a5683c [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.widget;
import android.app.Activity;
import android.content.Intent;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
import android.text.GetChars;
import android.text.Selection;
import android.text.Spannable;
/**
* TextViewTest tests {@link TextView}.
*/
public class TextViewTest extends ActivityInstrumentationTestCase2<TextViewActivity> {
public TextViewTest() {
super(TextViewActivity.class);
}
@SmallTest
public void testArray() throws Exception {
TextView tv = new TextView(getActivity());
char[] c = new char[] { 'H', 'e', 'l', 'l', 'o', ' ',
'W', 'o', 'r', 'l', 'd', '!' };
tv.setText(c, 1, 4);
CharSequence oldText = tv.getText();
tv.setText(c, 4, 5);
CharSequence newText = tv.getText();
assertTrue(newText == oldText);
assertEquals(5, newText.length());
assertEquals('o', newText.charAt(0));
assertEquals("o Wor", newText.toString());
assertEquals(" Wo", newText.subSequence(1, 4));
char[] c2 = new char[7];
((GetChars) newText).getChars(1, 4, c2, 2);
assertEquals('\0', c2[1]);
assertEquals(' ', c2[2]);
assertEquals('W', c2[3]);
assertEquals('o', c2[4]);
assertEquals('\0', c2[5]);
}
@SmallTest
public void testProcessTextActivityResultNonEditable() {
final TextView tv = new TextView(getActivity());
CharSequence originalText = "This is some text.";
tv.setText(originalText, TextView.BufferType.SPANNABLE);
assertEquals(originalText, tv.getText().toString());
tv.setTextIsSelectable(true);
Selection.setSelection((Spannable) tv.getText(), 0, tv.getText().length());
// We need to run this in the UI thread, as it will create a Toast.
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
CharSequence newText = "Text is replaced.";
Intent data = new Intent();
data.putExtra(Intent.EXTRA_PROCESS_TEXT, newText);
tv.onActivityResult(TextView.PROCESS_TEXT_REQUEST_CODE, Activity.RESULT_OK, data);
}
});
getInstrumentation().waitForIdleSync();
// This is a TextView, which can't be modified. Hence no change should have been made.
assertEquals(originalText, tv.getText().toString());
}
@SmallTest
public void testProcessTextActivityResultEditable() {
EditText tv = new EditText(getActivity());
CharSequence originalText = "This is some text.";
tv.setText(originalText, TextView.BufferType.SPANNABLE);
assertEquals(originalText, tv.getText().toString());
tv.setTextIsSelectable(true);
Selection.setSelection(tv.getText(), 0, tv.getText().length());
CharSequence newText = "Text is replaced.";
Intent data = new Intent();
data.putExtra(Intent.EXTRA_PROCESS_TEXT, newText);
tv.onActivityResult(TextView.PROCESS_TEXT_REQUEST_CODE, Activity.RESULT_OK, data);
assertEquals(newText, tv.getText().toString());
}
@SmallTest
public void testProcessTextActivityResultCancel() {
EditText tv = new EditText(getActivity());
CharSequence originalText = "This is some text.";
tv.setText(originalText, TextView.BufferType.SPANNABLE);
assertEquals(originalText, tv.getText().toString());
tv.setTextIsSelectable(true);
Selection.setSelection(tv.getText(), 0, tv.getText().length());
CharSequence newText = "Text is replaced.";
Intent data = new Intent();
data.putExtra(Intent.EXTRA_PROCESS_TEXT, newText);
tv.onActivityResult(TextView.PROCESS_TEXT_REQUEST_CODE, Activity.RESULT_CANCELED, data);
assertEquals(originalText, tv.getText().toString());
}
@SmallTest
public void testProcessTextActivityNoData() {
EditText tv = new EditText(getActivity());
CharSequence originalText = "This is some text.";
tv.setText(originalText, TextView.BufferType.SPANNABLE);
assertEquals(originalText, tv.getText().toString());
tv.setTextIsSelectable(true);
Selection.setSelection(tv.getText(), 0, tv.getText().length());
tv.onActivityResult(TextView.PROCESS_TEXT_REQUEST_CODE, Activity.RESULT_OK, null);
assertEquals(originalText, tv.getText().toString());
}
}