Clover coverage report - JFCUnit Test Coverage
Coverage timestamp: Mon Dec 20 2004 23:38:10 MST
file stats: LOC: 2,068   Methods: 77
NCLOC: 1,406   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
AbstractTestHelperBase.java 77.9% 93.9% 93.5% 91.1%
coverage coverage
 1   
 package junit.extensions.jfcunit;
 2   
 
 3   
 import java.util.ArrayList;
 4   
 import java.util.Vector;
 5   
 
 6   
 import java.awt.BorderLayout;
 7   
 import java.awt.GridBagLayout;
 8   
 import java.awt.Point;
 9   
 import java.awt.Rectangle;
 10   
 import java.awt.event.ActionEvent;
 11   
 import java.awt.event.ActionListener;
 12   
 import java.awt.event.InputEvent;
 13   
 import java.awt.event.KeyAdapter;
 14   
 import java.awt.event.KeyEvent;
 15   
 import java.awt.event.MouseAdapter;
 16   
 import java.awt.event.MouseEvent;
 17   
 import java.awt.event.MouseListener;
 18   
 import javax.swing.ButtonGroup;
 19   
 import javax.swing.JButton;
 20   
 import javax.swing.JCheckBox;
 21   
 import javax.swing.JComboBox;
 22   
 import javax.swing.JComponent;
 23   
 import javax.swing.JList;
 24   
 import javax.swing.JMenu;
 25   
 import javax.swing.JMenuBar;
 26   
 import javax.swing.JMenuItem;
 27   
 import javax.swing.JPanel;
 28   
 import javax.swing.JRadioButton;
 29   
 import javax.swing.JScrollPane;
 30   
 import javax.swing.JTabbedPane;
 31   
 import javax.swing.JTable;
 32   
 import javax.swing.JTextArea;
 33   
 import javax.swing.JTextField;
 34   
 import javax.swing.JToggleButton;
 35   
 import javax.swing.JTree;
 36   
 import javax.swing.KeyStroke;
 37   
 import javax.swing.UIManager;
 38   
 import javax.swing.table.AbstractTableModel;
 39   
 import javax.swing.table.JTableHeader;
 40   
 import javax.swing.table.TableColumn;
 41   
 import javax.swing.tree.DefaultMutableTreeNode;
 42   
 import javax.swing.tree.DefaultTreeModel;
 43   
 
 44   
 import junit.extensions.jfcunit.eventdata.AbstractEventData;
 45   
 import junit.extensions.jfcunit.eventdata.DragEventData;
 46   
 import junit.extensions.jfcunit.eventdata.EventDataConstants;
 47   
 import junit.extensions.jfcunit.eventdata.JComboBoxMouseEventData;
 48   
 import junit.extensions.jfcunit.eventdata.JFCEventDataListener;
 49   
 import junit.extensions.jfcunit.eventdata.JFCEventManager;
 50   
 import junit.extensions.jfcunit.eventdata.JListMouseEventData;
 51   
 import junit.extensions.jfcunit.eventdata.JMenuMouseEventData;
 52   
 import junit.extensions.jfcunit.eventdata.JSpinnerMouseEventData;
 53   
 import junit.extensions.jfcunit.eventdata.JTabbedPaneMouseEventData;
 54   
 import junit.extensions.jfcunit.eventdata.JTableHeaderMouseEventData;
 55   
 import junit.extensions.jfcunit.eventdata.JTableMouseEventData;
 56   
 import junit.extensions.jfcunit.eventdata.JTextComponentMouseEventData;
 57   
 import junit.extensions.jfcunit.eventdata.JTreeMouseEventData;
 58   
 import junit.extensions.jfcunit.eventdata.KeyEventData;
 59   
 import junit.extensions.jfcunit.eventdata.MouseEventData;
 60   
 import junit.extensions.jfcunit.eventdata.MouseWheelEventData;
 61   
 import junit.extensions.jfcunit.eventdata.PathData;
 62   
 import junit.extensions.jfcunit.eventdata.StringEventData;
 63   
 import junit.extensions.jfcunit.keyboard.JFCKeyStroke;
 64   
 
 65   
 /**
 66   
  * Title:        ImplTestHelperBase
 67   
  * Description:  Unit tests for the {@link ImplTestHelperBase} class and it's methods.
 68   
  *               Designed to work with JUnit v3.7 or later.
 69   
  *
 70   
  * @author Greg Houston
 71   
  * @author <a href="mailto:vraravam@thoughtworks.com">Vijay Aravamudhan : ThoughtWorks Inc.</a>
 72   
  */
 73   
 public abstract class AbstractTestHelperBase
 74   
     extends AbstractTestCase
 75   
     implements EventDataConstants {
 76   
   /**
 77   
    * Debug testing.
 78   
    */
 79   
   private static final boolean DEBUG = false;
 80   
 
 81   
   /**
 82   
    * Messages which are generated.
 83   
    */
 84   
   private final Vector m_msgs = new Vector();
 85   
 
 86   
   /**
 87   
    * Time to wait for events to be flushed from the JFCEventManager.
 88   
    */
 89   
   private long m_eventFlushTime = JFCEventManager.getEventManager().getHoldTime()
 90   
       + 25;
 91   
 
 92   
   /**
 93   
    * Constructor.
 94   
    *
 95   
    * @param name Name of the test case.
 96   
    */
 97  120
   public AbstractTestHelperBase(final String name) {
 98  120
     super(name);
 99   
   }
 100   
 
 101   
   /**
 102   
    * This method is overridded when the concrete
 103   
    * class determines that the tests should not be
 104   
    * applied to a platform. For example 1.2.2 and
 105   
    * 1.3 the java.awt.Robot is not supported or
 106   
    * functional on windows XP.
 107   
    *
 108   
    * @return true By default this will apply to all
 109   
    * platforms.
 110   
    */
 111  41
   protected boolean validPlatform() {
 112  41
     return true;
 113   
   }
 114   
 
 115   
   /**
 116   
    * Setup the test.
 117   
    *
 118   
    * @exception  Exception   An instance of java.lang.Exception can be thrown
 119   
    */
 120  120
   public void setUp() throws Exception {
 121   
     // The helper should be setup by the derived class.
 122   
     // helper = new JFCTestHelper();
 123   
     // or
 124   
     // helper = new RobotTestHelper();
 125   
 
 126  120
     if (DEBUG) {
 127  0
       System.err.println("Starting:" + getName());
 128   
     }
 129  120
     m_msgs.clear();
 130  120
     UIManager.put(JFCEventManager.EVENT_DEBUG, new Boolean(DEBUG));
 131  120
     JFCEventManager.setDebugType(JFCEventManager.DEBUG_OUTPUT);
 132   
   }
 133   
 
 134   
   /**
 135   
    * Tear down the test.
 136   
    *
 137   
    * @exception  Exception   An instance of java.lang.Exception can be thrown
 138   
    */
 139  120
   public void tearDown() throws Exception {
 140  120
     JFCEventManager.getEventManager().setRecording(false);
 141  120
     JFCEventManager.getEventManager().removeAllJFCEventDataListeners();
 142  120
     if (DEBUG) {
 143  0
       System.err.println("End:" + getName());
 144   
     }
 145  120
     super.tearDown();
 146   
   }
 147   
 
 148   
   /**
 149   
        * This method will test the enterClickAndLeave() method applying to selecting.
 150   
    * particular nodes in a JTree.
 151   
    */
 152  3
   public void testEnterJTreeClickAndLeave() {
 153  3
     if (!validPlatform()) {
 154  0
       return;
 155   
     }
 156   
 
 157  3
     this.validPlatform();
 158  3
     setWindow(createJFrame(getName()));
 159   
 
 160   
     // set up the tree
 161  3
     DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root Node");
 162  3
     DefaultTreeModel model = new DefaultTreeModel(root);
 163  3
     JTree tree = new JTree(model);
 164  3
     tree.setName("Test JTree");
 165  3
     tree.addMouseListener(new MouseAdapter() {
 166  9
       public void mousePressed(final MouseEvent e) {
 167  9
         m_msgs.add("" + e.getClickCount() + " click(s) on tree");
 168   
       }
 169   
     });
 170   
 
 171   
     // add two items at level
 172  3
     DefaultMutableTreeNode level1Node = null;
 173  3
     DefaultMutableTreeNode level2Node = null;
 174   
 
 175  3
     for (int i = 0; i < 2; i++) {
 176  6
       level1Node = new DefaultMutableTreeNode("Level1-" + i);
 177  6
       root.add(level1Node);
 178   
       // add 3 items at level 2
 179  6
       for (int j = 0; j < 3; j++) {
 180  18
         level2Node = new DefaultMutableTreeNode("Level2-" + j);
 181  18
         level1Node.add(level2Node);
 182   
       }
 183   
     }
 184   
 
 185  3
     getFrame().getContentPane().add(new JScrollPane(tree), BorderLayout.CENTER);
 186  3
     packAndShow(getFrame());
 187  3
     UIManager.put(JFCEventManager.EVENT_DEBUG, Boolean.TRUE);
 188   
 
 189  3
     for (int clicks = 1; clicks < 3; clicks++) {
 190  6
       m_msgs.clear();
 191  6
       getHelper().enterClickAndLeave(new JTreeMouseEventData(this, tree,
 192   
           level2Node.getUserObject().toString(), clicks));
 193  6
       sleep(getSleepTimer());
 194  6
       assertEquals("Number of messages showing is wrong", clicks, m_msgs.size());
 195  6
       for (int click = 1; click <= clicks; click++) {
 196  9
         assertEquals("Wrong  is message is showing up",
 197   
                      click + " click(s) on tree", m_msgs.get(click - 1));
 198   
       }
 199   
     }
 200  3
     UIManager.put(JFCEventManager.EVENT_DEBUG, Boolean.FALSE);
 201   
   }
 202   
 
 203   
   /**
 204   
        * This method will test the enterClickAndLeave() method applying to selecting
 205   
    * particular items in a drop down box - by element index.
 206   
    */
 207  3
   public void testEnterDropDownClickAndLeaveByIndex() {
 208  3
     if (!validPlatform()) {
 209  0
       return;
 210   
     }
 211  3
     setWindow(createJFrame(getName()));
 212   
 
 213  3
     Object[] items = new Object[] {
 214   
         "Items-0", "Items-1", "Items-2", "Items-3"};
 215  3
     JComboBox combo = new JComboBox(items);
 216   
 
 217  3
     getFrame().getContentPane().add(combo, BorderLayout.CENTER);
 218  3
     packAndShow(getFrame());
 219  3
     for (int index = 0; index < items.length; index++) {
 220  12
       m_msgs.clear();
 221  12
       getHelper().enterClickAndLeave(new JComboBoxMouseEventData(this, combo,
 222   
           index,
 223   
           1));
 224  12
       sleep(getSleepTimer());
 225  12
       assertEquals("Selected item is wrong", "Items-" + index,
 226   
                    combo.getSelectedItem());
 227   
     }
 228   
   }
 229   
 
 230   
   /**
 231   
        * This method will test the enterClickAndLeave() method applying to selecting
 232   
    * particular items in a drop down box - by element.
 233   
    */
 234  3
   public void testEnterDropDownClickAndLeaveByElement() {
 235  3
     if (!validPlatform()) {
 236  0
       return;
 237   
     }
 238  3
     setWindow(createJFrame(getName()));
 239   
 
 240  3
     Object[] items = new Object[] {
 241   
         "Items-0", "Items-1", "Items-2", "Items-3"};
 242  3
     JComboBox combo = new JComboBox(items);
 243   
 
 244  3
     getFrame().getContentPane().add(combo, BorderLayout.CENTER);
 245  3
     packAndShow(getFrame());
 246   
 
 247  3
     for (int index = 0; index < items.length; index++) {
 248  12
       getHelper().enterClickAndLeave(new JComboBoxMouseEventData(this, combo,
 249   
           items[index], 1));
 250  12
       sleep(getSleepTimer());
 251  12
       assertEquals("Selected item is wrong", "Items-" + index,
 252   
                    combo.getSelectedItem());
 253   
     }
 254   
   }
 255   
 
 256   
   /**
 257   
        * This method will test the enterClickAndLeave() method applying to selecting
 258   
    * particular items in a list - by element index.
 259   
    */
 260  3
   public void testEnterJListClickAndLeaveByIndex() {
 261  3
     if (!validPlatform()) {
 262  0
       return;
 263   
     }
 264  3
     setWindow(createJFrame(getName()));
 265   
 
 266  3
     Object[] items = new Object[] {
 267   
         "Items-0", "Items-1", "Items-2", "Items-3"};
 268  3
     JList list = new JList(items);
 269   
     // try if it also scrolls
 270  3
     list.setVisibleRowCount(2);
 271   
 
 272  3
     getFrame().getContentPane().add(list, BorderLayout.CENTER);
 273  3
     packAndShow(getFrame());
 274   
 
 275  3
     for (int clicks = 1; clicks < (items.length - 1); clicks++) {
 276  6
       m_msgs.clear();
 277  6
       getHelper().enterClickAndLeave(new JListMouseEventData(this, list, clicks,
 278   
           clicks));
 279  6
       sleep(getSleepTimer());
 280  6
       assertEquals("Selected item is wrong", "Items-" + clicks,
 281   
                    list.getSelectedValue());
 282   
     }
 283   
   }
 284   
 
 285   
   /**
 286   
        * This method will test the enterClickAndLeave() method applying to selecting
 287   
    * particular items in a list - by element.
 288   
    */
 289  3
   public void testEnterJListClickAndLeaveByElement() {
 290  3
     if (!validPlatform()) {
 291  0
       return;
 292   
     }
 293  3
     setWindow(createJFrame(getName()));
 294   
 
 295  3
     Object[] items = new Object[] {
 296   
         "Items-0", "Items-1", "Items-2", "Items-3"};
 297  3
     JList list = new JList(items);
 298   
     // try if it also scrolls
 299  3
     list.setVisibleRowCount(2);
 300   
 
 301  3
     getFrame().getContentPane().add(list, BorderLayout.CENTER);
 302  3
     packAndShow(getFrame());
 303   
 
 304  3
     for (int clicks = 1; clicks < (items.length - 1); clicks++) {
 305  6
       getHelper().enterClickAndLeave(new JListMouseEventData(this, list,
 306   
           items[clicks], clicks));
 307  6
       sleep(getSleepTimer());
 308  6
       assertEquals("Selected item is wrong", "Items-" + clicks,
 309   
                    list.getSelectedValue());
 310   
     }
 311   
   }
 312   
 
 313   
   /**
 314   
    * Tests the sendString() method - sending only lower case letters.
 315   
    */
 316  3
   public void testSendStringLowerCaseLetters() {
 317  3
     if (!validPlatform()) {
 318  0
       return;
 319   
     }
 320  3
     JTextField textField = new JTextField(30);
 321   
 
 322  3
     setWindow(createJFrame(getName()));
 323  3
     getFrame().getContentPane().add(textField);
 324  3
     packAndShow(getFrame());
 325   
 
 326  3
     String testStr = "testing all lower case letters";
 327  3
     getHelper().sendString(new StringEventData(this, textField, testStr));
 328  3
     sleep(getSleepTimer());
 329  3
     assertEquals("String not sent correctly to text field", testStr,
 330   
                  textField.getText());
 331   
   }
 332   
 
 333   
   /**
 334   
    * Tests the sendString() method - sending only upper case letters.
 335   
    */
 336  3
   public void testSendStringUpperCaseLetters() {
 337  3
     if (!validPlatform()) {
 338  0
       return;
 339   
     }
 340  3
     JTextField textField = new JTextField(30);
 341   
 
 342  3
     setWindow(createJFrame(getName()));
 343  3
     getFrame().getContentPane().add(textField);
 344  3
     packAndShow(getFrame());
 345   
 
 346  3
     String testStr = "TESTING ALL UPPER CASE LETTERS";
 347  3
     getHelper().sendString(new StringEventData(this, textField, testStr));
 348  3
     sleep(getSleepTimer());
 349  3
     assertEquals("String not sent correctly to text field", testStr,
 350   
                  textField.getText());
 351   
   }
 352   
 
 353   
   /**
 354   
    * Tests the sendString() method - sending both lower and upper case letters.
 355   
    */
 356  3
   public void testSendStringLowerAndUpperCaseLetters() {
 357  3
     if (!validPlatform()) {
 358  0
       return;
 359   
     }
 360  3
     JTextField textField = new JTextField(30);
 361   
 
 362  3
     setWindow(createJFrame(getName()));
 363  3
     getFrame().getContentPane().add(textField);
 364  3
     packAndShow(getFrame());
 365   
 
 366  3
     String testStr = "Testing both UPPER AnD lower caSE leTTerS";
 367  3
     getHelper().sendString(new StringEventData(this, textField, testStr));
 368  3
     sleep(getSleepTimer());
 369  3
     assertEquals("String not sent correctly to text field", testStr,
 370   
                  textField.getText());
 371   
   }
 372   
 
 373   
   /**
 374   
    * Tests the sendString() method - sending all uppercase
 375   
    * characters in the alphabet.
 376   
    */
 377  3
   public void testSendStringAllUppercaseCharacters() {
 378  3
     if (!validPlatform()) {
 379  0
       return;
 380   
     }
 381  3
     JTextField textField = new JTextField(50);
 382   
 
 383  3
     setWindow(createJFrame(getName()));
 384  3
     getFrame().getContentPane().add(textField);
 385  3
     packAndShow(getFrame());
 386   
 
 387  3
     String testStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 12345678901";
 388  3
     getHelper().sendString(new StringEventData(this, textField, testStr));
 389  3
     sleep(getSleepTimer());
 390  3
     assertEquals("String not sent correctly to text field", testStr,
 391   
                  textField.getText());
 392   
   }
 393   
 
 394   
   /**
 395   
    * Tests the sendString() method - sending all lowercase
 396   
    * characters in the alphabet.
 397   
    */
 398  3
   public void testSendStringAllLowercaseCharacters() {
 399  3
     if (!validPlatform()) {
 400  0
       return;
 401   
     }
 402  3
     JTextField textField = new JTextField(50);
 403   
 
 404  3
     setWindow(createJFrame(getName()));
 405  3
     getFrame().getContentPane().add(textField);
 406  3
     packAndShow(getFrame());
 407   
 
 408  3
     String testStr = "abcdefghijklmnopqrstuvwxyz 12345678901";
 409  3
     m_msgs.clear();
 410  3
     getHelper().sendString(new StringEventData(this, textField, testStr));
 411  3
     sleep(getSleepTimer());
 412  3
     assertEquals("String not sent correctly to text field", testStr,
 413   
                  textField.getText());
 414   
   }
 415   
 
 416   
   /**
 417   
    * Test sending a event which is null.
 418   
    */
 419  3
   public void testSendStringNull() {
 420  3
     if (!validPlatform()) {
 421  0
       return;
 422   
     }
 423  3
     JTextField textField = new JTextField(50);
 424   
 
 425  3
     setWindow(createJFrame(getName()));
 426  3
     getFrame().getContentPane().add(textField);
 427  3
     packAndShow(getFrame());
 428   
 
 429  3
     m_msgs.clear();
 430  3
     getHelper().sendString((StringEventData) null);
 431  3
     sleep(getSleepTimer());
 432  3
     assertEquals("No messages should have been sent:", 0, m_msgs.size());
 433   
   }
 434   
 
 435   
   /**
 436   
    * Test sending to a field which is not visisible.
 437   
    */
 438  3
   public void testSendStringNotReady() {
 439  3
     if (!validPlatform()) {
 440  0
       return;
 441   
     }
 442  3
     JTextField textField = new JTextField(50);
 443  3
     JTextField notReady = new JTextField(50);
 444   
 
 445  3
     setWindow(createJFrame(getName()));
 446  3
     getFrame().getContentPane().add(textField);
 447  3
     packAndShow(getFrame());
 448   
 
 449  3
     m_msgs.clear();
 450  3
     getHelper().sendString(new StringEventData(this, notReady, "ABC"));
 451  3
     sleep(getSleepTimer());
 452  3
     assertEquals("No messages should have been sent:", 0, m_msgs.size());
 453   
   }
 454   
 
 455   
   /**
 456   
    * Tests the sendString() method - sending some special
 457   
    * characters in the alphabet.
 458   
    */
 459  3
   public void testSendStringSpecialCharacters() {
 460  3
     if (!validPlatform()) {
 461  0
       return;
 462   
     }
 463  3
     JTextField textField = new JTextField(50);
 464   
 
 465  3
     setWindow(createJFrame(getName()));
 466  3
     getFrame().getContentPane().add(textField);
 467  3
     packAndShow(getFrame());
 468   
 
 469  3
     String testStr = "!@#$%^&*()_-+={}|[]:;'<>?,./~`\\\"";
 470  3
     m_msgs.clear();
 471  3
     getHelper().sendString(new StringEventData(this, textField, testStr));
 472  3
     sleep(getSleepTimer());
 473  3
     assertEquals("String not sent correctly to text field", testStr,
 474   
                  textField.getText());
 475   
   }
 476   
 
 477   
   /**
 478   
    * Tests the sendKeyAction() method on a JTextField.
 479   
    */
 480  3
   public void testSendKeyActionJTextField() {
 481  3
     if (!validPlatform()) {
 482  0
       return;
 483   
     }
 484   
 
 485  3
     setWindow(createJFrame(getName()));
 486   
 
 487  3
     JTextField textField = new JTextField(30);
 488  3
     textField.addKeyListener(new KeyAdapter() {
 489  3
       public void keyPressed(final KeyEvent e) {
 490  3
         m_msgs.add(e);
 491   
       }
 492   
     });
 493   
 
 494  3
     getFrame().getContentPane().add(textField);
 495  3
     packAndShow(getFrame());
 496   
 
 497  3
     m_msgs.clear();
 498  3
     getHelper().sendKeyAction(new KeyEventData(this, textField, KeyEvent.VK_F2));
 499  3
     sleep(getSleepTimer());
 500  3
     assertEquals("Number of messages is wrong", 1, m_msgs.size());
 501  3
     assertEquals("KeyCode is not correct:", KeyEvent.VK_F2,
 502   
                  ((KeyEvent) m_msgs.get(0)).getKeyCode());
 503   
   }
 504   
 
 505   
   /**
 506   
    * Tests the sendKeyAction() method on a JButton.
 507   
    */
 508  3
   public void testSendKeyActionJButton() {
 509  3
     if (!validPlatform()) {
 510  0
       return;
 511   
     }
 512  3
     setWindow(createJFrame(getName()));
 513  3
     getFrame().getContentPane().setLayout(new GridBagLayout());
 514   
 
 515  3
     int number = 5;
 516  3
     JButton[] button = new JButton[number];
 517  3
     for (int i = 0; i < number; i++) {
 518  15
       String str = "Button-" + i;
 519  15
       button[i] = new JButton(str);
 520  15
       button[i].setName(str);
 521  15
       button[i].setMnemonic(String.valueOf(i).charAt(0));
 522  15
       getFrame().getContentPane().add(button[i]);
 523   
     }
 524   
 
 525  3
     packAndShow(getFrame());
 526   
 
 527  3
     for (int tries = 0; tries < 10; tries++) {
 528  30
       int idx = (int) (Math.random() * number);
 529   
       // get the keyCode for this character (idx)
 530  30
       JFCKeyStroke[] strokes = KeyEventData.getKeyMapping().getKeyStrokes(
 531   
           String.valueOf(idx).charAt(0));
 532  30
       assertNotNull("Could not find the key strokes for: '" + idx + "'",
 533   
                     strokes);
 534  30
       assertTrue(strokes.length > 0);
 535  30
       assertTrue("Could'nt get the correct keyCode for: '" + idx + "'",
 536   
                  strokes[0].getKeyCode() > 0);
 537   
 
 538  30
       getHelper().sendKeyAction(new KeyEventData(this, getFrame(),
 539   
                                               strokes[0].getKeyCode(),
 540   
                                               KeyEvent.ALT_MASK,
 541   
                                               DEFAULT_SLEEPTIME));
 542  30
       sleep(getSleepTimer());
 543  30
       assertTrue(button[idx].getName() + " should have focus",
 544   
                  button[idx].hasFocus());
 545   
     }
 546   
   }
 547   
 
 548   
   /**
 549   
    * Test sending the a SHIFT combination.
 550   
    */
 551  3
   public void testSendKeyActionSHIFT() {
 552  3
     if (!validPlatform()) {
 553  0
       return;
 554   
     }
 555  3
     setWindow(createJFrame(getName()));
 556   
 
 557  3
     JTextField textField = new JTextField(30);
 558  3
     textField.addKeyListener(new KeyAdapter() {
 559  6
       public void keyPressed(final KeyEvent e) {
 560  6
         m_msgs.add(e);
 561   
       }
 562   
     });
 563   
 
 564  3
     getFrame().getContentPane().add(textField);
 565  3
     packAndShow(getFrame());
 566  3
     int modifiers = 0;
 567  3
     m_msgs.clear();
 568  3
     modifiers = KeyEvent.SHIFT_MASK;
 569  3
     getHelper().sendKeyAction(new KeyEventData(this, textField, KeyEvent.VK_F2,
 570   
                                             modifiers, DEFAULT_SLEEPTIME));
 571  3
     sleep(getSleepTimer());
 572  3
     assertEquals("Number of messages is wrong", 2, m_msgs.size());
 573   
 
 574  3
     assertEquals("KeyCode is not correct:", KeyEvent.VK_SHIFT,
 575   
                  ((KeyEvent) m_msgs.get(0)).getKeyCode());
 576  3
     assertEquals("Modifiers is not correct:", modifiers,
 577   
                  ((KeyEvent) m_msgs.get(0)).getModifiers());
 578   
 
 579  3
     assertEquals("KeyCode is not correct:", KeyEvent.VK_F2,
 580   
                  ((KeyEvent) m_msgs.get(1)).getKeyCode());
 581  3
     assertEquals("Modifiers is not correct:", modifiers,
 582   
                  ((KeyEvent) m_msgs.get(1)).getModifiers());
 583   
   }
 584   
 
 585   
   /**
 586   
    * Test sending the a CTRL combination.
 587   
    */
 588  3
   public void testSendKeyActionCTRL() {
 589  3
     if (!validPlatform()) {
 590  0
       return;
 591   
     }
 592  3
     setWindow(createJFrame(getName()));
 593   
 
 594  3
     JTextField textField = new JTextField(30);
 595  3
     textField.addKeyListener(new KeyAdapter() {
 596  6
       public void keyPressed(final KeyEvent e) {
 597  6
         m_msgs.add(e);
 598   
       }
 599   
     });
 600   
 
 601  3
     getFrame().getContentPane().add(textField);
 602  3
     packAndShow(getFrame());
 603  3
     int modifiers = 0;
 604  3
     m_msgs.clear();
 605  3
     modifiers = KeyEvent.CTRL_MASK;
 606  3
     getHelper().sendKeyAction(new KeyEventData(this, textField, KeyEvent.VK_F2,
 607   
                                             modifiers, DEFAULT_SLEEPTIME));
 608  3
     sleep(getSleepTimer());
 609  3
     assertEquals("Number of messages is wrong", 2, m_msgs.size());
 610  3
     assertEquals("KeyCode is not correct:", KeyEvent.VK_CONTROL,
 611   
                  ((KeyEvent) m_msgs.get(0)).getKeyCode());
 612  3
     assertEquals("Modifiers is not correct:", modifiers,
 613   
                  ((KeyEvent) m_msgs.get(0)).getModifiers());
 614   
 
 615  3
     assertEquals("KeyCode is not correct:", KeyEvent.VK_F2,
 616   
                  ((KeyEvent) m_msgs.get(1)).getKeyCode());
 617  3
     assertEquals("Modifiers is not correct:", modifiers,
 618   
                  ((KeyEvent) m_msgs.get(1)).getModifiers());
 619   
   }
 620   
 
 621   
   /**
 622   
    * Test sending the a CTRL SHIFT combination.
 623   
    */
 624  3
   public void testSendKeyActionCTRLSHIFT() {
 625  3
     if (!validPlatform()) {
 626  0
       return;
 627   
     }
 628  3
     setWindow(createJFrame(getName()));
 629   
 
 630  3
     JTextField textField = new JTextField(30);
 631  3
     textField.addKeyListener(new KeyAdapter() {
 632  9
       public void keyPressed(final KeyEvent e) {
 633  9
         m_msgs.add(e);
 634   
       }
 635   
     });
 636   
 
 637  3
     getFrame().getContentPane().add(textField);
 638  3
     packAndShow(getFrame());
 639  3
     int modifiers = 0;
 640  3
     m_msgs.clear();
 641  3
     modifiers = KeyEvent.CTRL_MASK + KeyEvent.SHIFT_MASK;
 642  3
     getHelper().sendKeyAction(new KeyEventData(this, textField, KeyEvent.VK_F2,
 643   
                                             modifiers, DEFAULT_SLEEPTIME));
 644  3
     sleep(getSleepTimer());
 645  3
     assertEquals("Number of messages is wrong", 3, m_msgs.size());
 646  3
     assertEquals("KeyCode is not correct:", KeyEvent.VK_SHIFT,
 647   
                  ((KeyEvent) m_msgs.get(0)).getKeyCode());
 648  3
     assertEquals("Modifiers is not correct:", KeyEvent.SHIFT_MASK,
 649   
                  ((KeyEvent) m_msgs.get(0)).getModifiers());
 650  3
     assertEquals("KeyCode is not correct:", KeyEvent.VK_CONTROL,
 651   
                  ((KeyEvent) m_msgs.get(1)).getKeyCode());
 652  3
     assertEquals("Modifiers is not correct:", modifiers,
 653   
                  ((KeyEvent) m_msgs.get(1)).getModifiers());
 654  3
     assertEquals("KeyCode is not correct:", KeyEvent.VK_F2,
 655   
                  ((KeyEvent) m_msgs.get(2)).getKeyCode());
 656  3
     assertEquals("Modifiers is not correct:", modifiers,
 657   
                  ((KeyEvent) m_msgs.get(2)).getModifiers());
 658   
   }
 659   
 
 660   
   /**
 661   
    * Test sending the a ALT Graph combination.
 662   
    * NOTE: Commented out since 'Alt Graph' is not supported on windows system.
 663   
    *
 664   
        public void testSendKeyAction_ALTGR() {
 665   
       frame = createJFrame(getName());
 666   
       JTextField textField = new JTextField(30);
 667   
       textField.addKeyListener(new KeyAdapter() {
 668   
           public void keyPressed(final KeyEvent e) {
 669   
               msgs.add(e);
 670   
           }
 671   
       });
 672   
       frame.getContentPane().add(textField);
 673   
       packAndShow(frame);
 674   
       int modifiers = 0;
 675   
       modifiers = KeyEvent.ALT_GRAPH_MASK;
 676   
       msgs.clear();
 677   
       helper.sendKeyAction(new KeyEventData(this, textField, KeyEvent.VK_F2, modifiers, helper.DEFAULTSLEEP));
 678   
       sleep(getSleepTimer());
 679   
       assertEquals("Number of messages is wrong", 2, msgs.size());
 680   
       assertEquals("KeyCode is not correct:", KeyEvent.VK_ALT_GRAPH, ((KeyEvent) msgs.get(0)).getKeyCode());
 681   
       assertEquals("Modifiers is not correct:", modifiers, ((KeyEvent) msgs.get(0)).getModifiers());
 682   
       assertEquals("KeyCode is not correct:", KeyEvent.VK_F2, ((KeyEvent) msgs.get(1)).getKeyCode());
 683   
       assertEquals("Modifiers is not correct:", modifiers, ((KeyEvent) msgs.get(1)).getModifiers());
 684   
        }
 685   
    */
 686   
 
 687   
   /**
 688   
    * Test sending the a ALT combination.
 689   
    */
 690  3
   public void testSendKeyActionALT() {
 691  3
     if (!validPlatform()) {
 692  0
       return;
 693   
     }
 694  3
     setWindow(createJFrame(getName()));
 695   
 
 696  3
     JTextField textField = new JTextField(30);
 697  3
     textField.addKeyListener(new KeyAdapter() {
 698  6
       public void keyPressed(final KeyEvent e) {
 699  6
         m_msgs.add(e);
 700   
       }
 701   
     });
 702   
 
 703  3
     getFrame().getContentPane().add(textField);
 704  3
     packAndShow(getFrame());
 705  3
     int modifiers = 0;
 706  3
     modifiers = KeyEvent.ALT_MASK;
 707  3
     m_msgs.clear();
 708  3
     getHelper().sendKeyAction(new KeyEventData(this, textField, KeyEvent.VK_F2,
 709   
                                             modifiers, DEFAULT_SLEEPTIME));
 710  3
     sleep(getSleepTimer());
 711  3
     assertEquals("Number of messages is wrong", 2, m_msgs.size());
 712  3
     assertEquals("KeyCode is not correct:", KeyEvent.VK_ALT,
 713   
                  ((KeyEvent) m_msgs.get(0)).getKeyCode());
 714  3
     assertEquals("Modifiers is not correct:", modifiers,
 715   
                  ((KeyEvent) m_msgs.get(0)).getModifiers());
 716   
 
 717  3
     assertEquals("KeyCode is not correct:", KeyEvent.VK_F2,
 718   
                  ((KeyEvent) m_msgs.get(1)).getKeyCode());
 719  3
     assertEquals("Modifiers is not correct:", modifiers,
 720   
                  ((KeyEvent) m_msgs.get(1)).getModifiers());
 721   
   }
 722   
 
 723   
   /**
 724   
    * Test sending a META combination.
 725   
    * Meta key is not supported on window systems.
 726   
    *
 727   
        public void testSendKeyAction_META() {
 728   
       frame = createJFrame(getName());
 729   
       JTextField textField = new JTextField(30);
 730   
       textField.addKeyListener(new KeyAdapter() {
 731   
           public void keyPressed(final KeyEvent e) {
 732   
               msgs.add(e);
 733   
           }
 734   
       });
 735   
       frame.getContentPane().add(textField);
 736   
       packAndShow(frame);
 737   
       int modifiers = 0;
 738   
       modifiers = KeyEvent.META_MASK;
 739   
       helper.sendKeyAction(new KeyEventData(this, textField, KeyEvent.VK_F2, modifiers, helper.DEFAULTSLEEP));
 740   
       sleep(getSleepTimer());
 741   
       assertEquals("Number of messages is wrong", 2, msgs.size());
 742   
       assertEquals("KeyCode is not correct:", KeyEvent.VK_META, ((KeyEvent) msgs.get(0)).getKeyCode());
 743   
       assertEquals("Modifiers is not correct:", modifiers, ((KeyEvent) msgs.get(0)).getModifiers());
 744   
       assertEquals("KeyCode is not correct:", KeyEvent.VK_F2, ((KeyEvent) msgs.get(1)).getKeyCode());
 745   
       assertEquals("Modifiers is not correct:", modifiers, ((KeyEvent) msgs.get(1)).getModifiers());
 746   
        }
 747   
    */
 748   
 
 749   
   /**
 750   
    * Test sending a null event.
 751   
    */
 752  3
   public void testSendKeyActionNull() {
 753  3
     if (!validPlatform()) {
 754  0
       return;
 755   
     }
 756  3
     setWindow(createJFrame(getName()));
 757   
 
 758  3
     JTextField textField = new JTextField(30);
 759  3
     textField.addKeyListener(new KeyAdapter() {
 760  0
       public void keyPressed(final KeyEvent e) {
 761  0
         m_msgs.add(e);
 762   
       }
 763   
     });
 764   
 
 765  3
     getFrame().getContentPane().add(textField);
 766  3
     packAndShow(getFrame());
 767  3
     getHelper().sendKeyAction((KeyEventData) null);
 768  3
     sleep(getSleepTimer());
 769  3
     assertEquals("Number of messages is wrong", 0, m_msgs.size());
 770   
   }
 771   
 
 772   
   /**
 773   
    * Test sending a event to a field which is not visible.
 774   
    */
 775  3
   public void testSendKeyActionNotReady() {
 776  3
     if (!validPlatform()) {
 777  0
       return;
 778   
     }
 779  3
     setWindow(createJFrame(getName()));
 780   
 
 781  3
     JTextField textField = new JTextField(30);
 782  3
     JTextField notReady = new JTextField(30);
 783  3
     textField.addKeyListener(new KeyAdapter() {
 784  0
       public void keyPressed(final KeyEvent e) {
 785  0
         m_msgs.add(e);
 786   
       }
 787   
     });
 788   
 
 789  3
     getFrame().getContentPane().add(textField);
 790  3
     packAndShow(getFrame());
 791  3
     getHelper().sendKeyAction(new KeyEventData(this, notReady, KeyEvent.VK_F2));
 792  3
     sleep(getSleepTimer());
 793  3
     assertEquals("Number of messages is wrong", 0, m_msgs.size());
 794   
   }
 795   
 
 796   
   /**
 797   
    * Test entering a click with a null event.
 798   
    */
 799  3
   public void testEnterClickAndLeaveNull() {
 800  3
     if (!validPlatform()) {
 801  0
       return;
 802   
     }
 803   
     // The important thing here is that we do not
 804   
     // throw an Exception.
 805  3
     getHelper().enterClickAndLeave((MouseEventData) null);
 806   
   }
 807   
 
 808   
   /**
 809   
    * This method will test the enterJTableClickAndLeave() method applying to selecting
 810   
    * particular items in a JTable - on a regular cell.
 811   
    */
 812  3
   public void testEnterJTableClickAndLeave() {
 813  3
     if (!validPlatform()) {
 814  0
       return;
 815   
     }
 816  3
     final Object[][] rowData = {{"1,1", "1,2", "1,3", "1,4", "1,5", "1,6"},
 817   
         {"2,1", "2,2", "2,3", "2,4", "2,5", "2,6"},
 818   
         {"3,1", "3,2", "3,3", "3,4", "3,5", "3,6"},
 819   
         {"4,1", "4,2", "4,3", "4,4", "4,5", "4,6"},
 820   
         {"5,1", "5,2", "5,3", "5,4", "5,5", "5,6"}};
 821  3
     final Object[] columnNames = {"Col1", "Col2", "Col3", "Col4", "Col5"};
 822   
 
 823  3
     final JTable table = new JTable(rowData, columnNames);
 824  3
     table.setModel(new AbstractTableModel() {
 825  1799
       public int getRowCount() {
 826  1799
         return rowData.length;
 827   
       }
 828   
 
 829  18
       public int getColumnCount() {
 830  18
         return columnNames.length;
 831   
       }
 832   
 
 833  1383
       public Object getValueAt(final int row, final int col) {
 834  1383
         return rowData[row][col];
 835   
       }
 836   
 
 837  214
       public boolean isCellEditable(final int row, final int column) {
 838  214
         return false;
 839   
       }
 840   
     });
 841  3
     table.setRowSelectionAllowed(false);
 842  3
     table.setColumnSelectionAllowed(false);
 843  3
     table.addMouseListener(new MouseAdapter() {
 844  150
       public void mouseClicked(final MouseEvent e) {
 845  150
         m_msgs.add("Selected: (" + table.getSelectedRow() + ", "
 846   
                    + table.getSelectedColumn() + "): Clicks: "
 847   
                    + e.getClickCount());
 848   
       }
 849   
     });
 850   
 
 851  3
     setWindow(createJFrame(getName()));
 852   
     // add the table inside of a JScrollPane - for the header row to appear
 853  3
     getFrame().getContentPane().add(new JScrollPane(table));
 854  3
     packAndShow(getFrame());
 855   
 
 856  3
     for (int tries = 0; tries < 5; tries++) {
 857  15
       for (int clicks = 1; clicks < 5; clicks++) {
 858  60
         int row = (int) (Math.random() * 5);
 859  60
         int column = (int) (Math.random() * 5);
 860  60
         m_msgs.clear();
 861  60
         getHelper().enterClickAndLeave(new JTableMouseEventData(this, table, row,
 862   
             column, clicks));
 863   
 
 864  60
         sleep(getSleepTimer());
 865  60
         assertEquals("Number of messages showing is wrong", clicks, m_msgs.size());
 866  60
         for (int click = 1; click <= clicks; click++) {
 867  150
           assertEquals("Wrong message is showing up",
 868   
                        "Selected: (" + row + ", " + column + "): Clicks: "
 869   
                        + click, m_msgs.get(click - 1));
 870   
         }
 871   
       }
 872   
     }
 873   
   }
 874   
 
 875   
   /**
 876   
    * This method will test the clicking on the
 877   
    * -1, -1 cell of the JTable. This would be a
 878   
    * uncovered area of the ViewPort.
 879   
    */
 880  3
   public void testEnterInvalidJTableClickAndLeave() {
 881  3
     if (!validPlatform()) {
 882  0
       return;
 883   
     }
 884  3
     final Object[][] rowData = {{"1,1", "1,2", "1,3", "1,4", "1,5", "1,6"},
 885   
         {"2,1", "2,2", "2,3", "2,4", "2,5", "2,6"},
 886   
         {"3,1", "3,2", "3,3", "3,4", "3,5", "3,6"},
 887   
         {"4,1", "4,2", "4,3", "4,4", "4,5", "4,6"},
 888   
         {"5,1", "5,2", "5,3", "5,4", "5,5", "5,6"}};
 889  3
     final Object[] columnNames = {"Col1", "Col2", "Col3", "Col4", "Col5"};
 890   
 
 891  3
     final JTable table = new JTable(rowData, columnNames);
 892  3
     table.setModel(new AbstractTableModel() {
 893  108
       public int getRowCount() {
 894  108
         return rowData.length;
 895   
       }
 896   
 
 897  18
       public int getColumnCount() {
 898  18
         return columnNames.length;
 899   
       }
 900   
 
 901  78
       public Object getValueAt(final int row, final int col) {
 902  78
         return rowData[row][col];
 903   
       }
 904   
 
 905  6
       public boolean isCellEditable(final int row, final int column) {
 906  6
         return false;
 907   
       }
 908   
     });
 909  3
     table.setRowSelectionAllowed(false);
 910  3
     table.setColumnSelectionAllowed(false);
 911  3
     table.addMouseListener(new MouseAdapter() {
 912  0
       public void mouseClicked(final MouseEvent e) {
 913  0
         m_msgs.add("Selected: (" + table.getSelectedRow() + ", "
 914   
                    + table.getSelectedColumn() + "): Clicks: "
 915   
                    + e.getClickCount());
 916   
       }
 917   
     });
 918  3
     JScrollPane pane = new JScrollPane(table);
 919   
 
 920  3
     pane.addMouseListener(new MouseAdapter() {
 921  30
       public void mouseClicked(final MouseEvent e) {
 922  30
         m_msgs.add("Selected: (-1, -1): Clicks: " + e.getClickCount());
 923   
       }
 924   
     });
 925   
 
 926  3
     setWindow(createJFrame(getName()));
 927   
     // add the table inside of a JScrollPane - for the header row to appear
 928  3
     getFrame().getContentPane().add(pane);
 929  3
     packAndShow(getFrame());
 930   
 
 931  3
     for (int clicks = 1; clicks < 5; clicks++) {
 932  12
       int row = -1;
 933  12
       int column = -1;
 934  12
       m_msgs.clear();
 935  12
       getHelper().enterClickAndLeave(new JTableMouseEventData(this, table, row,
 936   
           column, clicks));
 937   
 
 938  12
       sleep(getSleepTimer());
 939  12
       assertEquals("Number of messages showing is wrong", clicks, m_msgs.size());
 940  12
       for (int click = 1; click <= clicks; click++) {
 941  30
         assertEquals("Wrong message is showing up",
 942   
                      "Selected: (" + row + ", " + column + "): Clicks: "
 943   
                      + click, m_msgs.get(click - 1));
 944   
       }
 945   
     }
 946   
   }
 947   
 
 948   
   /**
 949   
    * This method will test the enterJTableClickAndLeave() method applying to selecting
 950   
    * particular items in a jTable - on a header cell.
 951   
    */
 952  3
   public void testEnterJTableHeaderClickAndLeave() {
 953  3
     if (!validPlatform()) {
 954  0
       return;
 955   
     }
 956   
 
 957  3
     final Object[][] rowData = {{"1,1", "1,2", "1,3", "1,4", "1,5", "1,6"},
 958   
         {"2,1", "2,2", "2,3", "2,4", "2,5", "2,6"},
 959   
         {"3,1", "3,2", "3,3", "3,4", "3,5", "3,6"},
 960   
         {"4,1", "4,2", "4,3", "4,4", "4,5", "4,6"},
 961   
         {"5,1", "5,2", "5,3", "5,4", "5,5", "5,6"}};
 962  3
     final Object[] columnNames = {"Col1", "Col2", "Col3", "Col4", "Col5"};
 963   
 
 964  3
     JTable table = new JTable(rowData, columnNames);
 965  3
     table.setRowSelectionAllowed(false);
 966  3
     table.setColumnSelectionAllowed(false);
 967   
 
 968  3
     final JTableHeader header = table.getTableHeader();
 969  3
     header.addMouseListener(new MouseAdapter() {
 970  150
       public void mouseClicked(final MouseEvent e) {
 971  150
         String selection = "Selected: ("
 972   
             + header.getColumnModel().getColumnIndexAtX(e.getPoint().x)
 973   
             + "): Clicks: " + e.getClickCount();
 974  150
         m_msgs.add(selection);
 975   
       }
 976   
     });
 977   
 
 978  3
     setWindow(createJFrame(getName()));
 979   
     // add the table inside of a JScrollPane - for the header row to appear
 980  3
     getFrame().getContentPane().add(new JScrollPane(table));
 981  3
     packAndShow(getFrame());
 982   
 
 983  3
     for (int tries = 0; tries < 5; tries++) {
 984  15
       for (int clicks = 1; clicks < 5; clicks++) {
 985  60
         int column = (int) (Math.random() * 5);
 986  60
         m_msgs.clear();
 987  60
         getHelper().enterClickAndLeave(new JTableHeaderMouseEventData(this, header,
 988   
             column, clicks));
 989  60
         sleep(getSleepTimer());
 990  60
         assertEquals("Wrong number of messages", clicks, m_msgs.size());
 991  60
         for (int click = 1; click <= clicks; click++) {
 992  150
           assertEquals("Wrong message is showing up",
 993   
                        "Selected: (" + column + "): Clicks: " + click,
 994   
                        m_msgs.get(click - 1));
 995   
         }
 996   
       }
 997   
     }
 998   
   }
 999   
 
 1000   
   /**
 1001   
    * This method will test the enterJTableHeaderDragAndLeave() method applying
 1002   
    * to selecting particular items in a jTable - on a header cell.
 1003   
    */
 1004  3
   public void testEnterJTableHeaderDragAndLeave() {
 1005  3
     if (!validPlatform()) {
 1006  0
       return;
 1007   
     }
 1008  3
     final int testSize = 25;
 1009  3
     int resultSize = 50;
 1010  3
     final int clicks = 1;
 1011   
 
 1012  3
     final Object[][] rowData = {{"1,1", "1,2", "1,3", "1,4", "1,5", "1,6"},
 1013   
         {"2,1", "2,2", "2,3", "2,4", "2,5", "2,6"},
 1014   
         {"3,1", "3,2", "3,3", "3,4", "3,5", "3,6"},
 1015   
         {"4,1", "4,2", "4,3", "4,4", "4,5", "4,6"},
 1016   
         {"5,1", "5,2", "5,3", "5,4", "5,5", "5,6"}};
 1017  3
     final Object[] columnNames = {"Col1", "Col2", "Col3", "Col4", "Col5"};
 1018   
 
 1019  3
     JTable table = new JTable(rowData, columnNames);
 1020  3
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 1021   
 
 1022   
     // Set all of the columns to the test size.
 1023  3
     for (int col = 0; col < table.getColumnCount(); col++) {
 1024   
       // Resizing the column does not seem to work unless you set Preferred size.
 1025  15
       table.getColumnModel().getColumn(col).setPreferredWidth(testSize);
 1026   
     }
 1027  3
     table.revalidate();
 1028  3
     table.getTableHeader().revalidate();
 1029   
 
 1030  3
     table.setRowSelectionAllowed(false);
 1031  3
     table.setColumnSelectionAllowed(false);
 1032   
 
 1033  3
     final JTableHeader header = table.getTableHeader();
 1034  3
     header.addMouseListener(new MouseAdapter() {
 1035  15
       public void mouseReleased(final MouseEvent e) {
 1036  15
         int index = header.getColumnModel().getColumnIndexAtX(e.getPoint().x)
 1037   
             - 1;
 1038  15
         TableColumn tc = header.getColumnModel().getColumn(index);
 1039  15
         int size = tc.getWidth();
 1040   
         // Restore the column width to the testSize.
 1041  15
         tc.setPreferredWidth(testSize);
 1042  15
         header.revalidate();
 1043   
 
 1044  15
         String selection = "Clicks: " + e.getClickCount() + " Size:" + size;
 1045  15
         m_msgs.add(selection);
 1046   
       }
 1047   
     });
 1048   
 
 1049  3
     setWindow(createJFrame(getName()));
 1050   
     // add the table inside of a JScrollPane - for the header row to appear
 1051  3
     getFrame().getContentPane().add(new JScrollPane(table));
 1052  3
     packAndShow(getFrame());
 1053   
 
 1054  3
     for (int i = 0; i < 5; i++) {
 1055  15
       int column = (int) (Math.random() * 4);
 1056  15
       int width = table.getColumnModel().getColumn(column).getWidth();
 1057   
 
 1058  15
       JTableHeaderMouseEventData source =
 1059   
           new JTableHeaderMouseEventData(this, header, column, clicks,
 1060   
                                          InputEvent.BUTTON1_MASK, false, 100,
 1061   
                                          JTableHeaderMouseEventData.EAST);
 1062  15
       JTableHeaderMouseEventData dest =
 1063   
           new JTableHeaderMouseEventData(this, header, column + 1, clicks,
 1064   
                                          InputEvent.BUTTON1_MASK, false, 100,
 1065   
                                          JTableHeaderMouseEventData.EAST);
 1066  15
       m_msgs.clear();
 1067  15
       getHelper().enterDragAndLeave(new DragEventData(this, source, dest));
 1068  15
       sleep(getSleepTimer());
 1069  15
       resultSize = dest.getLocationOnScreen().x
 1070   
           - source.getLocationOnScreen().x + width;
 1071   
 
 1072  15
       assertEquals("Number of messages showing is wrong", clicks, m_msgs.size());
 1073  15
       for (int click = 1; click <= clicks; click++) {
 1074  15
         assertEquals("Wrong message is showing up",
 1075   
                      "Clicks: " + 1 + " Size:" + resultSize, m_msgs.get(0));
 1076   
       }
 1077   
     }
 1078   
   }
 1079   
 
 1080   
   /**
 1081   
    * This method will test the enterJTableHeaderDragAndLeave() method applying
 1082   
    * to selecting particular items in a jTable - on a header cell.
 1083   
    */
 1084  3
   public void testEnterJTableHeaderDragAndLeaveByPercentage() {
 1085  3
     if (!validPlatform()) {
 1086  0
       return;
 1087   
     }
 1088  3
     final int testSize = 25;
 1089  3
     int resultSize = 50;
 1090  3
     final int clicks = 1;
 1091   
 
 1092  3
     final Object[][] rowData = {{"1,1", "1,2", "1,3", "1,4", "1,5", "1,6"},
 1093   
         {"2,1", "2,2", "2,3", "2,4", "2,5", "2,6"},
 1094   
         {"3,1", "3,2", "3,3", "3,4", "3,5", "3,6"},
 1095   
         {"4,1", "4,2", "4,3", "4,4", "4,5", "4,6"},
 1096   
         {"5,1", "5,2", "5,3", "5,4", "5,5", "5,6"}};
 1097  3
     final Object[] columnNames = {
 1098   
         "Col1", "Col2", "Col3", "Col4", "Col5"};
 1099   
 
 1100  3
     JTable table = new JTable(rowData, columnNames);
 1101  3
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 1102   
 
 1103   
     // Set all of the columns to the test size.
 1104  3
     for (int col = 0; col < table.getColumnCount(); col++) {
 1105   
       // Resizing the column does not seem to work unless you set Preferred size.
 1106  15
       table.getColumnModel().getColumn(col).setPreferredWidth(testSize);
 1107   
     }
 1108  3
     table.revalidate();
 1109  3
     table.getTableHeader().revalidate();
 1110   
 
 1111  3
     table.setRowSelectionAllowed(false);
 1112  3
     table.setColumnSelectionAllowed(false);
 1113   
 
 1114  3
     final JTableHeader header = table.getTableHeader();
 1115  3
     header.addMouseListener(new MouseAdapter() {
 1116  15
       public void mouseReleased(final MouseEvent e) {
 1117  15
         int index = header.getColumnModel().getColumnIndexAtX(e.getPoint().x)
 1118   
             - 1;
 1119  15
         TableColumn tc = header.getColumnModel().getColumn(index);
 1120  15
         int size = tc.getWidth();
 1121   
         // Restore the column width to the testSize.
 1122  15
         tc.setPreferredWidth(testSize);
 1123  15
         header.revalidate();
 1124   
 
 1125  15
         String selection = "Clicks: " + e.getClickCount() + " Size:" + size;
 1126  15
         m_msgs.add(selection);
 1127   
       }
 1128   
     });
 1129   
 
 1130  3
     setWindow(createJFrame(getName()));
 1131   
     // add the table inside of a JScrollPane - for the header row to appear
 1132  3
     getFrame().getContentPane().add(new JScrollPane(table));
 1133  3
     packAndShow(getFrame());
 1134   
 
 1135  3
     for (int i = 0; i < 5; i++) {
 1136  15
       int column = (int) (Math.random() * 4);
 1137  15
       int width = table.getColumnModel().getColumn(column).getWidth();
 1138   
 
 1139  15
       JTableHeaderMouseEventData source =
 1140   
           new JTableHeaderMouseEventData(this, header, column, clicks,
 1141   
                                          InputEvent.BUTTON1_MASK, false, 100,
 1142   
                                          JTableHeaderMouseEventData.EAST);
 1143   
       // The dest column width should be twice as large
 1144  15
       JTableHeaderMouseEventData dest =
 1145   
           new JTableHeaderMouseEventData(this, header, column, clicks,
 1146   
                                          InputEvent.BUTTON1_MASK, false, 100,
 1147   
                                          EventDataConstants.PERCENT,
 1148   
                                          new Point(200, 50));
 1149   
 
 1150  15
       m_msgs.clear();
 1151  15
       getHelper().enterDragAndLeave(new DragEventData(this, source, dest));
 1152  15
       sleep(getSleepTimer());
 1153  15
       resultSize = dest.getLocationOnScreen().x
 1154   
           - source.getLocationOnScreen().x + width;
 1155   
 
 1156  15
       assertEquals("Number of messages showing is wrong", clicks, m_msgs.size());
 1157  15
       for (int click = 1; click <= clicks; click++) {
 1158  15
         assertEquals("Wrong messages is showing up",
 1159   
                      "Clicks: " + click + " Size:" + resultSize,
 1160   
                      m_msgs.get(click - 1));
 1161   
       }
 1162   
     }
 1163   
   }
 1164   
 
 1165   
   /**
 1166   
        * This method will test the enterDragAndLeave() method applying a drag operation
 1167   
        * to the EAST side of a column header. The column width should be resized by the
 1168   
    * dragged amount.
 1169   
    * In this case the drag amount is to the east side of the next cell.
 1170   
    */
 1171  3
   public void testEnterJTableHeaderMoveDragAndLeave() {
 1172  3
     if (!validPlatform()) {
 1173  0
       return;
 1174   
     }
 1175  3
     final int testSize = 25;
 1176  3
     final int clicks = 1;
 1177   
 
 1178  3
     final Object[][] rowData = {{"1,1", "1,2", "1,3", "1,4", "1,5", "1,6"},
 1179   
         {"2,1", "2,2", "2,3", "2,4", "2,5", "2,6"},
 1180   
         {"3,1", "3,2", "3,3", "3,4", "3,5", "3,6"},
 1181   
         {"4,1", "4,2", "4,3", "4,4", "4,5", "4,6"},
 1182   
         {"5,1", "5,2", "5,3", "5,4", "5,5", "5,6"}};
 1183  3
     final Object[] columnNames = {"Col1", "Col2", "Col3", "Col4", "Col5"};
 1184   
 
 1185  3
     JTable table = new JTable(rowData, columnNames);
 1186  3
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 1187   
 
 1188   
     // Set all of the columns to the test size.
 1189  3
     for (int col = 0; col < table.getColumnCount(); col++) {
 1190   
       // Resizing the column does not seem to work unless you set Preferred size.
 1191  15
       table.getColumnModel().getColumn(col).setPreferredWidth(testSize);
 1192   
     }
 1193  3
     table.revalidate();
 1194  3
     table.getTableHeader().revalidate();
 1195   
 
 1196  3
     table.setRowSelectionAllowed(false);
 1197  3
     table.setColumnSelectionAllowed(false);
 1198   
 
 1199  3
     final JTableHeader header = table.getTableHeader();
 1200  3
     header.addMouseListener(new MouseAdapter() {
 1201  15
       public void mouseReleased(final MouseEvent e) {
 1202  15
         int index = header.getColumnModel().getColumnIndexAtX(e.getPoint().x);
 1203  15
         int modelIndex = header.getColumnModel().getColumn(index).getModelIndex();
 1204   
 
 1205  15
         TableColumn tc = header.getColumnModel().getColumn(index);
 1206  15
         int size = tc.getWidth();
 1207   
         // Restore the column width to the testSize.
 1208  15
         tc.setPreferredWidth(testSize);
 1209  15
         header.revalidate();
 1210   
 
 1211  15
         String selection = "Selected(" + modelIndex + ") Clicks: "
 1212   
             + e.getClickCount() + " Size:" + size;
 1213  15
         m_msgs.add(selection);
 1214   
       }
 1215   
     });
 1216   
 
 1217  3
     setWindow(createJFrame(getName()));
 1218   
     // add the table inside of a JScrollPane - for the header row to appear
 1219  3
     getFrame().getContentPane().add(new JScrollPane(table));
 1220  3
     packAndShow(getFrame());
 1221   
 
 1222  3
     for (int i = 0; i < 5; i++) {
 1223  15
       int column = (int) (Math.random() * 4);
 1224  15
       int modelIndex = header.getColumnModel().getColumn(column).getModelIndex();
 1225   
 
 1226  15
       JTableHeaderMouseEventData source = new JTableHeaderMouseEventData(this,
 1227   
           header, column, 1, InputEvent.BUTTON1_MASK, false, 100);
 1228  15
       JTableHeaderMouseEventData dest = new JTableHeaderMouseEventData(this,
 1229   
           header, column + 1, 1, InputEvent.BUTTON1_MASK, false, 100);
 1230  15
       m_msgs.clear();
 1231  15
       getHelper().enterDragAndLeave(new DragEventData(this, source, dest));
 1232  15
       sleep(getSleepTimer());
 1233  15
       assertEquals("Number of messages showing is wrong", 1, m_msgs.size());
 1234  15
       String str = "Selected(" + (modelIndex) + ") Clicks: " + clicks
 1235   
           + " Size:" + testSize;
 1236  15
       assertEquals("Wrong message is showing up", str, m_msgs.get(0));
 1237   
     }
 1238   
   }
 1239   
 
 1240   
   /**
 1241   
        * This method will test the enterDragAndLeave() method applying a drag operation
 1242   
        * to the EAST side of a column header. The column width should be resized by the
 1243   
    * dragged amount.
 1244   
    * In this case the drag amount is to the east side of the next cell.
 1245   
    *
 1246   
        public void testEnterJTableHeaderMoveMultiColumnDragAndLeave() {
 1247   
     final int testSize = 25;
 1248   
     final int clicks = 1;
 1249   
     final Object[][] rowData = {{"1,1", "1,2", "1,3", "1,4", "1,5", "1,6"},
 1250   
         {"2,1", "2,2", "2,3", "2,4", "2,5", "2,6"},
 1251   
         {"3,1", "3,2", "3,3", "3,4", "3,5", "3,6"},
 1252   
         {"4,1", "4,2", "4,3", "4,4", "4,5", "4,6"},
 1253   
         {"5,1", "5,2", "5,3", "5,4", "5,5", "5,6"}};
 1254   
     final Object[] columnNames = {"Col1", "Col2", "Col3", "Col4", "Col5"};
 1255   
     JTable table = new JTable(rowData, columnNames);
 1256   
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 1257   
     // Set all of the columns to the test size.
 1258   
     for (int col = 0; col < table.getColumnCount(); col++) {
 1259   
       // Resizing the column does not seem to work unless you set Preferred size.
 1260   
       table.getColumnModel().getColumn(col).setPreferredWidth(testSize);
 1261   
     }
 1262   
     table.revalidate();
 1263   
     table.getTableHeader().revalidate();
 1264   
     table.setRowSelectionAllowed(false);
 1265   
     table.setColumnSelectionAllowed(false);
 1266   
     final JTableHeader header = table.getTableHeader();
 1267   
     header.addMouseListener(new MouseAdapter() {
 1268   
       public void mouseReleased(final MouseEvent e) {
 1269   
         int index = header.getColumnModel().getColumnIndexAtX(e.getPoint().x);
 1270   
        int modelIndex = header.getColumnModel().getColumn(index).getModelIndex();
 1271   
         TableColumn tc = header.getColumnModel().getColumn(index);
 1272   
         int size = tc.getWidth();
 1273   
         // Restore the column width to the testSize.
 1274   
         tc.setPreferredWidth(testSize);
 1275   
         header.revalidate();
 1276   
         String selection = "Selected(" + modelIndex + ") Clicks: " +
 1277   
             e.getClickCount() + " Size:" + size;
 1278   
         msgs.add(selection);
 1279   
       }
 1280   
     });
 1281   
     frame = createJFrame(getName());
 1282   
     // add the table inside of a JScrollPane - for the header row to appear
 1283   
     frame.getContentPane().add(new JScrollPane(table));
 1284   
     packAndShow(frame);
 1285   
     for (int i = 0; i < 5; i++) {
 1286   
       int column = (int) (Math.random() * 4);
 1287   
       int column2 = (int) (Math.random() * 4);
 1288   
       for (int j = 0; j < table.getColumnModel().getColumnCount(); j++) {
 1289   
         System.err.println("Table:" +
 1290   
        table.getColumnModel().getColumn(j).getModelIndex());
 1291   
       }
 1292   
       int alignment = EventDataConstants.WEST;
 1293   
       if (column2 == 4) {
 1294   
         alignment = EventDataConstants.EAST;
 1295   
       }
 1296   
        int modelIndex = header.getColumnModel().getColumn(column).getModelIndex();
 1297   
       JTableHeaderMouseEventData source = new JTableHeaderMouseEventData(this,
 1298   
           header, column, 1, InputEvent.BUTTON1_MASK, false, 100);
 1299   
       JTableHeaderMouseEventData dest = new JTableHeaderMouseEventData(this,
 1300   
           header, column2, 1, InputEvent.BUTTON1_MASK, false, 100, alignment);
 1301   
       msgs.clear();
 1302   
       helper.enterDragAndLeave(new DragEventData(this, source, dest));
 1303   
       sleep(getSleepTimer());
 1304   
       assertEquals("Number of messages showing is wrong", 1, msgs.size());
 1305   
       int modelIndex2 = header.getColumnModel().getColumn(column2).
 1306   
           getModelIndex();
 1307   
       String str = "Selected(" + (modelIndex2) + ") Clicks: " + clicks +
 1308   
           " Size:" + testSize;
 1309   
       System.err.println("column:" + column + " column2:" + column2);
 1310   
       System.err.println("modelIndex:" + modelIndex + " modelIndex2:" +
 1311   
                          modelIndex2);
 1312   
       System.err.println("A:" + str);
 1313   
       System.err.println("B:" + msgs.get(0));
 1314   
       for (int j = 0; j < table.getColumnCount(); j++) {
 1315   
         System.err.println("RTable:" +
 1316   
        table.getColumnModel().getColumn(j).getModelIndex());
 1317   
       }
 1318   
       //assertEquals("Wrong message is showing up", str, msgs.get(0));
 1319   
     }
 1320   
        }*/
 1321   
 
 1322   
   /**
 1323   
        * This method will test the enterDragAndLeave() method applying a drag operation
 1324   
        * to the EAST side of a column header. The column width should be resized by the
 1325   
    * dragged amount.
 1326   
    * In this case the drag amount is to the east side of the next cell.
 1327   
    */
 1328  3
   public void testEnterJTableHeaderResizeDragAndLeave() {
 1329  3
     if (!validPlatform()) {
 1330  0
       return;
 1331   
     }
 1332  3
     final int testSize = 25;
 1333  3
     int resultSize = 50;
 1334  3
     final int clicks = 1;
 1335   
 
 1336  3
     final Object[][] rowData = {{"1,1", "1,2", "1,3", "1,4", "1,5", "1,6"},
 1337   
         {"2,1", "2,2", "2,3", "2,4", "2,5", "2,6"},
 1338   
         {"3,1", "3,2", "3,3", "3,4", "3,5", "3,6"},
 1339   
         {"4,1", "4,2", "4,3", "4,4", "4,5", "4,6"},
 1340   
         {"5,1", "5,2", "5,3", "5,4", "5,5", "5,6"}};
 1341  3
     final Object[] columnNames = {"Col1", "Col2", "Col3", "Col4", "Col5"};
 1342   
 
 1343  3
     JTable table = new JTable(rowData, columnNames);
 1344  3
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 1345   
 
 1346   
     // Set all of the columns to the test size.
 1347  3
     for (int col = 0; col < table.getColumnCount(); col++) {
 1348   
       // Resizing the column does not seem to work unless you set Preferred size.
 1349  15
       table.getColumnModel().getColumn(col).setPreferredWidth(testSize);
 1350   
     }
 1351  3
     table.revalidate();
 1352  3
     table.getTableHeader().revalidate();
 1353   
 
 1354  3
     table.setRowSelectionAllowed(false);
 1355  3
     table.setColumnSelectionAllowed(false);
 1356   
 
 1357  3
     final JTableHeader header = table.getTableHeader();
 1358  3
     header.addMouseListener(new MouseAdapter() {
 1359  15
       public void mouseReleased(final MouseEvent e) {
 1360  15
         int index = header.getColumnModel().getColumnIndexAtX(e.getPoint().x)
 1361   
             - 1;
 1362  15
         TableColumn tc = header.getColumnModel().getColumn(index);
 1363  15
         int size = tc.getWidth();
 1364   
         // Restore the column width to the testSize.
 1365  15
         tc.setPreferredWidth(testSize);
 1366  15
         header.revalidate();
 1367   
 
 1368  15
         String selection = "Clicks: " + e.getClickCount() + " Size:" + size;
 1369  15
         m_msgs.add(selection);
 1370   
       }
 1371   
     });
 1372   
 
 1373  3
     setWindow(createJFrame(getName()));
 1374   
     // add the table inside of a JScrollPane - for the header row to appear
 1375  3
     getFrame().getContentPane().add(new JScrollPane(table));
 1376  3
     packAndShow(getFrame());
 1377   
 
 1378  3
     for (int i = 0; i < 5; i++) {
 1379  15
       int column = (int) (Math.random() * 4);
 1380  15
       int width = table.getColumnModel().getColumn(column).getWidth();
 1381   
 
 1382  15
       JTableHeaderMouseEventData source = new JTableHeaderMouseEventData(this,
 1383   
           header, column, 1, InputEvent.BUTTON1_MASK, false, 100,
 1384   
           JTableHeaderMouseEventData.EAST);
 1385  15
       JTableHeaderMouseEventData dest =
 1386   
           new JTableHeaderMouseEventData(this, header, column + 1, 1,
 1387   
                                          InputEvent.BUTTON1_MASK, false, 100,
 1388   
                                          JTableHeaderMouseEventData.EAST);
 1389  15
       m_msgs.clear();
 1390  15
       getHelper().enterDragAndLeave(new DragEventData(this, source, dest));
 1391  15
       sleep(getSleepTimer());
 1392  15
       resultSize = dest.getLocationOnScreen().x
 1393   
           - source.getLocationOnScreen().x + width;
 1394  15
       assertEquals("Number of messages showing is wrong", 1, m_msgs.size());
 1395  15
       String str = "Clicks: " + clicks + " Size:" + resultSize;
 1396  15
       assertEquals("Wrong message is showing up", str, m_msgs.get(0));
 1397   
     }
 1398   
   }
 1399   
 
 1400   
   /**
 1401   
    * This method will test the enterDragAndLeave() method applying a drag operation
 1402   
    * to the EAST side of a column header. The column width should be resized by the
 1403   
    * dragged amount.
 1404   
    * In this case the drag amount is specified by a percentage of the original cell.
 1405   
    */
 1406  3
   public void testEnterJTableHeaderResizeDragAndLeaveByPercentage() {
 1407  3
     if (!validPlatform()) {
 1408  0
       return;
 1409   
     }
 1410  3
     final int testSize = 25;
 1411  3
     int resultSize = 50;
 1412  3
     final int clicks = 1;
 1413   
 
 1414  3
     final Object[][] rowData = {{"1,1", "1,2", "1,3", "1,4", "1,5", "1,6"},
 1415   
         {"2,1", "2,2", "2,3", "2,4", "2,5", "2,6"},
 1416   
         {"3,1", "3,2", "3,3", "3,4", "3,5", "3,6"},
 1417   
         {"4,1", "4,2", "4,3", "4,4", "4,5", "4,6"},
 1418   
         {"5,1", "5,2", "5,3", "5,4", "5,5", "5,6"}};
 1419  3
     final Object[] columnNames = {
 1420   
         "Col1", "Col2", "Col3", "Col4", "Col5"};
 1421   
 
 1422  3
     JTable table = new JTable(rowData, columnNames);
 1423  3
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 1424   
 
 1425   
     // Set all of the columns to the test size.
 1426  3
     for (int col = 0; col < table.getColumnCount(); col++) {
 1427   
       // Resizing the column does not seem to work unless you set Preferred size.
 1428  15
       table.getColumnModel().getColumn(col).setPreferredWidth(testSize);
 1429   
     }
 1430  3
     table.revalidate();
 1431  3
     table.getTableHeader().revalidate();
 1432   
 
 1433  3
     table.setRowSelectionAllowed(false);
 1434  3
     table.setColumnSelectionAllowed(false);
 1435   
 
 1436  3
     final JTableHeader header = table.getTableHeader();
 1437  3
     header.addMouseListener(new MouseAdapter() {
 1438  15
       public void mouseReleased(final MouseEvent e) {
 1439  15
         int index = header.getColumnModel().getColumnIndexAtX(e.getPoint().x)
 1440   
             - 1;
 1441  15
         TableColumn tc = header.getColumnModel().getColumn(index);
 1442  15
         int size = tc.getWidth();
 1443   
         // Restore the column width to the testSize.
 1444  15
         tc.setPreferredWidth(testSize);
 1445  15
         header.revalidate();
 1446   
 
 1447  15
         String selection = "Clicks: " + e.getClickCount() + " Size:" + size;
 1448  15
         m_msgs.add(selection);
 1449   
       }
 1450   
     });
 1451   
 
 1452  3
     setWindow(createJFrame(getName()));
 1453   
     // add the table inside of a JScrollPane - for the header row to appear
 1454  3
     getFrame().getContentPane().add(new JScrollPane(table));
 1455  3
     packAndShow(getFrame());
 1456   
 
 1457  3
     for (int i = 0; i < 5; i++) {
 1458  15
       int column = (int) (Math.random() * 4);
 1459  15
       int width = table.getColumnModel().getColumn(column).getWidth();
 1460   
 
 1461  15
       JTableHeaderMouseEventData source = new JTableHeaderMouseEventData(this,
 1462   
           header, column, 1, InputEvent.BUTTON1_MASK, false, 100,
 1463   
           JTableHeaderMouseEventData.EAST);
 1464   
       // The dest column width should be twice as large
 1465  15
       JTableHeaderMouseEventData dest =
 1466   
           new JTableHeaderMouseEventData(this, header, column, 1,
 1467   
                                          InputEvent.BUTTON1_MASK, false, 100,
 1468   
                                          EventDataConstants.PERCENT,
 1469   
                                          new Point(200, 50));
 1470  15
       m_msgs.clear();
 1471  15
       getHelper().enterDragAndLeave(new DragEventData(this, source, dest));
 1472  15
       sleep(getSleepTimer());
 1473  15
       resultSize = dest.getLocationOnScreen().x
 1474   
           - source.getLocationOnScreen().x + width;
 1475  15
       assertEquals("Number of messages showing is wrong", 1, m_msgs.size());
 1476  15
       String str = "Clicks: " + clicks + " Size:" + resultSize;
 1477  15
       assertEquals("Wrong message is showing up", str, m_msgs.get(0));
 1478   
     }
 1479   
   }
 1480   
 
 1481   
   /**
 1482   
    * This method is used to test that the enterClickAndLeave() method is sufficient
 1483   
    * for handling events on a JRadioButton.
 1484   
    */
 1485  3
   public void testEnterClickAndLeaveJRadioButton() {
 1486  3
     if (!validPlatform()) {
 1487  0
       return;
 1488   
     }
 1489   
 
 1490  3
     setWindow(createJFrame(getName()));
 1491  3
     getFrame().getContentPane().setLayout(new GridBagLayout());
 1492  3
     MouseListener ml = new MouseAdapter() {
 1493  30
       public void mouseClicked(final MouseEvent e) {
 1494  30
         m_msgs.add("Clicks: " + e.getClickCount() + "  on "
 1495   
                    + ((JRadioButton) e.getSource()).getName());
 1496   
       }
 1497   
     };
 1498   
 
 1499  3
     int number = 5;
 1500  3
     JRadioButton[] radio = new JRadioButton[number];
 1501  3
     ButtonGroup buttonGroup = new ButtonGroup();
 1502  3
     for (int i = 0; i < number; i++) {
 1503  15
       String str = "Radio-" + i;
 1504  15
       radio[i] = new JRadioButton(str, false);
 1505  15
       radio[i].setName(str);
 1506  15
       radio[i].addMouseListener(ml);
 1507  15
       buttonGroup.add(radio[i]);
 1508  15
       getFrame().getContentPane().add(radio[i]);
 1509   
     }
 1510   
 
 1511  3
     packAndShow(getFrame());
 1512  3
     int clicks = 1;
 1513   
 
 1514  3
     for (int tries = 0; tries < 10; tries++) {
 1515  30
       int idx = (int) (Math.random() * number);
 1516  30
       m_msgs.clear();
 1517  30
       getHelper().enterClickAndLeave(new MouseEventData(this, radio[idx]));
 1518  30
       sleep(getSleepTimer());
 1519  30
       assertEquals("Number of messages showing is wrong", clicks, m_msgs.size());
 1520  30
       for (int click = 1; click <= clicks; click++) {
 1521  30
         assertEquals("Wrong message is showing up:",
 1522   
                      "Clicks: " + click + "  on " + radio[idx].getName(),
 1523   
                      m_msgs.get(click - 1));
 1524   
       }
 1525   
     }
 1526   
   }
 1527   
 
 1528   
   /**
 1529   
    * This method is used to test that the
 1530   
    * enterClickAndLeave() method is sufficient.
 1531   
    * for handling events on a JCheckBox
 1532   
    */
 1533  3
   public void testEnterClickAndLeaveJCheckBox() {
 1534  3
     if (!validPlatform()) {
 1535  0
       return;
 1536   
     }
 1537  3
     setWindow(createJFrame(getName()));
 1538  3
     getFrame().getContentPane().setLayout(new GridBagLayout());
 1539   
 
 1540  3
     MouseListener ml = new MouseAdapter() {
 1541  30
       public void mouseClicked(final MouseEvent e) {
 1542  30
         m_msgs.add("Clicks: " + e.getClickCount() + "  on "
 1543   
                    + ((JCheckBox) e.getSource()).getName());
 1544   
       }
 1545   
     };
 1546   
 
 1547  3
     int number = 5;
 1548  3
     JCheckBox[] checkBox = new JCheckBox[number];
 1549  3
     for (int i = 0; i < number; i++) {
 1550  15
       String str = "CheckBox-" + i;
 1551  15
       checkBox[i] = new JCheckBox(str, false);
 1552  15
       checkBox[i].setName(str);
 1553  15
       checkBox[i].addMouseListener(ml);
 1554  15
       getFrame().getContentPane().add(checkBox[i]);
 1555   
     }
 1556   
 
 1557  3
     packAndShow(getFrame());
 1558  3
     int clicks = 1;
 1559   
 
 1560  3
     for (int tries = 0; tries < 10; tries++) {
 1561  30
       int idx = (int) (Math.random() * number);
 1562  30
       m_msgs.clear();
 1563  30
       getHelper().enterClickAndLeave(new MouseEventData(this, checkBox[idx]));
 1564  30
       sleep(getSleepTimer());
 1565  30
       assertEquals("Number of messages showing is wrong", clicks, m_msgs.size());
 1566  30
       for (int click = 1; click <= clicks; click++) {
 1567  30
         assertEquals("Wrong message is showing up",
 1568   
                      "Clicks: " + click + "  on " + checkBox[idx].getName(),
 1569   
                      m_msgs.get(click - 1));
 1570   
       }
 1571   
     }
 1572   
   }
 1573   
 
 1574   
   /**
 1575   
    * This method is used to test that the enterClickAndLeave() method is sufficient
 1576   
    * for handling events on a JToggleButton.
 1577   
    */
 1578  3
   public void testEnterClickAndLeaveJToggleButton() {
 1579  3
     if (!validPlatform()) {
 1580  0
       return;
 1581   
     }
 1582   
 
 1583  3
     setWindow(createJFrame(getName()));
 1584  3
     getFrame().getContentPane().setLayout(new GridBagLayout());
 1585   
 
 1586  3
     MouseListener ml = new MouseAdapter() {
 1587  30
       public void mouseClicked(final MouseEvent e) {
 1588  30
         m_msgs.add("Clicks: " + e.getClickCount() + "  on "
 1589   
                    + ((JToggleButton) e.getSource()).getName());
 1590   
       }
 1591   
     };
 1592   
 
 1593  3
     int number = 5;
 1594  3
     JToggleButton[] toggleButton = new JToggleButton[number];
 1595  3
     for (int i = 0; i < number; i++) {
 1596  15
       String str = "ToggleButton-" + i;
 1597  15
       toggleButton[i] = new JToggleButton(str, false);
 1598  15
       toggleButton[i].setName(str);
 1599  15
       toggleButton[i].addMouseListener(ml);
 1600  15
       getFrame().getContentPane().add(toggleButton[i]);
 1601   
     }
 1602   
 
 1603  3
     packAndShow(getFrame());
 1604  3
     int clicks = 1;
 1605   
 
 1606  3
     for (int tries = 0; tries < 10; tries++) {
 1607  30
       int idx = (int) (Math.random() * number);
 1608  30
       m_msgs.clear();
 1609  30
       getHelper().enterClickAndLeave(new MouseEventData(this, toggleButton[idx]));
 1610  30
       sleep(getSleepTimer());
 1611  30
       assertEquals("Number of messages showing is wrong", clicks, m_msgs.size());
 1612  30
       for (int click = 1; click <= clicks; click++) {
 1613  30
         assertEquals("Wrong message is showing up",
 1614   
                      "Clicks: " + click + "  on " + toggleButton[idx].getName(),
 1615   
                      m_msgs.get(click - 1));
 1616   
       }
 1617   
     }
 1618   
   }
 1619   
 
 1620   
   /**
 1621   
    * This method is used to test the enterJTabbedPaneClickAndLeave() method.
 1622   
    */
 1623  3
   public void testEnterJTabbedPaneClickAndLeave() {
 1624  3
     if (!validPlatform()) {
 1625  0
       return;
 1626   
     }
 1627  3
     setWindow(createJFrame(getName()));
 1628  3
     getFrame().getContentPane().setLayout(new GridBagLayout());
 1629   
 
 1630  3
     MouseListener ml = new MouseAdapter() {
 1631  180
       public void mouseClicked(final MouseEvent e) {
 1632  180
         JTabbedPane source = (JTabbedPane) e.getSource();
 1633  180
         m_msgs.add("Clicks: " + e.getClickCount() + "  on " + source.getName()
 1634   
                    + "  comp: " + source.getSelectedComponent().getName());
 1635   
       }
 1636   
     };
 1637   
 
 1638  3
     int number = 5;
 1639  3
     JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 1640  3
     tabbedPane.setName("TabbedPane");
 1641  3
     tabbedPane.addMouseListener(ml);
 1642   
 
 1643  3
     JPanel panel;
 1644  3
     for (int i = 0; i < number; i++) {
 1645  15
       panel = new JPanel();
 1646  15
       panel.setLayout(new GridBagLayout());
 1647  15
       panel.add(new JButton("JButton-" + i));
 1648  15
       panel.add(new JButton("JButton2-" + i));
 1649  15
       panel.setName("Panel-" + i);
 1650  15
       tabbedPane.add(panel);
 1651   
     }
 1652   
 
 1653  3
     getFrame().getContentPane().add(tabbedPane);
 1654  3
     packAndShow(getFrame());
 1655   
 
 1656  3
     for (int tries = 0; tries < 10; tries++) {
 1657  30
       for (int clicks = 1; clicks < 4; clicks++) {
 1658  90
         int idx = (int) (Math.random() * number);
 1659  90
         m_msgs.clear();
 1660   
         // non-default isPopupTrigger flag
 1661  90
         getHelper().enterClickAndLeave(new JTabbedPaneMouseEventData(this,
 1662   
             tabbedPane, idx, clicks, true));
 1663  90
         sleep(getSleepTimer());
 1664  90
         assertEquals("Number of messages showing is wrong", clicks, m_msgs.size());
 1665  90
         for (int click = 1; click <= clicks; click++) {
 1666  180
           assertEquals(
 1667   
               "Wrong message is showing up:",
 1668   
               "Clicks: " + click + "  on " + tabbedPane.getName() + "  comp: "
 1669   
               + tabbedPane.getComponentAt(idx).getName(),
 1670   
               m_msgs.get(click - 1));
 1671   
         }
 1672   
       }
 1673   
     }
 1674   
   }
 1675   
 
 1676   
   /**
 1677   
    * Test traversing menus - including finding the last JMenuItem using the JMenuItemFinder.
 1678   
    */
 1679  3
   public void testTraversingMenu() {
 1680  3
     if (!validPlatform()) {
 1681  0
       return;
 1682   
     }
 1683  3
     String level1Text = "1st level Menu: Item";
 1684  3
     String level2Text = "2nd level Menu: Item";
 1685  3
     String level3Text = "3rd level Menu: Item";
 1686  3
     int numberOfMenus = 3;
 1687  3
     int numberOfLevels = 3;
 1688   
 
 1689  3
     setWindow(createJFrame(getName()));
 1690  3
     JMenuBar menuBar = new JMenuBar();
 1691  3
     getFrame().setJMenuBar(menuBar);
 1692   
 
 1693  3
     JMenu menuLevel1, menuLevel2;
 1694  3
     for (int i = 0; i < numberOfMenus; i++) {
 1695  9
       menuLevel1 = new JMenu(level1Text + (i + 1));
 1696  9
       for (int j = 0; j < numberOfMenus; j++) {
 1697  27
         menuLevel2 = new JMenu(level2Text + (j + 1));
 1698  27
         for (int k = 0; k < numberOfMenus; k++) {
 1699  81
           JMenuItem menuItem = new JMenuItem(level3Text + (k + 1));
 1700  81
           menuLevel2.add(menuItem);
 1701   
         }
 1702  27
         menuLevel1.add(menuLevel2);
 1703   
       }
 1704  9
       menuBar.add(menuLevel1);
 1705   
     }
 1706  3
     packAndShow(getFrame());
 1707   
 
 1708  3
     int[] menuLevelToChoose = new int[numberOfLevels];
 1709  3
     JMenu menuToClick;
 1710  3
     JMenu prevMenu;
 1711  3
     JMenuItem menuItem;
 1712  3
     String[] menuText = new String[3];
 1713  3
     String[] menuMove = new String[3];
 1714  3
     for (int i = 0; i < 10; i++) {
 1715  30
       for (int j = 0; j < menuLevelToChoose.length; j++) {
 1716  90
         menuLevelToChoose[j] = (int) (Math.random() * numberOfMenus * 100)
 1717   
             / 100;
 1718   
       }
 1719   
 
 1720   
       // find and click on the first level of menus
 1721  30
       menuText[0] = level1Text + (menuLevelToChoose[0] + 1);
 1722  30
       menuMove[1] = level2Text + 1;
 1723  30
       menuText[1] = level2Text + (menuLevelToChoose[1] + 1);
 1724  30
       menuMove[2] = level3Text + 1;
 1725  30
       menuText[2] = level3Text + (menuLevelToChoose[2] + 1);
 1726   
 
 1727  30
       PathData path = new PathData(menuText);
 1728  30
       JMenuMouseEventData data = new JMenuMouseEventData(this, menuBar,
 1729   
           path.getIndexes(menuBar), 0, 16, false, 0);
 1730  30
       getHelper().enterClickAndLeave(data);
 1731   
       /*
 1732   
                   menuToClick = (JMenu) TestHelper.findComponent(
 1733   
                     new JMenuItemFinder(menuText[0]), menuBar, 0);
 1734   
            assertNotNull("Could not find the 1st level menu", menuToClick);
 1735   
                   assertEquals("Did not find the correct menu:text is incorrect",
 1736   
                       menuText, menuToClick.getText());
 1737   
            helper.enterClickAndLeave(new MouseEventData(this, menuToClick));
 1738   
                   sleep(getSleepTimer());
 1739   
                   prevMenu = menuToClick;
 1740   
                   // find and move to the first menu entry;
 1741   
                   //menuToClick = (JMenu) TestHelper.findComponent(
 1742   
                   //   new JMenuItemFinder(menuMove[1]), prevMenu.getPopupMenu(), 0);
 1743   
                   //helper.enterClickAndLeave(new MouseEventData(this, menuToClick,0));
 1744   
                   //sleep(getSleepTimer());
 1745   
                   // find and click on the second level of menus
 1746   
                   menuToClick = (JMenu) TestHelper.findComponent(
 1747   
                       new JMenuItemFinder(menuText[1]), prevMenu.getPopupMenu(), 0);
 1748   
            assertNotNull("Could not find the 2nd level menu", menuToClick);
 1749   
                   assertEquals("Did not find the correct menu:text is incorrect",
 1750   
                       menuText, menuToClick.getText());
 1751   
            helper.enterClickAndLeave(new MouseEventData(this, menuToClick));
 1752   
                   sleep(getSleepTimer());
 1753   
                   prevMenu = menuToClick;
 1754   
                   // find and move to the first menu entry;
 1755   
                   menuItem = (JMenuItem) TestHelper.findComponent(
 1756   
                       new JMenuItemFinder(menuMove[2]), prevMenu.getPopupMenu(), 0);
 1757   
            helper.enterClickAndLeave(new MouseEventData(this, menuItem, 0));
 1758   
                   sleep(getSleepTimer());
 1759   
                   // find and click on the third level of menu items
 1760   
                   menuItem = (JMenuItem) TestHelper.findComponent(
 1761   
                      new JMenuItemFinder(menuText[3]), prevMenu.getPopupMenu(), 0);
 1762   
                   assertNotNull("Could not find the 3rd level menu", menuItem);
 1763   
                   assertEquals("Did not find the correct menu:text is incorrect",
 1764   
                   menuText, menuItem.getText());
 1765   
            helper.enterClickAndLeave(new MouseEventData(this, menuItem));
 1766   
                   sleep(getSleepTimer());
 1767   
        */
 1768   
     }
 1769   
   }
 1770   
 
 1771   
   /**
 1772   
    * Test Overlapping key code bug.
 1773   
    * This test is to prove that the overlapping key codes cause incorrect behavior.
 1774   
    * on 'sendString'
 1775   
    */
 1776  3
   public void testOverlappingKeyCodeBug() {
 1777  3
     if (!validPlatform()) {
 1778  0
       return;
 1779   
     }
 1780  3
     JTextField textField = new JTextField(50);
 1781   
 
 1782  3
     ActionListener actionListener = new ActionListener() {
 1783  0
       public void actionPerformed(final ActionEvent e) {
 1784  0
         assertTrue("Test failed since the keycodes overlapped", false);
 1785   
       }
 1786   
     };
 1787  3
     textField.registerKeyboardAction(actionListener,
 1788   
                                      KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0),
 1789   
                                      JComponent.WHEN_FOCUSED);
 1790   
 
 1791  3
     setWindow(createJFrame(getName()));
 1792  3
     getFrame().getContentPane().add(textField);
 1793  3
     packAndShow(getFrame());
 1794   
 
 1795  3
     String testStr = "abcdefghijklmnopqrstuvwxyz 12345678901";
 1796  3
     getHelper().sendString(new StringEventData(this, textField, testStr));
 1797  3
     flushAWT();
 1798  3
     sleep(getSleepTimer());
 1799  3
     assertEquals("String not sent correctly to text field", testStr,
 1800   
                  textField.getText());
 1801   
   }
 1802   
 
 1803   
   /**
 1804   
    * Test the creation of events.
 1805   
    * This test is to prove that Dragging in a text area by offset works properly.
 1806   
    */
 1807  3
   public void testJTextComponentEnterClickAndLeave() {
 1808  3
     if (!validPlatform()) {
 1809  0
       return;
 1810   
     }
 1811  3
     JTextArea ta = new JTextArea();
 1812  3
     String data = "This is test text of A";
 1813  3
     ta.setText(data);
 1814  3
     setWindow(createJFrame(getName()));
 1815  3
     getFrame().getContentPane().add(ta);
 1816  3
     packAndShow(getFrame());
 1817   
 
 1818  3
     for (int i = 0; i < data.length(); i++) {
 1819   
 
 1820  66
       JTextComponentMouseEventData ea =
 1821   
           new JTextComponentMouseEventData(this, ta, 1,
 1822   
                                            JTextComponentMouseEventData.
 1823   
                                            DEFAULT_MOUSE_MODIFIERS, false, 100,
 1824   
                                            JTextComponentMouseEventData.CUSTOM,
 1825   
                                            i);
 1826   
 
 1827  66
       getHelper().enterClickAndLeave(ea);
 1828  66
       sleep(getSleepTimer());
 1829  66
       int index = ta.getCaretPosition();
 1830   
 
 1831  66
       assertEquals("Caret not positioned correctly:", i, index);
 1832   
     }
 1833   
   }
 1834   
 
 1835   
   /**
 1836   
    * Test the creation of events.
 1837   
    * This test is to prove that Dragging in a text area by offset works properly.
 1838   
    */
 1839  3
   public void testJTextComponentDrag() {
 1840  3
     if (!validPlatform()) {
 1841  0
       return;
 1842   
     }
 1843  3
     JTextArea ta = new JTextArea();
 1844  3
     ta.setText("This is test text to select success to operate correctly.");
 1845   
 
 1846  3
     setWindow(createJFrame(getName()));
 1847  3
     getFrame().getContentPane().add(ta);
 1848  3
     packAndShow(getFrame());
 1849   
     // Offset 28 is before failed, Offset 35 if after failed
 1850  3
     JTextComponentMouseEventData source =
 1851   
         new JTextComponentMouseEventData(this, ta, 0,
 1852   
                                          JTextComponentMouseEventData.
 1853   
                                          DEFAULT_MOUSE_MODIFIERS, false, 100,
 1854   
                                          JTextComponentMouseEventData.CUSTOM,
 1855   
                                          28);
 1856   
 
 1857  3
     JTextComponentMouseEventData dest =
 1858   
         new JTextComponentMouseEventData(this, ta, 0,
 1859   
                                          JTextComponentMouseEventData.
 1860   
                                          DEFAULT_MOUSE_MODIFIERS, false, 100,
 1861   
                                          JTextComponentMouseEventData.CUSTOM,
 1862   
                                          35);
 1863   
 
 1864  3
     getHelper().enterDragAndLeave(new DragEventData(this, source, dest));
 1865  3
     sleep(getSleepTimer());
 1866  3
     String result = ta.getSelectedText();
 1867   
 
 1868  3
     assertNotNull("No text was selected:", result);
 1869  3
     assertEquals("The inccorrect text was selected by the drag operation:",
 1870   
                  "success", result);
 1871   
   }
 1872   
 
 1873   
   /**
 1874   
    * Test scrolling with the mouse wheel.
 1875   
    *    Scroll up and down a few times.
 1876   
    *    Validate the first/last row visiblity.
 1877   
    */
 1878  3
   public void testMouseWheel() {
 1879  3
     if (!validPlatform()) {
 1880  0
       return;
 1881   
     }
 1882  3
     final ArrayList eventDataList = new ArrayList();
 1883  3
     JFCEventDataListener listener = new JFCEventDataListener() {
 1884  12
       public void handleEvent(final AbstractEventData aed) {
 1885  12
         eventDataList.add(aed);
 1886   
       }
 1887   
     };
 1888   
 
 1889  3
     final int testSize = 25;
 1890   
 
 1891  3
     final Object[][] rowData = {{" 1,1", " 1,2", " 1,3", " 1,4", " 1,5", " 1,6"},
 1892   
         {" 2,1", " 2,2", " 2,3", " 2,4", " 2,5", " 2,6"},
 1893   
         {" 3,1", " 3,2", " 3,3", " 3,4", " 3,5", " 3,6"},
 1894   
         {" 4,1", " 4,2", " 4,3", " 4,4", " 4,5", " 4,6"},
 1895   
         {" 5,1", " 5,2", " 5,3", " 5,4", " 5,5", " 5,6"},
 1896   
         {" 6,1", " 5,2", " 5,3", " 5,4", " 5,5", " 5,6"},
 1897   
         {" 7,1", " 5,2", " 5,3", " 5,4", " 5,5", " 5,6"},
 1898   
         {" 8,1", " 5,2", " 5,3", " 5,4", " 5,5", " 5,6"},
 1899   
         {" 9,1", " 5,2", " 5,3", " 5,4", " 5,5", " 5,6"},
 1900   
         {"10,1", "10,2", "10,3", "10,4", "10,5", "10,6"},
 1901   
         {"11,1", "11,2", "11,3", "11,4", "11,5", "11,6"},
 1902   
         {"12,1", "12,2", "12,3", "12,4", "12,5", "12,6"},
 1903   
         {"13,1", "13,2", "13,3", "13,4", "13,5", "13,6"},
 1904   
         {"14,1", "14,2", "14,3", "14,4", "14,5", "14,6"},
 1905   
         {"15,1", "15,2", "15,3", "15,4", "15,5", "15,6"},
 1906   
         {"16,1", "16,2", "16,3", "16,4", "16,5", "16,6"},
 1907   
         {"17,1", "17,2", "17,3", "17,4", "17,5", "17,6"},
 1908   
         {"18,1", "18,2", "18,3", "18,4", "18,5", "18,6"},
 1909   
         {"19,1", "19,2", "19,3", "19,4", "19,5", "19,6"},
 1910   
         {"20,1", "20,2", "20,3", "20,4", "20,5", "20,6"},
 1911   
         {"21,1", "21,2", "21,3", "21,4", "21,5", "21,6"},
 1912   
         {"22,1", "22,2", "22,3", "22,4", "22,5", "22,6"},
 1913   
         {"23,1", "23,2", "23,3", "23,4", "23,5", "23,6"},
 1914   
         {"24,1", "24,2", "24,3", "24,4", "24,5", "24,6"},
 1915   
         {"25,1", "25,2", "25,3", "25,4", "25,5", "25,6"},
 1916   
         {"26,1", "26,2", "26,3", "26,4", "26,5", "26,6"},
 1917   
         {"27,1", "27,2", "27,3", "27,4", "27,5", "27,6"},
 1918   
         {"28,1", "28,2", "28,3", "28,4", "28,5", "28,6"},
 1919   
         {"29,1", "29,2", "29,3", "29,4", "29,5", "29,6"},
 1920   
         {"30,1", "30,2", "30,3", "30,4", "30,5", "30,6"},
 1921   
         {"31,1", "31,2", "31,3", "31,4", "31,5", "31,6"},
 1922   
         {"32,1", "32,2", "32,3", "32,4", "32,5", "32,6"},
 1923   
         {"33,1", "33,2", "33,3", "33,4", "33,5", "33,6"}};
 1924   
 
 1925  3
     final Object[] columnNames = {
 1926   
         "Col1", "Col2", "Col3", "Col4", "Col5"};
 1927   
 
 1928  3
     JTable table = new JTable(rowData, columnNames);
 1929  3
     table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
 1930   
 
 1931   
     // Set all of the columns to the test size.
 1932  3
     for (int col = 0; col < table.getColumnCount(); col++) {
 1933   
       // Resizing the column does not seem to work unless you set Preferred size.
 1934  15
       table.getColumnModel().getColumn(col).setPreferredWidth(testSize);
 1935   
     }
 1936  3
     table.revalidate();
 1937  3
     table.getTableHeader().revalidate();
 1938   
 
 1939  3
     table.setRowSelectionAllowed(false);
 1940  3
     table.setColumnSelectionAllowed(false);
 1941   
 
 1942  3
     setWindow(createJFrame(getName()));
 1943   
 
 1944   
     // add the table inside of a JScrollPane - for the header row to appear
 1945  3
     getFrame().getContentPane().add(new JScrollPane(table));
 1946  3
     packAndShow(getFrame());
 1947   
 
 1948   
     // If there is a Robot.mouseWheel(int x) method
 1949   
     // then we can execute this test. Only supported on Java 1.4 and above.
 1950  3
     try {
 1951  3
       Class cls = Class.forName("java.awt.Robot");
 1952  3
       cls.getMethod("mouseWheel", new Class[] {int.class});
 1953   
     } catch (ClassNotFoundException cnfe) {
 1954   
       // if the Robot class is not found, just return
 1955  0
       return;
 1956   
     } catch (NoSuchMethodException nsme) {
 1957   
       // if the method is not found, just return
 1958  0
       return;
 1959   
     }
 1960   
 
 1961  3
     eventDataList.clear();
 1962  3
     JFCEventManager.getEventManager().setRecording(true);
 1963  3
     JFCEventManager.getEventManager().addJFCEventDataListener(listener);
 1964  3
     for (int i = 0; i < 2; i++) {
 1965  6
       getHelper().enterMouseWheel(new MouseWheelEventData(this, table, -50));
 1966   
 
 1967  6
       Rectangle clip = table.getVisibleRect();
 1968  6
       Point minLocation = clip.getLocation();
 1969  6
       int rMin = table.rowAtPoint(minLocation);
 1970  6
       assertEquals("First visible row should be 0", 0, rMin);
 1971   
 
 1972  6
       getHelper().enterMouseWheel(new MouseWheelEventData(this, table, 50));
 1973   
 
 1974  6
       clip = table.getVisibleRect();
 1975  6
       Point maxLocation = new Point(clip.x + clip.width - 1,
 1976   
                                     clip.y + clip.height - 1);
 1977  6
       int rMax = table.rowAtPoint(maxLocation);
 1978  6
       assertEquals("Last visible row should be 32", 32, rMax);
 1979   
     }
 1980  3
     sleep(m_eventFlushTime);
 1981  3
     JFCEventManager.getEventManager().removeJFCEventDataListener(listener);
 1982  3
     JFCEventManager.getEventManager().setRecording(false);
 1983  3
     assertEquals("Number of events:", 4, eventDataList.size());
 1984   
   }
 1985   
 
 1986   
   /**
 1987   
        * This method will test the enterClickAndLeave() method applying to selecting
 1988   
    * the up/down buttons in a JSPinner (and also direct text-entry).
 1989   
    */
 1990  3
   public void testEnterJSpinnerClickAndLeave() {
 1991  3
     if (!validPlatform()) {
 1992  0
       return;
 1993   
     }
 1994  3
     JComponent spinner = null;
 1995  3
     try {
 1996  3
       spinner = (JComponent) Class.forName("javax.swing.JSpinner").newInstance();
 1997   
     } catch (Exception e) {
 1998  0
       return;
 1999   
     }
 2000   
 
 2001  3
     setWindow(createJFrame(getName()));
 2002   
 
 2003   
     // set up the tree
 2004  3
     spinner.addMouseListener(new MouseAdapter() {
 2005  0
       public void mousePressed(final MouseEvent e) {
 2006  0
         m_msgs.add(new String(e.getClickCount() + " click(s) on spinner"));
 2007   
       }
 2008   
     });
 2009   
 
 2010  3
     getFrame().getContentPane().add(spinner, BorderLayout.CENTER);
 2011  3
     packAndShow(getFrame());
 2012   
 
 2013   
     // Click the Up Arrow
 2014  3
     for (int clicks = 0; clicks < 10; clicks++) {
 2015  30
       m_msgs.clear();
 2016  30
       getHelper().enterClickAndLeave(new JSpinnerMouseEventData(this, spinner,
 2017   
           JSpinnerMouseEventData.UP_ARROW_SUBCOMPONENT));
 2018   
     }
 2019   
 
 2020   
     // Validate value is 10
 2021  3
     assertEquals("Up to 10:", 10, ((Integer) getSpinnerValue(spinner)).intValue());
 2022   
 
 2023   
     // Click the Down Arrow
 2024  3
     for (int clicks = 0; clicks < 10; clicks++) {
 2025  30
       m_msgs.clear();
 2026  30
       getHelper().enterClickAndLeave(new JSpinnerMouseEventData(this, spinner,
 2027   
           JSpinnerMouseEventData.DOWN_ARROW_SUBCOMPONENT));
 2028   
     }
 2029   
 
 2030   
     // Validate value is 0
 2031  3
     assertEquals("Down to 0:", 0, ((Integer) getSpinnerValue(spinner)).intValue());
 2032   
     // Edit the value
 2033  3
     JSpinnerMouseEventData source =
 2034   
         new JSpinnerMouseEventData(
 2035   
         this, spinner, JSpinnerMouseEventData.EDITOR_SUBCOMPONENT,
 2036   
         0, InputEvent.BUTTON1_MASK, false, 500L, JSpinnerMouseEventData.OFFSET,
 2037   
         null, 0);
 2038  3
     getHelper().enterDragAndLeave(
 2039   
         new DragEventData(this, source,
 2040   
                           new JSpinnerMouseEventData(
 2041   
         this, spinner,
 2042   
         JSpinnerMouseEventData.EDITOR_SUBCOMPONENT,
 2043   
         0, InputEvent.BUTTON1_MASK, false, 500L,
 2044   
         JSpinnerMouseEventData.OFFSET, null, 1)));
 2045  3
     getHelper().sendString(new StringEventData(this, source.getComponent(), "42\n"));
 2046   
 
 2047   
     // Validate edit is 42
 2048  3
     assertEquals("Edit to 42:", 42,
 2049   
                  ((Integer) getSpinnerValue(spinner)).intValue());
 2050   
   }
 2051   
 
 2052   
   /**
 2053   
    * Get the spinner value using reflection so that this
 2054   
    * souce can compile on JRE 1.3.
 2055   
    * @param spinner Java 1.4 JSpinner to get the value of.
 2056   
    * @return Object value of the spinner.
 2057   
    */
 2058  9
   private Object getSpinnerValue(final JComponent spinner) {
 2059  9
     try {
 2060  9
       java.lang.reflect.Method m = spinner.getClass().getMethod(
 2061   
           "getValue", new Class[0]);
 2062  9
       return m.invoke(spinner, new Object[0]);
 2063   
     } catch (Exception e) {
 2064  0
       return null;
 2065   
     }
 2066   
   }
 2067   
 }
 2068