Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.content.browser.input; | 5 package org.chromium.content.browser.input; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.os.IBinder; | 8 import android.os.IBinder; |
| 9 import android.os.ResultReceiver; | 9 import android.os.ResultReceiver; |
| 10 import android.test.suitebuilder.annotation.MediumTest; | 10 import android.test.suitebuilder.annotation.MediumTest; |
| 11 import android.test.suitebuilder.annotation.SmallTest; | 11 import android.test.suitebuilder.annotation.SmallTest; |
| 12 import android.text.Editable; | 12 import android.text.Editable; |
| 13 import android.text.Selection; | 13 import android.text.Selection; |
| 14 import android.view.KeyEvent; | |
| 15 import android.view.View; | 14 import android.view.View; |
| 16 import android.view.inputmethod.BaseInputConnection; | 15 import android.view.inputmethod.BaseInputConnection; |
| 17 import android.view.inputmethod.EditorInfo; | 16 import android.view.inputmethod.EditorInfo; |
| 18 | 17 |
| 19 import org.chromium.base.test.util.Feature; | 18 import org.chromium.base.test.util.Feature; |
| 20 import org.chromium.content.browser.input.AdapterInputConnection.ImeState; | 19 import org.chromium.content.browser.input.AdapterInputConnection.ImeState; |
| 21 import org.chromium.content.browser.input.ImeAdapter.ImeAdapterDelegate; | 20 import org.chromium.content.browser.input.ImeAdapter.ImeAdapterDelegate; |
| 22 import org.chromium.content_shell_apk.ContentShellTestBase; | 21 import org.chromium.content_shell_apk.ContentShellTestBase; |
| 23 | 22 |
| 24 import java.util.ArrayList; | 23 import java.util.ArrayList; |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 99 mConnection.endBatchEdit(); | 98 mConnection.endBatchEdit(); |
| 100 mConnection.setComposingText("test", 1); | 99 mConnection.setComposingText("test", 1); |
| 101 assertEquals(0, mWrapper.getUpdateSelectionCallCount()); | 100 assertEquals(0, mWrapper.getUpdateSelectionCallCount()); |
| 102 mConnection.endBatchEdit(); | 101 mConnection.endBatchEdit(); |
| 103 assertEquals(1, mWrapper.getUpdateSelectionCallCount()); | 102 assertEquals(1, mWrapper.getUpdateSelectionCallCount()); |
| 104 mWrapper.verifyUpdateSelectionCall(0, 4, 4, 0, 4); | 103 mWrapper.verifyUpdateSelectionCall(0, 4, 4, 0, 4); |
| 105 } | 104 } |
| 106 | 105 |
| 107 @MediumTest | 106 @MediumTest |
| 108 @Feature({"TextInput", "Main"}) | 107 @Feature({"TextInput", "Main"}) |
| 109 public void testDeleteSurroundingText() throws Throwable { | 108 public void testDeleteSurroundingText() throws Throwable { |
|
Changwan Ryu
2015/10/09 12:34:28
Probably we should remove this test now. IMO this
aelias_OOO_until_Jul13
2015/10/09 20:42:10
Done.
| |
| 110 // Tests back deletion of a single character with empty input. | 109 // Tests back deletion of a single character with empty input. |
| 111 mConnection.deleteSurroundingText(1, 0); | 110 mConnection.deleteSurroundingText(1, 0); |
| 112 assertEquals(0, mImeAdapter.getDeleteSurroundingTextCallCount()); | 111 assertEquals(1, mImeAdapter.getDeleteSurroundingTextCallCount()); |
| 113 Integer[] keyEvents = mImeAdapter.getKeyEvents(); | |
| 114 assertEquals(1, keyEvents.length); | |
| 115 assertEquals(KeyEvent.KEYCODE_DEL, keyEvents[0].intValue()); | |
| 116 | 112 |
| 117 // Tests forward deletion of a single character with non-empty input. | 113 // Tests forward deletion of a single character with non-empty input. |
| 118 mEditable.replace(0, mEditable.length(), " hello"); | 114 mEditable.replace(0, mEditable.length(), " hello"); |
| 119 Selection.setSelection(mEditable, 0, 0); | 115 Selection.setSelection(mEditable, 0, 0); |
| 120 mConnection.deleteSurroundingText(0, 1); | 116 mConnection.deleteSurroundingText(0, 1); |
| 121 assertEquals(0, mImeAdapter.getDeleteSurroundingTextCallCount()); | 117 assertEquals(2, mImeAdapter.getDeleteSurroundingTextCallCount()); |
| 122 keyEvents = mImeAdapter.getKeyEvents(); | |
| 123 assertEquals(2, keyEvents.length); | |
| 124 assertEquals(KeyEvent.KEYCODE_FORWARD_DEL, keyEvents[1].intValue()); | |
| 125 | 118 |
| 126 // Tests back deletion of multiple characters with non-empty input. | 119 // Tests back deletion of multiple characters with non-empty input. |
| 127 mEditable.replace(0, mEditable.length(), "hello "); | 120 mEditable.replace(0, mEditable.length(), "hello "); |
| 128 Selection.setSelection(mEditable, mEditable.length(), mEditable.length() ); | 121 Selection.setSelection(mEditable, mEditable.length(), mEditable.length() ); |
| 129 mConnection.deleteSurroundingText(2, 0); | 122 mConnection.deleteSurroundingText(2, 0); |
| 130 assertEquals(1, mImeAdapter.getDeleteSurroundingTextCallCount()); | 123 assertEquals(3, mImeAdapter.getDeleteSurroundingTextCallCount()); |
| 131 assertEquals(2, mImeAdapter.getKeyEvents().length); | |
| 132 } | 124 } |
| 133 | 125 |
| 134 @MediumTest | 126 @MediumTest |
| 135 @Feature({"TextInput", "Main"}) | 127 @Feature({"TextInput", "Main"}) |
| 136 public void testNewConnectionFinishesComposingText() throws Throwable { | 128 public void testNewConnectionFinishesComposingText() throws Throwable { |
| 137 mConnection.setComposingText("abc", 1); | 129 mConnection.setComposingText("abc", 1); |
| 138 assertEquals(0, BaseInputConnection.getComposingSpanStart(mEditable)); | 130 assertEquals(0, BaseInputConnection.getComposingSpanStart(mEditable)); |
| 139 assertEquals(3, BaseInputConnection.getComposingSpanEnd(mEditable)); | 131 assertEquals(3, BaseInputConnection.getComposingSpanEnd(mEditable)); |
| 140 | 132 |
| 141 mConnection = new AdapterInputConnection( | 133 mConnection = new AdapterInputConnection( |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 155 super(wrapper, embedder); | 147 super(wrapper, embedder); |
| 156 } | 148 } |
| 157 | 149 |
| 158 @Override | 150 @Override |
| 159 public boolean deleteSurroundingText(int beforeLength, int afterLength) { | 151 public boolean deleteSurroundingText(int beforeLength, int afterLength) { |
| 160 ++mDeleteSurroundingTextCounter; | 152 ++mDeleteSurroundingTextCounter; |
| 161 return true; | 153 return true; |
| 162 } | 154 } |
| 163 | 155 |
| 164 @Override | 156 @Override |
| 165 public void sendKeyEventWithKeyCode(int keyCode, int flags) { | 157 public void sendSyntheticKeyPress(int keyCode, int flags) { |
| 166 mKeyEventQueue.add(keyCode); | 158 mKeyEventQueue.add(keyCode); |
| 167 } | 159 } |
| 168 | 160 |
| 169 @Override | 161 @Override |
| 170 protected void finishComposingText() { | 162 protected void finishComposingText() { |
| 171 ++mFinishComposingTextCounter; | 163 ++mFinishComposingTextCounter; |
| 172 super.finishComposingText(); | 164 super.finishComposingText(); |
| 173 } | 165 } |
| 174 | 166 |
| 175 public int getDeleteSurroundingTextCallCount() { | 167 public int getDeleteSurroundingTextCallCount() { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 | 243 |
| 252 private static void assertCorrectState(String text, int selectionStart, int selectionEnd, | 244 private static void assertCorrectState(String text, int selectionStart, int selectionEnd, |
| 253 int compositionStart, int compositionEnd, ImeState actual) { | 245 int compositionStart, int compositionEnd, ImeState actual) { |
| 254 assertEquals("Text did not match", text, actual.text); | 246 assertEquals("Text did not match", text, actual.text); |
| 255 assertEquals("Selection start did not match", selectionStart, actual.sel ectionStart); | 247 assertEquals("Selection start did not match", selectionStart, actual.sel ectionStart); |
| 256 assertEquals("Selection end did not match", selectionEnd, actual.selecti onEnd); | 248 assertEquals("Selection end did not match", selectionEnd, actual.selecti onEnd); |
| 257 assertEquals("Composition start did not match", compositionStart, actual .compositionStart); | 249 assertEquals("Composition start did not match", compositionStart, actual .compositionStart); |
| 258 assertEquals("Composition end did not match", compositionEnd, actual.com positionEnd); | 250 assertEquals("Composition end did not match", compositionEnd, actual.com positionEnd); |
| 259 } | 251 } |
| 260 } | 252 } |
| OLD | NEW |