1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.io;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.Externalizable;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectInput;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectOutput;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectStreamClass;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectStreamField;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.Serializable;
28747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughesimport java.net.URL;
29747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughesimport java.net.URLClassLoader;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.lang.reflect.Proxy;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class ObjectStreamClassTest extends TestCase {
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class DummyClass implements Serializable {
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private static final long serialVersionUID = 999999999999999L;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        long bam = 999L;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int ham = 9999;
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public static long getUID() {
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			return serialVersionUID;
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
47747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.ObjectStreamClass#forClass()
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_forClass() {
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Need to test during serialization to be sure an instance is
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // returned
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("forClass returned an object: " + osc.forClass(),
56747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes                DummyClass.class, osc.forClass());
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.ObjectStreamClass#getField(java.lang.String)
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getFieldLjava_lang_String() {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("getField did not return correct field", 'J', osc
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getField("bam").getTypeCode());
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("getField did not null for non-existent field", osc
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getField("wham"));
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.ObjectStreamClass#getFields()
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getFields() {
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamField[] osfArray = osc.getFields();
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "Array of fields should be of length 2 but is instead of length: "
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + osfArray.length, osfArray.length == 2);
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.ObjectStreamClass#getName()
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getName() {
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "getName returned incorrect name: " + osc.getName(),
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "org.apache.harmony.luni.tests.java.io.ObjectStreamClassTest$DummyClass",
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                osc.getName());
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.ObjectStreamClass#getSerialVersionUID()
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getSerialVersionUID() {
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("getSerialversionUID returned incorrect uid: "
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + osc.getSerialVersionUID() + " instead of "
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + DummyClass.getUID(), osc.getSerialVersionUID() == DummyClass
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getUID());
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class SyntheticTest implements Serializable {
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private int i;
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private class X implements Serializable {
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public int get() {
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return i;
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public X foo() {
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return new X();
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getSerialVersionUID_inner_private_class() {
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc1 = ObjectStreamClass.lookup(SyntheticTest.class);
119747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes        assertEquals(-4332969662791850406L, osc1.getSerialVersionUID());
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
121747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes        ObjectStreamClass osc2 = ObjectStreamClass.lookup(SyntheticTest.X.class);
122747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes        assertEquals(-3926212872029449440L, osc2.getSerialVersionUID());
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.ObjectStreamClass#getSerialVersionUID()
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getSerialVersionUID_classloader() throws Exception {
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File file = new File(
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "resources/org/apache/harmony/luni/tests/ObjectStreamClassTest.jar");
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ClassLoader loader = new URLClassLoader(new URL[] { file.toURL() },
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null);
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class cl1 = Class.forName("Test1$TestVarArgs", false, loader);
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc1 = ObjectStreamClass.lookup(cl1);
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Test1$TestVarArgs unexpected UID: "
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + osc1.getSerialVersionUID(), -6051121963037986215L, osc1
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getSerialVersionUID());
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class cl2 = Class.forName("Test1$TestBridge", false, loader);
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc2 = ObjectStreamClass.lookup(cl2);
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Test1$TestBridge unexpected UID: "
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                + osc2.getSerialVersionUID(), 568585976855071180L, osc2
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getSerialVersionUID());
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.ObjectStreamClass#lookup(java.lang.Class)
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_lookupLjava_lang_Class() {
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "lookup returned wrong class: " + osc.getName(),
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "org.apache.harmony.luni.tests.java.io.ObjectStreamClassTest$DummyClass",
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                osc.getName());
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.ObjectStreamClass#toString()
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_toString() {
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc = ObjectStreamClass.lookup(DummyClass.class);
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String oscString = osc.toString();
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // The previous test was more specific than the spec so it was replaced
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // with the test below
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("toString returned incorrect string: " + osc.toString(),
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oscString.indexOf("serialVersionUID") >= 0
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        && oscString.indexOf("999999999999999L") >= 0);
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerialization() {
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc = ObjectStreamClass
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .lookup(ObjectStreamClass.class);
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, osc.getFields().length);
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_specialTypes() {
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Class<?> proxyClass = Proxy.getProxyClass(this.getClass()
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getClassLoader(), new Class[] { Runnable.class });
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass proxyStreamClass = ObjectStreamClass
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .lookup(proxyClass);
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Proxy classes should have zero serialVersionUID", 0,
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proxyStreamClass.getSerialVersionUID());
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamField[] proxyFields = proxyStreamClass.getFields();
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Proxy classes should have no serialized fields", 0,
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                proxyFields.length);
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass enumStreamClass = ObjectStreamClass
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .lookup(Thread.State.class);
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Enum classes should have zero serialVersionUID", 0,
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                enumStreamClass.getSerialVersionUID());
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamField[] enumFields = enumStreamClass.getFields();
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Enum classes should have no serialized fields", 0,
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                enumFields.length);
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
199747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
201747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes     * @since 1.6
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class NonSerialzableClass {
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private static final long serialVersionUID = 1l;
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static long getUID() {
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return serialVersionUID;
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
209747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class ExternalizableClass implements Externalizable {
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private static final long serialVersionUID = -4285635779249689129L;
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void readExternal(ObjectInput input) throws IOException, ClassNotFoundException {
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw new ClassNotFoundException();
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void writeExternal(ObjectOutput output) throws IOException {
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw new IOException();
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
224747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
226747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.ObjectStreamClass#lookupAny(java.lang.Class)
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @since 1.6
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_lookupAnyLjava_lang_Class() {
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Test for method java.io.ObjectStreamClass
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // java.io.ObjectStreamClass.lookupAny(java.lang.Class)
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectStreamClass osc = ObjectStreamClass.lookupAny(DummyClass.class);
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("lookup returned wrong class: " + osc.getName(),
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "org.apache.harmony.luni.tests.java.io.ObjectStreamClassTest$DummyClass", osc
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getName());
238747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osc = ObjectStreamClass.lookupAny(NonSerialzableClass.class);
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("lookup returned wrong class: " + osc.getName(),
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "org.apache.harmony.luni.tests.java.io.ObjectStreamClassTest$NonSerialzableClass",
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                osc.getName());
243747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes
244747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes        osc = ObjectStreamClass.lookupAny(ExternalizableClass.class);
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("lookup returned wrong class: " + osc.getName(),
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "org.apache.harmony.luni.tests.java.io.ObjectStreamClassTest$ExternalizableClass",
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                osc.getName());
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        osc = ObjectStreamClass.lookup(NonSerialzableClass.class);
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(osc);
251747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
253747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes
254747d4cd5e39da3be38ec1d2da9fb7403006ed7c4Elliott Hughes
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
256