package test;
import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
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;
public class NoUsesTest extends TestCase {
/*
* Check if we explicitly set a uses directive, prepend the calculated but
* the calculated is empty. This should remove the extraneuous comma
*/
public static void testExplicitUsesWithPrependZeroUses() throws Exception {
Builder bmaker = new Builder();
bmaker.setProperty("Private-Package", "org.osgi.framework");
bmaker.setProperty("Export-Package", "org.osgi.util.tracker;uses:=\"<<USES>>,not.used\"");
String uses = findUses(bmaker, "org.osgi.util.tracker", "has 1, private");
assertEquals("not.used", uses);
}
/*
* Check if we explicitly set a uses directive, but append it with the
* calculated directive
*/
public static void testExplicitUsesWithAppend() throws Exception {
Builder bmaker = new Builder();
bmaker.setProperty("Export-Package", "org.osgi.util.tracker;uses:=\"not.used,<<USES>>\"");
String uses = findUses(bmaker, "org.osgi.util.tracker");
assertTrue("not.used", uses.indexOf("not.used") >= 0);
assertTrue("org.osgi.framework", uses.indexOf("org.osgi.framework") >= 0);
}
/*
* Check if we explicitly set a uses directive, append the calculated but
* the calculated is empty. This should remove the extraneuous comma
*/
public static void testExplicitUsesWithAppendZeroUses() throws Exception {
Builder bmaker = new Builder();
bmaker.setProperty("Private-Package", "org.osgi.framework");
bmaker.setProperty("Export-Package", "org.osgi.util.tracker;uses:=\"not.used,<<USES>>\"");
String uses = findUses(bmaker, "org.osgi.util.tracker", "has 1, private");
assertEquals("not.used", uses);
}
/*
* Check if we explicitly set a uses directive, but append it with the
* calculated directive
*/
public static void testExplicitUsesWithPrepend() throws Exception {
Builder bmaker = new Builder();
bmaker.setProperty("Export-Package", "org.osgi.util.tracker;uses:=\"<<USES>>,not.used\"");
String uses = findUses(bmaker, "org.osgi.util.tracker");
assertTrue("not.used", uses.indexOf("not.used") >= 0);
assertTrue("org.osgi.framework", uses.indexOf("org.osgi.framework") >= 0);
}
/*
* Check if we explicitly set a uses directive
*/
public static void testExplicitUses() throws Exception {
Builder bmaker = new Builder();
bmaker.setProperty("Export-Package", "org.osgi.util.tracker;uses:=\"not.used\"");
String uses = findUses(bmaker, "org.osgi.util.tracker");
assertEquals("not.used", uses);
}
public static void testExportedUses() throws Exception {
Builder bmaker = new Builder();
bmaker.setProperty("Export-Package", "org.osgi.util.tracker, org.osgi.framework");
String uses = findUses(bmaker, "org.osgi.util.tracker");
assertEquals("org.osgi.framework", uses);
}
public static void testPrivateUses() throws Exception {
Builder bmaker = new Builder();
bmaker.setProperty("Private-Package", "org.osgi.framework");
bmaker.setProperty("Export-Package", "org.osgi.util.tracker");
String uses = findUses(bmaker, "org.osgi.util.tracker", "has 1, private");
assertNull("org.osgi.framework", uses);
}
public static void testHasUses() throws Exception {
Builder bmaker = new Builder();
bmaker.setProperty("Export-Package", "test.activator");
String uses = findUses(bmaker, "test.activator");
Set<String> usesSet = new HashSet<String>(Arrays.asList(uses.split(",")));
assertTrue(usesSet.contains("org.osgi.service.component"));
assertTrue(usesSet.contains("org.osgi.framework"));
}
public static void testNoUses() throws Exception {
Builder bmaker = new Builder();
bmaker.setProperty("Export-Package", "test.activator");
bmaker.setProperty("-nouses", "true");
String uses = findUses(bmaker, "test.activator");
assertNull("org.osgi.framework", uses);
}
static String findUses(Builder bmaker, String pack, String... ignore) throws Exception {
File cp[] = {
new File("bin"), IO.getFile("jar/osgi.jar")
};
bmaker.setClasspath(cp);
Jar jar = bmaker.build();
assertTrue(bmaker.check(ignore));
String exports = jar.getManifest().getMainAttributes().getValue("Export-Package");
assertNotNull("exports", exports);
Parameters map = Processor.parseHeader(exports, null);
if (map == null)
return null;
Map<String,String> clause = map.get(pack);
if (clause == null)
return null;
return clause.get("uses:");
}
}