package jackpal.androidterm.emulatorview;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import android.annotation.TargetApi;
import android.test.AndroidTestCase;
import android.view.KeyEvent;
class MockTermSession extends TermSession {
private byte[] charseq = null;
@Override
public void write(byte[] data, int offset, int count) {
if (charseq==null) {
charseq = data;
} else {
byte[] tmp = new byte[data.length + charseq.length];
for (int i = 0; i < charseq.length; i++) {
tmp[i] = charseq[i];
}
for (int i = 0; i < data.length; i++) {
tmp[i+charseq.length] = data[i];
}
charseq = tmp;
}
}
public void clearQueue() {
charseq = null;
}
public byte[] getCharSequence() {
return charseq;
}
@Override
public void write(String data) {
try {
byte[] bytes = data.getBytes("UTF-8");
write(bytes, 0, bytes.length);
} catch (UnsupportedEncodingException e) {
}
}
@Override
public void write(int codePoint) {
CharBuffer charBuf = CharBuffer.allocate(2);
ByteBuffer byteBuf = ByteBuffer.allocate(4);
CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder();
charBuf.clear();
byteBuf.clear();
Character.toChars(codePoint, charBuf.array(), 0);
encoder.reset();
encoder.encode(charBuf, byteBuf, true);
encoder.flush(byteBuf);
write(byteBuf.array(), 0, byteBuf.position()-1);
}
}
@TargetApi(3)
public class TermKeyListenerTest extends AndroidTestCase {
//TermKeyListener tkl_AltIsEsc;
TermKeyListener tkl_AltNotEsc;
//MockTermSession mckTermSessionA = new MockTermSession();
MockTermSession mckTermSessionB = new MockTermSession();
public TermKeyListenerTest() {
super();
}
public void setUp() {
//tkl_AltIsEsc = new TermKeyListener(mckTermSessionA);
tkl_AltNotEsc = new TermKeyListener(mckTermSessionB);
mckTermSessionB.clearQueue();
}
public void testKey_a()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_A,
0,
new byte[]{0x61});
}
public void testKey_X()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_X,
KeyEvent.META_SHIFT_ON,
new byte[]{0x58});
}
public void testKey_CTRL_c()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_C,
KeyEvent.META_CTRL_ON ,
new byte[]{0x03});
}
public void testKey_ALT_x_no_esc()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_X,
KeyEvent.META_ALT_ON,
new byte[]{0x00,0x00,0x00,0x00});
}
public void testKey_ALT_x_esc()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.setAltSendsEsc(true);
int keycode = KeyEvent.KEYCODE_ALT_LEFT;
KeyEvent event = new KeyEvent(1,2, KeyEvent.ACTION_DOWN, keycode, 0,
0);
tkl_AltNotEsc.keyDown(keycode, event, false, true);
keyHelperToggle(KeyEvent.KEYCODE_X,
KeyEvent.META_ALT_ON,
new byte[]{0x1b,0x78}, true);
}
public void testKey_ALT_c_no_esc()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_C,
KeyEvent.META_ALT_ON,
new byte[]{-61,-89,0x00,0x00});
}
public void testKey_enter()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_ENTER,
0,
new byte[]{0x0d});
}
public void testKey_del()
throws UnsupportedEncodingException, IOException {
KeyEvent event = new KeyEvent(1,2, KeyEvent.ACTION_DOWN,
KeyEvent.KEYCODE_DEL,0 ,0);
tkl_AltNotEsc.keyDown(event.getKeyCode(), event, true, false);
byte[] res = mckTermSessionB.getCharSequence();
byte[] exp = "\177".getBytes("UTF-8");
assertNotNull(res);
assertEquals(exp.length, res.length);
for (int i = 0; i<exp.length; i++) {
assertEquals(exp[i],res[i]);
}
}
public void testKey_CTRL_C()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_C,
KeyEvent.META_CTRL_ON | KeyEvent.META_SHIFT_ON,
new byte[]{0x03});
}
public void testKey_CTRL_2()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_2,
KeyEvent.META_CTRL_ON,
new byte[]{0x00});
}
public void testKey_CTRL_SPC()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_SPACE,
KeyEvent.META_CTRL_ON,
new byte[]{0x00});
}
public void testKey_CTRL_3()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_3,
KeyEvent.META_CTRL_ON,
new byte[]{0x1b});
}
public void testKey_CTRL_LEFT_BRACKET()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_LEFT_BRACKET,
KeyEvent.META_CTRL_ON,
new byte[]{0x1b});
}
public void testKey_CTRL_BACKSLASH()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_BACKSLASH,
KeyEvent.META_CTRL_ON,
new byte[]{0x1c});
}
public void testKey_CTRL_4()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_4,
KeyEvent.META_CTRL_ON,
new byte[]{0x1c});
}
public void testKey_CTRL_RIGHT_BRACKET()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_RIGHT_BRACKET,
KeyEvent.META_CTRL_ON,
new byte[]{0x1d});
}
public void testKey_CTRL_5()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_5,
KeyEvent.META_CTRL_ON,
new byte[]{0x1d});
}
public void testKey_CTRL_CARET()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_6,
KeyEvent.META_CTRL_ON | KeyEvent.META_SHIFT_ON,
new byte[]{0x1e});
}
public void testKey_CTRL_6()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_6,
KeyEvent.META_CTRL_ON,
new byte[]{0x1e});
}
public void testKey_CTRL_UNDERSCORE()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_MINUS,
KeyEvent.META_CTRL_ON | KeyEvent.META_SHIFT_ON,
new byte[]{0x1f});
}
public void testKey_CTRL_7()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_7,
KeyEvent.META_CTRL_ON,
new byte[]{0x1f});
}
public void testKey_CTRL_8()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_8,
KeyEvent.META_CTRL_ON,
new byte[]{0x7f});
}
public void testKey_CTRL_9()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_9,
KeyEvent.META_CTRL_ON,
new byte[]{27,91,50,51,126});
}
public void testKey_CTRL_0()
throws UnsupportedEncodingException, IOException {
keyHelper(KeyEvent.KEYCODE_0,
KeyEvent.META_CTRL_ON,
new byte[]{27,91,50,52,126});
}
public void testKey_FN_w()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_W,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,79,65}, true);
}
public void testKey_FN_a()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_A,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,79,68}, true);
}
public void testKey_FN_s()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_S,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,79,66}, true);
}
public void testKey_FN_d()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_D,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,79,67}, true);
}
public void testKey_FN_p()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_P,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,91,53,126}, true);
}
public void testKey_FN_n()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_N,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,91,54,126}, true);
}
public void testKey_FN_t()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_T,
KeyEvent.META_FUNCTION_ON,
new byte[]{9}, true);
}
public void testKey_FN_l()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_L,
KeyEvent.META_FUNCTION_ON,
new byte[]{124,0,0,0}, true);
}
public void testKey_FN_u()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_U,
KeyEvent.META_FUNCTION_ON,
new byte[]{95,0,0,0}, true);
}
public void testKey_FN_e()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_E,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,0,0,0}, true);
}
public void testKey_FN_i()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_I,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,91,50,126}, true);
}
public void testKey_FN_x()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_X,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,91,51,126}, true);
}
public void testKey_FN_h()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_H,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,91,49,126}, true);
}
public void testKey_FN_f()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_F,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,91,52,126}, true);
}
public void testKey_FN_PERIOD()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_PERIOD,
KeyEvent.META_FUNCTION_ON,
new byte[]{28,0,0,0}, true);
}
public void testKey_FN_9()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_9,
KeyEvent.META_FUNCTION_ON,
new byte[]{-62,-69,0,0}, true);
}
public void testKey_FN_0()
throws UnsupportedEncodingException, IOException {
tkl_AltNotEsc.handleFnKey(true);
keyHelperToggle(KeyEvent.KEYCODE_0,
KeyEvent.META_FUNCTION_ON,
new byte[]{27,91,50,49,126}, true);
}
private void keyHelper(int keycode, int metastate,
byte[] expectedOutput)
throws UnsupportedEncodingException, IOException{
keyHelperToggle(keycode, metastate, expectedOutput, false);
}
private void keyHelperToggle(int keycode, int metastate,
byte[] expectedOutPut, boolean toggle)
throws UnsupportedEncodingException, IOException {
KeyEvent event = new KeyEvent(1,2, KeyEvent.ACTION_DOWN, keycode, 0,
metastate);
tkl_AltNotEsc.keyDown(event.getKeyCode(), event, true, toggle);
byte[] res = mckTermSessionB.getCharSequence();
assertNotNull(res);
assertTrue(expectedOutPut.length <= res.length);
for (int i=0; i<expectedOutPut.length; i++) {
assertEquals(expectedOutPut[i], res[i]);
}
}
public void testPreconditions() {
}
public void tearDown() {
}
}