28package com.jogamp.opengl.test.junit.util;
30import java.util.ArrayList;
31import java.util.EventObject;
34import org.junit.Assert;
36import com.jogamp.common.util.IntIntHashMap;
37import com.jogamp.newt.event.KeyEvent;
45 public final short min;
46 public final short max;
50 this.min = (short)
min;
51 this.max = (short)
max;
66 return "Code 0x"+Integer.toHexString(
code & 0x0000FFFF )+
" != "+
event+
" // "+
description;
71 for(
int i=0; i<keyEvents.size(); i++) {
72 System.err.println(i+
": "+keyEvents.get(i));
76 public static boolean validateKeyCodes(
final CodeSeg[] codeSegments,
final List<List<EventObject>> keyEventsList,
final boolean verbose) {
77 final List<CodeEvent> missCodes =
new ArrayList<CodeEvent>();
78 int totalCodeCount = 0;
80 for(
int i=0; i<codeSegments.length; i++) {
81 final CodeSeg codeSeg = codeSegments[i];
82 totalCodeCount += codeSeg.max - codeSeg.min + 1;
83 final List<EventObject> keyEvents = keyEventsList.get(i);
87 System.err.println(
"*** Total KeyCode Misses "+missCodes.size()+
" / "+totalCodeCount+
", valid "+res);
88 for(
int i=0; i<missCodes.size(); i++) {
89 System.err.println(
"Miss["+i+
"]: "+missCodes.get(i));
94 public static boolean validateKeyCodes(
final List<CodeEvent> missCodes,
final CodeSeg codeSeg,
final List<EventObject> keyEvents,
final boolean verbose) {
95 final int codeCount = codeSeg.max - codeSeg.min + 1;
98 for(
int i=0; i<codeCount; i++) {
100 final short c = (short) ( codeSeg.
min + i );
101 final KeyEvent e = (
KeyEvent) ( evtIdx < keyEvents.size() ? keyEvents.get(evtIdx) : null );
114 final boolean res = evtIdx == keyEvents.size() && 0 == missCodes.size();
116 System.err.println(
"+++ Code Segment "+codeSeg.
description+
", Misses: "+misses+
" / "+codeCount+
", events "+keyEvents.size()+
", valid "+res);
121 public static void validateKeyEvent(
final KeyEvent e,
final short eventType,
final int modifiers,
final short keyCode,
final char keyChar) {
123 Assert.assertTrue(
"KeyEvent type mismatch, expected 0x"+Integer.toHexString(eventType)+
", has "+e, eventType == e.
getEventType());
126 Assert.assertTrue(
"KeyEvent modifier mismatch, expected 0x"+Integer.toHexString(modifiers)+
", has "+e, modifiers == e.
getModifiers());
129 Assert.assertTrue(
"KeyEvent code mismatch, expected 0x"+Integer.toHexString(keyCode)+
", has "+e, keyCode == e.
getKeyCode());
132 Assert.assertTrue(
"KeyEvent char mismatch, expected 0x"+Integer.toHexString(keyChar)+
", has "+e, keyChar == e.
getKeyChar());
144 Assert.assertTrue(
"Invalid event "+e,
false);
150 final IntIntHashMap keyCode2NextEvent =
new IntIntHashMap();
151 for(
int i=0; i<keyEvents.size(); i++) {
153 int eet = keyCode2NextEvent.get(e.
getKeyCode());
158 Assert.assertEquals(
"Key event not in proper order "+i+
"/"+keyEvents.size()+
" - event "+e, eet, et);
172 final int expPressedCountSI,
final int expReleasedCountSI,
173 final int expPressedCountAR,
final int expReleasedCountAR) {
174 final int expPressReleaseCountSI = expPressedCountSI + expReleasedCountSI;
175 final int expPressReleaseCountAR = expPressedCountAR + expReleasedCountAR;
176 final int expPressReleaseCountALL = expPressReleaseCountSI + expPressReleaseCountAR;
183 final int keyPressedSI = keyPressedALL-keyPressedAR;
184 final int keyReleasedSI = keyReleasedALL-keyReleasedAR;
186 final int pressReleaseCountALL = keyPressedALL + keyReleasedALL;
187 final int pressReleaseCountSI = keyPressedSI + keyReleasedSI;
188 final int pressReleaseCountAR = keyPressedAR + keyReleasedAR;
190 System.err.println(
"Expec Single Press "+expPressedCountSI +
", Release "+expReleasedCountSI);
191 System.err.println(
"Expec AutoRp Press "+expPressedCountAR +
", Release "+expReleasedCountAR);
193 System.err.println(
"Total Single Press "+keyPressedSI +
", Release "+keyReleasedSI +
", Events "+pressReleaseCountSI);
194 System.err.println(
"Total AutoRp Press "+keyPressedAR +
", Release "+keyReleasedAR +
", Events "+pressReleaseCountAR);
195 System.err.println(
"Total ALL Press "+keyPressedALL +
", Release "+keyReleasedALL +
", Events "+pressReleaseCountALL);
197 Assert.assertEquals(
"Internal Error: pressReleaseSI != pressReleaseALL - pressReleaseAR", pressReleaseCountSI, pressReleaseCountALL - pressReleaseCountAR);
199 Assert.assertEquals(
"Key press count failure (SI)", expPressedCountSI, keyPressedSI);
200 Assert.assertEquals(
"Key released count failure (SI)", expReleasedCountSI, keyReleasedSI);
202 Assert.assertEquals(
"Key press count failure (AR)", expPressedCountAR, keyPressedAR);
203 Assert.assertEquals(
"Key released count failure (AR)", expReleasedCountAR, keyReleasedAR);
205 Assert.assertEquals(
"Key pressRelease count failure (SI)", expPressReleaseCountSI, pressReleaseCountSI);
206 Assert.assertEquals(
"Key pressRelease count failure (AR)", expPressReleaseCountAR, pressReleaseCountAR);
208 final List<EventObject> keyEvents = keyAdapter.
copyQueue();
210 Assert.assertEquals(
"Key pressRelease count failure (ALL) w/ list sum ", expPressReleaseCountALL, pressReleaseCountALL);
211 Assert.assertEquals(
"Key total count failure (ALL) w/ list size ", pressReleaseCountALL, keyEvents.size());
static final char NULL_CHAR
This value, '\0', is used to indicate that the keyChar is unknown or not printable.
final char getKeyChar()
Returns the UTF-16 character reflecting the key symbol incl.
static final short EVENT_KEY_PRESSED
A key has been pressed, excluding auto-repeat-modifier keys.
final short getKeyCode()
Returns the virtual key code using a fixed mapping to the US keyboard layout.
static final short EVENT_KEY_RELEASED
A key has been released, excluding auto-repeat-modifier keys.
static final short VK_UNDEFINED
This value, {@value}, is used to indicate that the keyCode is unknown.
final short getEventType()
Returns the event type of this event.
synchronized int getKeyReleasedCount(final boolean autoRepeatOnly)
synchronized List< EventObject > copyQueue()
synchronized int getKeyPressedCount(final boolean autoRepeatOnly)
CodeEvent(final short code, final String description, final KeyEvent event)
CodeSeg(final int min, final int max, final String description)
static boolean validateKeyCodes(final List< CodeEvent > missCodes, final CodeSeg codeSeg, final List< EventObject > keyEvents, final boolean verbose)
static boolean validateKeyCodes(final CodeSeg[] codeSegments, final List< List< EventObject > > keyEventsList, final boolean verbose)
static final int TIME_OUT
static void dumpKeyEvents(final List< EventObject > keyEvents)
static void validateKeyEventOrder(final List< EventObject > keyEvents)
static final int POLL_DIVIDER
static final int TIME_SLICE
static void validateKeyEvent(final KeyEvent e, final short eventType, final int modifiers, final short keyCode, final char keyChar)
static void validateKeyAdapterStats(final NEWTKeyAdapter keyAdapter, final int expPressedCountSI, final int expReleasedCountSI, final int expPressedCountAR, final int expReleasedCountAR)
static short getNextKeyEventType(final KeyEvent e)