package org.eclipse.buckminster.pde.test; import java.io.File; import java.io.FileFilter; import java.io.InputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Map; import org.eclipse.buckminster.core.CorePlugin; import org.eclipse.buckminster.core.actor.IPerformManager; import org.eclipse.buckminster.core.commands.Build; import org.eclipse.buckminster.core.helpers.BMProperties; import org.eclipse.buckminster.core.metadata.WorkspaceInfo; import org.eclipse.buckminster.pde.prefs.TargetPlatformPathHandler; import org.eclipse.core.resources.IFile; 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.CoreException; 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 PublishMultiVersionsTest extends PDETestCase { public void testMultiVersions() throws Exception { File projectFolder = getTestData("multiver"); File[] dirList = projectFolder.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return !pathname.getName().startsWith("."); } }); assertTrue(projectFolder.getAbsolutePath() + " is not a directory", dirList != null); assertEquals("Incorrect number of folders in directory " + projectFolder.getAbsolutePath(), 6, dirList.length); IProgressMonitor monitor = new NullProgressMonitor(); IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot wsRoot = workspace.getRoot(); ArrayList<IProject> boundProjects = new ArrayList<IProject>(); // Bind projects for (File projDir : dirList) { IPath locationPath = Path.fromOSString(projDir.getAbsolutePath()); IProjectDescription description; try { description = workspace.loadProjectDescription(locationPath.append(".project")); //$NON-NLS-1$ } catch (CoreException e) { // The target platform is not actually a project so we need to // create // a description for it. description = workspace.newProjectDescription(locationPath.lastSegment()); description.setLocation(locationPath); } IProject project = wsRoot.getProject(description.getName()); project.create(description, monitor); project.open(monitor); boundProjects.add(project); } // The buckminster.properties will redirect the build result to this // location IProject result = wsRoot.getProject("output"); if (result.exists()) result.delete(true, true, monitor); result.create(monitor); result.open(monitor); // Set the target platform TargetPlatformPathHandler tpp = new TargetPlatformPathHandler(); tpp.set(wsRoot.getProject("com.extol.test.target").getLocation().toOSString()); // Assert that we build OK workspace.build(IncrementalProjectBuilder.FULL_BUILD, monitor); for (IProject project : boundProjects) { int errors = 0; IMarker[] markers = project.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE); for (IMarker marker : markers) { System.err.println(Build.formatMarkerMessage("Marker", marker)); if (marker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO) == IMarker.SEVERITY_ERROR) ++errors; } assertEquals("We've got error markers on project " + project.getName(), 0, errors); } // Load the properties IProject repoFeature = wsRoot.getProject("com.extol.test.repo.feature"); InputStream inStream = repoFeature.getFile("buckminster.properties").getContents(); Map<String, String> props = new BMProperties(inStream); inStream.close(); IPerformManager performManager = CorePlugin.getPerformManager(); performManager.perform(Collections.singletonList(WorkspaceInfo.getCSpec(repoFeature).getAttribute("site.p2")), props, false, true, monitor); // Assert that both bundles were created and published result.refreshLocal(IResource.DEPTH_INFINITE, monitor); IFile one_1_0_0 = result.getFile("com.extol.test.repo.feature_1.0.0-eclipse.feature/site.p2/plugins/com.extol.test.one_1.0.0.jar"); assertTrue("com.extol.test.one_1.0.0 is not published", one_1_0_0.exists()); IFile one_2_0_0 = result.getFile("com.extol.test.repo.feature_1.0.0-eclipse.feature/site.p2/plugins/com.extol.test.one_2.0.0.jar"); assertTrue("com.extol.test.one_2.0.0 is not published", one_2_0_0.exists()); } }