8172509: [TEST_BUG] [macosx] Failure of the new test java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java
Reviewed-by: serb, alexsch
--- 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 {