1 package android.view; 2 3 import static com.google.common.truth.Truth.assertThat; 4 import static org.junit.Assert.assertNotNull; 5 import static org.junit.Assert.assertThrows; 6 7 import androidx.test.ext.junit.runners.AndroidJUnit4; 8 import org.junit.Before; 9 import org.junit.Test; 10 import org.junit.runner.RunWith; 11 12 /** 13 * Test {@link android.view.KeyCharacterMap}. 14 * 15 * <p>Inspired from Android cts/tests/tests/view/src/android/view/cts/KeyCharacterMap.java 16 */ 17 @RunWith(AndroidJUnit4.class) 18 public final class KeyCharacterMapTest { 19 20 private KeyCharacterMap keyCharacterMap; 21 22 @Before setup()23 public void setup() { 24 keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); 25 } 26 27 @Test testLoad()28 public void testLoad() { 29 keyCharacterMap = null; 30 keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.BUILT_IN_KEYBOARD); 31 assertNotNull(keyCharacterMap); 32 } 33 34 @Test testGetMatchNull()35 public void testGetMatchNull() { 36 assertThrows( 37 IllegalArgumentException.class, () -> keyCharacterMap.getMatch(KeyEvent.KEYCODE_0, null)); 38 } 39 40 @Test testGetMatchMetaStateNull()41 public void testGetMatchMetaStateNull() { 42 assertThrows( 43 IllegalArgumentException.class, 44 () -> keyCharacterMap.getMatch(KeyEvent.KEYCODE_0, null, 1)); 45 } 46 47 @Test testGetKeyboardType()48 public void testGetKeyboardType() { 49 assertThat(keyCharacterMap.getKeyboardType()).isEqualTo(KeyCharacterMap.FULL); 50 } 51 52 @Test testGetEventsNull()53 public void testGetEventsNull() { 54 assertThrows(IllegalArgumentException.class, () -> keyCharacterMap.getEvents(null)); 55 } 56 57 @Test testGetEventsLowerCase()58 public void testGetEventsLowerCase() { 59 KeyEvent[] events = keyCharacterMap.getEvents("test".toCharArray()); 60 61 assertThat(events[0].getAction()).isEqualTo(KeyEvent.ACTION_DOWN); 62 assertThat(events[0].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_T); 63 assertThat(events[1].getAction()).isEqualTo(KeyEvent.ACTION_UP); 64 assertThat(events[1].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_T); 65 66 assertThat(events[2].getAction()).isEqualTo(KeyEvent.ACTION_DOWN); 67 assertThat(events[2].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_E); 68 assertThat(events[3].getAction()).isEqualTo(KeyEvent.ACTION_UP); 69 assertThat(events[3].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_E); 70 71 assertThat(events[4].getAction()).isEqualTo(KeyEvent.ACTION_DOWN); 72 assertThat(events[4].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_S); 73 assertThat(events[5].getAction()).isEqualTo(KeyEvent.ACTION_UP); 74 assertThat(events[5].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_S); 75 76 assertThat(events[6].getAction()).isEqualTo(KeyEvent.ACTION_DOWN); 77 assertThat(events[6].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_T); 78 assertThat(events[7].getAction()).isEqualTo(KeyEvent.ACTION_UP); 79 assertThat(events[7].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_T); 80 } 81 82 @Test testGetEventsCapital()83 public void testGetEventsCapital() { 84 // Just assert that we got something back, there are many ways to return correct KeyEvents for 85 // this sequence. 86 assertThat(keyCharacterMap.getEvents("Test".toCharArray())).isNotEmpty(); 87 88 char c = 'a'; 89 keyCharacterMap.getEvents(new char[] {c}); 90 } 91 92 @Test testUnknownCharacters()93 public void testUnknownCharacters() { 94 assertThat(keyCharacterMap.get(KeyEvent.KEYCODE_UNKNOWN, 0)).isEqualTo(0); 95 assertThat(keyCharacterMap.get(KeyEvent.KEYCODE_BACK, 0)).isEqualTo(0); 96 } 97 98 @Test testGetNumber()99 public void testGetNumber() { 100 assertThat(keyCharacterMap.getNumber(KeyEvent.KEYCODE_1)).isEqualTo('1'); 101 } 102 103 @Test testGetDisplayLabel()104 public void testGetDisplayLabel() { 105 assertThat(keyCharacterMap.getDisplayLabel(KeyEvent.KEYCODE_W)).isEqualTo('W'); 106 } 107 108 @Test testIsPrintingKey()109 public void testIsPrintingKey() { 110 assertThat(keyCharacterMap.isPrintingKey(KeyEvent.KEYCODE_W)).isTrue(); 111 assertThat(keyCharacterMap.isPrintingKey(KeyEvent.KEYCODE_ALT_LEFT)).isFalse(); 112 } 113 } 114