blob: 303fde5a459f2de91223e56d0e33d858ff06fb51 [file] [log] [blame]
Petr Pchelkobfa90f62014-06-06 14:52:07 +04001/*
Goetz Lindenmaier34afece2017-07-28 14:06:28 +02002 * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
Petr Pchelkobfa90f62014-06-06 14:52:07 +04003 * 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
Goetz Lindenmaier34afece2017-07-28 14:06:28 +020025/**
26 * @test
27 * @key headful
28 * @bug 8041990
29 * @summary Language specific keys does not work in applets when opened outside the browser
30 * @author Petr Pchelko
31 * @modules java.desktop/sun.awt
32 */
Petr Pchelkobfa90f62014-06-06 14:52:07 +040033
34import sun.awt.SunToolkit;
35
36import javax.swing.*;
37import java.awt.*;
38import java.awt.event.InputMethodEvent;
39import java.awt.font.TextHitInfo;
40import java.text.AttributedString;
41import java.util.concurrent.CountDownLatch;
42import java.util.concurrent.atomic.AtomicReference;
43
44public class bug8041990 {
45 private static JFrame frame;
46 private static JComponent component;
47
48 public static void main(String[] args) throws Exception {
49 ThreadGroup stubTG = new ThreadGroup(getRootThreadGroup(), "Stub Thread Group");
50 ThreadGroup swingTG = new ThreadGroup(getRootThreadGroup(), "SwingTG");
51 try {
52 Thread stubThread = new Thread(stubTG, SunToolkit::createNewAppContext);
53 stubThread.start();
54 stubThread.join();
55
56 CountDownLatch startSwingLatch = new CountDownLatch(1);
57 new Thread(swingTG, () -> {
58 SunToolkit.createNewAppContext();
59 SwingUtilities.invokeLater(() -> {
60 frame = new JFrame();
61 component = new JLabel("Test Text");
62 frame.add(component);
63 frame.setBounds(100, 100, 100, 100);
64 frame.setVisible(true);
65 startSwingLatch.countDown();
66 });
67 }).start();
68 startSwingLatch.await();
69
70 AtomicReference<Exception> caughtException = new AtomicReference<>();
71 Thread checkThread = new Thread(getRootThreadGroup(), () -> {
72 try {
73 // If the bug is present this will throw exception
74 new InputMethodEvent(component,
75 InputMethodEvent.CARET_POSITION_CHANGED,
76 TextHitInfo.leading(0),
77 TextHitInfo.trailing(0));
78 } catch (Exception e) {
79 caughtException.set(e);
80 }
81 });
82 checkThread.start();
83 checkThread.join();
84
85 if (caughtException.get() != null) {
86 throw new RuntimeException("Failed. Caught exception!", caughtException.get());
87 }
88 } finally {
89 new Thread(swingTG, () -> SwingUtilities.invokeLater(() -> {
90 if (frame != null) {
91 frame.dispose();
92 }
93 })).start();
94 }
95 }
96
97 private static ThreadGroup getRootThreadGroup() {
98 ThreadGroup currentTG = Thread.currentThread().getThreadGroup();
99 ThreadGroup parentTG = currentTG.getParent();
100 while (parentTG != null) {
101 currentTG = parentTG;
102 parentTG = currentTG.getParent();
103 }
104 return currentTG;
105 }
106}