Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2016 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 
     17 package android.text.method.cts;
     18 
     19 import static org.junit.Assert.assertFalse;
     20 import static org.junit.Assert.assertTrue;
     21 import static org.mockito.AdditionalAnswers.returnsFirstArg;
     22 import static org.mockito.Mockito.any;
     23 import static org.mockito.Mockito.anyBoolean;
     24 import static org.mockito.Mockito.anyInt;
     25 import static org.mockito.Mockito.atLeastOnce;
     26 import static org.mockito.Mockito.mock;
     27 import static org.mockito.Mockito.reset;
     28 import static org.mockito.Mockito.verify;
     29 import static org.mockito.Mockito.when;
     30 
     31 import android.app.Instrumentation;
     32 import android.support.test.InstrumentationRegistry;
     33 import android.support.test.filters.MediumTest;
     34 import android.support.test.rule.ActivityTestRule;
     35 import android.support.test.runner.AndroidJUnit4;
     36 import android.text.method.TransformationMethod;
     37 import android.widget.Button;
     38 import android.widget.EditText;
     39 import android.widget.LinearLayout;
     40 import android.widget.LinearLayout.LayoutParams;
     41 
     42 import com.android.compatibility.common.util.PollingCheck;
     43 
     44 import org.junit.Before;
     45 import org.junit.Rule;
     46 import org.junit.Test;
     47 import org.junit.runner.RunWith;
     48 
     49 /**
     50  * Test that {@link TransformationMethod} interface gets called.
     51  */
     52 @MediumTest
     53 @RunWith(AndroidJUnit4.class)
     54 public class TransformationMethodTest {
     55     private static final int EDIT_TXT_ID = 1;
     56 
     57     private Instrumentation mInstrumentation;
     58     private CtsActivity mActivity;
     59     private TransformationMethod mMethod;
     60     private EditText mEditText;
     61     private Button mButton;
     62 
     63     @Rule
     64     public ActivityTestRule<CtsActivity> mActivityRule = new ActivityTestRule<>(CtsActivity.class);
     65 
     66     @Before
     67     public void setup() throws Throwable {
     68         mActivity = mActivityRule.getActivity();
     69         PollingCheck.waitFor(1000, mActivity::hasWindowFocus);
     70         mInstrumentation = InstrumentationRegistry.getInstrumentation();
     71         mMethod = mock(TransformationMethod.class);
     72         when(mMethod.getTransformation(any(), any())).then(returnsFirstArg());
     73 
     74         mActivityRule.runOnUiThread(() -> {
     75             mEditText = new EditTextNoIme(mActivity);
     76             mEditText.setId(EDIT_TXT_ID);
     77             mEditText.setTransformationMethod(mMethod);
     78             mButton = new Button(mActivity);
     79             mButton.setFocusableInTouchMode(true);
     80             LinearLayout layout = new LinearLayout(mActivity);
     81             layout.setOrientation(LinearLayout.VERTICAL);
     82             layout.addView(mEditText, new LayoutParams(LayoutParams.MATCH_PARENT,
     83                     LayoutParams.WRAP_CONTENT));
     84             layout.addView(mButton, new LayoutParams(LayoutParams.MATCH_PARENT,
     85                     LayoutParams.WRAP_CONTENT));
     86             mActivity.setContentView(layout);
     87             mEditText.requestFocus();
     88         });
     89         mInstrumentation.waitForIdleSync();
     90 
     91         assertTrue(mEditText.isFocused());
     92     }
     93 
     94     @Test
     95     public void testGetTransformation() throws Throwable {
     96         reset(mMethod);
     97         when(mMethod.getTransformation(any(), any())).then(returnsFirstArg());
     98         mActivityRule.runOnUiThread(() -> mEditText.setText("some text"));
     99         mInstrumentation.waitForIdleSync();
    100         verify(mMethod, atLeastOnce()).getTransformation(any(), any());
    101     }
    102 
    103     @Test
    104     public void testOnFocusChanged() throws Throwable {
    105         // lose focus
    106         reset(mMethod);
    107         assertTrue(mEditText.isFocused());
    108         mActivityRule.runOnUiThread(() -> mButton.requestFocus());
    109         mInstrumentation.waitForIdleSync();
    110         verify(mMethod, atLeastOnce()).onFocusChanged(any(), any(), anyBoolean(), anyInt(), any());
    111 
    112         // gain focus
    113         reset(mMethod);
    114         assertFalse(mEditText.isFocused());
    115         mActivityRule.runOnUiThread(() -> mEditText.requestFocus());
    116         mInstrumentation.waitForIdleSync();
    117         assertTrue(mEditText.isFocused());
    118         verify(mMethod, atLeastOnce()).onFocusChanged(any(), any(), anyBoolean(), anyInt(), any());
    119     }
    120 }
    121