Path: blob/master/test/jdk/javax/swing/JLayer/6872503/bug6872503.java
41153 views
/*1* Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223/*24* @test25* @key headful26* @bug 687250327* @summary Checks that JLayer correctly works with its AWTEventListener28* @author Alexander Potochkin29*/3031import javax.swing.*;32import java.awt.*;33import java.awt.event.AWTEventListener;34import java.awt.event.AWTEventListenerProxy;3536public class bug6872503 {3738static JLayer<Component> l1;39static JLayer<Component> l2;4041private static void createGui() {42Toolkit toolkit = Toolkit.getDefaultToolkit();43int length = toolkit.getAWTEventListeners().length;4445l1 = new JLayer<Component>();46l1.setLayerEventMask(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK);4748l2 = new JLayer<Component>();49l2.setLayerEventMask(AWTEvent.MOUSE_EVENT_MASK | AWTEvent.KEY_EVENT_MASK);5051if (isLayerEventControllerAdded()) {52throw new RuntimeException("Unexpected AWTEventListener was added");53}5455JFrame frame = new JFrame();56frame.setLayout(new FlowLayout());57frame.add(l1);58frame.add(l2);5960if (isLayerEventControllerAdded()) {61throw new RuntimeException("Unexpected AWTEventListener was added");62}6364frame.pack();6566if (!isLayerEventControllerAdded()) {67throw new RuntimeException("AWTEventListener was not added");68}6970if (!layerEventControllerMaskEquals(l1.getLayerEventMask() | l2.getLayerEventMask())) {71throw new RuntimeException("Wrong mask for AWTEventListener");72}7374frame.dispose();7576if (isLayerEventControllerAdded()) {77throw new RuntimeException("Unexpected AWTEventListener was added");78}79}8081static boolean isLayerEventControllerAdded() {82Toolkit toolkit = Toolkit.getDefaultToolkit();83AWTEventListener layerEventController = null;84for (AWTEventListener listener : toolkit.getAWTEventListeners()) {85if (listener instanceof AWTEventListenerProxy) {86listener = ((AWTEventListenerProxy)listener).getListener();8788}89if ("LayerEventController".equals(listener.getClass().getSimpleName())) {90if (layerEventController != null) {91throw new RuntimeException("Duplicated LayerEventController");92}93layerEventController = listener;94}95}96boolean ret = layerEventController != null;97if (ret) {98System.out.println("LayerEventController found");99} else {100System.out.println("No LayerEventController");101}102return ret;103}104105static boolean layerEventControllerMaskEquals(long mask) {106Toolkit toolkit = Toolkit.getDefaultToolkit();107AWTEventListener layerEventController = null;108for (AWTEventListener listener : toolkit.getAWTEventListeners(mask)) {109if (listener instanceof AWTEventListenerProxy) {110listener = ((AWTEventListenerProxy)listener).getListener();111112}113if ("LayerEventController".equals(listener.getClass().getSimpleName())) {114if (layerEventController != null) {115throw new RuntimeException("Duplicated LayerEventController");116}117layerEventController = listener;118}119}120boolean ret = layerEventController != null;121if (ret) {122System.out.println("LayerEventController with the correct mask found");123} else {124System.out.println("No LayerEventController with the correct mask");125}126return ret;127}128129public static void main(String[] args) throws Exception {130SwingUtilities.invokeAndWait(new Runnable() {131public void run() {132bug6872503.createGui();133}134});135}136}137138139