package test; import java.io.File; import java.util.Map; import java.util.Properties; import java.util.jar.Attributes; import java.util.jar.Manifest; import aQute.bnd.header.Parameters; import aQute.bnd.osgi.Builder; import aQute.bnd.osgi.Jar; import aQute.bnd.osgi.Processor; import aQute.lib.io.IO; import junit.framework.TestCase; @SuppressWarnings("resource") public class AttributesTest extends TestCase { /** * Remove a version attribute A mandatory attribute adds the common and tst * properties to the import. We remove them using remove:=* * * @throws Exception */ public static void testRemoveDirective() throws Exception { Jar javax = new Jar("test"); Manifest m = new Manifest(); m.getMainAttributes().putValue("Export-Package", "javax.microedition.io;a1=exp-1;a2=exp-2;a3=exp-3;x1=x1;x2=x2;x3=x3;mandatory:=\"a1,a2,a3,x1,x2,x3\""); javax.setManifest(m); Jar cp[] = { javax, new Jar(IO.getFile("jar/osgi.jar")) }; Builder bmaker = new Builder(); Properties p = new Properties(); p.put("Import-Package", "javax.microedition.io;-remove-attribute:=a1|x?;a2=imp-2,*"); p.put("Export-Package", "org.osgi.service.io"); bmaker.setClasspath(cp); bmaker.setProperties(p); Jar jar = bmaker.build(); assertTrue(bmaker.check()); assertNotNull(bmaker.getImports()); assertNotNull(bmaker.getImports().getByFQN("javax.microedition.io")); assertNotNull(bmaker.getImports().getByFQN("javax.microedition.io").get("a2")); jar.getManifest().write(System.err); Manifest manifest = jar.getManifest(); Attributes main = manifest.getMainAttributes(); String imprt = main.getValue("Import-Package"); assertNotNull("Import package header", imprt); Parameters map = Processor.parseHeader(imprt, null); System.err.println("** " + map); Map<String,String> attrs = map.get("javax.microedition.io"); assertNotNull(attrs); assertNull(attrs.get("a1")); assertNull(attrs.get("x1")); assertNull(attrs.get("x2")); assertNull(attrs.get("x3")); assertEquals("imp-2", attrs.get("a2")); assertEquals("exp-3", attrs.get("a3")); } /** * Remove a version attribute * * @throws Exception */ public static void testRemoveAttribute() throws Exception { Jar javax = new Jar("test"); Manifest m = new Manifest(); m.getMainAttributes().putValue("Export-Package", "javax.microedition.io;common=split;test=abc;mandatory:=\"common,test\""); javax.setManifest(m); Jar cp[] = { javax, new Jar(IO.getFile("jar/osgi.jar")) }; Builder bmaker = new Builder(); Properties p = new Properties(); p.put("Import-Package", "javax.microedition.io;common=!;test=abc,*"); p.put("Export-Package", "org.osgi.service.io"); bmaker.setClasspath(cp); bmaker.setProperties(p); Jar jar = bmaker.build(); assertTrue(bmaker.check()); jar.getManifest().write(System.err); Manifest manifest = jar.getManifest(); Attributes main = manifest.getMainAttributes(); String imprt = main.getValue("Import-Package"); assertNotNull("Import package header", imprt); Parameters map = Processor.parseHeader(imprt, null); Map<String,String> attrs = map.get("javax.microedition.io"); assertNotNull(attrs); assertNull(attrs.get("common")); } /** * Override a version attribute * * @throws Exception */ public static void testOverrideAttribute() throws Exception { File cp[] = { IO.getFile("jar/osgi.jar") }; Builder bmaker = new Builder(); Properties p = new Properties(); p.put("Export-Package", "org.osgi.framework;version=1.1"); bmaker.setClasspath(cp); bmaker.setProperties(p); Jar jar = bmaker.build(); System.err.println(jar.getResources()); // System.err.println(bmaker.getExports()); System.err.println("Warnings: " + bmaker.getWarnings()); System.err.println("Errors : " + bmaker.getErrors()); jar.getManifest().write(System.err); Manifest manifest = jar.getManifest(); Attributes main = manifest.getMainAttributes(); String export = main.getValue("Export-Package"); assertNotNull("Export package header", export); Parameters map = Processor.parseHeader(export, null); assertEquals("1.1", map.get("org.osgi.framework").get("version")); } /** * See if we inherit the version from the osgi.jar file. * * @throws Exception */ public static void testSimple() throws Exception { File cp[] = { IO.getFile("jar/osgi.jar") }; Builder bmaker = new Builder(); Properties p = new Properties(); p.put("Export-Package", "org.osgi.framework"); bmaker.setClasspath(cp); bmaker.setProperties(p); Jar jar = bmaker.build(); System.err.println(jar.getResources()); // System.err.println(bmaker.getExports()); System.err.println("Warnings: " + bmaker.getWarnings()); System.err.println("Errors : " + bmaker.getErrors()); jar.getManifest().write(System.err); Manifest manifest = jar.getManifest(); Attributes main = manifest.getMainAttributes(); String export = main.getValue("Export-Package"); assertNotNull("Export package header", export); Parameters map = Processor.parseHeader(export, null); assertEquals("1.3", map.get("org.osgi.framework").get("version")); } }