1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.api.java.io; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.File; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileInputStream; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.FileNotFoundException; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.Constructor; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.InvocationTargetException; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Vector; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.zip.ZipEntry; 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.zip.ZipInputStream; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(java.io.Serializable.class) 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class SerializationStressTest5 extends SerializationStressTest { 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project transient Throwable current; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Use this for retrieving a list of any Throwable Classes that did not get 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // tested. 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project transient Vector missedV = new Vector(); 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project transient Class[][] params = new Class[][] { { String.class }, 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { Throwable.class }, { Exception.class }, 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { String.class, Exception.class }, { String.class, int.class }, 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { String.class, String.class, String.class }, 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { String.class, Error.class }, 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { int.class, boolean.class, boolean.class, int.class, int.class }, 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project {} }; 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project transient Object[][] args = new Object[][] { 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "message" }, 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { new Throwable() }, 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { new Exception("exception") }, 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "message", new Exception("exception") }, 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "message", new Integer(5) }, 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "message", "message", "message" }, 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "message", new Error("error") }, 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { new Integer(5), new Boolean(false), new Boolean(false), 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project new Integer(5), new Integer(5) }, {} }; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @TestTargetNew( 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project level = TestLevel.ADDITIONAL, 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project notes = "", 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project method = "!Serialization:test ThrowableClasses", 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project args = {} 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void _test_writeObject_Throwables() { 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project oos.close(); 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File javaDir = findJavaDir(); 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Vector classFilesVector = new Vector(); 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (javaDir != null) 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project findClassFiles(javaDir, classFilesVector); 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project findClassFilesFromZip(classFilesVector); 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (classFilesVector.size() == 0) { 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("No Class Files Found."); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File[] classFilesArray = new File[classFilesVector.size()]; 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project classFilesVector.copyInto(classFilesArray); 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class[] throwableClasses = findThrowableClasses(classFilesArray); 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project findParam(throwableClasses); 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Use this to print out the list of Throwable classes that weren't 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // tested. 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * System.out.println(); Class[] temp = new Class[missedV.size()]; 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * missedV.copyInto(temp); for (int i = 0; i < temp.length; i++) 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * System.out.println(i+1 + ": " + temp[i].getName()); 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private File[] makeClassPathArray() { 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String classPath; 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if (System.getProperty("java.vendor").startsWith("IBM")) 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // classPath = System.getProperty("org.apache.harmony.boot.class.path"); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // else 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // classPath = System.getProperty("sun.boot.class.path"); 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project classPath = System.getProperty("java.boot.class.path"); 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int instanceOfSep = -1; 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int nextInstance = classPath.indexOf(File.pathSeparatorChar, 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project instanceOfSep + 1); 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Vector elms = new Vector(); 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (nextInstance != -1) { 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project elms.add(new File(classPath.substring(instanceOfSep + 1, 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project nextInstance))); 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project instanceOfSep = nextInstance; 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project nextInstance = classPath.indexOf(File.pathSeparatorChar, 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project instanceOfSep + 1); 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project elms.add(new File(classPath.substring(instanceOfSep + 1))); 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File[] result = new File[elms.size()]; 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project elms.copyInto(result); 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private File findJavaDir() { 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File[] files = makeClassPathArray(); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < files.length; i++) { 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (files[i].isDirectory()) { 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String[] tempFileNames = files[i].list(); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int j = 0; j < tempFileNames.length; j++) { 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File tempfile = new File(files[i], tempFileNames[j]); 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (tempfile.isDirectory() 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && tempFileNames[j].equals("java")) { 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String[] subdirNames = tempfile.list(); 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int k = 0; k < subdirNames.length; k++) { 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File subdir = new File(tempfile, subdirNames[k]); 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (subdir.isDirectory() 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && subdirNames[k].equals("lang")) { 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return tempfile; 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void findClassFiles(File dir, Vector v) { 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String[] classFileNames = dir.list(); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < classFileNames.length; i++) { 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File file = new File(dir, classFileNames[i]); 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (file.isDirectory()) 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project findClassFiles(file, v); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (classFileNames[i].endsWith(".class")) 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(file); 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Class[] findThrowableClasses(File[] files) { 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class thrClass = Throwable.class; 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Vector resultVector = new Vector(); 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String slash = System.getProperty("file.separator"); 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String begTarget = slash + "java" + slash; 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String endTarget = ".class"; 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < files.length; i++) { 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String fileName = files[i].getPath(); 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int instOfBegTarget = fileName.indexOf(begTarget); 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int instOfEndTarget = fileName.indexOf(endTarget); 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fileName = fileName.substring(instOfBegTarget + 1, instOfEndTarget); 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fileName = fileName.replace(slash.charAt(0), '.'); 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class theClass = Class.forName(fileName, false, ClassLoader 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .getSystemClassLoader()); 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (thrClass.isAssignableFrom(theClass)) { 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // java.lang.VirtualMachineError is abstract. 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // java.io.ObjectStreamException is abstract 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // java.beans.PropertyVetoException needs a 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // java.beans.PropertyChangeEvent as a parameter 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!fileName.equals("java.lang.VirtualMachineError") 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && !fileName 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .equals("java.io.ObjectStreamException") 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && !fileName 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .equals("java.beans.PropertyVetoException")) 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project resultVector.add(theClass); 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassNotFoundException e) { 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("ClassNotFoundException : " + fileName); 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class[] result = new Class[resultVector.size()]; 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project resultVector.copyInto(result); 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void initClass(Class thrC, int num) { 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Constructor[] cons = thrC.getConstructors(); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < cons.length; i++) { 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Throwable obj = (Throwable) cons[i].newInstance(args[num]); 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project t_Class(obj, num); 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalArgumentException e) { 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // This error should be caught until the correct args is hit. 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IllegalAccessException e) { 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail( 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "IllegalAccessException while creating instance of: " 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + thrC.getName()); 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InstantiationException e) { 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail( 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "InstantiationException while creating instance of: " 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + thrC.getName()); 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (InvocationTargetException e) { 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail( 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "InvocationTargetException while creating instance of: " 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + thrC.getName()); 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (i == cons.length - 1) { 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail( 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "Failed to create newInstance of: " + thrC.getName()); 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getDumpName() { 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (current == null) { 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dumpCount++; 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return getName(); 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return getName() + "_" + current.getClass().getName(); 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void t_Class(Throwable objToSave, int argsNum) { 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project current = objToSave; 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object objLoaded = null; 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (DEBUG) 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("Obj = " + objToSave); 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project objLoaded = dumpAndReload(objToSave); 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (FileNotFoundException e) { 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Must be using xload, ignore missing Throwables 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.out.println("Ignoring: " 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + objToSave.getClass().getName()); 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Has to have worked 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean equals; 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project equals = objToSave.getClass().equals(objLoaded.getClass()); 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue(MSG_TEST_FAILED + objToSave, equals); 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (argsNum == 0 || (argsNum >= 3 && argsNum <= 7)) { 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project equals = ((Throwable) objToSave).getMessage().equals( 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ((Throwable) objLoaded).getMessage()); 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Message Test: " + MSG_TEST_FAILED + objToSave, 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project equals); 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // System.out.println(((Throwable)objToSave).getMessage()); 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project equals = ((Throwable) objToSave).getMessage() == null; 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Null Test 1: (args=" + argsNum + ") " 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + MSG_TEST_FAILED + objToSave, equals); 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project equals = ((Throwable) objLoaded).getMessage() == null; 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project assertTrue("Null Test 2: (args=" + argsNum + ") " 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + MSG_TEST_FAILED + objToSave, equals); 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("Unexpected IOException in checkIt() : " + e.getMessage()); 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (ClassNotFoundException e) { 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail(e.toString() + " - testing " + objToSave.getClass().getName()); 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void findParam(Class[] thrC) { 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < thrC.length; i++) { 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Constructor con = null; 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int j = 0; j < params.length; j++) { 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project con = thrC[i].getConstructor(params[j]); 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchMethodException e) { 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // This Error will be caught until the right param is found. 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (con != null) { 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // If the param was found, initialize the Class 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project initClass(thrC[i], j); 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // If the param not found then add to missed Vector. 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (j == params.length - 1) 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project missedV.add(thrC[i]); 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void findClassFilesFromZip(Vector v) { 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String slash = System.getProperty("file.separator"); 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String javaHome = System.getProperty("java.home"); 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!javaHome.endsWith(slash)) 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project javaHome += slash; 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String[] wanted = { "java" + slash + "io", "java" + slash + "lang", 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "java" + slash + "math", "java" + slash + "net", 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "java" + slash + "security", "java" + slash + "text", 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "java" + slash + "util", "java" + slash + "beans", 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "java" + slash + "rmi", 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // One or more class files in awt make the VM hang after being 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // loaded. 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // "java" + slash + "awt", 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "java" + slash + "sql", 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // These are (possibly) all of the throwable classes in awt 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\AWTError", "java\\awt\\AWTException", 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\color\\CMMException", 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\color\\ProfileDataException", 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\datatransfer\\MimeTypeParseException", 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\datatransfer\\UnsupportedFlavorException", 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\dnd\\InvalidDnDOperationException", 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\FontFormatException", 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\geom\\IllegalPathStateException", 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\geom\\NoninvertibleTransformException", 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\IllegalComponentStateException", 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\image\\ImagingOpException", 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\image\\RasterFormatException", 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\print\\PrinterAbortException", 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\print\\PrinterException", 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "java\\awt\\print\\PrinterIOException" 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File[] files = makeClassPathArray(); 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FileInputStream fis = null; 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipInputStream zis = null; 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ZipEntry ze = null; 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < files.length; i++) { 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String fileName = files[i].getPath(); 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (files[i].exists() && files[i].isFile() 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && fileName.endsWith(".jar") || fileName.endsWith(".zip")) { 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fis = new FileInputStream(files[i].getPath()); 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (FileNotFoundException e) { 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("FileNotFoundException trying to open " 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + files[i].getPath()); 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis = new ZipInputStream(fis); 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (true) { 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ze = zis.getNextEntry(); 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail("IOException while getting next zip entry: " 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + e); 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (ze == null) 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String zeName = ze.getName(); 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (zeName.endsWith(".class")) { 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zeName = zeName.replace('/', slash.charAt(0)); 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int j = 0; j < wanted.length; j++) { 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (zeName.startsWith(wanted[j])) { 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // When finding class files from directories the 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // program saves them as files. 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // To stay consistent we will turn the ZipEntry 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // classes into instances of files. 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project File tempF = new File(javaHome + zeName); 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Making sure that the same class is not added 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // twice. 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean duplicate = false; 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int k = 0; k < v.size(); k++) { 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (v.get(k).equals(tempF)) 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project duplicate = true; 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!duplicate) 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v.add(tempF); 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ; 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project zis.close(); 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fis.close(); 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (IOException e) { 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fail( 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "IOException while trying to close InputStreams: " 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project + e); 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 391