package bndtools.tasks;
import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.osgi.framework.Version;
import org.osgi.resource.Capability;
import bndtools.model.resolution.RequirementWrapper;
public class AnalyseBundleResolutionJobTest extends TestCase {
public void testEmptyFileList() {
AnalyseBundleResolutionJob job = new AnalyseBundleResolutionJob("resolve", Collections.<CapReqLoader> emptySet());
IStatus status = job.run(new NullProgressMonitor());
assertEquals(IStatus.OK, status.getCode());
assertEquals(0, job.getCapabilities().size());
assertEquals(0, job.getRequirements().size());
}
/*
*
public void testSimpleImport() {
File[] files = new File[] {
new File("test/tests.consumer.jar")
};
AnalyseBundleResolutionJob job = new AnalyseBundleResolutionJob("resolve", files);
IStatus status = job.run(new NullProgressMonitor());
assertEquals(IStatus.OK, status.getCode());
assertEquals(0, job.getExportResults().size());
assertEquals(1, job.getImportResults().size());
ImportPackage apiImport = job.getImportResults().get(0);
assertEquals("api", apiImport.getName());
assertFalse(apiImport.isSelfImport());
}
*/
public void testExportAndSelfImport() {
AnalyseBundleResolutionJob job = new AnalyseBundleResolutionJob("resolve", Collections.singleton(new JarFileCapReqLoader(new File("test/tests.provider.jar"))));
IStatus status = job.run(new NullProgressMonitor());
assertEquals(IStatus.OK, status.getCode());
Map<String,List<Capability>> caps = job.getCapabilities();
assertEquals(4, caps.size());
List<Capability> idCaps = caps.get("osgi.identity");
assertEquals(1, idCaps.size());
assertEquals("tests.provider", idCaps.get(0).getAttributes().get("osgi.identity"));
assertEquals(new Version("0.0.0.201412192235"), idCaps.get(0).getAttributes().get("version"));
List<Capability> bundleCaps = caps.get("osgi.wiring.bundle");
assertEquals(1, bundleCaps.size());
assertEquals("tests.provider", bundleCaps.get(0).getAttributes().get("osgi.wiring.bundle"));
assertEquals(new Version("0.0.0.201412192235"), bundleCaps.get(0).getAttributes().get("bundle-version"));
List<Capability> hostCaps = caps.get("osgi.wiring.host");
assertEquals(1, hostCaps.size());
assertEquals("tests.provider", hostCaps.get(0).getAttributes().get("osgi.wiring.host"));
assertEquals(new Version("0.0.0.201412192235"), hostCaps.get(0).getAttributes().get("bundle-version"));
List<Capability> exports = caps.get("osgi.wiring.package");
assertEquals(1, exports.size());
assertEquals("osgi.wiring.package", exports.get(0).getNamespace());
assertEquals("api", exports.get(0).getAttributes().get("osgi.wiring.package"));
Map<String,List<RequirementWrapper>> reqs = job.getRequirements();
assertEquals(2, reqs.size());
List<RequirementWrapper> imports = reqs.get("osgi.wiring.package");
assertEquals(1, imports.size());
assertTrue(imports.get(0).resolved);
assertEquals("(&(osgi.wiring.package=api)(version>=1.0.0)(!(version>=1.1.0)))", imports.get(0).requirement.getDirectives().get("filter"));
List<RequirementWrapper> ee = reqs.get("osgi.ee");
assertEquals(1, ee.size());
assertFalse(ee.get(0).resolved);
assertEquals("(&(osgi.ee=JavaSE)(version=1.8))", ee.get(0).requirement.getDirectives().get("filter"));
}
public void testProvideCapability() {
AnalyseBundleResolutionJob job = new AnalyseBundleResolutionJob("resolve", Collections.singleton(new JarFileCapReqLoader(new File("test/tests.consumer.jar"))));
IStatus status = job.run(new NullProgressMonitor());
assertEquals(IStatus.OK, status.getCode());
List<Capability> caps = job.getCapabilities().get("com.acme.display");
assertEquals(1, caps.size());
assertEquals(1024L, caps.get(0).getAttributes().get("width"));
assertEquals(768L, caps.get(0).getAttributes().get("height"));
assertEquals("com.acme", caps.get(0).getDirectives().get("uses"));
}
public void testOptionalImport() {
AnalyseBundleResolutionJob job = new AnalyseBundleResolutionJob("resolve", Collections.singleton(new JarFileCapReqLoader(new File("test/example2.jar"))));
IStatus status = job.run(new NullProgressMonitor());
assertEquals(IStatus.OK, status.getCode());
Map<String,List<RequirementWrapper>> reqs = job.getRequirements();
assertEquals(2, reqs.size());
List<RequirementWrapper> imports = reqs.get("osgi.wiring.package");
assertEquals("optional", imports.get(0).requirement.getDirectives().get("resolution"));
}
}