| /* | |
| * Copyright (c) 2006, 2024, 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 6385277 | |
| * @key headful | |
| * @summary Tests that activation happens on correct AppContext. | |
| * @modules java.desktop/sun.awt | |
| * @run main ActivateOnProperAppContextTest | |
| */ | |
| import sun.awt.AppContext; | |
| import sun.awt.SunToolkit; | |
| import java.awt.Button; | |
| import java.awt.Component; | |
| import java.awt.Container; | |
| import java.awt.Cursor; | |
| import java.awt.Dimension; | |
| import java.awt.FlowLayout; | |
| import java.awt.Frame; | |
| import java.awt.Label; | |
| import java.awt.Point; | |
| import java.awt.Robot; | |
| import java.awt.Toolkit; | |
| import java.awt.Window; | |
| import java.awt.event.InputEvent; | |
| import java.util.concurrent.atomic.AtomicBoolean; | |
| public class ActivateOnProperAppContextTest { | |
| static Robot robot; | |
| SunToolkit toolkit; | |
| ThreadGroup threadGroup = new ThreadGroup("Test_Thread_Group"); | |
| AppContext appContext; | |
| Frame frame; | |
| volatile boolean passed = true; | |
| AtomicBoolean cond = new AtomicBoolean(false); | |
| public static void main(String[] args) throws Exception { | |
| ActivateOnProperAppContextTest app = new ActivateOnProperAppContextTest(); | |
| robot = new Robot(); | |
| app.start(); | |
| } | |
| public void start() { | |
| toolkit = (SunToolkit)Toolkit.getDefaultToolkit(); | |
| Runnable runnable = new Runnable() { | |
| public void run() { | |
| test(); | |
| synchronized (cond) { | |
| cond.set(true); | |
| cond.notifyAll(); | |
| } | |
| } | |
| }; | |
| Thread thread = new Thread(threadGroup, runnable, "Test Thread"); | |
| synchronized (cond) { | |
| thread.start(); | |
| while (!cond.get()) { | |
| try { | |
| cond.wait(); | |
| } catch (InterruptedException ie) { | |
| ie.printStackTrace(); | |
| } | |
| } | |
| } | |
| if (passed) { | |
| System.out.println("Test passed."); | |
| } else { | |
| throw new TestFailedException("Test failed!"); | |
| } | |
| } | |
| void test() { | |
| appContext = SunToolkit.createNewAppContext(); | |
| System.out.println("Created new AppContext: " + appContext); | |
| frame = new Frame("ActivateOnProperAppContextTest Frame") { | |
| public boolean isActive() { | |
| verifyAppContext("Frame.isActive()"); | |
| return super.isActive(); | |
| } | |
| public boolean isFocused() { | |
| verifyAppContext("Frame.isFocused()"); | |
| return super.isFocused(); | |
| } | |
| public boolean isFocusable() { | |
| verifyAppContext("Frame.isFocusable()"); | |
| return super.isFocusable(); | |
| } | |
| public Window getOwner() { | |
| verifyAppContext("Frame.getOwner()"); | |
| return super.getOwner(); | |
| } | |
| public boolean isEnabled() { | |
| verifyAppContext("Frame.isEnabled()"); | |
| return super.isEnabled(); | |
| } | |
| public boolean isVisible() { | |
| verifyAppContext("Frame.isVisible()"); | |
| return super.isVisible(); | |
| } | |
| public Container getParent() { | |
| verifyAppContext("Frame.getParent()"); | |
| return super.getParent(); | |
| } | |
| public Cursor getCursor() { | |
| verifyAppContext("Frame.getCursor()"); | |
| return super.getCursor(); | |
| } | |
| public Point getLocation() { | |
| verifyAppContext("Frame.getLocation()"); | |
| return super.getLocation(); | |
| } | |
| public Point getLocationOnScreen() { | |
| verifyAppContext("Frame.getLocationOnScreen()"); | |
| return super.getLocationOnScreen(); | |
| } | |
| }; | |
| Window window = new Window(frame) { | |
| public boolean isFocused() { | |
| verifyAppContext("Window.isFocused()"); | |
| return super.isFocused(); | |
| } | |
| public boolean isFocusable() { | |
| verifyAppContext("Window.isFocusable()"); | |
| return super.isFocusable(); | |
| } | |
| public Window getOwner() { | |
| verifyAppContext("Window.getOwner()"); | |
| return super.getOwner(); | |
| } | |
| public boolean isEnabled() { | |
| verifyAppContext("Window.isEnabled()"); | |
| return super.isEnabled(); | |
| } | |
| public boolean isVisible() { | |
| verifyAppContext("Window.isVisible()"); | |
| return super.isVisible(); | |
| } | |
| public Container getParent() { | |
| verifyAppContext("Window.getParent()"); | |
| return super.getParent(); | |
| } | |
| public Cursor getCursor() { | |
| verifyAppContext("Window.getCursor()"); | |
| return super.getCursor(); | |
| } | |
| public Point getLocation() { | |
| verifyAppContext("Window.getLocation()"); | |
| return super.getLocation(); | |
| } | |
| public Point getLocationOnScreen() { | |
| verifyAppContext("Window.getLocationOnScreen()"); | |
| return super.getLocationOnScreen(); | |
| } | |
| }; | |
| Button button = new Button("button"); | |
| Label label = new Label("label"); | |
| window.setLayout(new FlowLayout()); | |
| window.add(button); | |
| window.add(label); | |
| window.setLocation(800, 0); | |
| window.pack(); | |
| window.setVisible(true); | |
| frame.setBounds(800, 100, 100, 50); | |
| frame.setVisible(true); | |
| toolkit.realSync(); | |
| /* | |
| * When the label is clicked in the window some of | |
| * the owner's public method get called. | |
| */ | |
| clickOn(label); | |
| } | |
| void verifyAppContext(String methodName) { | |
| AppContext ac = AppContext.getAppContext(); | |
| println(methodName + " called on AppContext: " + ac); | |
| if (ac != appContext) { | |
| passed = false; | |
| System.err.println("Test failed: " + methodName + " is called on wrong AppContext!"); | |
| Thread.dumpStack(); | |
| } | |
| } | |
| void clickOn(Component c) { | |
| Point p = c.getLocationOnScreen(); | |
| Dimension d = c.getSize(); | |
| robot.mouseMove(p.x + (int)(d.getWidth()/2), p.y + (int)(d.getHeight()/2)); | |
| robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); | |
| robot.delay(20); | |
| robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); | |
| toolkit.realSync(); | |
| } | |
| void println(final String msg) { | |
| SunToolkit.executeOnEventHandlerThread(frame, new Runnable() { | |
| public void run() { | |
| System.out.println(msg); | |
| } | |
| }); | |
| } | |
| } | |
| class TestFailedException extends RuntimeException { | |
| TestFailedException(String msg) { | |
| super(msg); | |
| } | |
| } |