1 /*
   2  * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25   @test %I% %E%
  26   @key headful
  27   @bug 6315717
  28   @summary verifies that modifiers are correct for standard (1, 2, 3, wheel) mouse buttons
  29   @author Andrei Dmitriev : area=awt.mouse
  30   @run main MouseModifiersUnitTest_Standard
  31  */
  32 
  33 import java.awt.*;
  34 import java.awt.event.*;
  35 import java.util.HashMap;
  36 import java.util.StringTokenizer;
  37 import java.util.Vector;
  38 
  39 //the test verifies:
  40 // 1) verifies that modifiers are correct for standard (1, 2, 3) mouse buttons
  41 // TODO: 2) verifies that modifiers are correct for wheel
  42 // TODO: 3)
  43 // Case1. the test posts BUTTONx_MASK and verifies that paramString() contains correct modifiers and exModifiers
  44 // Case2. the test posts BUTTONx_DOWN_MASK and verifies that paramString() contains correct modifiers and exModifiers
  45 // Case3. the test posts getMaskForButton(n) and verifies that paramString() contains correct modifiers and exModifiers
  46 // repeat all cases with SHIFT/ALT/CTRL modifiers verify that paramString() contains correct modifiers and exModifiers
  47 // I'm verifying button, modifiers and extModifiers for now.
  48 
  49 public class MouseModifiersUnitTest_Standard {
  50     static final int NONE = 0;
  51     static final int SHIFT = 1;
  52     static final int CTRL = 2;
  53     static final int ALT = 3;
  54     static boolean debug = true; //dump all errors (debug) or throw first(under jtreg) exception
  55     static boolean autorun = false; //use robot or manual run
  56     static int testModifier = NONE;
  57     //    static String testModifier = "NONE";
  58     static CheckingModifierAdapter adapterTest1;
  59     static CheckingModifierAdapter adapterTest2;
  60     static CheckingModifierAdapter adapterTest3;
  61     static CheckingModifierAdapter adapterTest4;
  62     static Frame f;
  63     final static int [] mouseButtons = new int [] {MouseEvent.BUTTON1_MASK, MouseEvent.BUTTON2_MASK, MouseEvent.BUTTON3_MASK};
  64     // BUTTON1, 2, 3 press-release.
  65     final static int [] modifiersStandardTestNONE = new int[] {MouseEvent.BUTTON1_MASK, MouseEvent.BUTTON1_MASK, MouseEvent.BUTTON1_MASK,
  66     MouseEvent.BUTTON2_MASK, MouseEvent.BUTTON2_MASK, MouseEvent.BUTTON2_MASK,
  67     MouseEvent.BUTTON3_MASK, MouseEvent.BUTTON3_MASK, MouseEvent.BUTTON3_MASK };
  68     final static int [] modifiersExStandardTestNONE = new int[] {MouseEvent.BUTTON1_DOWN_MASK, 0, 0,
  69     MouseEvent.BUTTON2_DOWN_MASK, 0, 0,
  70     MouseEvent.BUTTON3_DOWN_MASK, 0, 0};
  71     // BUTTON1, 2, 3 press-release with shift modifier
  72     final static int [] modifiersStandardTestSHIFT = new int[] {MouseEvent.BUTTON1_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON1_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON1_MASK|InputEvent.SHIFT_MASK,
  73     MouseEvent.BUTTON2_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON2_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON2_MASK|InputEvent.SHIFT_MASK,
  74     MouseEvent.BUTTON3_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON3_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON3_MASK|InputEvent.SHIFT_MASK };
  75     final static int [] modifiersExStandardTestSHIFT = new int[] {MouseEvent.BUTTON1_DOWN_MASK|InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK,
  76     MouseEvent.BUTTON2_DOWN_MASK|InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK,
  77     MouseEvent.BUTTON3_DOWN_MASK|InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK};
  78     // BUTTON1, 2, 3 press-release with CTRL modifier
  79     final static int [] modifiersStandardTestCTRL = new int[] {MouseEvent.BUTTON1_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON1_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON1_MASK|InputEvent.CTRL_MASK,
  80     MouseEvent.BUTTON2_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON2_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON2_MASK|InputEvent.CTRL_MASK,
  81     MouseEvent.BUTTON3_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON3_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON3_MASK|InputEvent.CTRL_MASK };
  82     final static int [] modifiersExStandardTestCTRL = new int[] {MouseEvent.BUTTON1_DOWN_MASK|InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK,
  83     MouseEvent.BUTTON2_DOWN_MASK|InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK,
  84     MouseEvent.BUTTON3_DOWN_MASK|InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK};
  85 
  86     // BUTTON1, 2, 3 press-release with ALT modifier
  87     final static int [] modifiersStandardTestALT = new int[] {MouseEvent.BUTTON1_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON1_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON1_MASK|InputEvent.ALT_MASK,
  88     MouseEvent.BUTTON2_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON2_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON2_MASK|InputEvent.ALT_MASK,
  89     MouseEvent.BUTTON3_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON3_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON3_MASK|InputEvent.ALT_MASK };
  90     final static int [] modifiersExStandardTestALT = new int[] {MouseEvent.BUTTON1_DOWN_MASK|InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK,
  91     MouseEvent.BUTTON2_DOWN_MASK|InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK,
  92     MouseEvent.BUTTON3_DOWN_MASK|InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK};
  93 
  94     static Robot robot;
  95 
  96     public static void main(String s[]){
  97         initParams(s);
  98         initAdapters();
  99         f = new Frame();
 100         final int [] modifiers = {InputEvent.SHIFT_MASK, InputEvent.CTRL_MASK};
 101         final String [] modifierNames = {"InputEvent.SHIFT_MASK", "InputEvent.CTRL_MASK"};
 102         f.setLayout(new FlowLayout());
 103         f.addMouseWheelListener(new MouseWheelListener() {
 104             public void mouseWheelMoved(MouseWheelEvent e) {
 105                 System.out.println("WHEEL "+e);
 106             }
 107         });
 108         f.setSize(300, 300);
 109         f.setVisible(true);
 110 
 111         try {
 112             robot = new Robot();
 113             robot.delay(500);
 114             robot.mouseMove(f.getLocationOnScreen().x + f.getWidth()/2, f.getLocationOnScreen().y + f.getHeight()/2);
 115             if (autorun) {
 116                 //testing buttons 1, 2, 3 only
 117                 testPlainButtons();
 118                 robot.delay(500);
 119 
 120                 //testing buttons 1, 2, 3 with SHIFT, CTRL, ALT keyboard modifiers
 121                 testButtonsWithShift();
 122                 robot.delay(500);
 123 
 124                 testButtonsWithControl();
 125                 robot.delay(500);
 126 
 127                 testButtonsWithAlt();
 128                 robot.delay(500);
 129             } else {
 130                 switch (testModifier){
 131                     case SHIFT:
 132                         f.addMouseListener(adapterTest2);
 133                         break;
 134                     case CTRL:
 135                         f.addMouseListener(adapterTest3);
 136                         break;
 137                     case ALT:
 138                         f.addMouseListener(adapterTest4);
 139                         break;
 140                     default:  //NONE inclusive
 141                         f.addMouseListener(adapterTest1);
 142                 }
 143             }
 144         } catch (Exception e){
 145             throw new RuntimeException("Test failed.");
 146         }
 147 
 148     }
 149 
 150     public static void initAdapters(){
 151         adapterTest1 = new CheckingModifierAdapter(NONE);
 152         adapterTest2 = new CheckingModifierAdapter(SHIFT);
 153         adapterTest3 = new CheckingModifierAdapter(CTRL);
 154         adapterTest4 = new CheckingModifierAdapter(ALT);
 155     }
 156 
 157     /*======================================================================*/
 158     public static void checkPressedModifiersTest(int testModifier, MouseEvent event){
 159         int [] curStandardModifiers = getStandardArray(testModifier);
 160         int [] curStandardExModifiers = getStandardExArray(testModifier);
 161         int button = event.getButton();
 162         int modifiers = event.getModifiers();
 163         int modifiersEx = event.getModifiersEx();
 164         int index = (button - 1)*3;
 165         //        int index = (button - 4)*3;
 166         dumpValues(button, modifiers, curStandardModifiers[index], modifiersEx, curStandardExModifiers[index]);
 167         if (modifiers != curStandardModifiers[index]){
 168             if (debug){
 169                 System.out.println("Test failed :  Pressed. modifiers != modifiersStandard");
 170             } else {
 171                 throw new RuntimeException("Test failed :  Pressed. modifiers != modifiersStandard");
 172             }
 173         }
 174 
 175         if (modifiersEx != curStandardExModifiers[index]){
 176 //            System.out.println(">>>>>>>>>>>>>>> Pressed. modifiersEx "+modifiersEx +" : "+!= curStandardExModifiers");
 177             if (debug){
 178                 System.out.println("Test failed :  Pressed. modifiersEx != curStandardExModifiers");
 179             } else {
 180                 throw new RuntimeException("Test failed :  Pressed. modifiersEx != curStandardExModifiers");
 181             }
 182         }
 183         HashMap <String, String> paramStringElements = tokenizeParamString(event.paramString());
 184         System.out.println(event.paramString());
 185         checkButton(paramStringElements, button);
 186         checkModifiers(testModifier, paramStringElements, button);
 187         checkExtModifiersOnPress(testModifier, paramStringElements, button);
 188     }
 189 
 190     public static void checkButton(HashMap<String, String> h, int button){
 191         if (h.get("button") == null) {
 192             throw new RuntimeException("Test failed :  Clicked. button is absent in paramString()");
 193         }
 194         if (Integer.parseInt(h.get("button")) != button) {
 195             throw new RuntimeException("Test failed :  Clicked. button in paramString() doesn't equal to button being pressed.");
 196         }
 197     }
 198 
 199     public static void checkExtModifiersOnPress(int testModifier, HashMap h, int button){
 200         String ethalon = "";
 201         if (h.get("extModifiers") == null) {
 202             System.out.println("Test failed :  Pressed. extModifiers == null");
 203             throw new RuntimeException("Test failed :  Pressed. extModifiers == null");
 204         }
 205         switch (testModifier){
 206             case SHIFT:{
 207                 ethalon = "Shift+";
 208                 break;
 209             }
 210             case ALT:{
 211                 ethalon = "Alt+";
 212                 break;
 213             }
 214             case CTRL:{
 215                 ethalon = "Ctrl+";
 216                 break;
 217             }
 218             default: {
 219                 ethalon = "";
 220             }
 221             ethalon = ethalon + "Button" +button;
 222 
 223             if (!h.get("extModifiers").equals(ethalon)) {
 224                 System.out.println("Test failed :  Pressed. extModifiers = " +h.get("extModifiers")+" instead of : "+ethalon);
 225                 throw new RuntimeException("Test failed :  Pressed. extModifiers = " +h.get("extModifiers")+" instead of : "+ethalon);
 226             }
 227         }
 228     }
 229 
 230 
 231 
 232     public static void checkModifiers(int testModifier, HashMap<String, String> h, int button){
 233         // none of modifiers should be null
 234         if (h.get("modifiers") == null) {
 235             System.out.println("Test failed : modifiers == null");
 236             throw new RuntimeException("Test failed :  modifiers == null");
 237         }
 238         Vector <String> modifierElements = tokenizeModifiers(h.get("modifiers"));
 239         //check that ButtonX is there
 240         String buttonEthalon = "Button" + button;
 241         if (modifierElements.contains(buttonEthalon)){
 242             modifierElements.remove(buttonEthalon);
 243         } else {
 244             System.out.println("Test failed :  modifiers doesn't contain Button "+h.get("modifiers"));
 245             throw new RuntimeException("Test failed :  modifiers doesn't contain Button "+h.get("modifiers"));
 246         }
 247 
 248 
 249         //Check all explicitly pressed modifires
 250 //        boolean altIncluded = false; //don't duplicate Alt when ALT is pressed and BUTTON2_MASK.
 251         String excplicitModifier = "";
 252         boolean altIncluded = false;
 253         switch (testModifier){
 254             case SHIFT:{
 255                 excplicitModifier = "Shift";
 256                 break;
 257             }
 258             case ALT:{
 259                 excplicitModifier = "Alt";
 260                 altIncluded = true; //there should be only on "Alt" for two modifiers. So check it.
 261                 break;
 262             }
 263             case CTRL:{
 264                 excplicitModifier = "Ctrl";
 265                 break;
 266             }
 267         }
 268         if (!excplicitModifier.equals("")){
 269             if (modifierElements.contains(excplicitModifier)){
 270                 modifierElements.remove(excplicitModifier);
 271             } else {
 272                 System.out.println("Test failed :  modifiers doesn't contain explicit modifier "+excplicitModifier + " in "+ h.get("modifiers"));
 273                 throw new RuntimeException("Test failed :  modifiers doesn't contain explicit modifier "+excplicitModifier + " in "+ h.get("modifiers"));
 274             }
 275         }
 276 
 277         //Button 2 and 3 reports about Alt+Button2 and Meta+Button3 respectively.
 278         //Check these values too
 279         String extraModifiers = "";
 280         String extraModifiersButton3 = "";
 281         switch (button){
 282             //BUTTON1 with ALT reports about Alt+Button1+Button2.
 283             //We should fix this but I would not change this.
 284             case 1: {
 285                 //Alt+Button1+Button2:
 286                 // 1) we already handled "Alt" in excplicitModifier
 287                 // 2) we already took "Button1" in buttonEthalon
 288                 // 3) so "Button2" is only remained.
 289                 // This should only happen when ALT+Button1 is pressed
 290                 if (altIncluded){
 291                     extraModifiers = "Button2";
 292                 }
 293                 break;
 294             }
 295             case 2: {
 296                 //Alt+Button2 report about "Alt+Button2".
 297                 extraModifiers = "Alt";
 298                 break;
 299             }
 300             case 3: {
 301                 //ALT+BUTTON3 reports about "Alt+Meta+Button2+Button3"
 302                 // This should only happen when ALT+Button3 is pressed
 303                 extraModifiers = "Meta";
 304                 if (altIncluded){
 305                     extraModifiersButton3 = "Button2";
 306                 }
 307                 break;
 308             }
 309         }//switch
 310 
 311         if (!extraModifiers.equals("")){
 312             if (modifierElements.contains(extraModifiers)){
 313                 modifierElements.remove(extraModifiers);
 314             } else {
 315                 //we may already removed "Alt" when filtered explicit modifiers.
 316                 //Here is no failure in this case.
 317                 if (!altIncluded) {
 318                     System.out.println("Test failed :  modifiers doesn't contain a modifier from BUTTON2 or BUTTON3 "+extraModifiers + " in "+ h.get("modifiers"));
 319                     throw new RuntimeException("Test failed :  modifiers doesn't contain a modifier from BUTTON2 or BUTTON3 "+extraModifiers + " in "+ h.get("modifiers"));
 320                 }
 321             }
 322         }
 323 
 324         if (!extraModifiersButton3.equals("")){
 325             if (modifierElements.contains(extraModifiersButton3)){
 326                 modifierElements.remove(extraModifiersButton3);
 327             } else {
 328                 System.out.println("Test failed :  modifiers doesn't contain a modifier from BUTTON2 or BUTTON3 "+extraModifiersButton3 + " in "+ h.get("modifiers"));
 329                 throw new RuntimeException("Test failed :  modifiers doesn't contain a modifier from BUTTON2 or BUTTON3 "+extraModifiersButton3 + " in "+ h.get("modifiers"));
 330             }
 331         }
 332 
 333         //the length of vector should now be zero
 334         if (!modifierElements.isEmpty()){
 335             System.out.println("Test failed :  there is some more elements in modifiers that shouldn't be there: "+h.get("modifiers"));
 336             throw new RuntimeException("Test failed :  there is some more elements in modifiers that shouldn't be there: "+h.get("modifiers"));
 337         }
 338     }
 339 
 340     public static void checkExtModifiersOnReleaseClick(int testModifier, HashMap h, int button){
 341         String ethalon = "";
 342         switch (testModifier){
 343             case SHIFT:{
 344                 ethalon = "Shift+";
 345                 break;
 346             }
 347             case ALT:{
 348                 ethalon = "Alt+";
 349                 break;
 350             }
 351             case CTRL:{
 352                 ethalon = "Ctrl+";
 353                 break;
 354             }
 355             default: {
 356                 if (h.get("extModifiers") != null) {
 357                     System.out.println("Test failed :  Released. extModifiers != null but no modifiers keys are pressed");
 358                     throw new RuntimeException("Test failed :  Released. extModifiers != null but no modifiers keys are pressed");
 359                 } else {
 360                     //no modifiers
 361                     return;
 362                 }
 363             }
 364         }
 365         if (h.get("extModifiers").equals(ethalon)) {
 366             System.out.println("Test failed :  Released. extModifiers = "+ h.get("extModifiers") +" instead of : "+ethalon);
 367             throw new RuntimeException("Test failed :  Released. extModifiers = "+ h.get("extModifiers") +" instead of : "+ethalon);
 368         }
 369     }
 370 
 371     public static void checkReleasedModifiersTest(int testModifier, MouseEvent event){
 372         int [] curStandardModifiers = getStandardArray(testModifier);
 373         int [] curStandardExModifiers = getStandardExArray(testModifier);
 374         //        int index = (button - 4)*3 + 1;
 375         int button = event.getButton();
 376         int modifiers = event.getModifiers();
 377         int modifiersEx = event.getModifiersEx();
 378         int index = (button - 1)*3 + 1;
 379         dumpValues(button, modifiers, curStandardModifiers[index], modifiersEx, curStandardExModifiers[index]);
 380         if (modifiers != curStandardModifiers[index]){
 381             if (debug){
 382                 System.out.println("Test failed :  Released. modifiers != modifiersStandard");
 383             } else {
 384                 throw new RuntimeException("Test failed :  Released. modifiers != modifiersStandard");
 385             }
 386         }
 387         if (modifiersEx != curStandardExModifiers[index]){
 388             if (debug){
 389                 System.out.println("Test failed :  Released. modifiersEx != curStandardExModifiers");
 390             } else {
 391                 throw new RuntimeException("Test failed :  Released. modifiersEx != curStandardExModifiers");
 392             }
 393         }
 394         HashMap <String, String> paramStringElements = tokenizeParamString(event.paramString());
 395         System.out.println(event.paramString());
 396         checkButton(paramStringElements, button);
 397         checkModifiers(testModifier, paramStringElements, button);
 398         checkExtModifiersOnReleaseClick(testModifier, paramStringElements, button);
 399     }
 400 
 401     public static void checkClickedModifiersTest(int testModifier, MouseEvent event){
 402         int [] curStandardModifiers = getStandardArray(testModifier);
 403         int [] curStandardExModifiers = getStandardExArray(testModifier);
 404         //        int index = (button - 4)*3 + 2;
 405         int button = event.getButton();
 406         int modifiers = event.getModifiers();
 407         int modifiersEx = event.getModifiersEx();
 408         int index = (button - 1)*3 + 2;
 409         dumpValues(button, modifiers, curStandardModifiers[index], modifiersEx, curStandardExModifiers[index]);
 410         if (modifiers != curStandardModifiers[index]){
 411             if (debug){
 412                 System.out.println("Test failed :  Clicked. modifiers != modifiersStandard");
 413             } else {
 414                 throw new RuntimeException("Test failed :  Clicked. modifiers != modifiersStandard");
 415             }
 416         }
 417         if (modifiersEx != curStandardExModifiers[index]){
 418             if (debug){
 419                 System.out.println("Test failed :  Clicked. modifiersEx != curStandardExModifiers");
 420             } else {
 421                 throw new RuntimeException("Test failed :  Clicked. modifiersEx != curStandardExModifiers");
 422             }
 423         }
 424         HashMap <String, String> paramStringElements = tokenizeParamString(event.paramString());
 425         checkButton(paramStringElements, button);
 426         checkModifiers(testModifier, paramStringElements, button);
 427         checkExtModifiersOnReleaseClick(testModifier, paramStringElements, button);
 428     }
 429     /*======================================================================*/
 430 
 431     public static HashMap<String, String> tokenizeParamString(String param){
 432         HashMap <String, String> params = new HashMap<String, String>();
 433         StringTokenizer st = new StringTokenizer(param, ",=");
 434         while (st.hasMoreTokens()){
 435             String tmp = st.nextToken();
 436 //            System.out.println("PARSER : "+tmp);
 437             if (tmp.equals("button") ||
 438                     tmp.equals("modifiers") ||
 439                     tmp.equals("extModifiers")) {
 440                 params.put(tmp, st.nextToken());
 441             }
 442         }
 443         return params;
 444     }
 445 
 446     public static Vector<String> tokenizeModifiers(String modifierList){
 447         Vector<String> modifiers = new Vector<String>();
 448         StringTokenizer st = new StringTokenizer(modifierList, "+");
 449         while (st.hasMoreTokens()){
 450             String tmp = st.nextToken();
 451             modifiers.addElement(tmp);
 452             System.out.println("MODIFIER PARSER : "+tmp);
 453         }
 454         return modifiers;
 455     }
 456 
 457 
 458     //test BUTTON1, 2 and 3 without any modifiers keys
 459     public static void  testPlainButtons(){
 460         System.out.println("Testing buttons without modifiers.");
 461         f.addMouseListener(adapterTest1);
 462         for (int button : mouseButtons){
 463             robot.mousePress(button);
 464             robot.delay(100);
 465             robot.mouseRelease(button);
 466         }
 467         robot.delay(1000);
 468         f.removeMouseListener(adapterTest1);
 469     }
 470 
 471     //test BUTTON1, 2 and 3 with SHIFT key
 472     public static void  testButtonsWithShift(){
 473         System.out.println("Testing buttons with SHIFT modifier.");
 474         f.addMouseListener(adapterTest2);
 475 
 476         for (int button : mouseButtons){
 477             robot.keyPress(KeyEvent.VK_SHIFT);
 478             robot.mousePress(button);
 479             robot.delay(100);
 480             robot.mouseRelease(button);
 481             robot.keyRelease(KeyEvent.VK_SHIFT);
 482         }
 483         robot.delay(1000);
 484         f.removeMouseListener(adapterTest2);
 485     }
 486 
 487     //test BUTTON1, 2 and 3 with CTRL key
 488     public static void  testButtonsWithControl(){
 489         System.out.println("Testing buttons with CONTROL modifier.");
 490         f.addMouseListener(adapterTest3);
 491         for (int button : mouseButtons){
 492             robot.keyPress(KeyEvent.VK_CONTROL);
 493             robot.mousePress(button);
 494             robot.delay(100);
 495             robot.mouseRelease(button);
 496             robot.keyRelease(KeyEvent.VK_CONTROL);
 497         }
 498         robot.delay(1000);
 499         f.removeMouseListener(adapterTest3);
 500     }
 501 
 502     //test BUTTON1, 2 and 3 with ALT key
 503     public static void  testButtonsWithAlt(){
 504         System.out.println("Testing buttons with ALT modifier.");
 505         f.addMouseListener(adapterTest4);
 506         for (int button : mouseButtons){
 507             robot.keyPress(KeyEvent.VK_ALT);
 508             robot.mousePress(button);
 509             robot.delay(100);
 510             robot.mouseRelease(button);
 511             robot.keyRelease(KeyEvent.VK_ALT);
 512         }
 513         robot.delay(1000);
 514         f.removeMouseListener(adapterTest4);
 515     }
 516 
 517     public static void initParams(String []s){
 518         if (s.length != 3){
 519             autorun = true;
 520             debug = false;
 521             testModifier = NONE;
 522         } else {
 523             autorun = Boolean.valueOf(s[0]);
 524             debug = Boolean.valueOf(s[1]);
 525 
 526             if (s[2].equals("NONE")){
 527                 testModifier = NONE;
 528             }
 529             if (s[2].equals("SHIFT")){
 530                 testModifier = SHIFT;
 531             }
 532             if (s[2].equals("CTRL")){
 533                 testModifier = CTRL;
 534             }
 535             if (s[2].equals("ALT")){
 536                 testModifier = ALT;
 537             }
 538         }
 539         System.out.println("Autorun : " +autorun);
 540         System.out.println("Debug mode : " +debug);
 541         System.out.println("Modifier to verify : " + testModifier);
 542     }
 543 
 544     public static void dumpValues(int button, int modifiers, int modifiersStandard, int modifiersEx, int modifiersExStandard){
 545         System.out.println("Button = "+button + "Modifiers = "+ modifiers + " standard = "+ modifiersStandard);
 546         System.out.println("                   ModifiersEx = "+ modifiersEx + " standardEx = "+ modifiersExStandard);
 547     }
 548 
 549     private static int[] getStandardExArray(int testModifier) {
 550         int [] curStandardExModifiers;
 551         switch (testModifier){
 552             case SHIFT:
 553                 curStandardExModifiers = modifiersExStandardTestSHIFT;
 554                 break;
 555             case CTRL:
 556                 curStandardExModifiers = modifiersExStandardTestCTRL;
 557                 break;
 558             case ALT:
 559                 curStandardExModifiers = modifiersExStandardTestALT;
 560                 break;
 561             default: //NONE by default
 562                 curStandardExModifiers = modifiersExStandardTestNONE;
 563         }
 564         return curStandardExModifiers;
 565     }
 566 
 567     private static int[] getStandardArray(int testModifier) {
 568         int [] curStandardModifiers;
 569         switch (testModifier){
 570             case SHIFT:
 571                 curStandardModifiers = modifiersStandardTestSHIFT;
 572                 break;
 573             case CTRL:
 574                 curStandardModifiers = modifiersStandardTestCTRL;
 575                 break;
 576             case ALT:
 577                 curStandardModifiers = modifiersStandardTestALT;
 578                 break;
 579             default: //NONE by default
 580                 curStandardModifiers = modifiersStandardTestNONE;
 581         }
 582         return curStandardModifiers;
 583     }
 584 
 585 }
 586 
 587 
 588 /* A class that invoke appropriate verification
 589  * routine with current modifier.
 590  */
 591 class CheckingModifierAdapter extends MouseAdapter{
 592     int modifier;
 593     public CheckingModifierAdapter(int modifier){
 594         this.modifier = modifier;
 595     }
 596 
 597     public void mousePressed(MouseEvent e) {
 598         System.out.println("PRESSED "+e);
 599         if (e.getButton() > MouseEvent.BUTTON3) {
 600             System.out.println("Extra button affected. Skip.");
 601         } else {
 602             MouseModifiersUnitTest_Standard.checkPressedModifiersTest(modifier, e); // e.getButton(), e.getModifiers(), e.getModifiersEx(),
 603         }
 604     }
 605     public void mouseReleased(MouseEvent e) {
 606         System.out.println("RELEASED "+e);
 607         if (e.getButton() > MouseEvent.BUTTON3) {
 608             System.out.println("Extra button affected. Skip.");
 609         } else {
 610             MouseModifiersUnitTest_Standard.checkReleasedModifiersTest(modifier, e); // e.getButton(), e.getModifiers(), e.getModifiersEx()
 611         }
 612     }
 613     public void mouseClicked(MouseEvent e) {
 614         System.out.println("CLICKED "+e);
 615         if (e.getButton() > MouseEvent.BUTTON3) {
 616             System.out.println("Extra button affected. Skip.");
 617         } else {
 618             MouseModifiersUnitTest_Standard.checkClickedModifiersTest(modifier, e); //e.getButton(), e.getModifiers(), e.getModifiersEx()
 619         }
 620     }
 621 }
 622