package test; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; import java.nio.ByteBuffer; import java.util.Collection; import aQute.bnd.make.calltree.CalltreeResource; import aQute.bnd.osgi.Builder; import aQute.bnd.osgi.Clazz; import aQute.bnd.osgi.Resource; import junit.framework.TestCase; @SuppressWarnings("resource") public class CalltreeTest extends TestCase { @SuppressWarnings("restriction") public static void testCalltree() throws Exception { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); Builder b = new Builder(); b.addClasspath(new File("bin")); b.setProperty("Private-Package", "test"); b.build(); Collection<Clazz> clazzes = b.getClassspace().values(); assertTrue(clazzes.size() > 10); CalltreeResource.writeCalltree(pw, clazzes); pw.close(); System.err.println(sw.toString()); } static class Implements implements Resource { @Override public String getExtra() { // TODO Auto-generated method stub return null; } @Override public long lastModified() { // TODO Auto-generated method stub return 0; } @Override public InputStream openInputStream() throws IOException { // TODO Auto-generated method stub return null; } @Override public void setExtra(String extra) { // TODO Auto-generated method stub } @Override public void write(OutputStream out) throws IOException { // TODO Auto-generated method stub } @Override public long size() throws Exception { // TODO Auto-generated method stub return 0; } @Override public ByteBuffer buffer() throws Exception { // TODO Auto-generated method stub return null; } public void close() throws IOException {} } // public void testCoverage() throws Exception { // Builder b = new Builder(); // b.addClasspath(new File("bin")); // b.setProperty("Private-Package", "test"); // b.build(); // Collection<Clazz> testsuite = b.getClassspace().values(); // // Builder c = new Builder(); // c.addClasspath(new File("bin")); // c.setProperty("Private-Package", "aQute.bnd.osgi"); // c.build(); // Collection<Clazz> target = c.getClassspace().values(); // // Map<Clazz.MethodDef, List<Clazz.MethodDef>> xref = // Coverage.getCrossRef(testsuite, target); // System.err.println(xref); // // List<Clazz.MethodDef> refs = xref.get(new Clazz.MethodDef(0, // Resource.class.getName(), // "write", "(Ljava/io/OutputStream;)V")); // // assertNotNull("The write(OutputStream) method is implemented by // Resource", // xref); // // assertTrue("We must have at least one reference", refs.size() > 0); // // MethodDef md = refs.get(0); // boolean found = false; // for (MethodDef md : refs) { // if (md.clazz.equals("test.CalltreeTest$Implements")) { // found = true; // assertEquals(md.name, "<implements>"); // assertEquals(md.descriptor, "()V"); // } // } // assertTrue( found); // // assertTrue(xref.containsKey(new Clazz.MethodDef(0, // Analyzer.class.getName(), "analyze", // "()V"))); // assertTrue(xref.containsKey(new Clazz.MethodDef(0, // Builder.class.getName(), "build", // "()LaQute/lib/osgi/Jar;"))); // assertTrue(xref // .get( // new Clazz.MethodDef(0, "aQute.bnd.osgi.Builder", "build", // "()LaQute/lib/osgi/Jar;")).contains( // new Clazz.MethodDef(0, "test.CalltreeTest", "testCoverage", "()V"))); // // Tag tag = CoverageResource.toTag(xref); // PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.err)); // tag.print(0, pw); // pw.close(); // } // // public void testCatalog() throws Exception { // Builder b = new Builder(); // b.addClasspath(IO.getFile("jar/osgi.jar")); // b.setProperty("Private-Package", "org.osgi.framework"); // b.build(); // Collection<Clazz> target = b.getClassspace().values(); // // Map<MethodDef, List<MethodDef>> xref = Coverage.getCrossRef(new // ArrayList<Clazz>(), target); // // System.err.println(Processor.join(xref.keySet(), "\n")); // // assertTrue(xref.containsKey(new Clazz.MethodDef(0, // "org.osgi.framework.AdminPermission", // "<init>", "()V"))); // assertTrue(xref.containsKey(new Clazz.MethodDef(0, // "org.osgi.framework.AdminPermission", // "<init>", "(Lorg/osgi/framework/Bundle;Ljava/lang/String;)V"))); // assertTrue(xref.containsKey(new Clazz.MethodDef(0, // "org.osgi.framework.AdminPermission", // "<init>", "(Ljava/lang/String;Ljava/lang/String;)V"))); // assertFalse(xref.containsKey(new Clazz.MethodDef(0, // "org.osgi.framework.AdminPermission$1", // "run", "()Ljava/lang/Object;"))); // assertFalse(xref.containsKey(new Clazz.MethodDef(0, // "org.osgi.framework.AdminPermission", // "createName", "(Lorg/osgi/framework/Bundle;)Ljava/lang/String;"))); // } // // public void testResource() throws Exception { // Builder b = new Builder(); // b.addClasspath(IO.getFile("jar/osgi.jar")); // b.setProperty("Private-Package", "org.osgi.framework"); // b.build(); // Collection<Clazz> target = b.getClassspace().values(); // // Resource r = new CoverageResource(target, target); // InputStream in = r.openInputStream(); // ByteArrayOutputStream out = new ByteArrayOutputStream(); // byte[] buffer = new byte[1000]; // int size = in.read(buffer); // while (size > 0) { // out.write(buffer, 0, size); // size = in.read(buffer); // } // out.close(); // assertTrue(out.toByteArray().length > 1000); // } }