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