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 */ 16package android.support.text.emoji; 17 18import static android.support.text.emoji.util.Emoji.EMOJI_SINGLE_CODEPOINT; 19import static android.support.text.emoji.util.EmojiMatcher.hasEmoji; 20import static android.support.text.emoji.util.EmojiMatcher.hasEmojiCount; 21 22import static org.junit.Assert.assertEquals; 23import static org.junit.Assert.assertFalse; 24import static org.junit.Assert.assertThat; 25import static org.junit.Assert.assertTrue; 26import static org.mockito.Matchers.any; 27import static org.mockito.Mockito.doThrow; 28import static org.mockito.Mockito.mock; 29import static org.mockito.Mockito.times; 30import static org.mockito.Mockito.verify; 31 32import android.annotation.TargetApi; 33import android.content.Context; 34import android.graphics.Color; 35import android.support.test.InstrumentationRegistry; 36import android.support.test.filters.SdkSuppress; 37import android.support.test.filters.SmallTest; 38import android.support.test.runner.AndroidJUnit4; 39import android.support.text.emoji.util.TestString; 40 41import org.junit.Before; 42import org.junit.Test; 43import org.junit.runner.RunWith; 44 45@SmallTest 46@RunWith(AndroidJUnit4.class) 47public class ConfigTest { 48 49 Context mContext; 50 51 @Before 52 public void setup() { 53 mContext = InstrumentationRegistry.getTargetContext(); 54 } 55 56 @Test(expected = NullPointerException.class) 57 public void testConstructor_throwsExceptionIfMetadataLoaderNull() { 58 new TestConfigBuilder.TestConfig(null); 59 } 60 61 @Test(expected = NullPointerException.class) 62 public void testInitCallback_throwsExceptionIfNull() { 63 new ValidTestConfig().registerInitCallback(null); 64 } 65 66 @Test(expected = NullPointerException.class) 67 public void testUnregisterInitCallback_throwsExceptionIfNull() { 68 new ValidTestConfig().unregisterInitCallback(null); 69 } 70 71 @Test 72 @SdkSuppress(minSdkVersion = 19) 73 @TargetApi(19) 74 public void testBuild_withDefaultValues() { 75 final EmojiCompat.Config config = new ValidTestConfig().setReplaceAll(true); 76 77 final EmojiCompat emojiCompat = EmojiCompat.reset(config); 78 79 final CharSequence processed = emojiCompat.process(new TestString(EMOJI_SINGLE_CODEPOINT) 80 .toString()); 81 assertThat(processed, hasEmojiCount(1)); 82 assertThat(processed, hasEmoji(EMOJI_SINGLE_CODEPOINT)); 83 } 84 85 @Test 86 public void testInitCallback_callsSuccessCallback() { 87 final EmojiCompat.InitCallback initCallback1 = mock(EmojiCompat.InitCallback.class); 88 final EmojiCompat.InitCallback initCallback2 = mock(EmojiCompat.InitCallback.class); 89 90 final EmojiCompat.Config config = new ValidTestConfig().registerInitCallback(initCallback1) 91 .registerInitCallback(initCallback2); 92 EmojiCompat.reset(config); 93 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 94 95 verify(initCallback1, times(1)).onInitialized(); 96 verify(initCallback2, times(1)).onInitialized(); 97 } 98 99 @Test 100 @SdkSuppress(minSdkVersion = 19) //Fail callback never called for pre 19 101 @TargetApi(19) 102 public void testInitCallback_callsFailCallback() { 103 final EmojiCompat.InitCallback initCallback1 = mock(EmojiCompat.InitCallback.class); 104 final EmojiCompat.InitCallback initCallback2 = mock(EmojiCompat.InitCallback.class); 105 final EmojiCompat.MetadataLoader loader = mock(EmojiCompat.MetadataLoader.class); 106 doThrow(new RuntimeException("")).when(loader).load(any(EmojiCompat.LoaderCallback 107 .class)); 108 109 final EmojiCompat.Config config = new TestConfigBuilder.TestConfig(loader) 110 .registerInitCallback(initCallback1) 111 .registerInitCallback(initCallback2); 112 EmojiCompat.reset(config); 113 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 114 115 verify(initCallback1, times(1)).onFailed(any(Throwable.class)); 116 verify(initCallback2, times(1)).onFailed(any(Throwable.class)); 117 } 118 119 @Test 120 public void testBuild_withEmojiSpanIndicator() { 121 EmojiCompat.Config config = new ValidTestConfig(); 122 EmojiCompat emojiCompat = EmojiCompat.reset(config); 123 124 assertFalse(emojiCompat.isEmojiSpanIndicatorEnabled()); 125 126 config = new ValidTestConfig().setEmojiSpanIndicatorEnabled(true); 127 emojiCompat = EmojiCompat.reset(config); 128 129 assertTrue(emojiCompat.isEmojiSpanIndicatorEnabled()); 130 } 131 132 @Test 133 public void testBuild_withEmojiSpanIndicatorColor() { 134 EmojiCompat.Config config = new ValidTestConfig(); 135 EmojiCompat emojiCompat = EmojiCompat.reset(config); 136 137 assertEquals(Color.GREEN, emojiCompat.getEmojiSpanIndicatorColor()); 138 139 config = new ValidTestConfig().setEmojiSpanIndicatorColor(Color.RED); 140 emojiCompat = EmojiCompat.reset(config); 141 142 assertEquals(Color.RED, emojiCompat.getEmojiSpanIndicatorColor()); 143 } 144 145 @Test 146 public void testBuild_defaultEmojiSpanIndicatorColor() { 147 final EmojiCompat.Config config = new ValidTestConfig().setEmojiSpanIndicatorEnabled(true); 148 final EmojiCompat emojiCompat = EmojiCompat.reset(config); 149 150 assertTrue(emojiCompat.isEmojiSpanIndicatorEnabled()); 151 } 152 153 private static class ValidTestConfig extends EmojiCompat.Config { 154 ValidTestConfig() { 155 super(new TestConfigBuilder.TestEmojiDataLoader()); 156 } 157 } 158} 159