aboutsummaryrefslogtreecommitdiff
path: root/test/jb
diff options
context:
space:
mode:
authorVitaly Provodin <vitaly.provodin@jetbrains.com>2017-08-08 09:40:25 +0700
committerVitaly Provodin <vitaly.provodin@jetbrains.com>2017-08-08 09:40:25 +0700
commit54343e4cb76880da8a8bdcbbf8520f4ea2456008 (patch)
tree98f7bc67deff38c19ca1e583301d5f630fd65e6c /test/jb
parentb21b857eca9a77a1c11bd1b37bd16d2a437e77e4 (diff)
downloadjdk8u_jdk-54343e4cb76880da8a8bdcbbf8520f4ea2456008.tar.gz
JRE-422 added new regression test (AWTView deliverJavaMouseEvent leaks jEvent)jb8u152-b965
Diffstat (limited to 'test/jb')
-rw-r--r--test/jb/sun/lwawt/macosx/NSEvent422.java116
-rwxr-xr-xtest/jb/sun/lwawt/macosx/nsevent422.sh81
2 files changed, 197 insertions, 0 deletions
diff --git a/test/jb/sun/lwawt/macosx/NSEvent422.java b/test/jb/sun/lwawt/macosx/NSEvent422.java
new file mode 100644
index 0000000000..02ea73ae2c
--- /dev/null
+++ b/test/jb/sun/lwawt/macosx/NSEvent422.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2000-2017 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.swing.Timer;
+import javax.swing.WindowConstants;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Robot;
+import java.awt.TextArea;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+
+/*
+ * Description: The class generates mouse movements.
+ *
+ */
+public class NSEvent422 extends JPanel {
+
+ private static Robot robot;
+ private static JFrame staticFrame;
+ private static final Object testCompleted = new Object();
+
+ private static int ITERATION_NUMBER = 10;
+ private static int MOVEMENTS_FOR_ONE_ITERATION = 100;
+
+ private void doTest() {
+ int xCoordA = 50;
+ int yCoordA = 50;
+ int xCoordB = 70;
+ int yCoordB = 70;
+
+ for (int i = 0; i < ITERATION_NUMBER; i++) {
+
+ for (int j = 0; j < MOVEMENTS_FOR_ONE_ITERATION; j++) {
+ robot.mouseMove(xCoordA, yCoordA);
+ robot.mouseMove(xCoordB, yCoordB);
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ fireAction(1000, () -> {
+ System.gc();
+ });
+ }
+ }
+
+ private static void fireAction(int delay, Runnable action) {
+ Timer t = new Timer(delay, (e) -> action.run());
+ t.setRepeats(false);
+ t.start();
+ }
+
+ private static void createAndShowGUI() {
+ staticFrame = new JFrame("NSEvent422");
+ staticFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+ Component textArea = new TextArea();
+ staticFrame.setSize(300, 300);
+ staticFrame.add(textArea, BorderLayout.CENTER);
+
+ NSEvent422 test = new NSEvent422();
+ staticFrame.add(test);
+ staticFrame.addComponentListener(new ComponentAdapter() {
+ @Override
+ public void componentShown(ComponentEvent e) {
+ super.componentShown(e);
+ try {
+ test.doTest();
+ } catch (OutOfMemoryError ex) {
+ ex.printStackTrace();
+ System.exit(1);
+ } finally {
+ fireAction(1000, () -> {
+ synchronized (testCompleted) {
+ testCompleted.notifyAll();
+ }
+ });
+ }
+ }
+ });
+ staticFrame.pack();
+ staticFrame.setVisible(true);
+}
+
+ public static void main(String[] args) throws Exception {
+ if (args.length > 0)
+ ITERATION_NUMBER = Integer.parseInt(args[0]);
+
+ robot = new Robot();
+
+ synchronized (testCompleted) {
+ SwingUtilities.invokeAndWait(NSEvent422::createAndShowGUI);
+ testCompleted.wait();
+ }
+
+ staticFrame.setVisible(false);
+ staticFrame.dispose();
+ }
+} \ No newline at end of file
diff --git a/test/jb/sun/lwawt/macosx/nsevent422.sh b/test/jb/sun/lwawt/macosx/nsevent422.sh
new file mode 100755
index 0000000000..978892d26a
--- /dev/null
+++ b/test/jb/sun/lwawt/macosx/nsevent422.sh
@@ -0,0 +1,81 @@
+#!/usr/bin/env bash
+
+#
+# Copyright 2000-2017 JetBrains s.r.o.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# @test
+# nsevent422.sh checks NSEvent objects are collected by GC
+# @run shell nsevent422.sh
+# @requires os.family == "mac"
+
+#
+# The test launches NSEvent Java app, which generates series of mouse movements and checks the number of NSEvent
+# instances via jmap
+# When the number of NSEvent instances on the current iteration becomes less this number then on the previous one,
+# the test stops checking and exits with PASSED status. Otherwise it fails.
+#
+if [ -z "${TESTSRC}" ]; then
+ echo "TESTSRC undefined: set to ."
+ TESTSRC=.
+fi
+
+if [ -z "${TESTCLASSES}" ]; then
+ echo "TESTCLASSES undefined: set to ."
+ TESTCLASSES=.
+fi
+
+if [ -z "${TESTJAVA}" ]; then
+ echo "TESTJAVA undefined: testing cancelled"
+ exit 1
+fi
+
+cd ${TESTSRC}
+${TESTJAVA}/bin/javac -d ${TESTCLASSES} NSEvent422.java
+
+${TESTJAVA}/bin/java -Xmx8M -cp ${TESTCLASSES} NSEvent422 &
+
+
+sleep 1
+pid=$!
+old_instances=0
+passed=0
+while [ ! -z $pid ]
+do
+ histo=`${TESTJAVA}/bin/jmap -histo $pid | grep "sun.lwawt.macosx.NSEvent"`
+ echo ${histo}
+ new_instances=`echo ${histo} | awk {'print $2'}`
+ if [ -z "${new_instances}" ]; then
+ break
+ fi
+
+ if [ "${new_instances}" -lt "${old_instances}" ]; then
+ passed="1"
+ break
+ fi
+ old_instances=${new_instances}
+ sleep 1
+
+done
+
+kill -9 $pid
+
+if [ "${passed}" -eq "1" ]; then
+ echo "Test PASSED"
+ exit 0
+else
+ echo "Test FAILED"
+ exit 1
+fi