7133545: [macosx] closed/javax/swing/JSplitPane/4514858/bug4514858.java fails on MacOS
authorkshefov
Tue, 01 Oct 2013 13:46:53 +0400
changeset 20441 f0321cc5becb
parent 20440 19aa1ffadb9a
child 20442 54ccf39553a7
7133545: [macosx] closed/javax/swing/JSplitPane/4514858/bug4514858.java fails on MacOS Reviewed-by: serb, alexsch Contributed-by: vera.akulova@oracle.com
jdk/test/javax/swing/JSplitPane/4514858/bug4514858.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JSplitPane/4514858/bug4514858.java	Tue Oct 01 13:46:53 2013 +0400
@@ -0,0 +1,210 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/* @test
+   @bug 4514858 4164779
+   @summary F6, F8 Ctrl-TAB and Ctrl-Shift-TAB in JSplitPane
+   @author Andrey Pikalev
+   @run main/manual bug4514858
+*/
+
+import javax.swing.*;
+import javax.swing.border.TitledBorder;
+import java.awt.*;
+import java.awt.event.*;
+
+
+public class bug4514858  implements ActionListener {
+
+    static String intructions = "Test the F6, F8, Ctrl-TAB and Ctrl-Shift-TAB keybinding functionality in JSplitPane\n" +
+            "with different LookAndFeels (switch LookAndFeel with the buttoms at the bottom of the\n" +
+            "frame \"Test\"):\n\n" +
+            "1. Move focus to the button \"Button 1\" in the frame \"Test\". Then press F6 several times.\n" +
+            "The focus should cycle between five buttons in order from 1 to 5.\n\n" +
+            "2. Move focus to the button \"Button 2\" in the frame \"Test\". Then press F8 three times.\n" +
+            "The splitters of the splitpanes should be highlited in order:\n" +
+            "\"JSplitPane 3\", \"JSplitPane 2\", \"JSplitPane 1\".\n\n" +
+            "3. Move focus to the button \"Button 2\" in the frame \"Test\". Press Ctrl-TAB.\n" +
+            "The focus should go to the \"Button 4\". Then press Ctrl-TAB again.\n" +
+            "The focus should go to the first enabled button at the bottom of frame.\n\n" +
+            "4. Move focus to the button \"Button 4\" in the frame \"Test\". Press Ctrl-Shift-TAB three times.\n" +
+            "The focus should go through the button \"Button 3\", then \"Button 1\", then to the last\n" +
+            "enabled button at the bottom of frame.";
+    static Test test = new Test();
+    JFrame fr;
+    public static void main(String[] argv) throws Exception {
+        UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                new bug4514858().createAndShowGUI();
+            }
+        });
+        test.waitTestResult();
+    }
+    public void createAndShowGUI() {
+        fr = new JFrame("Test");
+
+        //-------------------------------------------------------------
+        JButton left2 = new JButton("Button 1");
+
+        JButton left3 = new JButton("Button 2");
+        JButton right3 = new JButton("Button 3");
+
+        JSplitPane right2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, left3, right3);
+        right2.setBorder(new TitledBorder("JSplitPane 3"));
+
+        JSplitPane left1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left2, right2);
+        left1.setBorder(new TitledBorder("JSplitPane 2"));
+
+        JButton left4 = new JButton("Button 4");
+        JButton right4 = new JButton("Button 5");
+
+        JSplitPane right1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, left4, right4);
+        right1.setBorder(new TitledBorder("JSplitPane 4"));
+
+        JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, left1, right1);
+        sp.setBorder(new TitledBorder("JSplitPane 1"));
+        fr.getContentPane().add(sp);
+
+        //-------------------------------------------------------------
+        JPanel p = new JPanel();
+
+        JButton metal = new JButton("Metal");
+        metal.setActionCommand("Metal");
+        metal.setEnabled(isSupportedLAF("javax.swing.plaf.metal.MetalLookAndFeel"));
+        metal.addActionListener(this);
+        p.add(metal);
+
+        JButton motif = new JButton("Motif");
+        motif.setActionCommand("Motif");
+        motif.setEnabled(isSupportedLAF("com.sun.java.swing.plaf.motif.MotifLookAndFeel"));
+        motif.addActionListener(this);
+        p.add(motif);
+
+        JButton windows = new JButton("Windows");
+        windows.setActionCommand("Windows");
+        windows.setEnabled(isSupportedLAF("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"));
+        windows.addActionListener(this);
+        p.add(windows);
+
+        fr.getContentPane().add(p, BorderLayout.SOUTH);
+
+        fr.pack();
+        fr.setVisible(true);
+
+        JFrame instrFrame = test.createTestFrame("bug4514858 instructions", null, intructions, 250);
+        instrFrame.setBounds(fr.getWidth() + 50, fr.getHeight(), 600, 400);
+        instrFrame.setVisible(true);
+    }
+
+    private boolean isSupportedLAF(String str) {
+        try {
+            Class c = Class.forName(str);
+            LookAndFeel laf = (LookAndFeel)c.newInstance();
+            return laf.isSupportedLookAndFeel();
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        String s = e.getActionCommand();
+        if (s.equals("Metal")) {
+            s = "javax.swing.plaf.metal.MetalLookAndFeel";
+        } else if (s.equals("Motif")) {
+            s = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
+        } else {
+            s = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
+        }
+        try {
+            UIManager.setLookAndFeel(s);
+            SwingUtilities.updateComponentTreeUI(fr);
+            fr.pack();
+        } catch(Exception ex) {
+            ex.printStackTrace();
+            throw new RuntimeException(ex);
+        }
+    }
+   static class Test {
+        private boolean pass;
+        JFrame createTestFrame(String name, Component topComponent, String instructions, int instrHeight) {
+            final String PASS = "Pass";
+            final String FAIL = "Fail";
+            JFrame frame = new JFrame(name);
+            frame.setLayout(new BorderLayout());
+
+            JPanel testButtonsPanel = new JPanel();
+            testButtonsPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 20));
+
+            ActionListener btnAL = new ActionListener() {
+                public void actionPerformed(ActionEvent event) {
+                    switch (event.getActionCommand()) {
+                        case PASS:
+                            pass();
+                            break;
+                        default:
+                            throw new RuntimeException("Test failed.");
+                    }
+                }
+            };
+            JButton passBtn = new JButton(PASS);
+            passBtn.addActionListener(btnAL);
+            passBtn.setActionCommand(PASS);
+
+            JButton failBtn = new JButton(FAIL);
+            failBtn.addActionListener(btnAL);
+            failBtn.setActionCommand(FAIL);
+
+            testButtonsPanel.add(BorderLayout.WEST, passBtn);
+            testButtonsPanel.add(BorderLayout.EAST, failBtn);
+
+            JTextArea instrText = new JTextArea();
+            instrText.setLineWrap(true);
+            instrText.setEditable(false);
+            JScrollPane instrScrollPane = new JScrollPane(instrText);
+            instrScrollPane.setMaximumSize(new Dimension(Integer.MAX_VALUE, instrHeight));
+            instrText.append(instructions);
+
+            JPanel servicePanel = new JPanel();
+            servicePanel.setLayout(new BorderLayout());
+            if (topComponent == null) {
+                frame.add(BorderLayout.CENTER, instrScrollPane);
+            } else {
+                servicePanel.add(BorderLayout.CENTER, instrScrollPane);
+                frame.add(BorderLayout.CENTER, topComponent);
+            }
+            servicePanel.add(BorderLayout.SOUTH, testButtonsPanel);
+
+            frame.add(BorderLayout.SOUTH, servicePanel);
+            return frame;
+        }
+        synchronized void pass() {
+            pass = true;
+            notifyAll();
+        }
+        synchronized void waitTestResult() throws InterruptedException {
+            while (!pass) {
+                wait();
+            }
+        }
+    }
+}