package tests.api.java.lang.reflect; import dalvik.annotation.AndroidOnly; import dalvik.annotation.SideEffect; //import dalvik.system.DexFile; import junit.framework.TestCase; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.GenericSignatureFormatError; import java.lang.reflect.TypeVariable; //import tests.support.Support_ClassLoader; public class GenericSignatureFormatErrorTest extends TestCase{ public void test_Constructor() { assertNotNull(new GenericSignatureFormatError()); } public void test_readResource() throws Exception { File tf = File.createTempFile("classes", ".dex"); // System.out.println("GenericSignatureFormatErrorTest:" // +tf.getAbsolutePath()+", canRead: "+tf.canRead() // +", canWrite: "+tf.canWrite()); InputStream is = this.getClass().getResourceAsStream("dex1.bytes"); assertNotNull(is); } // RoboVM note: Commented out. Tests Android specific class. // @AndroidOnly("Uses Android specific class dalvik.system.DexFile " + // "for loading classes.") // @SideEffect("strange issue (exception: 'could not open dex file', " + // "dalvikvm: 'waitpid failed' log msg - only occurs when @SideEffect is removed " + // "and this test is run via running tests.luni.AllTestsLang TestSuite") // public void test_signatureFormatError() throws Exception { // /* // * dex1.bytes is a jar file with a classes.dex in it. // * the classes.dex was javac'ed, dx'ed and patched // * with the following java file: // * // * package demo; // * public class HelloWorld<U> { // * public HelloWorld(U t) {} // * } // * // * patch: // * the string constant (class generics signature string) // * "<U:" was changed to "<<:" // * // */ // File tf = File.createTempFile("classes", ".dex"); // // System.out.println("GenericSignatureFormatErrorTest:" + // // tf.getAbsolutePath() + ", canRead: " + tf.canRead() + // // ", canWrite: "+tf.canWrite()); // InputStream is = this.getClass().getResourceAsStream("dex1.bytes"); // assertNotNull(is); // OutputStream fos = new FileOutputStream(tf); // copy(is, fos); // fos.flush(); // fos.close(); // // class signature string "<U:" was changed to "<<:" // //System.out.println("file length:"+tf.length()); // try { // // Was: // // DexFile df = new DexFile(tf); // // Class clazz = df.loadClass("demo/HelloWorld", this.getClass().getClassLoader()); // ClassLoader cl = Support_ClassLoader.getInstance(tf.toURL(), // getClass().getClassLoader()); // Class clazz = cl.loadClass("demo/HelloWorld"); // TypeVariable[] tvs = clazz.getTypeParameters(); // fail("expecting a GenericSignatureFormatError"); // // for (TypeVariable tv : tvs) { // // System.out.println("tv:"+tv.toString()); // // } // } catch (GenericSignatureFormatError gsfe) { // // expected // } // } private void copy(InputStream is, OutputStream os) { try { int b; while ((b = is.read()) != -1) { os.write(b); } is.close(); } catch (IOException ex) { throw new RuntimeException("io error", ex); } } }