8172509: [TEST_BUG] [macosx] Failure of the new test java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java
authoraniyogi
Fri, 20 Jan 2017 12:56:35 +0530
changeset 43312 ea80ab476988
parent 43311 453e9d97f99a
child 43313 4adfc9977cd6
8172509: [TEST_BUG] [macosx] Failure of the new test java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java Reviewed-by: serb, alexsch
jdk/test/java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java
--- a/jdk/test/java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java	Thu Jan 19 12:04:58 2017 -0800
+++ b/jdk/test/java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java	Fri Jan 20 12:56:35 2017 +0530
@@ -21,43 +21,54 @@
  * questions.
  */
 
-/*
+ /*
   @test
-  @bug 8154043
+  @bug 8154043 8172509
   @summary Fields not reachable anymore by tab-key, because of new tabbing
   behaviour of radio button groups.
   @run main ButtonGroupLayoutTraversalTest
-*/
-
-import javax.swing.*;
-import java.awt.*;
+ */
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.GridLayout;
+import java.awt.Robot;
 import java.awt.event.FocusAdapter;
 import java.awt.event.FocusEvent;
 import java.awt.event.KeyEvent;
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+import javax.swing.JPanel;
+import javax.swing.ButtonGroup;
+import javax.swing.JComponent;
+import javax.swing.JRadioButton;
+import javax.swing.JToggleButton;
+import javax.swing.LayoutFocusTraversalPolicy;
+import javax.swing.UnsupportedLookAndFeelException;
 
 public class ButtonGroupLayoutTraversalTest {
+
     static int nx = 3;
     static int ny = 3;
 
     static int focusCnt[] = new int[nx * ny];
     private static JFrame window;
 
-
     public static void main(String[] args) throws Exception {
 
-        SwingUtilities.invokeAndWait(()->initLayout(nx, ny));
+        SwingUtilities.invokeAndWait(() -> changeLAF());
+        SwingUtilities.invokeAndWait(() -> initLayout(nx, ny));
         Robot robot = new Robot();
         robot.setAutoDelay(100);
         robot.waitForIdle();
         robot.delay(200);
 
-
-        for(int i = 0; i < nx * ny - nx * ny / 2 - 1; i++) {
+        for (int i = 0; i < nx * ny - nx * ny / 2 - 1; i++) {
             robot.keyPress(KeyEvent.VK_RIGHT);
             robot.keyRelease(KeyEvent.VK_RIGHT);
         }
 
-        for(int i = 0; i < nx * ny / 2; i++) {
+        for (int i = 0; i < nx * ny / 2; i++) {
             robot.keyPress(KeyEvent.VK_TAB);
             robot.keyRelease(KeyEvent.VK_TAB);
         }
@@ -65,26 +76,26 @@
         robot.waitForIdle();
         robot.delay(200);
 
-        for(int i = 0; i < nx * ny; i++) {
-            if(focusCnt[i] < 1) {
+        for (int i = 0; i < nx * ny; i++) {
+            if (focusCnt[i] < 1) {
                 SwingUtilities.invokeLater(window::dispose);
-                throw new RuntimeException("Component " + i +
-                        " is not reachable in the forward focus cycle");
+                throw new RuntimeException("Component " + i
+                        + " is not reachable in the forward focus cycle");
             } else if (focusCnt[i] > 1) {
                 SwingUtilities.invokeLater(window::dispose);
-                throw new RuntimeException("Component " + i +
-                        " got focus more than once in the forward focus cycle");
+                throw new RuntimeException("Component " + i
+                        + " got focus more than once in the forward focus cycle");
             }
         }
 
-        for(int i = 0; i < nx * ny / 2; i++) {
+        for (int i = 0; i < nx * ny / 2; i++) {
             robot.keyPress(KeyEvent.VK_SHIFT);
             robot.keyPress(KeyEvent.VK_TAB);
             robot.keyRelease(KeyEvent.VK_TAB);
             robot.keyRelease(KeyEvent.VK_SHIFT);
         }
 
-        for(int i = 0; i < nx * ny - nx * ny / 2 - 1; i++) {
+        for (int i = 0; i < nx * ny - nx * ny / 2 - 1; i++) {
             robot.keyPress(KeyEvent.VK_LEFT);
             robot.keyRelease(KeyEvent.VK_LEFT);
         }
@@ -97,23 +108,37 @@
         robot.waitForIdle();
         robot.delay(200);
 
-        for(int i = 0; i < nx * ny; i++) {
-            if(focusCnt[i] < 2) {
+        for (int i = 0; i < nx * ny; i++) {
+            if (focusCnt[i] < 2) {
                 SwingUtilities.invokeLater(window::dispose);
-                throw new RuntimeException("Component " + i +
-                        " is not reachable in the backward focus cycle");
+                throw new RuntimeException("Component " + i
+                        + " is not reachable in the backward focus cycle");
             } else if (focusCnt[i] > 2) {
                 SwingUtilities.invokeLater(window::dispose);
-                throw new RuntimeException("Component " + i +
-                        " got focus more than once in the backward focus cycle");
+                throw new RuntimeException("Component " + i
+                        + " got focus more than once in the backward focus cycle");
             }
         }
 
         SwingUtilities.invokeLater(window::dispose);
     }
 
-    public static void initLayout(int nx, int ny)
-    {
+    private static void changeLAF() {
+        String currentLAF = UIManager.getLookAndFeel().toString();
+        currentLAF = currentLAF.toLowerCase();
+        if (currentLAF.contains("aqua") || currentLAF.contains("nimbus")) {
+            try {
+                UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
+            } catch (ClassNotFoundException
+                    | IllegalAccessException
+                    | InstantiationException
+                    | UnsupportedLookAndFeelException ex) {
+                ex.printStackTrace();
+            }
+        }
+    }
+
+    public static void initLayout(int nx, int ny) {
         window = new JFrame("Test");
         window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
         JPanel rootPanel = new JPanel();
@@ -122,9 +147,9 @@
         formPanel.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());
         formPanel.setFocusCycleRoot(true);
         ButtonGroup radioButtonGroup = new ButtonGroup();
-        for(int i = 0; i < nx * ny; i++) {
+        for (int i = 0; i < nx * ny; i++) {
             JToggleButton comp;
-            if(i % 2 == 0) {
+            if (i % 2 == 0) {
                 comp = new JRadioButton("Grouped component");
                 radioButtonGroup.add(comp);
             } else {
@@ -137,10 +162,10 @@
                 @Override
                 public void focusGained(FocusEvent e) {
                     focusCnt[fi]++;
-                    if( focusCnt[fi] == 1) {
+                    if (focusCnt[fi] == 1) {
                         ((JComponent) e.getSource())
                                 .setBackground(Color.yellow);
-                    } else if(focusCnt[fi] == 2) {
+                    } else if (focusCnt[fi] == 2) {
                         ((JComponent) e.getSource())
                                 .setBackground(Color.green);
                     } else {