1 /*
   2   @test %I% %E%
   3   @bug 6315717
   4   @summary verifies that sun.awt.enableExtraMouseButtons is working
   5   @author Andrei Dmitriev : area=awt.mouse
   6   @run main/othervm -Dsun.awt.enableExtraMouseButtons=true ToolkitPropertyTest_Enable
   7  */
   8 
   9 import java.awt.*;
  10 import java.awt.event.*;
  11 
  12 // Testcase 1: set to TRUE (via jtreg option)
  13 // Testcase 2: set to TRUE and check that extra events are coming
  14 //                             check that standard events are coming
  15 
  16 public class ToolkitPropertyTest_Enable extends Frame {
  17     static boolean propValue;
  18     static Robot robot;
  19     static int [] buttonsPressed;
  20     static int [] buttonsReleased;
  21     static int [] buttonsClicked;
  22 
  23     public static void main(String []s){
  24         propValue = Boolean.parseBoolean(System.getProperty("sun.awt.enableExtraMouseButtons"));
  25         buttonsPressed = new int [MouseInfo.getNumberOfButtons()];
  26         buttonsReleased = new int [MouseInfo.getNumberOfButtons()];
  27         buttonsClicked = new int [MouseInfo.getNumberOfButtons()];
  28 
  29         ToolkitPropertyTest_Enable frame = new ToolkitPropertyTest_Enable();
  30         frame.setSize(300, 300);
  31         frame.setVisible(true);
  32 
  33         MouseAdapter ma1 = new MouseAdapter() {
  34                 public void mousePressed(MouseEvent e) {
  35                     buttonsPressed[e.getButton() - 1] += 1;
  36                     System.out.println("PRESSED "+e);
  37                 }
  38                 public void mouseReleased(MouseEvent e) {
  39                     buttonsReleased[e.getButton() - 1] += 1;
  40                     System.out.println("RELEASED "+e);
  41                 }
  42                 public void mouseClicked(MouseEvent e) {
  43                     buttonsClicked[e.getButton() - 1] += 1;
  44                     System.out.println("CLICKED "+e);
  45                 }
  46             };
  47         //        frame.addMouseListener(ma1);
  48 
  49         try {
  50             robot = new Robot();
  51             robot.delay(1000);
  52             robot.mouseMove(frame.getLocationOnScreen().x + frame.getWidth()/2, frame.getLocationOnScreen().y + frame.getHeight()/2);
  53 
  54             System.out.println("Property = " + propValue);
  55             testCase0();
  56 
  57             testCase1();
  58             System.out.println("Number Of Buttons = "+ MouseInfo.getNumberOfButtons());
  59 
  60             boolean lessThenFourButtons = (MouseInfo.getNumberOfButtons() <= 3);
  61             if ( !lessThenFourButtons ) {
  62                 frame.addMouseListener(ma1);
  63                 testCase2();
  64                 //                testCase3();
  65                 //                testCase4();
  66                 frame.removeMouseListener(ma1);
  67             }
  68         } catch (Exception e){
  69             e.printStackTrace();
  70             throw new RuntimeException(e);
  71         }
  72 
  73     }
  74 
  75     public static void testCase0(){
  76         if (!propValue){
  77             throw new RuntimeException("TEST FAILED (0) : System property sun.awt.enableExtraMouseButtons = " + propValue);
  78         }
  79     }
  80 
  81     public static void testCase1(){
  82         if (Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled() == false){
  83             throw new RuntimeException("TEST FAILED (1) : setting to TRUE. enabled = " + Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled());
  84         }
  85     }
  86 
  87     public static void testCase2(){
  88         emptyArrays();
  89         //we can't post a message from an unexistent button
  90         int [] buttonMasks = new int[MouseInfo.getNumberOfButtons()]; // = InputEvent.getButtonDownMasks();
  91         for (int i = 0; i < MouseInfo.getNumberOfButtons(); i++){
  92             buttonMasks[i] = InputEvent.getMaskForButton(i+1);
  93             System.out.println("TEST: buttonMasks["+ i +"] = " + buttonMasks[i]);
  94         }
  95 
  96         for (int i = 0; i < MouseInfo.getNumberOfButtons(); i++){
  97             System.out.println("button to press = " +(i+1) + " : value passed to robot = " +buttonMasks[i]);
  98             robot.mousePress(buttonMasks[i]);
  99             robot.delay(70);
 100             robot.mouseRelease(buttonMasks[i]);
 101             robot.delay(200);
 102         }
 103         robot.delay(1000);
 104 
 105         for (int i = 0; i < MouseInfo.getNumberOfButtons(); i++){
 106             if (buttonsPressed[i] != 1 || buttonsReleased[i] != 1 || buttonsClicked[i] !=1 ) {
 107                 throw new RuntimeException("TESTCASE 2 FAILED : button " + (i+1) + " wasn't single pressed|released|clicked : "+ buttonsPressed[i] +" : "+ buttonsReleased[i] +" : "+ buttonsClicked[i]);
 108             }
 109         }
 110     }
 111 
 112     public static void emptyArrays(){
 113         for (int i = 0; i < MouseInfo.getNumberOfButtons(); i++){
 114             buttonsPressed[i] = 0;
 115             buttonsReleased[i] = 0;
 116             buttonsClicked[i] = 0;
 117         }
 118     }
 119 
 120 }