package com.windowtester.test.runtime;
import junit.framework.TestCase;
import com.windowtester.runtime.WT;
import com.windowtester.runtime.internal.KeyStrokeDecoder;
/*******************************************************************************
* Copyright (c) 2012 Google, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Google, Inc. - initial API and implementation
*******************************************************************************/
public class KeyStrokeDecodingSmokeTest extends TestCase {
public void testKeyIdentity() {
for (int cons : KeyStrokeDecoder.KEY_CONSTANTS) {
int[] keys = extractKeys(cons);
assertEquals(1, keys.length);
assertEquals(cons, keys[0]);
}
}
public void testModifierIdentity() {
for (int cons : KeyStrokeDecoder.KEY_MODS) {
int[] keys = extractKeys(cons);
assertEquals(1, keys.length);
assertEquals(cons, keys[0]);
}
}
public void testIdentity1() {
int composed = WT.ALT;
int[] keys = extractKeys(composed);
assertEquals(1, keys.length);
assertEquals(WT.ALT, keys[0]);
}
public void testIdentity2() {
int composed = WT.ARROW_DOWN;
int[] keys = extractKeys(composed);
assertEquals(1, keys.length);
assertEquals(WT.ARROW_DOWN, keys[0]);
}
public void testIdentity3() {
int composed = WT.F8;
int[] keys = extractKeys(composed);
assertEquals(1, keys.length);
assertEquals(WT.F8, keys[0]);
}
public void testIdentity4() {
int composed = WT.END;
int[] keys = extractKeys(composed);
assertEquals(1, keys.length);
assertEquals(WT.END, keys[0]);
}
public void testSingleModKeyComposites() {
for (int key : KeyStrokeDecoder.KEY_CONSTANTS) {
for (int mod: KeyStrokeDecoder.KEY_MODS) {
int composed = key | mod;
int[] keys = extractKeys(composed);
assertEquals(2, keys.length);
assertContains(key, keys);
assertContains(mod, keys);
}
}
}
public void testComposite1() {
int composed = WT.ALT | WT.SHIFT;
int[] keys = extractKeys(composed);
assertEquals(2, keys.length);
assertContains(WT.ALT, keys);
assertContains(WT.SHIFT, keys);
}
public void testComposite2() {
int composed = WT.CTRL | WT.ALT | WT.SHIFT;
int[] keys = extractKeys(composed);
assertEquals(3, keys.length);
assertContains(WT.ALT, keys);
assertContains(WT.SHIFT, keys);
assertContains(WT.CTRL, keys);
}
public void testComposite3() {
int composed = WT.ALT | WT.SHIFT | WT.TAB;
int[] keys = extractKeys(composed);
assertEquals(3, keys.length);
assertContains(WT.ALT, keys);
assertContains(WT.SHIFT, keys);
assertContains(WT.TAB, keys);
}
public void testComposite4() {
int composed = WT.ALT | WT.CR;
int[] keys = extractKeys(composed);
assertEquals(2, keys.length);
assertContains(WT.ALT, keys);
assertContains(WT.CR, keys);
}
//http://fogbugz.instantiations.com/default.php?36788
public void testComposite5() {
int composed = WT.SHIFT | WT.END;
int[] keys = extractKeys(composed);
assertEquals(2, keys.length);
assertContains(WT.SHIFT, keys);
assertContains(WT.END, keys);
}
//http://fogbugz.instantiations.com/default.php?36788
public void testComposite6() {
int composed = WT.CTRL | WT.SHIFT | WT.END;
int[] keys = extractKeys(composed);
assertEquals(3, keys.length);
assertContains(WT.CTRL, keys);
assertContains(WT.SHIFT, keys);
assertContains(WT.END, keys);
}
private void assertContains(int i, int[] ints) {
for (int j : ints) {
if (i == j)
return;
}
fail("array: " + toString(ints) + " expected to include " + i + " but didn't");
}
private CharSequence toString(int[] ints) {
StringBuilder sb = new StringBuilder();
sb.append('[');
for (int i = 0; i < ints.length; i++) {
sb.append(ints[i]);
if (i+1 < ints.length)
sb.append(", ");
}
sb.append(']');
return sb;
}
private int[] extractKeys(int composed) {
return KeyStrokeDecoder.extractModifiers(composed);
}
}