/* * Copyright (c) 2005, 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 * @summary it is new version of old test which was * /src/share/test/serialization/psiotest.java * Test pickling and unpickling an object with derived classes * and using a read special to serialize the "middle" class. * */ import java.io.*; public class CheckingEquality { public static void main (String argv[]) { System.err.println("\nRegression test of " + "serialization/deserialization of " + "complex objects\n"); FileInputStream istream = null; try { Thirdpsio objout = new Thirdpsio(); objout.init(); FileOutputStream ostream = new FileOutputStream("psiotest1.tmp"); ObjectOutputStream p = new ObjectOutputStream(ostream); p.writeObject(objout); p.flush(); ostream.close(); istream = new FileInputStream("psiotest1.tmp"); ObjectInputStream q = new ObjectInputStream(istream); Thirdpsio objin = (Thirdpsio)q.readObject(); if (!objout.equals(objin)) { System.err.println( "\nTEST FAILED: Original and read objects not equal."); throw new Error(); } istream.close(); System.err.println("\nTEST PASSED"); } catch (Exception e) { System.err.print("TEST FAILED: "); e.printStackTrace(); System.err.println("\nInput remaining"); int ch; try { while ((ch = istream.read()) != -1) { System.out.print(Integer.toString(ch, 16) + " "); } System.err.println("\n"); } catch (Exception f) { throw new Error(); } throw new Error(); } } } class Firstpsio implements java.io.Serializable { String one; int two; float three[]; void init() { /* called only before writing */ one = "one"; two = 2; three = new float[5]; float f = 3.0f; for (int i=0; i<5 ; i++) { f += 0.11; three[i] = f; } } /* Compare two first objects */ boolean equals(Firstpsio other) { boolean ret = true; if (!one.equals(other.one)) { System.err.println("\nfirstpsio: expected " + one + " actual " + other.one); ret = false; } if (two != other.two) { System.err.println("\nfirstpsio: expected " + two + " actual " + other.two); ret = false; } for (int i = 0; i < three.length; i++ ) { if (three[i] != other.three[i]) { System.err.println("\nfirstpsio: three[" + i + "] expected " + three[i] + " actual " + other.three[i]); ret = false; } } return ret; } } class Secondpsio extends Firstpsio { String quatre; int cinq; private void writeObject(ObjectOutputStream pw) throws IOException { pw.writeObject(quatre); pw.writeInt(cinq); } private void readObject(ObjectInputStream pr) throws StreamCorruptedException, IOException, ClassNotFoundException { if (one == null) { System.err.println( "\nTEST FAILED: Superclass not serialized when " + "it should have been"); throw new StreamCorruptedException("Superclass not serialized " + "when it should have been"); } quatre = (String)pr.readObject(); cinq = pr.readInt(); } boolean equals(Secondpsio other) { boolean ret = super.equals(other); if (!quatre.equals(other.quatre)) { System.err.println("\nsecondpsio: quatre expected " + quatre + " actual " + other.quatre); ret = false; } if (cinq != other.cinq) { System.err.println("\nsecondpsio: cinq expected " + cinq + " actual " + other.cinq); ret = false; } return ret; } /* called only before writing */ void init() { quatre = "4444"; cinq = 5; super.init(); } } class Thirdpsio extends Secondpsio { static String ign = "ignored"; transient Object oh; int six; private static int seven[]; protected byte eight = (byte)9; final static byte dcare = (byte) 128; private short nine = 8888; long ten; java.util.Enumeration zero; boolean equals(Thirdpsio other) { boolean ret = super.equals(other); if (six != other.six) { System.err.println("\nthirdpsio six " + six + " actual " + other.six); ret = false; } if (eight != other.eight) { System.err.println("\nthirdpsio eight - expected " + eight + " actual " + other.eight); ret = false; } if (nine != other.nine) { System.err.println("\nthirdpsio nine - expected " + nine + " actual " + other.nine); ret = false; } if (ten != other.ten) { System.err.println("\nthirdpsio ten - expected " + ten + " actual " + other.ten); ret = false; } if (zero != other.zero) { System.err.println("\nthirdpsio zero - expected " + zero + " actual " + other.zero); ret = false; } return ret; } /* called only before writing */ void init() { six = 666; int s7[] = { 7, 7, 7 }; seven = s7; eight = (byte)8; nine = (short)9; ten = (long)100000; java.util.Enumeration em = null; /* default */ super.init(); } }