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