blob: a91817cb539d4b0b4340348c276b1ef14c0632af [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package tests.api.java.io;
import dalvik.annotation.AndroidOnly;
import dalvik.annotation.BrokenTest;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InvalidObjectException;
import java.io.NotActiveException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamClass;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.io.StreamCorruptedException;
import java.io.WriteAbortedException;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.Vector;
/**
* Automated Test Suite for class java.io.ObjectOutputStream
*
*/
@TestTargetClass(Serializable.class)
public class SerializationStressTest0 extends SerializationStressTest {
private static class ObjectInputStreamSubclass extends ObjectInputStream {
private Vector resolvedClasses = new Vector();
public ObjectInputStreamSubclass(InputStream in) throws IOException,
StreamCorruptedException {
super(in);
}
public Class resolveClass(ObjectStreamClass osClass)
throws IOException, ClassNotFoundException {
Class result = super.resolveClass(osClass);
resolvedClasses.addElement(result);
return result;
}
public Class[] resolvedClasses() {
return (Class[]) resolvedClasses.toArray(new Class[resolvedClasses
.size()]);
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_1_Constructor() {
// Test for method java.io.ObjectOutputStream(java.io.OutputStream)
try {
oos.close();
oos = new ObjectOutputStream(new ByteArrayOutputStream());
oos.close();
} catch (Exception e) {
fail("Failed to create ObjectOutputStream : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_2_close() {
// Test for method void java.io.ObjectOutputStream.close()
try {
oos.close();
oos = new ObjectOutputStream(bao = new ByteArrayOutputStream());
oos.close();
oos.writeChar('T');
oos.writeObject(FOO);
// Writing to a closed stream does not cause problems. This is
// the expected behavior
} catch (IOException e) {
fail("Operation on closed stream threw IOException : "
+ e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_3_defaultWriteObject() {
// Test for method void java.io.ObjectOutputStream.defaultWriteObject()
try {
oos.defaultWriteObject();
} catch (NotActiveException e) {
// Correct
return;
} catch (IOException e) {
}
fail(
"Failed to throw NotActiveException when invoked outside readObject");
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_4_flush() {
// Test for method void java.io.ObjectOutputStream.flush()
try {
oos.close();
oos = new ObjectOutputStream(bao = new ByteArrayOutputStream());
int size = bao.size();
oos.writeByte(127);
assertTrue("Data flushed already", bao.size() == size);
oos.flush();
assertTrue("Failed to flush data", bao.size() > size);
// we don't know how many bytes are actually written for 1 byte,
// so we test > <before>
oos.close();
oos = null;
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_5_reset() {
// Test for method void java.io.ObjectOutputStream.reset()
try {
String o = "HelloWorld";
oos.writeObject(o);
oos.writeObject(o);
oos.reset();
oos.writeObject(o);
ois = new ObjectInputStream(loadStream());
ois.close();
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_6_write() {
// Test for method void java.io.ObjectOutputStream.write(byte [], int,
// int)
try {
byte[] buf = new byte[255];
byte[] output = new byte[255];
for (int i = 0; i < output.length; i++)
output[i] = (byte) i;
oos.write(output, 0, output.length);
oos.close();
ois = new ObjectInputStream(loadStream());
ois.readFully(buf);
ois.close();
for (int i = 0; i < output.length; i++)
if (buf[i] != output[i])
fail("Read incorrect byte: " + i);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_6a_write() {
// Test for method void java.io.ObjectOutputStream.write(byte [], int,
// int)
try {
byte[] buf = new byte[256];
byte[] output = new byte[256];
for (int i = 0; i < output.length; i++)
output[i] = (byte) (i & 0xff);
oos.write(output, 0, output.length);
oos.close();
ois = new ObjectInputStream(loadStream());
ois.readFully(buf);
ois.close();
for (int i = 0; i < output.length; i++)
if (buf[i] != output[i])
fail("Read incorrect byte: " + i);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_7_write() {
// Test for method void java.io.ObjectOutputStream.write(int)
try {
byte[] buf = new byte[10];
oos.write('T');
oos.close();
ois = new ObjectInputStream(loadStream());
assertEquals("Read incorrect byte", 'T', ois.read());
ois.close();
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_8_write() {
// Test for method void java.io.ObjectOutputStream.write(byte [])
try {
byte[] buf = new byte[10];
oos.write("HelloWorld".getBytes());
oos.close();
ois = new ObjectInputStream(loadStream());
ois.read(buf, 0, 10);
ois.close();
assertEquals("Read incorrect bytes", "HelloWorld", new String(buf, 0, 10)
);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_9_writeBoolean() {
// Test for method void java.io.ObjectOutputStream.writeBoolean(boolean)
try {
oos.writeBoolean(true);
oos.close();
ois = new ObjectInputStream(loadStream());
assertTrue("Wrote incorrect byte value", ois.readBoolean());
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_10_writeByte() {
// Test for method void java.io.ObjectOutputStream.writeByte(int)
try {
oos.writeByte(127);
oos.close();
ois = new ObjectInputStream(loadStream());
assertEquals("Wrote incorrect byte value", 127, ois.readByte());
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_11_writeBytes() {
// Test for method void
// java.io.ObjectOutputStream.writeBytes(java.lang.String)
try {
byte[] buf = new byte[10];
oos.writeBytes("HelloWorld");
oos.close();
ois = new ObjectInputStream(loadStream());
ois.readFully(buf);
ois.close();
assertEquals("Wrote incorrect bytes value", "HelloWorld", new String(buf, 0, 10)
);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_12_writeChar() {
// Test for method void java.io.ObjectOutputStream.writeChar(int)
try {
oos.writeChar('T');
oos.close();
ois = new ObjectInputStream(loadStream());
assertEquals("Wrote incorrect char value", 'T', ois.readChar());
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_13_writeChars() {
// Test for method void
// java.io.ObjectOutputStream.writeChars(java.lang.String)
try {
int avail = 0;
char[] buf = new char[10];
oos.writeChars("HelloWorld");
oos.close();
ois = new ObjectInputStream(loadStream());
// Number of prim data bytes in stream / 2 to give char index
avail = ois.available() / 2;
for (int i = 0; i < avail; ++i)
buf[i] = ois.readChar();
ois.close();
assertEquals("Wrote incorrect chars", "HelloWorld", new String(buf, 0, 10)
);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_14_writeDouble() {
// Test for method void java.io.ObjectOutputStream.writeDouble(double)
try {
oos.writeDouble(Double.MAX_VALUE);
oos.close();
ois = new ObjectInputStream(loadStream());
assertTrue("Wrote incorrect double value",
ois.readDouble() == Double.MAX_VALUE);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_15_writeFloat() {
// Test for method void java.io.ObjectOutputStream.writeFloat(float)
try {
oos.writeFloat(Float.MAX_VALUE);
oos.close();
ois = new ObjectInputStream(loadStream());
assertTrue("Wrote incorrect double value",
ois.readFloat() == Float.MAX_VALUE);
ois.close();
ois = null;
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_16_writeInt() {
// Test for method void java.io.ObjectOutputStream.writeInt(int)
try {
oos.writeInt(Integer.MAX_VALUE);
oos.close();
ois = new ObjectInputStream(loadStream());
assertTrue("Wrote incorrect double value",
ois.readInt() == Integer.MAX_VALUE);
ois.close();
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_17_writeLong() {
// Test for method void java.io.ObjectOutputStream.writeLong(long)
try {
oos.writeLong(Long.MAX_VALUE);
oos.close();
ois = new ObjectInputStream(loadStream());
assertTrue("Wrote incorrect double value",
ois.readLong() == Long.MAX_VALUE);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_19_writeShort() {
// Test for method void java.io.ObjectOutputStream.writeShort(int)
try {
oos.writeShort(127);
oos.close();
ois = new ObjectInputStream(loadStream());
assertEquals("Wrote incorrect short value", 127, ois.readShort());
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_20_writeUTF() {
// Test for method void
// java.io.ObjectOutputStream.writeUTF(java.lang.String)
try {
oos.writeUTF("HelloWorld");
oos.close();
ois = new ObjectInputStream(loadStream());
assertEquals("Wrote incorrect UTF value",
"HelloWorld", ois.readUTF());
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_25_available() {
try {
oos.writeObject(FOO);
oos.writeObject(FOO);
oos.flush();
int available1 = 0;
int available2 = 0;
Object obj1 = null;
Object obj2 = null;
ObjectInputStream ois = new ObjectInputStream(loadStream());
available1 = ois.available();
obj1 = ois.readObject();
available2 = ois.available();
obj2 = ois.readObject();
assertEquals("available returned incorrect value", 0, available1);
assertEquals("available returned incorrect value", 0, available2);
assertTrue("available caused incorrect reading", FOO.equals(obj1));
assertTrue("available returned incorrect value", FOO.equals(obj2));
} catch (IOException e) {
fail("IOException serializing object : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("Unable to read Object type : " + e.toString());
} catch (Error err) {
System.out.println("Error " + err);
throw err;
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_resolveClass() {
try {
oos.writeObject(new Object[] { Integer.class, new Integer(1) });
oos.close();
ois = new ObjectInputStreamSubclass(loadStream());
ois.readObject();
ois.close();
} catch (IOException e1) {
fail("IOException : " + e1.getMessage());
} catch (ClassNotFoundException e2) {
fail("ClassNotFoundException : " + e2.getMessage());
}
Class[] resolvedClasses = ((ObjectInputStreamSubclass) ois)
.resolvedClasses();
assertEquals("missing resolved", 3, resolvedClasses.length);
assertTrue("resolved class 1", resolvedClasses[0] == Object[].class);
assertTrue("resolved class 2", resolvedClasses[1] == Integer.class);
assertTrue("resolved class 3", resolvedClasses[2] == Number.class);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_reset() {
try {
oos.reset();
oos.writeObject("R");
oos.reset();
oos.writeByte(24);
oos.close();
DataInputStream dis = new DataInputStream(loadStream());
byte[] input = new byte[dis.available()];
dis.readFully(input);
byte[] result = new byte[] { (byte) 0xac, (byte) 0xed, (byte) 0,
(byte) 5, (byte) 0x79, (byte) 0x74, (byte) 0, (byte) 1,
(byte) 'R', (byte) 0x79, (byte) 0x77, (byte) 1, (byte) 24 };
assertTrue("incorrect output", Arrays.equals(input, result));
ois = new ObjectInputStreamSubclass(loadStream());
assertEquals("Wrong result from readObject()", "R", ois.readObject()
);
assertEquals("Wrong result from readByte()", 24, ois.readByte());
ois.close();
} catch (IOException e1) {
fail("IOException : " + e1.getMessage());
} catch (ClassNotFoundException e2) {
fail("ClassNotFoundException : " + e2.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_serialVersionUID(Class clazz, long svUID) {
final String idWrong = "serialVersionUID is wrong for: ";
long reflectedSvUID = 0L;
try {
reflectedSvUID = clazz.getField("serialVersionUID").getLong(null);
} catch (Exception e) {
fail("Unable to determine serialVersionUID of " + clazz);
}
assertTrue(idWrong + clazz + ": " + reflectedSvUID + " does not equal "
+ svUID, reflectedSvUID == svUID);
}
private static class ResolveObjectTest implements Serializable {
Object field1, field2;
}
private static class ResolveObjectInputStream extends ObjectInputStream {
ResolveObjectInputStream(InputStream in)
throws StreamCorruptedException, IOException {
super(in);
}
public void enableResolve() {
enableResolveObject(true);
}
public Object resolveObject(Object obj) {
if (obj instanceof Vector) // test_1_resolveObject()
return new Hashtable();
else if ("abc".equals(obj)) // test_2_resolveObject()
return "ABC";
else if (obj instanceof String) // test_3_resolveObject()
return String.valueOf(((String) obj).length());
else if (obj instanceof int[]) // test_4_resolveObject()
return new Object[1];
else if (obj instanceof Object[] && ((Object[]) obj).length == 2) // test_5_resolveObject()
return new char[1];
return obj;
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_1_resolveObject() {
try {
ResolveObjectTest obj = new ResolveObjectTest();
obj.field1 = new Vector();
obj.field2 = obj.field1;
oos.writeObject(obj);
oos.close();
ois = new ResolveObjectInputStream(loadStream());
((ResolveObjectInputStream) ois).enableResolve();
ResolveObjectTest result = null;
try {
result = (ResolveObjectTest) ois.readObject();
} catch (ClassNotFoundException e) {
fail(e.toString());
}
assertTrue("Object not resolved",
result.field1 instanceof Hashtable);
assertTrue("Second reference not resolved",
result.field1 == result.field2);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_2_resolveObject() {
try {
ResolveObjectTest obj = new ResolveObjectTest();
obj.field1 = "abc";
obj.field2 = obj.field1;
oos.writeObject(obj);
oos.close();
ois = new ResolveObjectInputStream(loadStream());
((ResolveObjectInputStream) ois).enableResolve();
ResolveObjectTest result = null;
try {
result = (ResolveObjectTest) ois.readObject();
} catch (ClassNotFoundException e) {
fail(e.toString());
}
assertEquals("String not resolved", "ABC", result.field1);
assertTrue("Second reference not resolved",
result.field1 == result.field2);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_3_resolveObject() {
try {
ResolveObjectTest obj = new ResolveObjectTest();
char[] lchars = new char[70000];
obj.field1 = new String(lchars);
obj.field2 = obj.field1;
oos.writeObject(obj);
oos.close();
ois = new ResolveObjectInputStream(loadStream());
((ResolveObjectInputStream) ois).enableResolve();
ResolveObjectTest result = null;
try {
result = (ResolveObjectTest) ois.readObject();
} catch (ClassNotFoundException e) {
fail(e.toString());
}
assertTrue("Long String not resolved", "70000"
.equals(result.field1));
assertTrue("Second reference not resolved",
result.field1 == result.field2);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_4_resolveObject() {
try {
ResolveObjectTest obj = new ResolveObjectTest();
obj.field1 = new int[5];
obj.field2 = obj.field1;
oos.writeObject(obj);
oos.close();
ois = new ResolveObjectInputStream(loadStream());
((ResolveObjectInputStream) ois).enableResolve();
ResolveObjectTest result = null;
try {
result = (ResolveObjectTest) ois.readObject();
} catch (ClassNotFoundException e) {
fail(e.toString());
}
Class cl = new Object[0].getClass();
assertTrue("int[] not resolved", result.field1.getClass() == cl);
assertTrue("Second reference not resolved",
result.field1 == result.field2);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_5_resolveObject() {
try {
ResolveObjectTest obj = new ResolveObjectTest();
obj.field1 = new Object[2];
obj.field2 = obj.field1;
oos.writeObject(obj);
oos.close();
ois = new ResolveObjectInputStream(loadStream());
((ResolveObjectInputStream) ois).enableResolve();
ResolveObjectTest result = null;
try {
result = (ResolveObjectTest) ois.readObject();
} catch (ClassNotFoundException e) {
fail(e.toString());
}
Class cl = new char[0].getClass();
assertTrue("int[] not resolved", result.field1.getClass() == cl);
assertTrue("Second reference not resolved",
result.field1 == result.field2);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
}
}
static class WriteReplaceTestA implements Serializable {
public Object writeReplace() throws ObjectStreamException {
return new ReadResolveTestB();
}
}
static class WriteReplaceTestB extends WriteReplaceTestA {
}
static class WriteReplaceTestC extends WriteReplaceTestA {
public Object writeReplace() throws ObjectStreamException {
return new ReadResolveTestC();
}
}
static class WriteReplaceTestD implements Serializable {
private Object writeReplace() throws ObjectStreamException {
return new ReadResolveTestD();
}
}
static class WriteReplaceTestE extends WriteReplaceTestD {
}
static class WriteReplaceTestF implements Serializable {
int type, readType;
public WriteReplaceTestF(int type, int readType) {
this.type = type;
this.readType = readType;
}
public Object writeReplace() throws ObjectStreamException {
switch (type) {
case 0:
throw new InvalidObjectException("invalid");
case 1:
throw new RuntimeException("runtime");
case 2:
throw new Error("error");
default:
return new ReadResolveTestE(readType);
}
}
}
static class ReadResolveTestA implements Serializable {
public Object readResolve() throws ObjectStreamException {
return new ReadResolveTestA();
}
}
static class ReadResolveTestB extends ReadResolveTestA {
}
static class ReadResolveTestC implements Serializable {
private Object readResolve() throws ObjectStreamException {
return new ReadResolveTestB();
}
}
static class ReadResolveTestD extends ReadResolveTestC {
}
static class ReadResolveTestE implements Serializable {
int type;
public ReadResolveTestE(int type) {
this.type = type;
}
public Object readResolve() throws ObjectStreamException {
switch (type) {
case 0:
throw new InvalidObjectException("invalid");
case 1:
throw new RuntimeException("runtime");
case 2:
throw new Error("error");
case 3:
return this;
default:
return new ReadResolveTestF();
}
}
}
static class ReadResolveTestF implements Serializable {
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_1_writeReplace() {
try {
Vector v = new Vector();
v.addElement(new WriteReplaceTestA());
v.addElement(new WriteReplaceTestB());
v.addElement(new WriteReplaceTestB());
v.addElement(new WriteReplaceTestC());
v.addElement(new WriteReplaceTestD());
v.addElement(new WriteReplaceTestE());
oos.writeObject(v);
oos.close();
ois = new ObjectInputStream(loadStream());
Vector result = (Vector) ois.readObject();
assertTrue("invalid 0 : " + result.elementAt(0), result
.elementAt(0).getClass() == ReadResolveTestA.class);
assertTrue("invalid 1 : " + result.elementAt(1), result
.elementAt(1).getClass() == ReadResolveTestA.class);
assertTrue("invalid 2 : " + result.elementAt(2), result
.elementAt(2).getClass() == ReadResolveTestA.class);
assertTrue("invalid 3 : " + result.elementAt(3), result
.elementAt(3).getClass() == ReadResolveTestB.class);
assertTrue("invalid 4 : " + result.elementAt(4), result
.elementAt(4).getClass() == ReadResolveTestD.class);
assertTrue("invalid 5 : " + result.elementAt(5), result
.elementAt(5).getClass() == WriteReplaceTestE.class);
} catch (IOException e) {
fail("IOException serializing data : " + e.getMessage());
} catch (ClassNotFoundException e) {
fail("ClassNotFoundException serializing data : " + e.getMessage());
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_2_writeReplace_01() throws IOException {
try {
oos.writeObject(new WriteReplaceTestF(0, -1));
fail("Should throw ObjectStreamException");
} catch (ObjectStreamException e) {
// expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_2_writeReplace_02() throws IOException {
try {
oos.writeObject(new WriteReplaceTestF(1, -1));
fail("Should throw RuntimeException");
} catch (RuntimeException e) {
// expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_2_writeReplace_03() throws IOException {
try {
oos.writeObject(new WriteReplaceTestF(2, -1));
fail("Should throw Error");
} catch (Error e) {
// expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Verifies serialization.",
method = "!Serialization",
args = {}
)
public void test_2_writeReplace_04() throws IOException,
ClassNotFoundException {
oos.writeObject(new WriteReplaceTestF(3, 0));
oos.writeObject(new WriteReplaceTestF(3, 1));
oos.writeObject(new WriteReplaceTestF(3, 2));
WriteReplaceTestF test = new WriteReplaceTestF(3, 3);
oos.writeObject(test);
oos.writeObject(test);
WriteReplaceTestF test2 = new WriteReplaceTestF(3, 4);
oos.writeObject(test2);
oos.writeObject(test2);
oos.close();
ois = new ObjectInputStream(loadStream());
try {
ois.readObject();
fail("Expected InvalidObjectException");
} catch (InvalidObjectException e) {
// expected
}
try {
ois.readObject();
fail("Expected RuntimeException");
} catch (RuntimeException e) {
// expected
}
try {
ois.readObject();
fail("Expected Error");
} catch (Error e) {
// expected
}
Object readE1 = ois.readObject();
Object readE2 = ois.readObject();
assertTrue("Replaced objects should be identical", readE1 == readE2);
Object readF1 = ois.readObject();
Object readF2 = ois.readObject();
assertTrue("Replaced resolved objects should be identical: "
+ readF1 + " " + readF2, readF1 == readF2);
}
}