1 /* 2 test 3 @bug 6190768 6190778 4 @summary Tests that triggering events on AWT list by pressing CTRL + HOME, CTRL + END, PG-UP, PG-DOWN similar Motif behavior 5 @author Dmitry.Cherepanov@SUN.COM area=awt.list 6 @run applet KeyEventsTest.html 7 */ 8 9 /** 10 * KeyEventsTest.html 11 * 12 * summary: 13 */ 14 15 import java.applet.Applet; 16 import java.awt.*; 17 import java.awt.event.*; 18 import java.util.Set; 19 import java.lang.reflect.*; 20 import sun.awt.SunToolkit; 21 22 public class KeyEventsTest extends Applet implements ItemListener, FocusListener, KeyListener 23 { 24 TestState currentState; 25 final Object LOCK = new Object(); 26 final int ACTION_TIMEOUT = 500; 27 28 List single = new List(3, false); 29 List multiple = new List(3, true); 30 31 Panel p1 = new Panel (); 32 Panel p2 = new Panel (); 33 34 public void init() 35 { 36 setLayout (new BorderLayout ()); 37 38 single.add("0"); 39 single.add("1"); 40 single.add("2"); 41 single.add("3"); 42 single.add("4"); 43 single.add("5"); 44 single.add("6"); 45 single.add("7"); 46 single.add("8"); 47 48 multiple.add("0"); 49 multiple.add("1"); 50 multiple.add("2"); 51 multiple.add("3"); 52 multiple.add("4"); 53 multiple.add("5"); 54 multiple.add("6"); 55 multiple.add("7"); 56 multiple.add("8"); 57 58 single.addKeyListener(this); 59 single.addItemListener(this); 60 single.addFocusListener(this); 61 p1.add(single); 62 add("North", p1); 63 64 multiple.addKeyListener(this); 65 multiple.addItemListener(this); 66 multiple.addFocusListener(this); 67 p2.add(multiple); 68 add("South", p2); 69 70 }//End init() 71 72 public void start () 73 { 74 75 try{ 76 setSize (200,200); 77 setVisible(true); 78 validate(); 79 80 main(null); 81 82 } catch (Exception e) { 83 e.printStackTrace(); 84 throw new RuntimeException("The test failed."); 85 } 86 87 }// start() 88 89 private void main(String[] args) 90 throws InterruptedException, InvocationTargetException { 91 92 doTest(); 93 94 System.out.println("Test passed."); 95 } 96 97 public void itemStateChanged (ItemEvent ie) { 98 System.out.println("itemStateChanged-"+ie); 99 this.currentState.setAction(true); 100 } 101 102 public void focusGained(FocusEvent e){ 103 104 synchronized (LOCK) { 105 LOCK.notifyAll(); 106 } 107 108 } 109 110 public void focusLost(FocusEvent e){ 111 } 112 113 public void keyPressed(KeyEvent e){ 114 System.out.println("keyPressed-"+e); 115 } 116 117 public void keyReleased(KeyEvent e){ 118 System.out.println("keyReleased-"+e); 119 } 120 121 public void keyTyped(KeyEvent e){ 122 System.out.println("keyTyped-"+e); 123 } 124 125 private void test(TestState currentState) 126 throws InterruptedException, InvocationTargetException { 127 128 synchronized (LOCK) { 129 130 this.currentState = currentState; 131 System.out.println(this.currentState); 132 133 List list; 134 if (currentState.getMultiple()){ 135 list = multiple; 136 }else{ 137 list = single; 138 } 139 140 Robot r; 141 try { 142 r = new Robot(); 143 } catch(AWTException e) { 144 throw new RuntimeException(e.getMessage()); 145 } 146 147 r.delay(10); 148 Point loc = this.getLocationOnScreen(); 149 150 r.mouseMove(loc.x+10, loc.y+10); 151 r.mousePress(InputEvent.BUTTON1_MASK); 152 r.delay(10); 153 r.mouseRelease(InputEvent.BUTTON1_MASK); 154 r.delay(10); 155 156 list.requestFocusInWindow(); 157 LOCK.wait(ACTION_TIMEOUT); 158 if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != list){ 159 throw new RuntimeException("Test failed - list isn't focus owner."); 160 } 161 162 list.deselect(0); 163 list.deselect(1); 164 list.deselect(2); 165 list.deselect(3); 166 list.deselect(4); 167 list.deselect(5); 168 list.deselect(6); 169 list.deselect(7); 170 list.deselect(8); 171 172 int selectIndex = 0; 173 int visibleIndex = 0; 174 175 if (currentState.getScrollMoved()){ 176 177 if (currentState.getKeyID() == KeyEvent.VK_PAGE_UP || 178 currentState.getKeyID() == KeyEvent.VK_HOME){ 179 selectIndex = 8; 180 visibleIndex = 8; 181 }else if (currentState.getKeyID() == KeyEvent.VK_PAGE_DOWN || 182 currentState.getKeyID() == KeyEvent.VK_END){ 183 selectIndex = 0; 184 visibleIndex = 0; 185 } 186 187 }else{ 188 189 if (currentState.getKeyID() == KeyEvent.VK_PAGE_UP || 190 currentState.getKeyID() == KeyEvent.VK_HOME){ 191 192 if (currentState.getSelectedMoved()){ 193 selectIndex = 1; 194 visibleIndex = 0; 195 }else{ 196 selectIndex = 0; 197 visibleIndex = 0; 198 } 199 200 }else if (currentState.getKeyID() == KeyEvent.VK_PAGE_DOWN || 201 currentState.getKeyID() == KeyEvent.VK_END){ 202 203 if (currentState.getSelectedMoved()){ 204 selectIndex = 7; 205 visibleIndex = 8; 206 }else{ 207 selectIndex = 8; 208 visibleIndex = 8; 209 } 210 211 } 212 213 } 214 215 list.select(selectIndex); 216 list.makeVisible(visibleIndex); 217 218 r.delay(10); 219 220 if (currentState.getKeyID() == KeyEvent.VK_HOME || 221 currentState.getKeyID() == KeyEvent.VK_END){ 222 r.keyPress(KeyEvent.VK_CONTROL); 223 } 224 225 r.delay(10); 226 r.keyPress(currentState.getKeyID()); 227 r.delay(10); 228 r.keyRelease(currentState.getKeyID()); 229 r.delay(10); 230 231 if (currentState.getKeyID() == KeyEvent.VK_HOME || 232 currentState.getKeyID() == KeyEvent.VK_END){ 233 r.keyRelease(KeyEvent.VK_CONTROL); 234 } 235 236 ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); 237 r.delay(200); 238 239 if (currentState.getTemplate() != currentState.getAction()) 240 throw new RuntimeException("Test failed."); 241 242 } 243 244 } 245 246 private void doTest() 247 throws InterruptedException, InvocationTargetException { 248 249 final String os = System.getProperty("os.name"); 250 final boolean isWin = os.startsWith("Win"); 251 252 System.out.println("multiple? selectedMoved? ?scrollMoved keyID? template? action?"); 253 test(new TestState(false, false, false, KeyEvent.VK_PAGE_UP, isWin?false:false)); 254 // SelectedMoved (false) != ScrollMoved (true) for single list not emulated 255 test(new TestState(false, true, false, KeyEvent.VK_PAGE_UP, isWin?true:false)); 256 test(new TestState(false, true, true, KeyEvent.VK_PAGE_UP, isWin?true:true)); 257 test(new TestState(true, false, false, KeyEvent.VK_PAGE_UP, isWin?true:false)); 258 test(new TestState(true, false, true, KeyEvent.VK_PAGE_UP, isWin?true:false)); 259 test(new TestState(true, true, false, KeyEvent.VK_PAGE_UP, isWin?true:false)); 260 test(new TestState(true, true, true, KeyEvent.VK_PAGE_UP, isWin?true:false)); 261 262 test(new TestState(false, false, false, KeyEvent.VK_PAGE_DOWN, isWin?false:false)); 263 test(new TestState(false, true, false, KeyEvent.VK_PAGE_DOWN, isWin?true:false)); 264 test(new TestState(false, true, true, KeyEvent.VK_PAGE_DOWN, isWin?true:true)); 265 test(new TestState(true, false, false, KeyEvent.VK_PAGE_DOWN, isWin?true:false)); 266 test(new TestState(true, false, true, KeyEvent.VK_PAGE_DOWN, isWin?true:false)); 267 test(new TestState(true, true, false, KeyEvent.VK_PAGE_DOWN, isWin?true:false)); 268 test(new TestState(true, true, true, KeyEvent.VK_PAGE_DOWN, isWin?true:false)); 269 270 test(new TestState(false, false, false, KeyEvent.VK_HOME, isWin?false:true)); 271 test(new TestState(false, true, false, KeyEvent.VK_HOME, isWin?true:true)); 272 test(new TestState(false, true, true, KeyEvent.VK_HOME, isWin?true:true)); 273 test(new TestState(true, false, false, KeyEvent.VK_HOME, isWin?true:false)); 274 test(new TestState(true, false, true, KeyEvent.VK_HOME, isWin?true:false)); 275 test(new TestState(true, true, false, KeyEvent.VK_HOME, isWin?true:false)); 276 test(new TestState(true, true, true, KeyEvent.VK_HOME, isWin?true:false)); 277 278 test(new TestState(false, false, false, KeyEvent.VK_END, isWin?false:true)); 279 test(new TestState(false, true, false, KeyEvent.VK_END, isWin?true:true)); 280 test(new TestState(false, true, true, KeyEvent.VK_END, isWin?true:true)); 281 test(new TestState(true, false, false, KeyEvent.VK_END, isWin?true:false)); 282 test(new TestState(true, false, true, KeyEvent.VK_END, isWin?true:false)); 283 test(new TestState(true, true, false, KeyEvent.VK_END, isWin?true:false)); 284 test(new TestState(true, true, true, KeyEvent.VK_END, isWin?true:false)); 285 286 } 287 }// class KeyEventsTest 288 289 class TestState{ 290 291 private boolean multiple; 292 // after key pressing selected item moved 293 private final boolean selectedMoved; 294 // after key pressing scroll moved 295 private final boolean scrollMoved; 296 private final int keyID; 297 private final boolean template; 298 private boolean action; 299 300 public TestState(boolean multiple, boolean selectedMoved, boolean scrollMoved, int keyID, boolean template){ 301 this.multiple = multiple; 302 this.selectedMoved = selectedMoved; 303 this.scrollMoved = scrollMoved; 304 this.keyID = keyID; 305 this.template = template; 306 this.action = false; 307 } 308 309 public boolean getMultiple(){ 310 return multiple; 311 } 312 public boolean getSelectedMoved(){ 313 return selectedMoved; 314 } 315 316 public boolean getScrollMoved(){ 317 return scrollMoved; 318 } 319 320 public int getKeyID(){ 321 return keyID; 322 } 323 324 public boolean getTemplate(){ 325 return template; 326 } 327 328 public boolean getAction(){ 329 return action; 330 } 331 332 public void setAction(boolean action){ 333 this.action = action; 334 } 335 336 public String toString(){ 337 return multiple + "," + selectedMoved + "," + scrollMoved + "," + keyID + "," + template + "," + action; 338 } 339 }// TestState