8039082: [TEST_BUG] Test java/awt/dnd/BadSerializationTest/BadSerializationTest.java fails
authorserb
Fri, 24 Aug 2018 16:29:04 -0700
changeset 51912 4b2c1e154664
parent 51911 57fa2c1c98d4
child 51913 451ec22b1a46
8039082: [TEST_BUG] Test java/awt/dnd/BadSerializationTest/BadSerializationTest.java fails Reviewed-by: prr
test/jdk/ProblemList.txt
test/jdk/java/awt/dnd/BadSerializaionTest/BadSerializationTest.java
test/jdk/java/awt/dnd/BadSerializaionTest/badAction
test/jdk/java/awt/dnd/BadSerializaionTest/good
test/jdk/java/awt/dnd/BadSerializaionTest/noEvents
test/jdk/java/awt/dnd/BadSerializaionTest/nullComponent
test/jdk/java/awt/dnd/BadSerializaionTest/nullDragSource
test/jdk/java/awt/dnd/BadSerializaionTest/nullOrigin
test/jdk/java/awt/dnd/BadSerializationTest/BadSerializationTest.java
test/jdk/java/awt/dnd/BadSerializationTest/badAction
test/jdk/java/awt/dnd/BadSerializationTest/good
test/jdk/java/awt/dnd/BadSerializationTest/noEvents
test/jdk/java/awt/dnd/BadSerializationTest/nullComponent
test/jdk/java/awt/dnd/BadSerializationTest/nullDragSource
test/jdk/java/awt/dnd/BadSerializationTest/nullOrigin
--- a/test/jdk/ProblemList.txt	Thu Aug 23 23:12:16 2018 -0700
+++ b/test/jdk/ProblemList.txt	Fri Aug 24 16:29:04 2018 -0700
@@ -128,7 +128,6 @@
 java/awt/FileDialog/8003399/bug8003399.java 8198334 windows-all
 java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion.java 8060176 windows-all,macosx-all
 java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_1.java 8060176 windows-all,macosx-all
-java/awt/dnd/BadSerializaionTest/BadSerializationTest.java 8039082 generic-all
 java/awt/dnd/MissingEventsOnModalDialog/MissingEventsOnModalDialogTest.java 8164464 linux-all,macosx-all
 java/awt/dnd/URIListBetweenJVMsTest/URIListBetweenJVMsTest.html 8171510 macosx-all
 javax/swing/dnd/7171812/bug7171812.java 8041447 macosx-all
--- a/test/jdk/java/awt/dnd/BadSerializaionTest/BadSerializationTest.java	Thu Aug 23 23:12:16 2018 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2014, 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
- * @key headful
- * @bug 8030050
- * @summary Validate fields on DnD class deserialization
- * @author petr.pchelko@oracle.com
- */
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.util.stream.Stream;
-
-public class BadSerializationTest {
-
-    private static final String[] badSerialized = new String[] {
-            "badAction",
-            "noEvents",
-            "nullComponent",
-            "nullDragSource",
-            "nullOrigin"
-    };
-
-    private static final String goodSerialized = "good";
-
-    public static void main(String[] args) throws Exception {
-        String testSrc = System.getProperty("test.src") + File.separator;
-        testReadObject(testSrc + goodSerialized, false);
-        Stream.of(badSerialized).forEach(file -> testReadObject(testSrc + file, true));
-    }
-
-    private static void testReadObject(String filename, boolean expectException) {
-        Exception exceptionCaught = null;
-        try (FileInputStream fileInputStream = new FileInputStream(filename);
-             ObjectInputStream ois = new ObjectInputStream(fileInputStream)) {
-            ois.readObject();
-        } catch (InvalidObjectException e) {
-            exceptionCaught = e;
-        } catch (IOException e) {
-            throw new RuntimeException("FAILED: IOException", e);
-        } catch (ClassNotFoundException e) {
-            throw new RuntimeException("FAILED: ClassNotFoundException", e);
-        }
-        if (exceptionCaught != null && !expectException) {
-            throw new RuntimeException("FAILED: UnexpectedException", exceptionCaught);
-        }
-        if (exceptionCaught == null && expectException) {
-            throw new RuntimeException("FAILED: Invalid object was created with no exception");
-        }
-    }
-}
Binary file test/jdk/java/awt/dnd/BadSerializaionTest/badAction has changed
Binary file test/jdk/java/awt/dnd/BadSerializaionTest/good has changed
Binary file test/jdk/java/awt/dnd/BadSerializaionTest/noEvents has changed
Binary file test/jdk/java/awt/dnd/BadSerializaionTest/nullComponent has changed
Binary file test/jdk/java/awt/dnd/BadSerializaionTest/nullDragSource has changed
Binary file test/jdk/java/awt/dnd/BadSerializaionTest/nullOrigin has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/awt/dnd/BadSerializationTest/BadSerializationTest.java	Fri Aug 24 16:29:04 2018 -0700
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 2014, 2018, 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
+ * @key headful
+ * @bug 8030050 8039082
+ * @summary Validate fields on DnD class deserialization
+ */
+
+import java.awt.Point;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.stream.Stream;
+
+import javax.swing.JPanel;
+
+import static java.awt.dnd.DnDConstants.ACTION_COPY;
+
+public class BadSerializationTest {
+
+    private static final String[] badSerialized = new String[] {
+            "badAction",
+            "noEvents",
+            "nullComponent",
+            "nullDragSource",
+            "nullOrigin"
+    };
+
+    private static final String goodSerialized = "good";
+
+    public static void main(String[] args) throws Exception {
+        if (args.length > 0 && args[0].equals("-write")) {
+            writeObjects(); //Creates the binary files for the test.
+        } else {
+            String testSrc = System.getProperty("test.src") + File.separator;
+            testReadObject(testSrc + goodSerialized, false);
+            Stream.of(badSerialized).forEach(
+                    file -> testReadObject(testSrc + file, true));
+        }
+    }
+
+    private static void testReadObject(String filename, boolean expectException) {
+        Exception exceptionCaught = null;
+        try (FileInputStream fileInputStream = new FileInputStream(filename);
+             ObjectInputStream ois = new ObjectInputStream(fileInputStream)) {
+            ois.readObject();
+        } catch (InvalidObjectException e) {
+            exceptionCaught = e;
+        } catch (IOException e) {
+            throw new RuntimeException("FAILED: IOException", e);
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException("FAILED: ClassNotFoundException", e);
+        }
+        if (exceptionCaught != null && !expectException) {
+            throw new RuntimeException("FAILED: UnexpectedException", exceptionCaught);
+        }
+        if (exceptionCaught == null && expectException) {
+            throw new RuntimeException("FAILED: Invalid object was created with no exception");
+        }
+    }
+
+    /**
+     * Creates the stubs for the test. It is necessary to disable all checks in
+     * the constructors of DragGestureEvent/DragGestureRecognizer before run.
+     */
+    private static void writeObjects() throws Exception {
+        ArrayList<InputEvent> evs = new ArrayList<>();
+        Point ori = new Point();
+
+        write(new DragGestureEvent(new NothingNull(), ACTION_COPY, ori, evs),
+              "noEvents");
+
+        evs.add(new KeyEvent(new JPanel(), 0, 0, 0, 0, 'a', 0));
+
+        write(new DragGestureEvent(new NullComponent(), ACTION_COPY, ori, evs),
+              "nullComponent");
+
+        write(new DragGestureEvent(new NothingNull(), 100, ori, evs),
+              "badAction");
+
+        write(new DragGestureEvent(new NullDragSource(), ACTION_COPY, ori, evs),
+              "nullDragSource");
+
+        write(new DragGestureEvent(new NothingNull(), ACTION_COPY, null, evs),
+              "nullOrigin");
+
+        write(new DragGestureEvent(new NothingNull(), ACTION_COPY, ori, evs),
+              "good");
+    }
+
+    private static void write(Object obj, String file) throws Exception {
+        try (FileOutputStream fis = new FileOutputStream(file);
+             ObjectOutputStream ois = new ObjectOutputStream(fis)) {
+            ois.writeObject(obj);
+        }
+    }
+
+    public static final class NullDragSource extends DragGestureRecognizer {
+
+        public NullDragSource() {
+            super(null, new JPanel());
+        }
+
+        protected void registerListeners() {
+        }
+
+        protected void unregisterListeners() {
+        }
+    }
+
+    public static final class NullComponent extends DragGestureRecognizer {
+
+        public NullComponent() {
+            super(new DragSource(), null);
+        }
+
+        protected void registerListeners() {
+        }
+
+        protected void unregisterListeners() {
+        }
+    }
+
+    public static final class NothingNull extends DragGestureRecognizer {
+
+        public NothingNull() {
+            super(new DragSource(), new JPanel());
+        }
+
+        protected void registerListeners() {
+        }
+
+        protected void unregisterListeners() {
+        }
+    }
+}
Binary file test/jdk/java/awt/dnd/BadSerializationTest/badAction has changed
Binary file test/jdk/java/awt/dnd/BadSerializationTest/good has changed
Binary file test/jdk/java/awt/dnd/BadSerializationTest/noEvents has changed
Binary file test/jdk/java/awt/dnd/BadSerializationTest/nullComponent has changed
Binary file test/jdk/java/awt/dnd/BadSerializationTest/nullDragSource has changed
Binary file test/jdk/java/awt/dnd/BadSerializationTest/nullOrigin has changed