diff options
author | Vitaly Provodin <vitaly.provodin@jetbrains.com> | 2017-08-08 09:40:25 +0700 |
---|---|---|
committer | Vitaly Provodin <vitaly.provodin@jetbrains.com> | 2017-08-08 09:40:25 +0700 |
commit | 54343e4cb76880da8a8bdcbbf8520f4ea2456008 (patch) | |
tree | 98f7bc67deff38c19ca1e583301d5f630fd65e6c /test/jb | |
parent | b21b857eca9a77a1c11bd1b37bd16d2a437e77e4 (diff) | |
download | jdk8u_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.java | 116 | ||||
-rwxr-xr-x | test/jb/sun/lwawt/macosx/nsevent422.sh | 81 |
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 |