1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.luni.tests.java.io; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayInputStream; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InvalidClassException; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectInputStream; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectOutputStream; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectStreamClass; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectStreamException; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.OptionalDataException; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.Serializable; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.StreamCorruptedException; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.ArrayList; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase; 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.testframework.serialization.SerializationTest; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.support.Support_ASimpleInputStream; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(ObjectInputStream.class) 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class ObjectInputStreamTest extends TestCase { 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectInputStream ois; 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectOutputStream oos; 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayOutputStream bao; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final String testString = "Lorem ipsum..."; 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void setUp() throws Exception { 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.setUp(); 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos = new ObjectOutputStream(bao = new ByteArrayOutputStream()); 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Checks ObjectStreamException and OptionalDataException.", 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "readUnshared", 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_readUnshared_1() throws IOException, ClassNotFoundException { 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.writeObject(testString); 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.writeObject(testString); 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.writeInt(42); 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.close(); 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois.readUnshared(); 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois.readObject(); 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: ObjectStreamException expected."); 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ObjectStreamException e) { 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois.readUnshared(); 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 2: OptionalDataException expected."); 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (OptionalDataException e) { 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois.close(); 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.ObjectInputStream#readUnshared() 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Checks StreamCorruptedException.", 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "readUnshared", 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_readUnshared_2() throws IOException, ClassNotFoundException { 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.close(); 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bao.write(testString.getBytes()); 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray())); 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois.readUnshared(); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: StreamCorruptedException expected."); 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (StreamCorruptedException e) { 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois.close(); 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests java.io.ObjectInputStream#readUnshared() 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Checks IOException.", 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "readUnshared", 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_readUnshared_3() throws IOException, ClassNotFoundException { 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bao.write(testString.getBytes()); 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.close(); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray()); 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois = new ObjectInputStream(sis); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sis.throwExceptionOnNextUse = true; 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois.readUnshared(); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: IOException expected."); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sis.throwExceptionOnNextUse = false; 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois.close(); 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Micro-scenario of de/serialization of an object with non-serializable superclass. 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The super-constructor only should be invoked on the deserialized instance. 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "readObject", 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_readObject_Hierarchy() throws Exception { 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayOutputStream baos = new ByteArrayOutputStream(); 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectOutputStream oos = new ObjectOutputStream(baos); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.writeObject(new B()); 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.close(); 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray())); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project B b = (B) ois.readObject(); 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois.close(); 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("should construct super", A.list.contains(b)); 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertFalse("should not construct self", B.list.contains(b)); 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertEquals("super field A.s", A.DEFAULT, ((A)b).s); 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertNull("transient field B.s", b.s); 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @tests {@link java.io.ObjectInputStream#readNewLongString()} 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.COMPLETE, 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Verifies serialization.", 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "!SerializationSelf", 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_readNewLongString() throws Exception { 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LongString longString = new LongString(); 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SerializationTest.verifySelf(longString); 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class LongString implements Serializable{ 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1L; 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String lString; 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public LongString() { 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuilder builder = new StringBuilder(); 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // construct a string whose length > 64K 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < 65636; i++) { 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project builder.append('1'); 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project lString = builder.toString(); 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object o) { 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (o == this) { 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (o instanceof LongString) { 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project LongString l = (LongString) o; 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l.lString.equals(l.lString); 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return lString.hashCode(); 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class A { 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final ArrayList<A> list = new ArrayList<A>(); 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String s; 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final String DEFAULT = "aaa"; 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public A() { 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s = DEFAULT; 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project list.add(this); 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class B extends A implements Serializable { 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1L; 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static final ArrayList<A> list = new ArrayList<A>(); 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project transient String s; 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public B() { 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s = "bbb"; 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project list.add(this); 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project class OIS extends ObjectInputStream { 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project OIS () throws IOException { 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project void test() throws ClassNotFoundException,IOException { 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project readClassDescriptor(); 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "readClassDescriptor", 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_readClassDescriptor() throws ClassNotFoundException, IOException { 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new OIS().test(); 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: NullPointerException expected."); 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NullPointerException e) { 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class TestObjectInputStream extends ObjectInputStream { 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public TestObjectInputStream(InputStream in) throws IOException { 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(in); 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected Class<?> resolveClass(ObjectStreamClass desc) 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IOException, ClassNotFoundException { 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (desc.getName().endsWith("ObjectInputStreamTest$TestClass1")) { 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return TestClass2.class; 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return super.resolveClass(desc); 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class TestClass1 implements Serializable { 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 11111L; 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int i = 0; 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class TestClass2 implements Serializable { 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 11111L; 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int i = 0; 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.PARTIAL_COMPLETE, 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "Checks InvalidClassException.", 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "resolveClass", 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {java.io.ObjectStreamClass.class} 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void test_resolveClass_invalidClassName() 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws Exception { 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Regression test for HARMONY-1920 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TestClass1 to1 = new TestClass1(); 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayOutputStream baos = new ByteArrayOutputStream(); 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectOutputStream oos = new ObjectOutputStream(baos); 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ByteArrayInputStream bais; 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ObjectInputStream ois; 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project to1.i = 555; 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.writeObject(to1); 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.flush(); 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project byte[] bytes = baos.toByteArray(); 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bais = new ByteArrayInputStream(bytes); 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois = new TestObjectInputStream(bais); 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ois.readObject(); 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Test 1: InvalidClassException expected."); 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvalidClassException ice) { 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Expected. 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 310