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 tests.api.java.io;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.BufferedInputStream;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayInputStream;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.EOFException;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.File;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileInputStream;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileOutputStream;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.InputStream;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.NotActiveException;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectInputStream;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectOutputStream;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectStreamClass;
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.OptionalDataException;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.OutputStream;
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.Serializable;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.StreamCorruptedException;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Arrays;
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Hashtable;
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Vector;
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.testframework.serialization.SerializationTest;
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert;
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.support.Support_ASimpleInputStream;
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport tests.support.Support_IOTestSecurityManager;
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(ObjectInputStream.class)
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class ObjectInputStreamTest extends junit.framework.TestCase implements
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Serializable {
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static final long serialVersionUID = 1L;
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ObjectInputStream ois;
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ObjectOutputStream oos;
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ByteArrayOutputStream bao;
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    boolean readStreamHeaderCalled;
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final String testString = "Lorem ipsum...";
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private final int testLength = testString.length();
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#ObjectInputStream()
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies the protected ObjectInputStream() constructor.",
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "ObjectInputStream",
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_Constructor() throws IOException {
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecurityManager sm = System.getSecurityManager();
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.setSecurityManager(new Support_IOTestSecurityManager());
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois = new BasicObjectInputStream();
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("SecurityException expected.");
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (SecurityException e) {
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            System.setSecurityManager(sm);
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#ObjectInputStream(java.io.InputStream)
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "ObjectInputStream",
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_io_InputStream() throws IOException {
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.io.ObjectInputStream(java.io.InputStream)
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeDouble(Double.MAX_VALUE);
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois = new ObjectInputStream(new ByteArrayInputStream(new byte[90]));
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("StreamCorruptedException expected");
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (StreamCorruptedException e) {}
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#ObjectInputStream(java.io.InputStream)
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Checks IOException.",
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "ObjectInputStream",
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.InputStream.class}
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ConstructorLjava_io_InputStream_IOException() throws IOException {
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(testString);
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray());
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = true;
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois = new ObjectInputStream(sis);
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: IOException expected.");
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = false;
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.PARTIAL_COMPLETE,
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that object can be serialized and deserialized correctly with reading descriptor from serialization stream.",
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "readClassDescriptor",
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "Verifies that object can be serialized and deserialized correctly with reading descriptor from serialization stream.",
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "readObject",
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_ClassDescriptor() throws IOException,
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ClassNotFoundException {
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream baos = new ByteArrayOutputStream();
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectOutputStreamWithWriteDesc oos = new ObjectOutputStreamWithWriteDesc(
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                baos);
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(String.class);
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Class<?> cls = TestClassForSerialization.class;
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectInputStreamWithReadDesc ois = new ObjectInputStreamWithReadDesc(
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                bais, cls);
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object obj = ois.readObject();
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(cls, obj);
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#available()
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "available",
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_available() throws IOException {
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method int java.io.ObjectInputStream.available()
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeBytes(testString);
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray());
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(sis);
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Test 1: Incorrect number of bytes;", testLength, ois.available());
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#available()
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Checks IOException.",
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "available",
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_available_IOException() throws IOException {
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(testString);
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray());
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(sis);
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = true;
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.available();
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: IOException expected.");
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = false;
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#close()
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "close",
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_close() throws Exception {
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method void java.io.ObjectInputStream.close()
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(testString);
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray());
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(sis);
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = true;
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.close();
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: IOException expected.");
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = false;
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#defaultReadObject()
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "defaultReadObject",
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_defaultReadObject() throws Exception {
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method void java.io.ObjectInputStream.defaultReadObject()
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // SM. This method may as well be private, as if called directly it
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // throws an exception.
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String s = testString;
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(s);
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.defaultReadObject();
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("NotActiveException expected");
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NotActiveException e) {
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Desired behavior
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.close();
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#enableResolveObject(boolean)
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies enableResolveObject(boolean).",
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "enableResolveObject",
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {boolean.class}
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_enableResolveObjectB() throws IOException {
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Start testing without a SecurityManager.
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BasicObjectInputStream bois = new BasicObjectInputStream();
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertFalse("Test 1: Object resolving must be disabled by default.",
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                bois.enableResolveObject(true));
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Test 2: enableResolveObject did not return the previous value.",
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                bois.enableResolveObject(false));
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#read()
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "read",
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_read() throws IOException {
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method int java.io.ObjectInputStream.read()
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.write('T');
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Read incorrect byte value", 'T', ois.read());
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#read()
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Checks IOException.",
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "read",
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_read_IOException() throws IOException {
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(testString);
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray());
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(sis);
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = true;
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.read();
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: IOException expected.");
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = false;
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#read(byte[], int, int)
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "read",
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {byte[].class, int.class, int.class}
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_read$BII() throws IOException {
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method int java.io.ObjectInputStream.read(byte [], int, int)
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] buf = new byte[testLength];
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeBytes(testString);
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.read(buf, 0, testLength);
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Read incorrect bytes", testString, new String(buf));
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#read(byte[], int, int)
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Checks Exceptions.",
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "read",
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {byte[].class, int.class, int.class}
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_read$BII_Exception() throws IOException {
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] buf = new byte[testLength];
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(testString);
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.read(buf, 0, -1);
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IndexOutOfBoundsException was not thrown.");
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.read(buf, -1,1);
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IndexOutOfBoundsException was not thrown.");
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.read(buf, testLength, 1);
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IndexOutOfBoundsException was not thrown.");
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray());
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(sis);
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = true;
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.read(buf, 0, testLength);
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: IOException expected.");
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = false;
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readFields()
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectOutputStream#writeFields()
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                method = "readFields",
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                args = {},
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                level = TestLevel.COMPLETE
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                method = "writeFields",
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                args = {},
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                clazz = ObjectOutputStream.class,
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                level = TestLevel.COMPLETE
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readFields() throws Exception {
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.io.ObjectInputStream$GetField
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // java.io.ObjectInputStream.readFields()
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SerializableTestHelper sth;
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        /*
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * "SerializableTestHelper" is an object created for these tests with
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * two fields (Strings) and simple implementations of readObject and
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * writeObject which simply read and write the first field but not the
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         * second
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project         */
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(new SerializableTestHelper("Gabba", "Jabba"));
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.flush();
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sth = (SerializableTestHelper) (ois.readObject());
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("readFields / writeFields failed--first field not set",
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "Gabba", sth.getText1());
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "readFields / writeFields failed--second field should not have been set",
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                sth.getText2());
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readFully(byte[])
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readFully",
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {byte[].class}
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readFully$B() throws IOException {
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] buf = new byte[testLength];
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeBytes(testString);
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.readFully(buf);
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Test 1: Incorrect bytes read;",
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                testString, new String(buf));
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.read();
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readFully(buf);
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 2: EOFException expected.");
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (EOFException e) {
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readFully(byte[])
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Checks IOException.",
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readFully",
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {byte[].class}
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readFully$B_Exception() throws IOException {
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] buf = new byte[testLength];
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(testString);
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray());
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(sis);
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = true;
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readFully(buf);
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: IOException expected.");
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = false;
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readFully(byte[], int, int)
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readFully",
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {byte[].class, int.class, int.class}
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readFully$BII() throws IOException {
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method void java.io.ObjectInputStream.readFully(byte [],
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // int, int)
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] buf = new byte[testLength];
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeBytes(testString);
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.readFully(buf, 0, testLength);
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Read incorrect bytes", testString, new String(buf));
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.read();
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readFully(buf);
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 2: EOFException expected.");
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (EOFException e) {
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readFully(byte[], int, int)
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Checks Exceptions.",
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readFully",
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {byte[].class, int.class, int.class}
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readFully$BII_Exception() throws IOException {
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] buf = new byte[testLength];
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(testString);
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readFully(buf, 0, -1);
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IndexOutOfBoundsException was not thrown.");
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readFully(buf, -1,1);
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IndexOutOfBoundsException was not thrown.");
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readFully(buf, testLength, 1);
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("IndexOutOfBoundsException was not thrown.");
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IndexOutOfBoundsException e) {
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray());
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(sis);
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = true;
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readFully(buf, 0, 1);
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: IOException expected.");
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = false;
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readLine()
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @SuppressWarnings("deprecation")
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readLine",
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readLine() throws IOException {
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String line;
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeBytes("Lorem\nipsum\rdolor sit amet...");
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        line = ois.readLine();
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Test 1: Incorrect line written or read: " + line,
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                line.equals("Lorem"));
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        line = ois.readLine();
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Test 2: Incorrect line written or read: " + line,
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                line.equals("ipsum"));
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        line = ois.readLine();
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Test 3: Incorrect line written or read: " + line,
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                line.equals("dolor sit amet..."));
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readLine()
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @SuppressWarnings("deprecation")
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Checks IOException.",
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readLine",
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readLine_IOException() throws IOException {
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(testString);
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray());
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(sis);
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = true;
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readLine();
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: IOException expected.");
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = false;
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readObject()
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readObject",
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readObject() throws Exception {
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method java.lang.Object
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // java.io.ObjectInputStream.readObject()
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String s = testString;
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(s);
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Read incorrect Object value", s, ois.readObject());
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Regression for HARMONY-91
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // dynamically create serialization byte array for the next hierarchy:
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // - class A implements Serializable
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // - class C extends A
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] cName = C.class.getName().getBytes();
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] aName = A.class.getName().getBytes();
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream out = new ByteArrayOutputStream();
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] begStream = new byte[] { (byte) 0xac, (byte) 0xed, // STREAM_MAGIC
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x00, (byte) 0x05, // STREAM_VERSION
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x73, // TC_OBJECT
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x72, // TC_CLASSDESC
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x00, // only first byte for C class name length
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        };
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.write(begStream, 0, begStream.length);
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.write(cName.length); // second byte for C class name length
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.write(cName, 0, cName.length); // C class name
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] midStream = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00,
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x21, // serialVersionUID = 33L
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x02, // flags
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x00, (byte) 0x00, // fields : none
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x78, // TC_ENDBLOCKDATA
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x72, // Super class for C: TC_CLASSDESC for A class
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x00, // only first byte for A class name length
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        };
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.write(midStream, 0, midStream.length);
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.write(aName.length); // second byte for A class name length
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.write(aName, 0, aName.length); // A class name
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] endStream = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00,
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x0b, // serialVersionUID = 11L
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x02, // flags
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x00, (byte) 0x01, // fields
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x4c, // field description: type L (object)
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x00, (byte) 0x04, // length
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // field = 'name'
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x6e, (byte) 0x61, (byte) 0x6d, (byte) 0x65,
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x74, // className1: TC_STRING
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x00, (byte) 0x12, // length
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                //
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76,
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x61, (byte) 0x2f, (byte) 0x6c, (byte) 0x61,
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x6e, (byte) 0x67, (byte) 0x2f, (byte) 0x53,
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x74, (byte) 0x72, (byte) 0x69, (byte) 0x6e,
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x67, (byte) 0x3b,
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x78, // TC_ENDBLOCKDATA
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x70, // NULL super class for A class
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // classdata
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x74, // TC_STRING
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x00, (byte) 0x04, // length
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                (byte) 0x6e, (byte) 0x61, (byte) 0x6d, (byte) 0x65, // value
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        };
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.write(endStream, 0, endStream.length);
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.flush();
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // read created serial. form
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                out.toByteArray()));
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object o = ois.readObject();
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(C.class, o.getClass());
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Regression for HARMONY-846
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull(new ObjectInputStream() {}.readObject());
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private void fillStreamHeader(byte[] buffer) {
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        short magic = java.io.ObjectStreamConstants.STREAM_MAGIC;
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        short version = java.io.ObjectStreamConstants.STREAM_VERSION;
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (buffer.length < 4) {
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("The buffer's minimal length must be 4.");
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Initialize the buffer with the correct header for object streams
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buffer[0] = (byte) (magic >> 8);
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buffer[1] = (byte) magic;
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buffer[2] = (byte) (version >> 8);
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buffer[3] = (byte) (version);
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readObjectOverride()
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies readObjectOverride().",
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readObjectOverride",
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readObjectOverride() throws Exception {
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] buffer = new byte[4];
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Initialize the buffer with the correct header for object streams
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fillStreamHeader(buffer);
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test 1: Check that readObjectOverride() returns null if there
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // is no input stream.
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BasicObjectInputStream bois = new BasicObjectInputStream();
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertNull("Test 1:", bois.readObjectOverride());
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test 2: Check that readObjectOverride() throws an IOException
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // if there is an input stream.
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bois = new BasicObjectInputStream(new ByteArrayInputStream(buffer));
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bois.readObjectOverride();
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 2: IOException expected.");
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {}
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bois.close();
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readObject()
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readObject",
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readObjectMissingClasses() throws Exception {
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SerializationTest.verifySelf(new A1(), new SerializableAssert() {
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            public void assertDeserialized(Serializable initial,
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    Serializable deserialized) {
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                assertEquals(5, ((A1) deserialized).b1.i);
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        });
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readObject()
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readObject",
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readObjectCorrupt() {
794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] bytes = { 00, 00, 00, 0x64, 0x43, 0x48, (byte) 0xFD, 0x71, 00,
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                00, 0x0B, (byte) 0xB8, 0x4D, 0x65 };
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream bin = new ByteArrayInputStream(bytes);
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        boolean exception = false;
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ObjectInputStream in = new ObjectInputStream(bin);
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            in.readObject();
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected read of corrupted stream");
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (StreamCorruptedException e) {
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            exception = true;
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected: " + e);
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (ClassNotFoundException e) {
807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected: " + e);
808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Expected StreamCorruptedException", exception);
810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readStreamHeader()
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies readStreamHeader().",
818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readStreamHeader",
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readStreamHeader() throws IOException {
822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String testString = "Lorem ipsum";
823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BasicObjectInputStream bois;
824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        short magic = java.io.ObjectStreamConstants.STREAM_MAGIC;
825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        short version = java.io.ObjectStreamConstants.STREAM_VERSION;
826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] buffer = new byte[20];
827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Initialize the buffer with the correct header for object streams
829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fillStreamHeader(buffer);
830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        System.arraycopy(testString.getBytes(), 0, buffer, 4, testString.length());
831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test 1: readStreamHeader should not throw a StreamCorruptedException.
833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // It should get called by the ObjectInputStream constructor.
834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            readStreamHeaderCalled = false;
836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bois = new BasicObjectInputStream(new ByteArrayInputStream(buffer));
837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bois.close();
838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (StreamCorruptedException e) {
839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: Unexpected StreamCorruptedException.");
840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Test 1: readStreamHeader() has not been called.",
842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    readStreamHeaderCalled);
843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test 2: Make the stream magic number invalid and check that
845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // readStreamHeader() throws an exception.
846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buffer[0] = (byte)magic;
847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buffer[1] = (byte)(magic >> 8);
848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            readStreamHeaderCalled = false;
850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bois = new BasicObjectInputStream(new ByteArrayInputStream(buffer));
851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 2: StreamCorruptedException expected.");
852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bois.close();
853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (StreamCorruptedException e) {
854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Test 2: readStreamHeader() has not been called.",
856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    readStreamHeaderCalled);
857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test 3: Make the stream version invalid and check that
859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // readStreamHeader() throws an exception.
860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buffer[0] = (byte)(magic >> 8);
861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buffer[1] = (byte)magic;
862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buffer[2] = (byte)(version);
863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        buffer[3] = (byte)(version >> 8);
864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            readStreamHeaderCalled = false;
866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bois = new BasicObjectInputStream(new ByteArrayInputStream(buffer));
867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 3: StreamCorruptedException expected.");
868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bois.close();
869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (StreamCorruptedException e) {
870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertTrue("Test 3: readStreamHeader() has not been called.",
872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    readStreamHeaderCalled);
873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readUnsignedByte()
877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readUnsignedByte",
881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readUnsignedByte() throws IOException {
884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeByte(-1);
885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Test 1: Incorrect unsigned byte written or read.",
889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                255, ois.readUnsignedByte());
890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readUnsignedByte();
893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 2: EOFException expected.");
894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (EOFException e) {
895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readUnsignedByte();
901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 3: IOException expected.");
902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readUnsignedShort()
909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readUnsignedShort",
913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readUnsignedShort() throws IOException {
916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method int java.io.ObjectInputStream.readUnsignedShort()
917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeShort(-1);
918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Test 1: Incorrect unsigned short written or read.",
922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                65535, ois.readUnsignedShort());
923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readUnsignedShort();
926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 2: EOFException expected.");
927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (EOFException e) {
928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.readUnsignedShort();
934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 3: IOException expected.");
935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#resolveProxyClass(String[])
942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Verifies resolveProxyClass(String[]).",
946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "resolveProxyClass",
947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.String[].class}
948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_resolveProxyClass() throws IOException {
950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BasicObjectInputStream bois;
951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] buffer = new byte[10];
952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Initialize the buffer with the header for object streams
954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        fillStreamHeader(buffer);
955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bois = new BasicObjectInputStream(new ByteArrayInputStream(buffer));
956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test 1: Check that a NullPointerException is thrown
958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // if null is passed to the method.
959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bois.resolveProxyClass(null);
961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: NullPointerException expected.");
962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        catch (NullPointerException npe) {
964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        catch (ClassNotFoundException cnfe) {
966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: Unexpected ClassNotFoundException.");
967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test 2: Check that visible interfaces are found.
970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String[] interfaces = { "java.io.Closeable",
972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                    "java.lang.Cloneable" };
973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bois.resolveProxyClass(interfaces);
974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        catch (ClassNotFoundException cnfe) {
976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 2: Unexpected ClassNotFoundException.");
977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test 3: Check that a ClassNotFoundException is thrown if the
980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // array of interfaces is not valid.
981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String[] interfaces = { "java.io.Closeable",
983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                    "java.io.Closeable" };
984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            bois.resolveProxyClass(interfaces);
985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail ("Test 3: ClassNotFoundException expected.");
986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        catch (ClassNotFoundException cnfe) {
988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bois.close();
991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#skipBytes(int)
995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "skipBytes",
999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {int.class}
1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_skipBytesI() throws IOException {
1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Test for method int java.io.ObjectInputStream.skipBytes(int)
1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] buf = new byte[testLength];
1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeBytes(testString);
1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(new ByteArrayInputStream(bao.toByteArray()));
1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.skipBytes(5);
1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.read(buf, 0, 5);
1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals("Skipped incorrect bytes", testString.substring(5, 10),
1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new String(buf, 0, 5));
1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Regression for HARMONY-844
1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectInputStream() {}.skipBytes(0);
1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("NullPointerException expected.");
1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NullPointerException e) {
1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#skipBytes(int)
1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.PARTIAL_COMPLETE,
1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "Checks IOException.",
1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "skipBytes",
1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {int.class}
1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_skipBytesI_IOException() throws IOException {
1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(testString);
1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Support_ASimpleInputStream sis = new Support_ASimpleInputStream(bao.toByteArray());
1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStream(sis);
1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = true;
1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.skipBytes(5);
1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Test 1: IOException expected.");
1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // Expected.
1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        sis.throwExceptionOnNextUse = false;
1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // Regression Test for JIRA 2192
1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "readObject",
1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readObject_withPrimitiveClass() throws Exception {
1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Make sure that system properties are set correctly
1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        String dir = System.getProperty("java.io.tmpdir");
1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (dir == null)
1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new Exception("System property java.io.tmpdir not defined.");
1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        File file = new File(dir, "test.ser");
1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        file.deleteOnExit();
1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Test test = new Test();
1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                file));
1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.writeObject(test);
1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        out.close();
1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Test another = (Test) in.readObject();
1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        in.close();
1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(test, another);
1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class A implements Serializable {
1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private static final long serialVersionUID = 11L;
1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String name = "name";
1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class B extends A {}
1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class C extends B {
1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private static final long serialVersionUID = 33L;
1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class A1 implements Serializable {
1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        static final long serialVersionUID = 5942584913446079661L;
1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        B1 b1 = new B1();
1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        B1 b2 = b1;
1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Vector v = new Vector();
1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class B1 implements Serializable {
1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int i = 5;
1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Hashtable h = new Hashtable();
1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public class SerializableTestHelper implements Serializable {
1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String aField1;
1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String aField2;
1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SerializableTestHelper() {
1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            aField1 = null;
1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            aField2 = null;
1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SerializableTestHelper(String s, String t) {
1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            aField1 = s;
1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            aField2 = t;
1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private void readObject(ObjectInputStream ois) throws Exception {
1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // note aField2 is not read
1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ObjectInputStream.GetField fields = ois.readFields();
1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            aField1 = (String) fields.get("aField1", "Zap");
1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private void writeObject(ObjectOutputStream oos) throws IOException {
1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // note aField2 is not written
1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ObjectOutputStream.PutField fields = oos.putFields();
1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fields.put("aField1", aField1);
1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            oos.writeFields();
1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getText1() {
1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return aField1;
1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setText1(String s) {
1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            aField1 = s;
1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public String getText2() {
1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return aField2;
1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setText2(String s) {
1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            aField2 = s;
1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class BasicObjectInputStream extends ObjectInputStream {
1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public BasicObjectInputStream() throws IOException, SecurityException {
1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super();
1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public BasicObjectInputStream(InputStream input)
1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws StreamCorruptedException, IOException {
1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(input);
1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public boolean enableResolveObject(boolean enable)
1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws SecurityException {
1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.enableResolveObject(enable);
1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Object readObjectOverride() throws OptionalDataException,
1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ClassNotFoundException, IOException {
1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.readObjectOverride();
1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void readStreamHeader() throws IOException,
1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                StreamCorruptedException {
1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            readStreamHeaderCalled = true;
1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super.readStreamHeader();
1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public Class<?> resolveProxyClass(String[] interfaceNames)
1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws IOException, ClassNotFoundException {
1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.resolveProxyClass(interfaceNames);
1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    //Regression Test for JIRA-2249
1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class ObjectOutputStreamWithWriteDesc extends
1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ObjectOutputStream {
1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public ObjectOutputStreamWithWriteDesc(OutputStream os)
1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws IOException {
1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(os);
1191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void writeClassDescriptor(ObjectStreamClass desc)
1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws IOException {
1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class ObjectInputStreamWithReadDesc extends
1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ObjectInputStream {
1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private Class returnClass;
1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public ObjectInputStreamWithReadDesc(InputStream is, Class returnClass)
1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws IOException {
1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(is);
1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            this.returnClass = returnClass;
1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public ObjectStreamClass readClassDescriptor() throws IOException,
1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ClassNotFoundException {
1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ObjectStreamClass.lookup(returnClass);
1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static class TestClassForSerialization implements Serializable {
1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private static final long serialVersionUID = 1L;
1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // Regression Test for JIRA-2340
1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class ObjectOutputStreamWithWriteDesc1 extends
1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ObjectOutputStream {
1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public ObjectOutputStreamWithWriteDesc1(OutputStream os)
1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws IOException {
1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(os);
1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void writeClassDescriptor(ObjectStreamClass desc)
1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws IOException {
1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super.writeClassDescriptor(desc);
1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class ObjectInputStreamWithReadDesc1 extends
1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ObjectInputStream {
1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public ObjectInputStreamWithReadDesc1(InputStream is)
1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws IOException {
1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(is);
1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public ObjectStreamClass readClassDescriptor() throws IOException,
1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ClassNotFoundException {
1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.readClassDescriptor();
1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // Regression test for Harmony-1921
1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class ObjectInputStreamWithResolve extends ObjectInputStream {
1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public ObjectInputStreamWithResolve(InputStream in) throws IOException {
1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(in);
1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected Class<?> resolveClass(ObjectStreamClass desc)
1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throws IOException, ClassNotFoundException {
1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (desc.getName().equals(
1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    "org.apache.harmony.luni.tests.pkg1.TestClass")) {
1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return org.apache.harmony.luni.tests.pkg2.TestClass.class;
1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.resolveClass(desc);
1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.SUFFICIENT,
1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "No IOException testing since this seems not to be thrown.",
1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "resolveClass",
1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.ObjectStreamClass.class}
1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_resolveClass() throws Exception {
1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        org.apache.harmony.luni.tests.pkg1.TestClass to1 = new org.apache.harmony.luni.tests.pkg1.TestClass();
1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        to1.i = 555;
1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectOutputStream oos = new ObjectOutputStream(baos);
1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(to1);
1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.flush();
1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] bytes = baos.toByteArray();
1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectInputStream ois = new ObjectInputStreamWithResolve(bais);
1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        org.apache.harmony.luni.tests.pkg2.TestClass to2 = (org.apache.harmony.luni.tests.pkg2.TestClass) ois
1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                .readObject();
1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (to2.i != to1.i) {
1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Wrong object read. Expected val: " + to1.i + ", got: " + to2.i);
1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static class ObjectInputStreamWithResolveObject extends ObjectInputStream {
1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static Integer intObj = Integer.valueOf(1000);
1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public ObjectInputStreamWithResolveObject(InputStream in) throws IOException {
1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(in);
1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            enableResolveObject(true);
1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected Object resolveObject(Object obj) throws IOException {
1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if(obj instanceof Integer){
1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                obj = intObj;
1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.resolveObject(obj);
1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#resolveObject(Object)
1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "resolveObject",
1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.lang.Object.class}
1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_resolveObjectLjava_lang_Object() throws Exception {
1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Write an Integer object into memory
1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Integer original = new Integer(10);
1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectOutputStream oos = new ObjectOutputStream(baos);
1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeObject(original);
1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.flush();
1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Read the object from memory
1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] bytes = baos.toByteArray();
1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectInputStreamWithResolveObject ois =
1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new ObjectInputStreamWithResolveObject(bais);
1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Integer actual = (Integer) ois.readObject();
1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // object should be resolved from 10 to 1000
1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(ObjectInputStreamWithResolveObject.intObj, actual);
1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectInputStream#readClassDescriptor()
1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.io.ObjectOutputStream#writeClassDescriptor(ObjectStreamClass)
1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets(
1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            {
1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                @TestTargetNew(
1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        method = "readClassDescriptor",
1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        args = {},
1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        level = TestLevel.PARTIAL_COMPLETE
1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                ),
1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                @TestTargetNew(
1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    method = "writeClassDescriptor",
1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    args = {ObjectStreamClass.class},
1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    clazz = ObjectOutputStream.class,
1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    level = TestLevel.COMPLETE
1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project              )
1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_readClassDescriptor() throws IOException,
1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ClassNotFoundException {
1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectOutputStreamWithWriteDesc1 oos = new ObjectOutputStreamWithWriteDesc1(
1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                baos);
1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectStreamClass desc = ObjectStreamClass
1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        .lookup(TestClassForSerialization.class);
1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.writeClassDescriptor(desc);
1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos.close();
1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        byte[] bytes = baos.toByteArray();
1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectInputStreamWithReadDesc1 ois = new ObjectInputStreamWithReadDesc1(
1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                bais);
1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Object obj = ois.readClassDescriptor();
1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois.close();
1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        assertEquals(desc.getClass(), obj.getClass());
1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //eof
1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bais = new ByteArrayInputStream(bytes);
1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ExceptionalBufferedInputStream bis = new ExceptionalBufferedInputStream(
1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                bais);
1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStreamWithReadDesc1(bis);
1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bis.setEOF(true);
1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            obj = ois.readClassDescriptor();
1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //e.printStackTrace();
1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.close();
1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //throw exception
1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bais = new ByteArrayInputStream(bytes);
1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bis = new ExceptionalBufferedInputStream(bais);
1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStreamWithReadDesc1(bis);
1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bis.setException(new IOException());
1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            obj = ois.readClassDescriptor();
1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //e.printStackTrace();
1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.close();
1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //corrupt
1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bais = new ByteArrayInputStream(bytes);
1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bis = new ExceptionalBufferedInputStream(bais);
1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ois = new ObjectInputStreamWithReadDesc1(bis);
1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        bis.setCorrupt(true);
1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            obj = ois.readClassDescriptor();
1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (IOException e) {
1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            //e.printStackTrace();
1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } finally {
1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.close();
1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    static class ExceptionalBufferedInputStream extends BufferedInputStream {
1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private boolean eof = false;
1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private IOException exception = null;
1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        private boolean corrupt = false;
1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public ExceptionalBufferedInputStream(InputStream in) {
1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(in);
1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public int read() throws IOException {
1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (exception != null) {
1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw exception;
1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (eof) {
1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return -1;
1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (corrupt) {
1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return 0;
1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return super.read();
1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setEOF(boolean eof) {
1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            this.eof = eof;
1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setException(IOException exception) {
1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            this.exception = exception;
1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public void setCorrupt(boolean corrupt) {
1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            this.corrupt = corrupt;
1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    // Regression Test for Harmony-2402
1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "registerValidation",
1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {java.io.ObjectInputValidation.class, int.class}
1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_registerValidation() throws Exception {
1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new ObjectOutputStream(baos);
1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ObjectInputStream ois = new ObjectInputStream(
1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                new ByteArrayInputStream(baos.toByteArray()));
1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ois.registerValidation(null, 256);
1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("NotActiveException should be thrown");
1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (NotActiveException nae) {
1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // expected
1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected void setUp() throws Exception {
1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super.setUp();
1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        oos = new ObjectOutputStream(bao = new ByteArrayOutputStream());
1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectclass Test implements Serializable {
1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static final long serialVersionUID = 1L;
1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    Class<?> classes[] = new Class[] { byte.class, short.class, int.class,
1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            long.class, boolean.class, char.class, float.class, double.class };
1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public boolean equals(Object o) {
1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!(o instanceof Test)) {
1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return false;
1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return Arrays.equals(classes, ((Test) o).classes);
1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
1498