Home | History | Annotate | Download | only in widget
      1 /*
      2  * Copyright (C) 2017 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 androidx.emoji.widget;
     18 
     19 import static androidx.emoji.util.EmojiMatcher.sameCharSequence;
     20 
     21 import static org.junit.Assert.assertEquals;
     22 import static org.mockito.Matchers.any;
     23 import static org.mockito.Matchers.anyInt;
     24 import static org.mockito.Matchers.eq;
     25 import static org.mockito.Mockito.mock;
     26 import static org.mockito.Mockito.times;
     27 import static org.mockito.Mockito.verify;
     28 import static org.mockito.Mockito.when;
     29 
     30 import android.support.test.filters.SmallTest;
     31 import android.support.test.runner.AndroidJUnit4;
     32 import android.text.Spannable;
     33 import android.text.SpannableString;
     34 import android.widget.EditText;
     35 
     36 import androidx.emoji.text.EmojiCompat;
     37 
     38 import org.junit.Before;
     39 import org.junit.Test;
     40 import org.junit.runner.RunWith;
     41 
     42 @SmallTest
     43 @RunWith(AndroidJUnit4.class)
     44 public class EmojiTextWatcherTest {
     45 
     46     private EmojiTextWatcher mTextWatcher;
     47     private EmojiCompat mEmojiCompat;
     48 
     49     @Before
     50     public void setup() {
     51         final EditText editText = mock(EditText.class);
     52         mEmojiCompat = mock(EmojiCompat.class);
     53         EmojiCompat.reset(mEmojiCompat);
     54         mTextWatcher = new EmojiTextWatcher(editText);
     55     }
     56 
     57     @Test
     58     public void testOnTextChanged_callsProcess() {
     59         final Spannable testString = new SpannableString("abc");
     60         when(mEmojiCompat.getLoadState()).thenReturn(EmojiCompat.LOAD_STATE_SUCCEEDED);
     61 
     62         mTextWatcher.onTextChanged(testString, 0, 0, 1);
     63 
     64         verify(mEmojiCompat, times(1)).process(sameCharSequence(testString), eq(0), eq(1),
     65                 eq(Integer.MAX_VALUE), anyInt());
     66         verify(mEmojiCompat, times(0)).registerInitCallback(any(EmojiCompat.InitCallback.class));
     67     }
     68 
     69     @Test
     70     public void testOnTextChanged_whenEmojiCompatLoading() {
     71         final Spannable testString = new SpannableString("abc");
     72         when(mEmojiCompat.getLoadState()).thenReturn(EmojiCompat.LOAD_STATE_LOADING);
     73 
     74         mTextWatcher.onTextChanged(testString, 0, 0, 1);
     75 
     76         verify(mEmojiCompat, times(0)).process(any(Spannable.class), anyInt(), anyInt(), anyInt(),
     77                 anyInt());
     78         verify(mEmojiCompat, times(1)).registerInitCallback(any(EmojiCompat.InitCallback.class));
     79     }
     80 
     81     @Test
     82     public void testOnTextChanged_whenEmojiCompatLoadFailed() {
     83         final Spannable testString = new SpannableString("abc");
     84         when(mEmojiCompat.getLoadState()).thenReturn(EmojiCompat.LOAD_STATE_FAILED);
     85 
     86         mTextWatcher.onTextChanged(testString, 0, 0, 1);
     87 
     88         verify(mEmojiCompat, times(0)).process(any(Spannable.class), anyInt(), anyInt(), anyInt(),
     89                 anyInt());
     90         verify(mEmojiCompat, times(0)).registerInitCallback(any(EmojiCompat.InitCallback.class));
     91     }
     92 
     93     @Test
     94     public void testSetEmojiReplaceStrategy() {
     95         final Spannable testString = new SpannableString("abc");
     96         when(mEmojiCompat.getLoadState()).thenReturn(EmojiCompat.LOAD_STATE_SUCCEEDED);
     97 
     98         assertEquals(EmojiCompat.REPLACE_STRATEGY_DEFAULT, mTextWatcher.getEmojiReplaceStrategy());
     99 
    100         mTextWatcher.onTextChanged(testString, 0, 0, 1);
    101 
    102         verify(mEmojiCompat, times(1)).process(any(Spannable.class), anyInt(), anyInt(), anyInt(),
    103                 eq(EmojiCompat.REPLACE_STRATEGY_DEFAULT));
    104 
    105         mTextWatcher.setEmojiReplaceStrategy(EmojiCompat.REPLACE_STRATEGY_ALL);
    106 
    107         mTextWatcher.onTextChanged(testString, 0, 0, 1);
    108 
    109         verify(mEmojiCompat, times(1)).process(any(Spannable.class), anyInt(), anyInt(), anyInt(),
    110                 eq(EmojiCompat.REPLACE_STRATEGY_ALL));
    111     }
    112 
    113     @Test
    114     public void testFilter_withManualLoadStrategy() {
    115         final Spannable testString = new SpannableString("abc");
    116         when(mEmojiCompat.getLoadState()).thenReturn(EmojiCompat.LOAD_STATE_DEFAULT);
    117 
    118         mTextWatcher.onTextChanged(testString, 0, 0, 1);
    119 
    120         verify(mEmojiCompat, times(0)).process(any(Spannable.class), anyInt(), anyInt());
    121         verify(mEmojiCompat, times(1)).registerInitCallback(any(EmojiCompat.InitCallback.class));
    122     }
    123 }
    124