package org.eclipse.buckminster.pde.test; import java.io.File; import java.util.Collections; import java.util.Map; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; import org.eclipse.buckminster.core.CorePlugin; import org.eclipse.buckminster.core.actor.IPerformManager; import org.eclipse.buckminster.core.metadata.WorkspaceInfo; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.osgi.framework.Constants; public class SourceBundleTest extends PDETestCase { private static final String NAME = "sourceGenBundle"; private static final String VERSION = "1.0.0"; public void testSourceBundleGenFolder() throws Exception { File projectFolder = getTestData(NAME); IProgressMonitor monitor = new NullProgressMonitor(); IWorkspace workspace = ResourcesPlugin.getWorkspace(); // Bind project IProject project = createProject(projectFolder, workspace); // The buckminster.properties will redirect the build result to this // location IWorkspaceRoot wsRoot = workspace.getRoot(); IProject result = wsRoot.getProject("result"); if (result.exists()) result.delete(true, true, monitor); result.create(monitor); result.open(monitor); // Assert that we build OK workspace.build(IncrementalProjectBuilder.FULL_BUILD, monitor); Map<String, String> props = Collections.singletonMap("buckminster.output.root", "${workspace.root}/result"); IPerformManager performManager = CorePlugin.getPerformManager(); performManager.perform(Collections.singletonList(WorkspaceInfo.getCSpec(project).getAttribute("source.bundle.jar")), props, false, true, monitor); // Assert that the bundle is created and published result.refreshLocal(IResource.DEPTH_INFINITE, monitor); IFolder jarFolder = result.getFolder(NAME + '_' + VERSION + "-osgi.bundle/source.jar"); assertTrue("No source.jar folder was created by source.bundle.jar action", jarFolder.exists()); IResource[] members = jarFolder.members(); assertEquals("Incorrect number of members in source.jar folder", 1, members.length); IFile jar = (IFile) members[0]; JarFile jarFile = new JarFile(jar.getLocation().toFile()); try { Manifest manifest = jarFile.getManifest(); Attributes attributes = manifest.getMainAttributes(); assertEquals("Bundle-Name not translated in source bundle manifest", "SourceGen Test Bundle Source", attributes.getValue(Constants.BUNDLE_NAME)); assertEquals("Bundle-Vendor not translated in source bundle manifest", "TheProvider", attributes.getValue(Constants.BUNDLE_VENDOR)); } finally { jarFile.close(); } } }