blob: eb0cf04df82b583324f59f7b51711f9b3674ad1e [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content.browser;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.inputmethod.EditorInfo;
import org.chromium.content.browser.input.AdapterInputConnection;
import org.chromium.content.browser.input.ImeAdapter;
import org.chromium.content.browser.input.InputMethodManagerWrapper;
import org.chromium.content.browser.test.util.TestInputMethodManagerWrapper;
import org.chromium.content_shell_apk.ContentShellTestBase;
/**
* Tests that when InputConnection is recreated, the text is still retained.
*/
public class ContentViewCoreInputConnectionTest extends ContentShellTestBase {
private ContentViewCore mContentViewCore;
private TestImeAdapter mImeAdapter;
private TestInputMethodManagerWrapper mInputMethodManagerWrapper;
private static class TestImeAdapter extends ImeAdapter {
public TestImeAdapter(InputMethodManagerWrapper immw) {
super(immw, null);
}
@Override
public boolean hasTextInputType() {
return true;
}
}
@Override
public void setUp() throws Exception {
super.setUp();
mContentViewCore = new ContentViewCore(getActivity());
mInputMethodManagerWrapper = new TestInputMethodManagerWrapper(mContentViewCore);
mImeAdapter = new TestImeAdapter(mInputMethodManagerWrapper);
mImeAdapter.setInputMethodManagerWrapper(new TestInputMethodManagerWrapper(
mContentViewCore));
mContentViewCore.setImeAdapterForTest(mImeAdapter);
mContentViewCore.setContainerView(getActivity().getActiveShell().getContentView());
}
/**
* When creating a new InputConnection (e.g. after switching software keyboard), make sure the
* text content in the Editable is not lost.
*/
@SmallTest
@RerunWithUpdatedContainerView
public void testRecreateInputConnection() throws Exception {
EditorInfo info = new EditorInfo();
mContentViewCore.onCreateInputConnection(info);
AdapterInputConnection adapter = mContentViewCore.getAdapterInputConnectionForTest();
adapter.updateState("Is this text restored?", 0, 0, 0, 0, true);
String text = mContentViewCore.getEditableForTest().toString();
assertEquals("Check if the initial text is stored.", "Is this text restored?", text);
// Create a new InputConnection.
EditorInfo info2 = new EditorInfo();
mContentViewCore.onCreateInputConnection(info2);
String newtext = mContentViewCore.getEditableForTest().toString();
assertEquals("Check if the string is restored.", "Is this text restored?", newtext);
}
}