1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.text.method.cts; 18 19import com.android.cts.stub.R; 20 21 22import android.app.Activity; 23import android.app.Instrumentation; 24import android.test.ActivityInstrumentationTestCase2; 25import android.text.InputType; 26import android.text.Selection; 27import android.text.Spannable; 28import android.text.SpannableStringBuilder; 29import android.text.method.QwertyKeyListener; 30import android.text.method.TextKeyListener; 31import android.text.method.TextKeyListener.Capitalize; 32import android.view.KeyEvent; 33import android.widget.TextView; 34import android.widget.TextView.BufferType; 35 36public class QwertyKeyListenerTest extends 37 ActivityInstrumentationTestCase2<KeyListenerStubActivity> { 38 private Activity mActivity; 39 private Instrumentation mInstrumentation; 40 private TextView mTextView; 41 42 public QwertyKeyListenerTest() { 43 super("com.android.cts.stub", KeyListenerStubActivity.class); 44 } 45 46 @Override 47 protected void setUp() throws Exception { 48 super.setUp(); 49 mActivity = getActivity(); 50 mInstrumentation = getInstrumentation(); 51 mTextView = (TextView) mActivity.findViewById(R.id.keylistener_textview); 52 } 53 54 public void testConstructor() { 55 new QwertyKeyListener(Capitalize.NONE, false); 56 57 new QwertyKeyListener(Capitalize.WORDS, true); 58 59 new QwertyKeyListener(null, true); 60 } 61 62 public void testOnKeyDown_capitalizeNone() { 63 QwertyKeyListener keyListener = QwertyKeyListener.getInstance(false, Capitalize.NONE); 64 65 prepareEmptyTextView(); 66 67 callOnKeyDown(keyListener, KeyEvent.KEYCODE_H); 68 assertEquals("h", mTextView.getText().toString()); 69 70 callOnKeyDown(keyListener, KeyEvent.KEYCODE_E); 71 assertEquals("he", mTextView.getText().toString()); 72 73 callOnKeyDown(keyListener, KeyEvent.KEYCODE_L); 74 assertEquals("hel", mTextView.getText().toString()); 75 76 callOnKeyDown(keyListener, KeyEvent.KEYCODE_L); 77 assertEquals("hell", mTextView.getText().toString()); 78 79 callOnKeyDown(keyListener, KeyEvent.KEYCODE_O); 80 assertEquals("hello", mTextView.getText().toString()); 81 } 82 83 public void testOnKeyDown_capitalizeCharacters() { 84 QwertyKeyListener keyListener = QwertyKeyListener.getInstance(false, 85 Capitalize.CHARACTERS); 86 87 prepareEmptyTextView(); 88 89 callOnKeyDown(keyListener, KeyEvent.KEYCODE_H); 90 assertEquals("H", mTextView.getText().toString()); 91 92 callOnKeyDown(keyListener, KeyEvent.KEYCODE_E); 93 assertEquals("HE", mTextView.getText().toString()); 94 95 callOnKeyDown(keyListener, KeyEvent.KEYCODE_L); 96 assertEquals("HEL", mTextView.getText().toString()); 97 98 callOnKeyDown(keyListener, KeyEvent.KEYCODE_L); 99 assertEquals("HELL", mTextView.getText().toString()); 100 101 callOnKeyDown(keyListener, KeyEvent.KEYCODE_O); 102 assertEquals("HELLO", mTextView.getText().toString()); 103 } 104 105 public void testOnKeyDown_capitalizeSentences() { 106 QwertyKeyListener keyListener = QwertyKeyListener.getInstance(false, 107 Capitalize.SENTENCES); 108 109 prepareEmptyTextView(); 110 111 callOnKeyDown(keyListener, KeyEvent.KEYCODE_H); 112 assertEquals("H", mTextView.getText().toString()); 113 114 callOnKeyDown(keyListener, KeyEvent.KEYCODE_I); 115 assertEquals("Hi", mTextView.getText().toString()); 116 117 callOnKeyDown(keyListener, KeyEvent.KEYCODE_PERIOD); 118 assertEquals("Hi.", mTextView.getText().toString()); 119 120 callOnKeyDown(keyListener, KeyEvent.KEYCODE_SPACE); 121 assertEquals("Hi. ", mTextView.getText().toString()); 122 123 callOnKeyDown(keyListener, KeyEvent.KEYCODE_B); 124 assertEquals("Hi. B", mTextView.getText().toString()); 125 126 callOnKeyDown(keyListener, KeyEvent.KEYCODE_Y); 127 assertEquals("Hi. By", mTextView.getText().toString()); 128 129 callOnKeyDown(keyListener, KeyEvent.KEYCODE_E); 130 assertEquals("Hi. Bye", mTextView.getText().toString()); 131 } 132 133 public void testOnKeyDown_capitalizeWords() { 134 QwertyKeyListener keyListener = QwertyKeyListener.getInstance(false, 135 Capitalize.WORDS); 136 137 prepareEmptyTextView(); 138 139 callOnKeyDown(keyListener, KeyEvent.KEYCODE_H); 140 assertEquals("H", mTextView.getText().toString()); 141 142 callOnKeyDown(keyListener, KeyEvent.KEYCODE_I); 143 assertEquals("Hi", mTextView.getText().toString()); 144 145 callOnKeyDown(keyListener, KeyEvent.KEYCODE_SPACE); 146 assertEquals("Hi ", mTextView.getText().toString()); 147 148 callOnKeyDown(keyListener, KeyEvent.KEYCODE_B); 149 assertEquals("Hi B", mTextView.getText().toString()); 150 151 callOnKeyDown(keyListener, KeyEvent.KEYCODE_Y); 152 assertEquals("Hi By", mTextView.getText().toString()); 153 154 callOnKeyDown(keyListener, KeyEvent.KEYCODE_E); 155 assertEquals("Hi Bye", mTextView.getText().toString()); 156 } 157 158 private void prepareEmptyTextView() { 159 mActivity.runOnUiThread(new Runnable() { 160 public void run() { 161 mTextView.setText("", BufferType.EDITABLE); 162 Selection.setSelection(mTextView.getEditableText(), 0, 0); 163 } 164 }); 165 mInstrumentation.waitForIdleSync(); 166 assertEquals("", mTextView.getText().toString()); 167 } 168 169 private void callOnKeyDown(final QwertyKeyListener keyListener, final int keyCode) { 170 mActivity.runOnUiThread(new Runnable() { 171 public void run() { 172 keyListener.onKeyDown(mTextView, mTextView.getEditableText(), keyCode, 173 new KeyEvent(KeyEvent.ACTION_DOWN, keyCode)); 174 } 175 }); 176 mInstrumentation.waitForIdleSync(); 177 } 178 179 public void testGetInstance() { 180 QwertyKeyListener listener1 = QwertyKeyListener.getInstance(true, Capitalize.WORDS); 181 QwertyKeyListener listener2 = QwertyKeyListener.getInstance(true, Capitalize.WORDS); 182 QwertyKeyListener listener3 = QwertyKeyListener.getInstance(false, Capitalize.WORDS); 183 QwertyKeyListener listener4 = QwertyKeyListener.getInstance(true, Capitalize.SENTENCES); 184 185 assertNotNull(listener1); 186 assertNotNull(listener2); 187 assertSame(listener1, listener2); 188 189 assertNotSame(listener1, listener3); 190 assertNotSame(listener1, listener4); 191 assertNotSame(listener4, listener3); 192 } 193 194 public void testMarkAsReplaced() { 195 SpannableStringBuilder content = new SpannableStringBuilder("123456"); 196 197 Object[] repl = content.getSpans(0, content.length(), Object.class); 198 assertEquals(0, repl.length); 199 200 QwertyKeyListener.markAsReplaced(content, 0, content.length(), "abcd"); 201 repl = content.getSpans(0, content.length(), Object.class); 202 assertEquals(1, repl.length); 203 assertEquals(0, content.getSpanStart(repl[0])); 204 assertEquals(content.length(), content.getSpanEnd(repl[0])); 205 assertEquals(Spannable.SPAN_EXCLUSIVE_EXCLUSIVE, content.getSpanFlags(repl[0])); 206 207 QwertyKeyListener.markAsReplaced(content, 1, 2, "abcd"); 208 repl = content.getSpans(0, content.length(), Object.class); 209 assertEquals(1, repl.length); 210 assertEquals(1, content.getSpanStart(repl[0])); 211 assertEquals(2, content.getSpanEnd(repl[0])); 212 assertEquals(Spannable.SPAN_EXCLUSIVE_EXCLUSIVE, content.getSpanFlags(repl[0])); 213 214 try { 215 QwertyKeyListener.markAsReplaced(null, 1, 2, "abcd"); 216 fail("should throw NullPointerException."); 217 } catch (NullPointerException e) { 218 } 219 220 try { 221 QwertyKeyListener.markAsReplaced(content, 1, 2, null); 222 fail("should throw NullPointerException."); 223 } catch (NullPointerException e) { 224 } 225 } 226 227 public void testGetInputType() { 228 QwertyKeyListener listener = QwertyKeyListener.getInstance(false, Capitalize.NONE); 229 int expected = InputType.TYPE_CLASS_TEXT; 230 assertEquals(expected, listener.getInputType()); 231 232 listener = QwertyKeyListener.getInstance(false, Capitalize.CHARACTERS); 233 expected = InputType.TYPE_CLASS_TEXT 234 | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS; 235 assertEquals(expected, listener.getInputType()); 236 } 237} 238