8172509: [TEST_BUG] [macosx] Failure of the new test java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java

Reviewed-by: serb, alexsch
This commit is contained in:
Avik Niyogi 2017-01-20 12:56:35 +05:30
parent f80453413a
commit fc8b18f0bd

View File

@ -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 @@ public class ButtonGroupLayoutTraversalTest {
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 @@ public class ButtonGroupLayoutTraversalTest {
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 @@ public class ButtonGroupLayoutTraversalTest {
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 @@ public class ButtonGroupLayoutTraversalTest {
@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 {