package org.eclipse.buckminster.pde.test; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; 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.IMarker; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; 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.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; public class ExcludeFilesTest extends PDETestCase { private static final String NAME = "test.excludes"; private static final String VERSION = "1.0.0"; public void testExcludeFiles() throws Exception { File projectFolder = getTestData(NAME); IProgressMonitor monitor = new NullProgressMonitor(); IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot wsRoot = workspace.getRoot(); // Bind project IPath locationPath = Path.fromOSString(projectFolder.getAbsolutePath()); IProjectDescription description = workspace.loadProjectDescription(locationPath.append(".project")); //$NON-NLS-1$ IProject project = wsRoot.getProject(description.getName()); project.create(description, monitor); project.open(monitor); // The buckminster.properties will redirect the build result to this // location 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); boolean errors = false; List<String> messages = new ArrayList<String>(); IMarker[] markers = project.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE); for (IMarker marker : markers) { if (marker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO) == IMarker.SEVERITY_ERROR) errors = true; messages.add(marker.getAttribute(IMarker.LOCATION, "<unknown location>") + ": " + marker.getAttribute(IMarker.MESSAGE, "<unknown problem>")); } if (errors) { for (String message : messages) System.out.println(message); fail(); } Map<String, String> props = Collections.singletonMap("buckminster.output.root", "${workspace.root}/result"); IPerformManager performManager = CorePlugin.getPerformManager(); performManager.perform(Collections.singletonList(WorkspaceInfo.getCSpec(project).getAttribute("bundle.jar")), props, false, true, monitor); // Assert that both bundles were created and published result.refreshLocal(IResource.DEPTH_INFINITE, monitor); IFolder jar = result.getFolder(NAME + '_' + VERSION + "-osgi.bundle/jar"); assertTrue("No jar folder was created by bundle.jar action", jar.exists()); IResource[] members = jar.members(); assertEquals("The jar folder created by bundle.jar action does not contain 1 file", members.length, 1); assertTrue("The jar folder created by bundle.jar action does not contain a file", members[0] instanceof IFile); Set<String> allFiles = new HashSet<String>(); ZipInputStream zi = new ZipInputStream(((IFile) members[0]).getContents()); ZipEntry ze; while ((ze = zi.getNextEntry()) != null) if (!ze.isDirectory()) allFiles.add(ze.getName()); zi.close(); System.out.println(allFiles); assertEquals("Unexpected number of files", 2, allFiles.size()); assertTrue("test/Test.class is missing", allFiles.contains("test/Test.class")); assertTrue("META-INF/MANIFEST.MF is missing", allFiles.contains("META-INF/MANIFEST.MF")); } }