diff options
Diffstat (limited to 'tests/run/t3038d.scala')
-rw-r--r-- | tests/run/t3038d.scala | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/run/t3038d.scala b/tests/run/t3038d.scala new file mode 100644 index 000000000..3dab07675 --- /dev/null +++ b/tests/run/t3038d.scala @@ -0,0 +1,58 @@ +trait Foo { + @transient protected var load = 1 + @transient protected var a = 12 + + protected def init[B](in: java.io.ObjectInputStream): Unit = { + in.defaultReadObject + load = in.readInt + val sizea = in.readInt + a = 12 + } + + protected def serializeTo(out: java.io.ObjectOutputStream): Unit = { + out.defaultWriteObject + out.writeInt(load) + out.writeInt(a) + } +} + +class Bar extends Foo with Serializable { + @transient protected var first: Any = null + def size = a + @transient var second: Any = null + + def checkMember: Unit = { if (first == null) print("") } + + private def writeObject(out: java.io.ObjectOutputStream): Unit = { + serializeTo(out) + } + + private def readObject(in: java.io.ObjectInputStream): Unit = { + first = null + init(in) + } +} + +object Test { + private def toObject[A](bytes: Array[Byte]): A = { + val in = new java.io.ObjectInputStream(new java.io.ByteArrayInputStream(bytes)) + in.readObject.asInstanceOf[A] + } + + private def toBytes(o: AnyRef): Array[Byte] = { + val bos = new java.io.ByteArrayOutputStream + val out = new java.io.ObjectOutputStream(bos) + out.writeObject(o) + out.close + bos.toByteArray + } + + + def main(args: Array[String]): Unit = { + val a1 = new Bar() + val serialized:Array[Byte] = toBytes(a1) + val deserialized: Bar = toObject(serialized) + deserialized.size + deserialized.checkMember + } +} |