Index: src/test/java/org/apache/harmony/unpack200/tests/ArchiveTest.java =================================================================== --- . (revision 658189) +++ . (working copy) @@ -22,6 +22,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; @@ -69,40 +70,117 @@ archive.unpack(); JarFile jarFile = new JarFile(file); file.deleteOnExit(); - JarEntry entry = jarFile - .getJarEntry("bin/test/org/apache/harmony/sql/tests/javax/sql/rowset/BaseRowSetTest$BaseRowSetImpl.class"); - assertNotNull(entry); - try { - Process process2 = Runtime - .getRuntime() - .exec( - "javap -c -verbose -classpath " - + file.getName() - + " bin/test/org.apache.harmony.sql.tests.javax.sql.rowset.BaseRowSetTest$BaseRowSetImpl", - new String[] {}, file.getParentFile()); + Enumeration entries = jarFile.entries(); + while(entries.hasMoreElements()) { + + + JarEntry entry = (JarEntry) entries.nextElement(); + assertNotNull(entry); + String name = entry.getName(); + + if(name.endsWith(".class")) { + name = name.substring(9, name.length() - 6); + name = name.replaceAll("/", "."); +// System.out.println(name); + try { + Process process2 = Runtime + .getRuntime() + .exec( + "javap -c -verbose -classpath " + + file.getName() + + " bin/test/" + name, + new String[] {}, file.getParentFile()); - BufferedReader reader1 = new BufferedReader(new InputStreamReader( - process2.getInputStream())); - InputStream javapCompareFile = Archive.class - .getResourceAsStream("/org/apache/harmony/pack200/tests/sqlJavap.out"); - BufferedReader reader2 = new BufferedReader(new InputStreamReader( - javapCompareFile)); - String line1 = reader1.readLine(); - String line2 = reader2.readLine(); - int i = 1; - while (line1 != null || line2 != null) { - assertEquals(line2, line1); - line1 = reader1.readLine(); - line2 = reader2.readLine(); - i++; + BufferedReader reader1 = new BufferedReader(new InputStreamReader( + process2.getInputStream())); + InputStream javapCompareFile = Archive.class + .getResourceAsStream("/org/apache/harmony/pack200/tests/sql/" + name + ".out"); + BufferedReader reader2 = new BufferedReader(new InputStreamReader( + javapCompareFile)); + String line1 = reader1.readLine(); + String line2 = reader2.readLine(); + int i = 1; + while (line1 != null || line2 != null) { + assertEquals(line2, line1); + line1 = reader1.readLine(); + line2 = reader2.readLine(); + i++; + } + reader1.close(); + reader2.close(); + } catch (IOException e) { + if(e.getMessage().startsWith("Unable to start program")) { + System.out.println("Warning: org.apache.harmony.unpack200.tests.ArchiveTest.testWithSql() was not completed as javap could not be found"); + } else { + throw e; + } + } } - reader1.close(); - reader2.close(); - } catch (IOException e) { - if(e.getMessage().startsWith("Unable to start program")) { - System.out.println("Warning: org.apache.harmony.unpack200.tests.ArchiveTest.testWithSql() was not completed as javap could not be found"); - } else { - throw e; + } + } + + + // Test with an archive containing Harmony's SQL module + public void testWithSwing() throws Exception { + long start = System.currentTimeMillis(); + in = Archive.class + .getResourceAsStream("/org/apache/harmony/pack200/tests/swing.pack.gz"); + file = File.createTempFile("swing", ".jar"); + out = new JarOutputStream(new FileOutputStream(file)); + Archive archive = new Archive(in, out); + archive.unpack(); + long end = System.currentTimeMillis(); + System.out.println("The swing test took: " + (end-start) + " milliseconds"); + JarFile jarFile = new JarFile(file); + file.deleteOnExit(); + Enumeration entries = jarFile.entries(); + while(entries.hasMoreElements()) { + + + JarEntry entry = (JarEntry) entries.nextElement(); + assertNotNull(entry); + String name = entry.getName(); + + if(name.endsWith(".class")) { + name = name.substring(0, name.length() - 6); + name = name.replaceAll("/", "."); +// System.out.println(name); + try { + Process process2 = Runtime + .getRuntime() + .exec( + "javap -c -verbose -classpath " + + file.getName() + + " " + name, + new String[] {}, file.getParentFile()); + + BufferedReader reader1 = new BufferedReader(new InputStreamReader( + process2.getInputStream())); + InputStream javapCompareFile = Archive.class + .getResourceAsStream("/org/apache/harmony/pack200/tests/swing/" + name + ".out"); + BufferedReader reader2 = new BufferedReader(new InputStreamReader( + javapCompareFile)); + String line1 = reader1.readLine(); + String line2 = reader2.readLine(); + int i = 1; + while (line1 != null || line2 != null) { +// if(!name.equals("javax.swing.JTable$ObjectEditor")) { +// System.out.println(line1); +// } + assertEquals(line2, line1); + line1 = reader1.readLine(); + line2 = reader2.readLine(); + i++; + } + reader1.close(); + reader2.close(); + } catch (IOException e) { + if(e.getMessage().startsWith("Unable to start program")) { + System.out.println("Warning: org.apache.harmony.unpack200.tests.ArchiveTest.testWithSql() was not completed as javap could not be found"); + } else { + throw e; + } + } } } }