blob: 174335f7abc6200a22e5f7ef41baa60dfd45030b [file] [log] [blame]
package android.view;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertNotNull;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.annotation.internal.DoNotInstrument;
/**
* Test {@link android.view.KeyCharacterMap}.
*
* <p>Inspired from Android cts/tests/tests/view/src/android/view/cts/KeyCharacterMap.java
*/
@DoNotInstrument
@RunWith(AndroidJUnit4.class)
public final class KeyCharacterMapTest {
private KeyCharacterMap keyCharacterMap;
@Before
public void setup() {
keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
}
@Test
public void testLoad() {
keyCharacterMap = null;
keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.BUILT_IN_KEYBOARD);
assertNotNull(keyCharacterMap);
}
@Test(expected = IllegalArgumentException.class)
public void testGetMatchNull() {
keyCharacterMap.getMatch(KeyEvent.KEYCODE_0, null);
}
private int getCharacterKeyCode(char oneChar) {
// Lowercase the character to avoid getting modifiers in the KeyEvent array.
char[] chars = new char[] {Character.toLowerCase(oneChar)};
KeyEvent[] events = keyCharacterMap.getEvents(chars);
return events[0].getKeyCode();
}
@Test(expected = IllegalArgumentException.class)
public void testGetMatchMetaStateNull() {
keyCharacterMap.getMatch(KeyEvent.KEYCODE_0, null, 1);
}
@Test
public void testGetKeyboardType() {
assertThat(keyCharacterMap.getKeyboardType()).isEqualTo(KeyCharacterMap.FULL);
}
@Test(expected = IllegalArgumentException.class)
public void testGetEventsNull() {
keyCharacterMap.getEvents(null);
}
@Test
public void testGetEventsLowerCase() {
KeyEvent[] events = keyCharacterMap.getEvents("test".toCharArray());
assertThat(events[0].getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
assertThat(events[0].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_T);
assertThat(events[1].getAction()).isEqualTo(KeyEvent.ACTION_UP);
assertThat(events[1].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_T);
assertThat(events[2].getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
assertThat(events[2].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_E);
assertThat(events[3].getAction()).isEqualTo(KeyEvent.ACTION_UP);
assertThat(events[3].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_E);
assertThat(events[4].getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
assertThat(events[4].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_S);
assertThat(events[5].getAction()).isEqualTo(KeyEvent.ACTION_UP);
assertThat(events[5].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_S);
assertThat(events[6].getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
assertThat(events[6].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_T);
assertThat(events[7].getAction()).isEqualTo(KeyEvent.ACTION_UP);
assertThat(events[7].getKeyCode()).isEqualTo(KeyEvent.KEYCODE_T);
}
@Test
public void testGetEventsCapital() {
// Just assert that we got something back, there are many ways to return correct KeyEvents for
// this sequence.
assertThat(keyCharacterMap.getEvents("Test".toCharArray())).isNotEmpty();
}
@Test
public void testUnknownCharacters() {
assertThat(keyCharacterMap.get(KeyEvent.KEYCODE_UNKNOWN, 0)).isEqualTo(0);
assertThat(keyCharacterMap.get(KeyEvent.KEYCODE_BACK, 0)).isEqualTo(0);
}
@Test
public void testGetNumber() {
assertThat(keyCharacterMap.getNumber(KeyEvent.KEYCODE_1)).isEqualTo('1');
}
}