--- /dev/null 2014-11-28 15:59:11.188941000 +0300 +++ new/test/java/awt/List/KeyEventsTest/KeyEventsTest.java 2014-12-04 11:42:21.000000000 +0300 @@ -0,0 +1,347 @@ +/* + test + @bug 6190768 6190778 + @summary Tests that triggering events on AWT list by pressing CTRL + HOME, CTRL + END, PG-UP, PG-DOWN similar Motif behavior + @author Dmitry.Cherepanov@SUN.COM area=awt.list + @library ../../../../lib/testlibrary + @build jdk.testlibrary.OSInfo + @run applet KeyEventsTest.html +*/ + +/** + * KeyEventsTest.html + * + * summary: + */ + +import java.applet.Applet; +import java.awt.*; +import java.awt.event.*; +import java.util.Set; +import java.lang.reflect.*; + +import jdk.testlibrary.OSInfo; + +public class KeyEventsTest extends Applet implements ItemListener, FocusListener, KeyListener +{ + TestState currentState; + final Object LOCK = new Object(); + final int ACTION_TIMEOUT = 500; + + List single = new List(3, false); + List multiple = new List(3, true); + + Panel p1 = new Panel (); + Panel p2 = new Panel (); + + public void init() + { + setLayout (new BorderLayout ()); + + single.add("0"); + single.add("1"); + single.add("2"); + single.add("3"); + single.add("4"); + single.add("5"); + single.add("6"); + single.add("7"); + single.add("8"); + + multiple.add("0"); + multiple.add("1"); + multiple.add("2"); + multiple.add("3"); + multiple.add("4"); + multiple.add("5"); + multiple.add("6"); + multiple.add("7"); + multiple.add("8"); + + single.addKeyListener(this); + single.addItemListener(this); + single.addFocusListener(this); + p1.add(single); + add("North", p1); + + multiple.addKeyListener(this); + multiple.addItemListener(this); + multiple.addFocusListener(this); + p2.add(multiple); + add("South", p2); + + }//End init() + + public void start () + { + + try{ + setSize (200,200); + setVisible(true); + validate(); + + main(null); + + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("The test failed."); + } + + }// start() + + private void main(String[] args) + throws InterruptedException, InvocationTargetException { + + doTest(); + + System.out.println("Test passed."); + } + + public void itemStateChanged (ItemEvent ie) { + System.out.println("itemStateChanged-"+ie); + this.currentState.setAction(true); + } + + public void focusGained(FocusEvent e){ + + synchronized (LOCK) { + LOCK.notifyAll(); + } + + } + + public void focusLost(FocusEvent e){ + } + + public void keyPressed(KeyEvent e){ + System.out.println("keyPressed-"+e); + } + + public void keyReleased(KeyEvent e){ + System.out.println("keyReleased-"+e); + } + + public void keyTyped(KeyEvent e){ + System.out.println("keyTyped-"+e); + } + + private void test(TestState currentState) + throws InterruptedException, InvocationTargetException { + + synchronized (LOCK) { + + this.currentState = currentState; + System.out.println(this.currentState); + + List list; + if (currentState.getMultiple()){ + list = multiple; + }else{ + list = single; + } + + Robot r; + try { + r = new Robot(); + } catch(AWTException e) { + throw new RuntimeException(e.getMessage()); + } + + r.delay(10); + Point loc = this.getLocationOnScreen(); + + r.mouseMove(loc.x+10, loc.y+10); + r.mousePress(InputEvent.BUTTON1_MASK); + r.delay(10); + r.mouseRelease(InputEvent.BUTTON1_MASK); + r.delay(10); + + list.requestFocusInWindow(); + LOCK.wait(ACTION_TIMEOUT); + if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != list){ + throw new RuntimeException("Test failed - list isn't focus owner."); + } + + list.deselect(0); + list.deselect(1); + list.deselect(2); + list.deselect(3); + list.deselect(4); + list.deselect(5); + list.deselect(6); + list.deselect(7); + list.deselect(8); + + int selectIndex = 0; + int visibleIndex = 0; + + if (currentState.getScrollMoved()){ + + if (currentState.getKeyID() == KeyEvent.VK_PAGE_UP || + currentState.getKeyID() == KeyEvent.VK_HOME){ + selectIndex = 8; + visibleIndex = 8; + }else if (currentState.getKeyID() == KeyEvent.VK_PAGE_DOWN || + currentState.getKeyID() == KeyEvent.VK_END){ + selectIndex = 0; + visibleIndex = 0; + } + + }else{ + + if (currentState.getKeyID() == KeyEvent.VK_PAGE_UP || + currentState.getKeyID() == KeyEvent.VK_HOME){ + + if (currentState.getSelectedMoved()){ + selectIndex = 1; + visibleIndex = 0; + }else{ + selectIndex = 0; + visibleIndex = 0; + } + + }else if (currentState.getKeyID() == KeyEvent.VK_PAGE_DOWN || + currentState.getKeyID() == KeyEvent.VK_END){ + + if (currentState.getSelectedMoved()){ + selectIndex = 7; + visibleIndex = 8; + }else{ + selectIndex = 8; + visibleIndex = 8; + } + + } + + } + + list.select(selectIndex); + list.makeVisible(visibleIndex); + + r.delay(10); + + if (currentState.getKeyID() == KeyEvent.VK_HOME || + currentState.getKeyID() == KeyEvent.VK_END){ + r.keyPress(KeyEvent.VK_CONTROL); + } + + r.delay(10); + r.keyPress(currentState.getKeyID()); + r.delay(10); + r.keyRelease(currentState.getKeyID()); + r.delay(10); + + if (currentState.getKeyID() == KeyEvent.VK_HOME || + currentState.getKeyID() == KeyEvent.VK_END){ + r.keyRelease(KeyEvent.VK_CONTROL); + } + + r.waitForIdle(); + r.delay(200); + + if (currentState.getTemplate() != currentState.getAction()) + throw new RuntimeException("Test failed."); + + } + + } + + private void doTest() + throws InterruptedException, InvocationTargetException { + + boolean isWin = false; + if (OSInfo.getOSType() == OSInfo.OSType.WINDOWS) { + isWin = true; + }else if(OSInfo.getOSType() == OSInfo.OSType.MACOSX) { + System.out.println("Not for OS X"); + return; + } + + System.out.println("multiple? selectedMoved? ?scrollMoved keyID? template? action?"); + test(new TestState(false, false, false, KeyEvent.VK_PAGE_UP, isWin?false:false)); + // SelectedMoved (false) != ScrollMoved (true) for single list not emulated + test(new TestState(false, true, false, KeyEvent.VK_PAGE_UP, isWin?true:false)); + test(new TestState(false, true, true, KeyEvent.VK_PAGE_UP, isWin?true:true)); + test(new TestState(true, false, false, KeyEvent.VK_PAGE_UP, isWin?true:false)); + test(new TestState(true, false, true, KeyEvent.VK_PAGE_UP, isWin?true:false)); + test(new TestState(true, true, false, KeyEvent.VK_PAGE_UP, isWin?true:false)); + test(new TestState(true, true, true, KeyEvent.VK_PAGE_UP, isWin?true:false)); + + test(new TestState(false, false, false, KeyEvent.VK_PAGE_DOWN, isWin?false:false)); + test(new TestState(false, true, false, KeyEvent.VK_PAGE_DOWN, isWin?true:false)); + test(new TestState(false, true, true, KeyEvent.VK_PAGE_DOWN, isWin?true:true)); + test(new TestState(true, false, false, KeyEvent.VK_PAGE_DOWN, isWin?true:false)); + test(new TestState(true, false, true, KeyEvent.VK_PAGE_DOWN, isWin?true:false)); + test(new TestState(true, true, false, KeyEvent.VK_PAGE_DOWN, isWin?true:false)); + test(new TestState(true, true, true, KeyEvent.VK_PAGE_DOWN, isWin?true:false)); + + test(new TestState(false, false, false, KeyEvent.VK_HOME, isWin?false:true)); + test(new TestState(false, true, false, KeyEvent.VK_HOME, isWin?true:true)); + test(new TestState(false, true, true, KeyEvent.VK_HOME, isWin?true:true)); + test(new TestState(true, false, false, KeyEvent.VK_HOME, isWin?true:false)); + test(new TestState(true, false, true, KeyEvent.VK_HOME, isWin?true:false)); + test(new TestState(true, true, false, KeyEvent.VK_HOME, isWin?true:false)); + test(new TestState(true, true, true, KeyEvent.VK_HOME, isWin?true:false)); + + test(new TestState(false, false, false, KeyEvent.VK_END, isWin?false:true)); + test(new TestState(false, true, false, KeyEvent.VK_END, isWin?true:true)); + test(new TestState(false, true, true, KeyEvent.VK_END, isWin?true:true)); + test(new TestState(true, false, false, KeyEvent.VK_END, isWin?true:false)); + test(new TestState(true, false, true, KeyEvent.VK_END, isWin?true:false)); + test(new TestState(true, true, false, KeyEvent.VK_END, isWin?true:false)); + test(new TestState(true, true, true, KeyEvent.VK_END, isWin?true:false)); + + } +}// class KeyEventsTest + +class TestState{ + + private boolean multiple; + // after key pressing selected item moved + private final boolean selectedMoved; + // after key pressing scroll moved + private final boolean scrollMoved; + private final int keyID; + private final boolean template; + private boolean action; + + public TestState(boolean multiple, boolean selectedMoved, boolean scrollMoved, int keyID, boolean template){ + this.multiple = multiple; + this.selectedMoved = selectedMoved; + this.scrollMoved = scrollMoved; + this.keyID = keyID; + this.template = template; + this.action = false; + } + + public boolean getMultiple(){ + return multiple; + } + public boolean getSelectedMoved(){ + return selectedMoved; + } + + public boolean getScrollMoved(){ + return scrollMoved; + } + + public int getKeyID(){ + return keyID; + } + + public boolean getTemplate(){ + return template; + } + + public boolean getAction(){ + return action; + } + + public void setAction(boolean action){ + this.action = action; + } + + public String toString(){ + return multiple + "," + selectedMoved + "," + scrollMoved + "," + keyID + "," + template + "," + action; + } +}// TestState