1 /* 2 * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 import java.awt.Frame; 25 import java.awt.Menu; 26 import java.awt.MenuBar; 27 import java.awt.MenuItem; 28 import java.awt.Robot; 29 import java.awt.event.ActionEvent; 30 import java.awt.event.ActionListener; 31 import java.awt.event.KeyEvent; 32 33 /* 34 * @test 35 * @bug 6263470 36 * @requires (os.family != "mac") 37 * @key headful 38 * @summary Menu bugs in XAWT 39 * @author Vyacheslav.Baranov: area= menu 40 * @run main SeparatorsNavigation 41 */ 42 43 /** 44 * SeparatorsNavigation.java 45 * 46 * summary: Creates menu bar with menu consisting of two 47 * separators, then tries to navigate it using keyboard. 48 */ 49 50 public class SeparatorsNavigation { 51 static class Listener implements ActionListener { 52 public void actionPerformed(ActionEvent e) { 53 SeparatorsNavigation.pressed = true; 54 } 55 } 56 57 static Frame f; 58 static MenuBar mb; 59 static Menu m1; 60 static Menu m2; 61 static Menu m3; 62 static MenuItem i31; 63 static Listener l = new Listener(); 64 static boolean pressed = false; 65 66 public static void main(String args[]) { 67 f = new Frame(); 68 mb = new MenuBar(); 69 m1 = new Menu("m1"); 70 m2 = new Menu("m2"); 71 m3 = new Menu("m3"); 72 m1.add(new MenuItem("i11")); 73 m2.add(new MenuItem("-")); 74 m2.add(new MenuItem("-")); 75 mb.add(m1); 76 mb.add(m2); 77 mb.add(m3); 78 i31 = new MenuItem("i31"); 79 m3.add(i31); 80 i31.addActionListener(l); 81 f.setMenuBar(mb); 82 f.setSize(400, 400); 83 f.setVisible(true); 84 try { 85 Robot r = new Robot(); 86 r.delay(1000); 87 r.keyPress(KeyEvent.VK_F10); 88 r.delay(10); 89 r.keyRelease(KeyEvent.VK_F10); 90 r.delay(1000); 91 r.keyPress(KeyEvent.VK_DOWN); 92 r.delay(10); 93 r.keyRelease(KeyEvent.VK_DOWN); 94 r.delay(1000); 95 r.keyPress(KeyEvent.VK_RIGHT); 96 r.delay(10); 97 r.keyRelease(KeyEvent.VK_RIGHT); 98 r.delay(1000); 99 r.keyPress(KeyEvent.VK_RIGHT); 100 r.delay(10); 101 r.keyRelease(KeyEvent.VK_RIGHT); 102 r.delay(1000); 103 r.keyPress(KeyEvent.VK_ENTER); 104 r.delay(10); 105 r.keyRelease(KeyEvent.VK_ENTER); 106 r.delay(10000); 107 } catch (Exception ex) { 108 throw new RuntimeException("Execution interrupted by an " + 109 "exception " + ex.getLocalizedMessage()); 110 } finally { 111 if (f != null) { 112 f.setVisible(false); 113 f.dispose(); 114 } 115 } 116 if (!pressed) { 117 throw new RuntimeException("Action was not performed, " + 118 "considering test failed."); 119 } 120 } 121 }