OldClassTest.java revision 67a368573213811c0037cb1b972a0d5fdb3eaf48
18bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson/*
28bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  contributor license agreements.  See the NOTICE file distributed with
38bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  this work for additional information regarding copyright ownership.
48bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  The ASF licenses this file to You under the Apache License, Version 2.0
58bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  (the "License"); you may not use this file except in compliance with
68bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  the License.  You may obtain a copy of the License at
78bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *
88bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
98bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *
108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  Unless required by applicable law or agreed to in writing, software
118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  distributed under the License is distributed on an "AS IS" BASIS,
128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  See the License for the specific language governing permissions and
148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson *  limitations under the License.
158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson */
168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonpackage libcore.java.lang;
188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.io.File;
208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.io.IOException;
218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.io.InputStream;
228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.io.Serializable;
238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.lang.annotation.Annotation;
248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.lang.annotation.Retention;
258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.lang.annotation.RetentionPolicy;
268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.lang.reflect.Constructor;
278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.lang.reflect.Field;
288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.lang.reflect.Method;
298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.lang.reflect.ParameterizedType;
308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.lang.reflect.Type;
318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.lang.reflect.TypeVariable;
328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.net.URL;
338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.net.URLClassLoader;
348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.util.AbstractList;
358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.util.Collection;
368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.util.List;
378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport java.util.Vector;
388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport tests.support.Support_ClassLoader;
398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonimport tests.support.resource.Support_Resources;
408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson@SuppressWarnings("deprecation")
428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilsonpublic class OldClassTest extends junit.framework.TestCase {
438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public static final String FILENAME =
458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        OldClassTest.class.getPackage().getName().replace('.', '/') +
468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        "/test#.properties";
478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    final String packageName = getClass().getPackage().getName();
498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    final String classNameInitError1 = packageName + ".TestClass1";
508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    final String classNameInitError2 = packageName + ".TestClass1B";
518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    final String classNameLinkageError = packageName + ".TestClass";
528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    final String sourceJARfile = "illegalClasses.jar";
538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    final String illegalClassName = "illegalClass";
548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    @Retention(RetentionPolicy.RUNTIME)
568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public @interface TestAnnotation {
578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        String value();
588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public static class TestClass1C {
618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        static TestClass2 tc = new TestClass2(0);
628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        TestClass1C() {
648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public static class TestClass2 {
698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public TestClass2(int i) throws IllegalArgumentException {
718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            throw new IllegalArgumentException();
728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public static class TestClass3 {
768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        private TestClass3() {}
778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    interface TestInterface {
808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public static int TEST_INTERFACE_FIELD = 0;
818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        int getCount();
838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        void setCount(int value);
848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    static class StaticMember$Class {
878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        class Member2$A {
888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    class Member$Class {
928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        class Member3$B {
938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    @Deprecated
978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    @TestAnnotation("libcore.java.lang.OldClassTest$ExtendTestClass")
988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public static class ExtendTestClass extends PublicTestClass {
998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        private static final long serialVersionUID = 1L;
1018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public enum enumExm {ONE, TWO, THREE};
1038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        @Override
1048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public void setCount(int value) {
1058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public class ExtendTestClass1 extends ExtendTestClass {
1108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    @TestAnnotation("libcore.java.lang.OldClassTest$PublicTestClass")
1148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public static class PublicTestClass implements TestInterface, Serializable, Cloneable {
1158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        private static final long serialVersionUID = 1L;
1178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public static String TEST_FIELD = "test field";
1198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Object clazz;
1218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public PublicTestClass() {
1238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            class LocalClass { }
1248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            clazz = new LocalClass();
1268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public Object getLocalClass() {
1298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            class LocalClass {}
1308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Object returnedObject = new LocalClass();
1318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            return returnedObject;
1328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        int count = 0;
1358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int getCount() {
1378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            return count;
1388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public void setCount(int value) {
1418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            count = value;
1428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        private class PrivateClass1 {
1458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            public String toString() {
1478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                return "PrivateClass0";
1488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
1498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public class PrivateClass2 {
1528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            public String toString() {
1548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                return "PrivateClass1";
1558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
1568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public static class TestClass {
1608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        @SuppressWarnings("unused")
1618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        private int privField = 1;
1628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int pubField = 2;
1648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        private Object cValue = null;
1668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public Object ack = new Object();
1688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        @SuppressWarnings("unused")
1708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        private int privMethod() {
1718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            return 1;
1728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int pubMethod() {
1758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            return 2;
1768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public Object cValue() {
1798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            return cValue;
1808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public TestClass() {
1838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        @SuppressWarnings("unused")
1868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        private TestClass(Object o) {
1878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
1888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public static class SubTestClass extends TestClass {
1918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    interface Intf1 {
1948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int field1 = 1;
1958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int field2 = 1;
1968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        void test();
1978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
1988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
1998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    interface Intf2 {
2008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int field1 = 1;
2018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        void test();
2028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    interface Intf3 extends Intf1 {
2058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int field1 = 1;
2068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    interface Intf4 extends Intf1, Intf2 {
2098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int field1 = 1;
2108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        void test2(int a, Object b);
2118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    interface Intf5 extends Intf1 {
2148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    class Cls1 implements Intf2 {
2178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int field1 = 2;
2188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int field2 = 2;
2198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public void test() {
2208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    class Cls2 extends Cls1 implements Intf1 {
2248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public int field1 = 2;
2258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        @Override
2268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public void test() {
2278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    class Cls3 implements Intf3, Intf4 {
2318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public void test() {
2328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        public void test2(int a, Object b) {
2348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    static class Cls4 {
2388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getAnnotations() {
2428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      Annotation [] annotations = PublicTestClass.class.getAnnotations();
2438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertEquals(1, annotations.length);
2448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertEquals(TestAnnotation.class, annotations[0].annotationType());
2458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      annotations = ExtendTestClass.class.getAnnotations();
2478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertEquals(2, annotations.length);
2488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      for(int i = 0; i < annotations.length; i++) {
2508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          Class<? extends Annotation> type = annotations[i].annotationType();
2518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          assertTrue("Annotation's type " + i + ": " + type,
2528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson              type.equals(Deprecated.class) ||
2538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson              type.equals(TestAnnotation.class));
2548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      }
2558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
2568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_forNameLjava_lang_StringLbooleanLClassLoader() throws Exception {
2588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        ClassLoader pcl = getClass().getClassLoader();
2608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class<?> [] classes = {PublicTestClass.class, ExtendTestClass.class,
2628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                ExtendTestClass1.class, TestInterface.class, String.class};
2638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for(int i = 0; i < classes.length; i++) {
2658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Class<?> clazz = Class.forName(classes[i].getName(), true, pcl);
2668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertEquals(classes[i], clazz);
2678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            clazz = Class.forName(classes[i].getName(), false, pcl);
2698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertEquals(classes[i], clazz);
2708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class<?> [] systemClasses = {String.class, Integer.class, Object.class,
2738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Object[].class};
2748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for(int i = 0; i < systemClasses.length; i++) {
2768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Class<?> clazz = Class.forName(systemClasses[i].getName(), true,
2778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                                            ClassLoader.getSystemClassLoader());
2788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertEquals(systemClasses[i], clazz);
2798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            clazz = Class.forName(systemClasses[i].getName(), false,
2818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                                            ClassLoader.getSystemClassLoader());
2828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertEquals(systemClasses[i], clazz);
2838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try  {
2868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Class.forName(null, true, pcl);
2878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
2888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException  npe) {
2898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
2908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
2938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Class.forName("NotExistClass", true, pcl);
2948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ClassNotFoundException is not thrown for non existent class.");
2958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ClassNotFoundException cnfe) {
2968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
2978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
2988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
2998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Class.forName("String", false, pcl);
3018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ClassNotFoundException is not thrown for non existent class.");
3028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ClassNotFoundException cnfe) {
3038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
3048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Class.forName("libcore.java.lang.NonexistentClass", false, pcl);
3088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ClassNotFoundException is not thrown for non existent class.");
3098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ClassNotFoundException cnfe) {
3108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
3118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    // AndroidOnly: Class.forName method throws ClassNotFoundException on Android.
3158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_forNameLjava_lang_StringLbooleanLClassLoader_AndroidOnly() throws Exception {
3168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // Android doesn't support loading class files from a jar.
3188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            URL url = getClass().getClassLoader().getResource(
3218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    packageName.replace(".", "/") + "/" + sourceJARfile);
3228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            ClassLoader loader = new URLClassLoader(new URL[] { url },
3248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    getClass().getClassLoader());
3258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            try {
3268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Class.forName(classNameLinkageError, true, loader);
3278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                fail("LinkageError or ClassNotFoundException expected.");
3288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            } catch (java.lang.LinkageError le) {
3298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                // Expected for the RI.
3308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            } catch (java.lang.ClassNotFoundException ce) {
3318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                // Expected for Android.
3328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
3338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(Exception e) {
3348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("Unexpected exception was thrown: " + e.toString());
3358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Class.forName(classNameInitError2,
3398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    true, getClass().getClassLoader());
3408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ExceptionInInitializerError or ClassNotFoundException " +
3418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            "should be thrown.");
3428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch (java.lang.ExceptionInInitializerError ie) {
3438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // Expected for the RI.
3448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        // Remove this comment to let the test pass on Android.
3458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch (java.lang.ClassNotFoundException ce) {
3468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // Expected for Android.
3478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getAnnotation() {
3518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      TestAnnotation target = PublicTestClass.class.getAnnotation(TestAnnotation.class);
3528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertEquals(target.value(), PublicTestClass.class.getName());
3538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertNull(PublicTestClass.class.getAnnotation(Deprecated.class));
3558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      Deprecated target2 = ExtendTestClass.class.getAnnotation(Deprecated.class);
3578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertNotNull(target2);
3588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getDeclaredAnnotations() {
3618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Annotation [] annotations = PublicTestClass.class.getDeclaredAnnotations();
3628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(1, annotations.length);
3638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        annotations = ExtendTestClass.class.getDeclaredAnnotations();
3658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(2, annotations.length);
3668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        annotations = TestInterface.class.getDeclaredAnnotations();
3688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, annotations.length);
3698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        annotations = String.class.getDeclaredAnnotations();
3718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, annotations.length);
3728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getEnclosingClass() {
3758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class clazz = OldClassTest.class.getEnclosingClass();
3768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(clazz);
3778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(getClass(), Cls1.class.getEnclosingClass());
3798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(getClass(), Intf1.class.getEnclosingClass());
3808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(getClass(), Cls4.class.getEnclosingClass());
3818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getEnclosingMethod() {
3848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Method clazz = ExtendTestClass.class.getEnclosingMethod();
3858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(clazz);
3868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        PublicTestClass ptc = new PublicTestClass();
3888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
3898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertEquals("getEnclosingMethod returns incorrect method.",
3908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    PublicTestClass.class.getMethod("getLocalClass",
3918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                            (Class []) null),
3928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    ptc.getLocalClass().getClass().getEnclosingMethod());
3938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NoSuchMethodException nsme) {
3948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NoSuchMethodException was thrown.");
3958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
3968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
3978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
3988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getEnclosingConstructor() {
3998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        PublicTestClass ptc = new PublicTestClass();
4018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("getEnclosingConstructor method returns incorrect class.",
4038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                PublicTestClass.class.getConstructors()[0],
4048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                ptc.clazz.getClass().getEnclosingConstructor());
4058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull("getEnclosingConstructor should return null for local " +
4078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "class declared in method.",
4088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                ptc.getLocalClass().getClass().getEnclosingConstructor());
4098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull("getEnclosingConstructor should return null for local " +
4118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "class declared in method.",
4128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                ExtendTestClass.class.getEnclosingConstructor());
4138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
4148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getEnumConstants() {
4178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Object [] clazz = ExtendTestClass.class.getEnumConstants();
4188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(clazz);
4198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Object [] constants = TestEnum.class.getEnumConstants();
4208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(TestEnum.values().length, constants.length);
4218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for(int i = 0; i < constants.length; i++) {
4228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertEquals(TestEnum.values()[i], constants[i]);
4238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
4248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, TestEmptyEnum.class.getEnumConstants().length);
4258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
4268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public enum TestEnum {
4278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        ONE, TWO, THREE
4288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
4298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public enum TestEmptyEnum {
4308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
4318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getGenericInterfaces() {
4338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Type [] types = ExtendTestClass1.class.getGenericInterfaces();
4348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, types.length);
4358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class [] interfaces = {TestInterface.class, Serializable.class,
4378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                               Cloneable.class};
4388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        types = PublicTestClass.class.getGenericInterfaces();
4398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(interfaces.length, types.length);
4408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for(int i = 0; i < types.length; i++) {
4418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertEquals(interfaces[i], types[i]);
4428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
4438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        types = TestInterface.class.getGenericInterfaces();
4458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, types.length);
4468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        types = List.class.getGenericInterfaces();
4488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(1, types.length);
4498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(Collection.class, ((ParameterizedType)types[0]).getRawType());
4508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, int.class.getGenericInterfaces().length);
4528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, void.class.getGenericInterfaces().length);
4538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
4548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getGenericSuperclass () {
4568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(PublicTestClass.class,
4578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                                  ExtendTestClass.class.getGenericSuperclass());
4588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(ExtendTestClass.class,
4598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                ExtendTestClass1.class.getGenericSuperclass());
4608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(Object.class, PublicTestClass.class.getGenericSuperclass());
4618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(Object.class, String.class.getGenericSuperclass());
4628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(null, TestInterface.class.getGenericSuperclass());
4638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        ParameterizedType type = (ParameterizedType) Vector.class.getGenericSuperclass();
4658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(AbstractList.class, type.getRawType());
4668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
4678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    // AndroidOnly: Uses dalvik.system.PathClassLoader.
4698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    // Different behavior between cts host and run-core-test")
4708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getPackage() {
4718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      Package thisPackage = getClass().getPackage();
4738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertEquals("libcore.java.lang",
4748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                      thisPackage.getName());
4758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      Package stringPackage = String.class.getPackage();
4778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertNotNull("java.lang", stringPackage.getName());
4788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      String hyts_package_name = "hyts_package_dex.jar";
4808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      File resources = Support_Resources.createTempFolder();
4818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      Support_Resources.copyFile(resources, "Package", hyts_package_name);
4828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      String resPath = resources.toString();
4848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\')
4858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          resPath = resPath.substring(1);
4868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      try {
4888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          URL resourceURL = new URL("file:/" + resPath + "/Package/"
4908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                  + hyts_package_name);
4918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          ClassLoader cl = Support_ClassLoader.getInstance(resourceURL,
4938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                  getClass().getClassLoader());
4948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          Class clazz = cl.loadClass("C");
4968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          assertNull("getPackage for C.class should return null",
4978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                  clazz.getPackage());
4988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
4998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          clazz = cl.loadClass("a.b.C");
5008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          Package cPackage = clazz.getPackage();
5018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          assertNotNull("getPackage for a.b.C.class should not return null",
5028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                  cPackage);
5038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        /*
5058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         * URLClassLoader doesn't work on Android for jar files
5068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         *
5078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         * URL url = getClass().getClassLoader().getResource(
5088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         *         packageName.replace(".", "/") + "/" + sourceJARfile);
5098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         *
5108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         * ClassLoader loader = new URLClassLoader(new URL[] { url }, null);
5118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         *
5128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         * try {
5138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         *     Class<?> clazz = loader.loadClass(illegalClassName);
5148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         *     Package pack = clazz.getPackage();
5158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         *     assertNull(pack);
5168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         * } catch(ClassNotFoundException cne) {
5178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         *     fail("ClassNotFoundException was thrown for " + illegalClassName);
5188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson         * }
5198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        */
5208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      } catch(Exception e) {
5218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          fail("Unexpected exception was thrown: " + e.toString());
5228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      }
5238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getSigners() {
5268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(void.class.getSigners());
5278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(PublicTestClass.class.getSigners());
5288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getSimpleName() {
5318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("PublicTestClass", PublicTestClass.class.getSimpleName());
5328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("void", void.class.getSimpleName());
5338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("int[]", int[].class.getSimpleName());
5348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getTypeParameters() {
5378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, PublicTestClass.class.getTypeParameters().length);
5388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        TypeVariable [] tv = TempTestClass1.class.getTypeParameters();
5398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(1, tv.length);
5408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(Object.class, tv[0].getBounds()[0]);
5418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        TempTestClass2<String> tc = new TempTestClass2<String>();
5438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        tv = tc.getClass().getTypeParameters();
5448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(1, tv.length);
5458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(String.class, tv[0].getBounds()[0]);
5468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    class TempTestClass1<T> {
5498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    class TempTestClass2<S extends String> extends TempTestClass1<S> {
5528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_isAnnotation() {
5558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue(Deprecated.class.isAnnotation());
5568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue(TestAnnotation.class.isAnnotation());
5578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse(PublicTestClass.class.isAnnotation());
5588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse(String.class.isAnnotation());
5598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson     public void test_isAnnotationPresent() {
5628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue(PublicTestClass.class.isAnnotationPresent(TestAnnotation.class));
5638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse(ExtendTestClass1.class.isAnnotationPresent(TestAnnotation.class));
5648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse(String.class.isAnnotationPresent(Deprecated.class));
5658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue(ExtendTestClass.class.isAnnotationPresent(TestAnnotation.class));
5668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue(ExtendTestClass.class.isAnnotationPresent(Deprecated.class));
5678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson     }
5688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_isAnonymousClass() {
5708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse(PublicTestClass.class.isAnonymousClass());
5718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue((new Thread() {}).getClass().isAnonymousClass());
5728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_isEnum() {
5758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertFalse(PublicTestClass.class.isEnum());
5768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertFalse(ExtendTestClass.class.isEnum());
5778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertTrue(TestEnum.ONE.getClass().isEnum());
5788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertTrue(TestEnum.class.isEnum());
5798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_isLocalClass() {
5828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse(ExtendTestClass.class.isLocalClass());
5838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse(TestInterface.class.isLocalClass());
5848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse(TestEnum.class.isLocalClass());
5858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        class InternalClass {}
5868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue(InternalClass.class.isLocalClass());
5878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_isMemberClass() {
5908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse(OldClassTest.class.isMemberClass());
5918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse(String.class.isMemberClass());
5928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue(TestEnum.class.isMemberClass());
5938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue(StaticMember$Class.class.isMemberClass());
5948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
5958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
5968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_isSynthetic() {
5978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertFalse("Returned true for non synthetic class.",
5988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson              ExtendTestClass.class.isSynthetic());
5998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertFalse("Returned true for non synthetic class.",
6008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson              TestInterface.class.isSynthetic());
6018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      assertFalse("Returned true for non synthetic class.",
6028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson              String.class.isSynthetic());
6038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
6048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getCanonicalName() {
6068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class [] classArray = { int.class, int[].class, String.class,
6078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                                PublicTestClass.class, TestInterface.class,
6088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                                ExtendTestClass.class };
6098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        String [] classNames = {"int", "int[]", "java.lang.String",
6108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                      "libcore.java.lang.OldClassTest.PublicTestClass",
6118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                        "libcore.java.lang.OldClassTest.TestInterface",
6128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                     "libcore.java.lang.OldClassTest.ExtendTestClass"};
6138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for(int i = 0; i < classArray.length; i++) {
6158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            assertEquals(classNames[i], classArray[i].getCanonicalName());
6168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
6178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
6188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getClassLoader() {
6208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(ExtendTestClass.class.getClassLoader(),
6218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                         PublicTestClass.class.getClassLoader());
6228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(int.class.getClassLoader());
6248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(void.class.getClassLoader());
6258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
6268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getClasses() {
6288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Incorrect class array returned",
6298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                     11, OldClassTest.class.getClasses().length);
6308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
6318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getDeclaredClasses() {
6338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class [] declClasses = Object.class.getDeclaredClasses();
6348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Incorrect length of declared classes array is returned " +
6358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "for Object.", 0, declClasses.length);
6368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        declClasses = PublicTestClass.class.getDeclaredClasses();
6388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(2, declClasses.length);
6398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, int.class.getDeclaredClasses().length);
6418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, void.class.getDeclaredClasses().length);
6428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for(int i = 0; i < declClasses.length; i++) {
6448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Constructor<?> constr = declClasses[i].getDeclaredConstructors()[0];
6458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            constr.setAccessible(true);
6468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            PublicTestClass publicClazz = new PublicTestClass();
6478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            try {
6488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Object o = constr.newInstance(publicClazz);
6498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                assertTrue("Returned incorrect class: " + o.toString(),
6508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                        o.toString().startsWith("PrivateClass"));
6518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            } catch(Exception e) {
6528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                fail("Unexpected exception was thrown: " + e.toString());
6538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
6548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
6558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        declClasses = TestInterface.class.getDeclaredClasses();
6578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, declClasses.length);
6588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
6598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getDeclaredConstructor$Ljava_lang_Class() throws Exception {
6618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
6628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            TestClass.class.getDeclaredConstructor(String.class);
6638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NoSuchMethodException should be thrown.");
6648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NoSuchMethodException nsme) {
6658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
6668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
6678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
6688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getDeclaredFieldLjava_lang_String() throws Exception {
6708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
6718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            TestClass.class.getDeclaredField(null);
6728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
6738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
6748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
6758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
6768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
6788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            TestClass.class.getDeclaredField("NonExistentField");
6798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NoSuchFieldException is not thrown.");
6808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NoSuchFieldException nsfe) {
6818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
6828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
6838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
6848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getDeclaredMethodLjava_lang_String$Ljava_lang_Class() throws Exception {
6868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
6878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            TestClass.class.getDeclaredMethod(null, new Class[0]);
6888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
6898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
6908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
6918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
6928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
6938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
6948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            TestClass.class.getDeclaredMethod("NonExistentMethod", new Class[0]);
6958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NoSuchMethodException is not thrown.");
6968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NoSuchMethodException nsme) {
6978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
6988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
6998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
7008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getMethodLjava_lang_String$Ljava_lang_Class() throws Exception {
7028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Method m = ExtendTestClass1.class.getMethod("getCount", new Class[0]);
7038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Returned incorrect method", 0, ((Integer) (m.invoke(new ExtendTestClass1())))
7048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                .intValue());
7058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
7078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            m = TestClass.class.getMethod("init", new Class[0]);
7088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("Failed to throw exception accessing to init method");
7098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch (NoSuchMethodException e) {
7108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // Correct
7118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            return;
7128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
7138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
7158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            TestClass.class.getMethod("pubMethod", new Class[0]);
7168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
7178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
7188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
7198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
7208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
7218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getDeclaringClass() {
7238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(OldClassTest.class.getDeclaringClass());
7248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNotNull(PublicTestClass.class.getDeclaringClass());
7258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
7268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getFieldLjava_lang_String() throws Exception {
7288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Field f = TestClass.class.getField("pubField");
7298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Returned incorrect field", 2, f.getInt(new TestClass()));
7308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        f = PublicTestClass.class.getField("TEST_FIELD");
7328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Returned incorrect field", "test field",
7338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                f.get(new PublicTestClass()));
7348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        f = PublicTestClass.class.getField("TEST_INTERFACE_FIELD");
7368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Returned incorrect field", 0,
7378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                f.getInt(new PublicTestClass()));
7388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
7408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            TestClass.class.getField(null);
7418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is thrown.");
7428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
7438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
7448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
7458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
7468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getFields2() throws Exception {
7488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Field[] f;
7498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Field expected = null;
7508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        f = PublicTestClass.class.getFields();
7528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Test 1: Incorrect number of fields;", 2, f.length);
7538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        f = Cls2.class.getFields();
7558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Test 2: Incorrect number of fields;", 6, f.length);
7568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        f = Cls3.class.getFields();
7588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Test 2: Incorrect number of fields;", 5, f.length);
7598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for (Field field : f) {
7618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            if (field.toString().equals("public static final int "
7628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    + "libcore.java.lang.OldClassTest$Intf3.field1")) {
7638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                expected = field;
7648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                break;
7658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
7668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
7678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        if (expected == null) {
7688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("Test 3: getFields() did not return all fields.");
7698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
7708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Test 4: Incorrect field;", expected,
7718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Cls3.class.getField("field1"));
7728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        expected = null;
7748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for (Field field : f) {
7758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            if(field.toString().equals("public static final int " +
7768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    "libcore.java.lang.OldClassTest$Intf1.field2")) {
7778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                expected = field;
7788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                break;
7798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
7808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
7818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        if (expected == null) {
7828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("Test 5: getFields() did not return all fields.");
7838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
7848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Test 6: Incorrect field;", expected,
7858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Cls3.class.getField("field2"));
7868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
7878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
7888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getFields() throws Exception {
7898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Field expected = null;
7908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Field[] fields = Cls2.class.getFields();
7918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for (Field field : fields) {
7928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            if(field.toString().equals("public int libcore.java.lang.OldClassTest$Cls2.field1")) {
7938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                expected = field;
7948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                break;
7958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
7968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
7978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        if (expected == null) {
7988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("getFields() did not return all fields");
7998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
8008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(expected, Cls2.class.getField("field1"));
8018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
8028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getInterfaces() {
8048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class [] interfaces1 = Cls1.class.getInterfaces();
8058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(1, interfaces1.length);
8068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(Intf2.class, interfaces1[0]);
8078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class [] interfaces2 = Cls2.class.getInterfaces();
8098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(1, interfaces2.length);
8108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(Intf1.class, interfaces2[0]);
8118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class [] interfaces3 = Cls3.class.getInterfaces();
8138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(2, interfaces3.length);
8148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(Intf3.class, interfaces3[0]);
8158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(Intf4.class, interfaces3[1]);
8168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class [] interfaces4 = Cls4.class.getInterfaces();
8188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(0, interfaces4.length);
8198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
8208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getMethods() throws Exception {
8228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Incorrect number of methods", 10,
8238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Cls2.class.getMethods().length);
8248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Incorrect number of methods", 11,
8258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Cls3.class.getMethods().length);
8268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Method expected = null;
8288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Method[] methods = Cls2.class.getMethods();
8298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for (Method method : methods) {
8308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            if(method.toString().equals("public void libcore.java.lang.OldClassTest$Cls2.test()")) {
8318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                expected = method;
8328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                break;
8338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
8348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
8358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        if (expected == null) {
8368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("getMethods() did not return all methods");
8378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
8388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(expected, Cls2.class.getMethod("test"));
8398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        expected = null;
8418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        methods = Cls3.class.getMethods();
8428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for (Method method : methods) {
8438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            if(method.toString().equals("public void libcore.java.lang.OldClassTest$Cls3.test()")) {
8448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                expected = method;
8458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                break;
8468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
8478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
8488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        if (expected == null) {
8498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("getMethods() did not return all methods");
8508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
8518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(expected, Cls3.class.getMethod("test"));
8528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        expected = null;
8548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        methods = Cls3.class.getMethods();
8558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        for (Method method : methods) {
8568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            if(method.toString().equals("public void libcore.java.lang.OldClassTest$Cls3.test2(int,"
8578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                    + "java.lang.Object)")) {
8588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                expected = method;
8598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                break;
8608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            }
8618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
8628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        if (expected == null) {
8638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("getMethods() did not return all methods");
8648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
8658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(expected, Cls3.class.getMethod("test2", int.class,
8678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Object.class));
8688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals("Incorrect number of methods", 1,
8708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Intf5.class.getMethods().length);
8718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
8728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getResourceLjava_lang_String() {
8748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(getClass().getResource(
8758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "libcore/java/lang/NonExistentResource"));
8768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(getClass().getResource(getClass().getName() + "NonExistentResource"));
8778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
8788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_getResourceAsStreamLjava_lang_String() throws Exception {
8808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        String name = "/HelloWorld.txt";
8818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNotNull("the file " + name + " can not be found in this " +
8828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                "directory", getClass().getResourceAsStream(name));
8838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        final String nameBadURI = "org/apache/harmony/luni/tests/test_resource.txt";
8858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull("the file " + nameBadURI + " should not be found in this directory",
8868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                getClass().getResourceAsStream(nameBadURI));
8878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        ClassLoader pcl = getClass().getClassLoader();
8898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class<?> clazz = pcl.loadClass("libcore.java.lang.OldClassTest");
8908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNotNull(clazz.getResourceAsStream("HelloWorld1.txt"));
8918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
8928bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
8938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            getClass().getResourceAsStream(null);
8948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
8958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
8968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
8978bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
8988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
8998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_isAssignableFromLjava_lang_Class() {
9018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertFalse("returned true not assignable classes",
9028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                Integer.class.isAssignableFrom(String.class));
9038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
9058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            Runnable.class.isAssignableFrom(null);
9068bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
9078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
9088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
9098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
9108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
9118bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_newInstance() throws Exception {
9138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
9148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            TestClass3.class.newInstance();
9158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("IllegalAccessException is not thrown.");
9168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(IllegalAccessException  iae) {
9178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
9188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
9198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
9218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            TestClass1C.class.newInstance();
9228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ExceptionInInitializerError should be thrown.");
9238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch (java.lang.ExceptionInInitializerError ie) {
9248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
9258bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
9268bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
9278bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9288bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_asSubclass1() {
9298bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(ExtendTestClass.class,
9308bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                ExtendTestClass.class.asSubclass(PublicTestClass.class));
9318bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9328bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(PublicTestClass.class,
9338bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                PublicTestClass.class.asSubclass(TestInterface.class));
9348bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9358bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(ExtendTestClass1.class,
9368bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                ExtendTestClass1.class.asSubclass(PublicTestClass.class));
9378bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9388bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertEquals(PublicTestClass.class,
9398bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                PublicTestClass.class.asSubclass(PublicTestClass.class));
9408bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
9418bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9428bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_asSubclass2() {
9438bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
9448bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            PublicTestClass.class.asSubclass(ExtendTestClass.class);
9458bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("Test 1: ClassCastException expected.");
9468bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ClassCastException cce) {
9478bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // Expected.
9488bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
9498bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9508bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
9518bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            PublicTestClass.class.asSubclass(String.class);
9528bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("Test 2: ClassCastException expected.");
9538bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ClassCastException cce) {
9548bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            // Expected.
9558bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
9568bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
9578bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9588bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_cast() {
9598bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Object o = PublicTestClass.class.cast(new ExtendTestClass());
9608bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertTrue(o instanceof ExtendTestClass);
9618bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9628bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
9638bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            ExtendTestClass.class.cast(new PublicTestClass());
9648bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("Test 1: ClassCastException expected.");
9658bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ClassCastException cce) {
9668bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
9678bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
9688bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9698bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
9708bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            ExtendTestClass.class.cast(new String());
9718bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("ClassCastException is not thrown.");
9728bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(ClassCastException cce) {
9738bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
9748bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
9758bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
9768bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9778bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void test_desiredAssertionStatus() {
9788bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      Class [] classArray = { Object.class, Integer.class,
9798bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                              String.class, PublicTestClass.class,
9808bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                              ExtendTestClass.class, ExtendTestClass1.class};
9818bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9828bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      for(int i = 0; i < classArray.length; i++) {
9838bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson          assertFalse("assertion status for " + classArray[i],
9848bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson                       classArray[i].desiredAssertionStatus());
9858bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson      }
9868bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson   }
9878bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9888bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void testGetResourceAsStream1() throws IOException {
9898bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class clazz = getClass();
9908bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9918bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        InputStream stream = clazz.getResourceAsStream("HelloWorld.txt");
99267a368573213811c0037cb1b972a0d5fdb3eaf48Elliott Hughes        assertNotNull(stream);
9938bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9948bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        byte[] buffer = new byte[20];
9958bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        int length = stream.read(buffer);
9968bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        String s = new String(buffer, 0, length);
99767a368573213811c0037cb1b972a0d5fdb3eaf48Elliott Hughes        assertEquals("Hello, World.",  s);
9988bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
9998bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        stream.close();
10008bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
10018bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
10028bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    public void testGetResourceAsStream2() throws IOException {
10038bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        Class clazz = getClass();
10048bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
10058bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        InputStream stream = clazz.getResourceAsStream("/libcore/java/lang/HelloWorld.txt");
100667a368573213811c0037cb1b972a0d5fdb3eaf48Elliott Hughes        assertNotNull(stream);
10078bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
10088bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        byte[] buffer = new byte[20];
10098bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        int length = stream.read(buffer);
10108bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        String s = new String(buffer, 0, length);
101167a368573213811c0037cb1b972a0d5fdb3eaf48Elliott Hughes        assertEquals("Hello, World.", s);
10128bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
10138bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        stream.close();
10148bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson
10158bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        try {
10168bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            clazz.getResourceAsStream(null);
10178bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            fail("NullPointerException is not thrown.");
10188bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        } catch(NullPointerException npe) {
10198bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson            //expected
10208bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        }
10218bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(clazz.getResourceAsStream("/NonExistentResource"));
10228bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson        assertNull(clazz.getResourceAsStream("libcore/java/lang/HelloWorld.txt"));
10238bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson    }
10248bc50e8d16e9d630ce236b7ea076f72f9dac0d69Jesse Wilson}
1025