blob: 14e880296cfc2772eedd354b78447b309642e5e8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2015 IBM Corporation and others. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors: IBM - Initial API and implementation
******************************************************************************/
package org.eclipse.pde.build.internal.tests.p2;
import java.io.File;
import java.io.FilenameFilter;
import java.net.URI;
import java.net.URL;
import java.util.*;
import java.util.jar.Attributes;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import junit.framework.AssertionFailedError;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.core.helpers.FileUtils;
import org.eclipse.equinox.internal.p2.metadata.IRequiredCapability;
import org.eclipse.equinox.p2.metadata.*;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.query.QueryUtil;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
import org.eclipse.osgi.util.ManifestElement;
import org.eclipse.pde.build.internal.tests.Utils;
import org.eclipse.pde.build.tests.Activator;
import org.eclipse.pde.build.tests.BuildConfiguration;
import org.eclipse.pde.internal.build.P2InfUtils;
import org.eclipse.pde.internal.build.site.*;
import org.osgi.framework.Constants;
public class PublishingTests extends P2TestCase {
private static final boolean BUG_429228 = true;
public void testPublishBundle_simple() throws Exception {
IFolder buildFolder = newTest("PublishBundle_simple");
IFolder bundle = Utils.createFolder(buildFolder, "plugins/bundle");
Utils.writeBuffer(bundle.getFile("src/A.java"), new StringBuffer("import b.c.d.B; public class A { B b = new B(); }"));
Utils.writeBuffer(bundle.getFile("src/b/c/d/B.java"), new StringBuffer("package b.c.d; public class B { int i = 0; }"));
Utils.writeBuffer(bundle.getFile("about.txt"), new StringBuffer("All about bundle."));
Utils.writeBuffer(bundle.getFile("META-INF/p2.inf"), new StringBuffer("instructions.install=myRandomAction(foo: bar);"));
Properties properties = new Properties();
properties.put("bin.includes", "META-INF/, ., about.txt");
Attributes manifestAdditions = new Attributes();
manifestAdditions.put(new Attributes.Name("Require-Bundle"), OSGI);
Utils.generateBundleManifest(bundle, "bundle", "1.0.0.qualifier", manifestAdditions);
Utils.generatePluginBuildProperties(bundle, properties);
properties = BuildConfiguration.getScriptGenerationProperties(buildFolder, "plugin", "bundle");
properties.put("forceContextQualifier", "v1234");
properties.put("p2.gathering", "true");
generateScripts(buildFolder, properties);
String buildXMLPath = bundle.getFile("build.xml").getLocation().toOSString();
runAntScript(buildXMLPath, new String[] {"build.jars", "publish.bin.parts"}, buildFolder.getLocation().toOSString(), properties);
assertResourceFile(buildFolder, "buildRepo/plugins/bundle_1.0.0.v1234.jar");
IFile jar = buildFolder.getFile("buildRepo/plugins/bundle_1.0.0.v1234.jar");
ZipFile zip = new ZipFile(jar.getLocation().toFile());
Enumeration entries = zip.entries();
ZipEntry entry = (ZipEntry) entries.nextElement();
assertTrue(entry.getName().equalsIgnoreCase("META-INF/MANIFEST.MF"));
Map headers = new HashMap();
ManifestElement.parseBundleManifest(zip.getInputStream(entry), headers);
assertEquals(headers.get(Constants.BUNDLE_VERSION), "1.0.0.v1234");
zip.close();
HashSet contents = new HashSet();
contents.add("about.txt");
contents.add("A.class");
contents.add("b/");
contents.add("b/c/");
contents.add("b/c/d/");
contents.add("b/c/d/B.class");
assertZipContents(buildFolder, "buildRepo/plugins/bundle_1.0.0.v1234.jar", contents);
IMetadataRepository repository = loadMetadataRepository("file:" + buildFolder.getFolder("buildRepo").getLocation().toOSString());
assertNotNull(repository);
IInstallableUnit iu = getIU(repository, "bundle");
assertEquals(iu.getId(), "bundle");
assertEquals(iu.getVersion().toString(), "1.0.0.v1234");
assertRequires(iu, "osgi.bundle", OSGI);
assertTouchpoint(iu, "install", "myRandomAction");
}
public void testBug277824() throws Exception {
IFolder buildFolder = newTest("277824 space");
StringBuffer buffer = new StringBuffer("I am a file");
Utils.writeBuffer(buildFolder.getFile("file.txt"), buffer);
Properties rootProperties = new Properties();
rootProperties.put("root", "absolute:file:" + buildFolder.getFile("file.txt").getLocation().toOSString());
IFile rootFile = buildFolder.getFile("root.properties");
Utils.storeProperties(rootFile, rootProperties);
IFile productFile = buildFolder.getFile("foo.product");
Utils.generateProduct(productFile, "foo", "1.0.0.qualifier", null, new String[] {OSGI}, false);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("p2.gathering", "true");
properties.put("product", productFile.getLocation().toOSString());
properties.put("pluginList", EQUINOX_COMMON);
properties.put("generatedBuildProperties", rootFile.getLocation().toOSString());
properties.put("includeLaunchers", "false");
properties.put("configs", "win32,win32,x86");
properties.put("archivesFormat", "win32,win32,x86-folder");
properties.put("forceContextQualifier", "v1234");
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
IFolder repo = Utils.createFolder(buildFolder, "buildRepo");
IMetadataRepository metadata = loadMetadataRepository(repo.getLocationURI());
IInstallableUnit iu = getIU(metadata, "foo.root.feature.feature.group");
assertEquals(iu.getVersion().toString(), "1.0.0.v1234");
getIU(metadata, EQUINOX_COMMON);
iu = getIU(metadata, "foo");
assertRequires(iu, "org.eclipse.equinox.p2.iu", "foo.root.feature.feature.group");
assertResourceFile(buildFolder.getFile("tmp/eclipse/file.txt"));
iu = getIU(metadata, "foo.root.feature.feature.group");
assertEquals(iu.getProperty("org.eclipse.equinox.p2.name"), "foo Root Files");
}
public void testBug277824_2() throws Exception {
IFolder buildFolder = newTest("277824_2");
IFolder f = Utils.createFolder(buildFolder, "features/f");
Utils.generateFeature(buildFolder, "f", null, new String[] {EQUINOX_COMMON});
Utils.writeBuffer(f.getFile("file.txt"), new StringBuffer("I'm a file!"));
Properties properties = new Properties();
properties.put("root", "file:file.txt");
Utils.storeBuildProperties(f, properties);
IFile productFile = buildFolder.getFile("foo.product");
Utils.generateProduct(productFile, "foo", "1.0.0.qualifier", null, new String[] {OSGI}, false);
properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("p2.gathering", "true");
properties.put("product", productFile.getLocation().toOSString());
properties.put("featureList", "f");
properties.put("includeLaunchers", "false");
properties.put("configs", "win32,win32,x86");
properties.put("archivesFormat", "win32,win32,x86-folder");
properties.put("filteredDependencyCheck", "true");
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
assertResourceFile(buildFolder.getFile("tmp/eclipse/file.txt"));
IMetadataRepository meta = loadMetadataRepository(buildFolder.getFolder("buildRepo").getLocationURI());
getIU(meta, EQUINOX_COMMON);
getIU(meta, "f.feature.group");
}
public void testPublishFeature_rootFiles() throws Exception {
IFolder buildFolder = newTest("PublishFeature_rootFiles");
IFolder f = Utils.createFolder(buildFolder, "features/f");
Utils.generateFeature(buildFolder, "f", null, null);
StringBuffer buffer = new StringBuffer("I am a file");
Utils.writeBuffer(f.getFile("app/contents/file"), buffer);
Utils.writeBuffer(f.getFile("app/second"), buffer);
Properties rootProperties = new Properties();
//bug 274203
rootProperties.put("root.folder.contents", "absolute:file:" + f.getFile("app/contents/file").getLocation().toOSString());
rootProperties.put("root", "file:app/second");
rootProperties.put("root.permissions.755", "file, second");
rootProperties.put("root.permissions.766", "contents/file");
Utils.storeBuildProperties(f, rootProperties);
Properties properties = BuildConfiguration.getScriptGenerationProperties(buildFolder, "feature", "f");
properties.put("p2.gathering", "true");
properties.put("filteredDependencyCheck", "true");
generateScripts(buildFolder, properties);
String buildXMLPath = f.getFile("build.xml").getLocation().toOSString();
runAntScript(buildXMLPath, new String[] {"publish.bin.parts"}, buildFolder.getLocation().toOSString(), properties);
IMetadataRepository meta = loadMetadataRepository(buildFolder.getFolder("buildRepo").getLocationURI());
getIU(meta, "f.feature.group");
IInstallableUnit iu = getIU(meta, "f_root");
assertTouchpoint(iu, "install", "chmod(targetDir:${installFolder}, targetFile:second, permissions:755)");
assertTouchpoint(iu, "install", "chmod(targetDir:${installFolder}, targetFile:contents/file, permissions:766)");
boolean fail = false;
try {
assertTouchpoint(iu, "install", "chmod(targetDir:${installFolder}, targetFile:file, permissions:755)");
fail = true;
} catch (AssertionFailedError e) {
}
assertFalse(fail);
Set entries = new HashSet();
entries.add("contents/file");
entries.add("second");
assertZipContents(buildFolder, "buildRepo/binary/f_root_1.0.0", entries);
}
public void testPublishFeature_versionReplacement() throws Exception {
IFolder buildFolder = newTest("PublishFeature_versions");
IFolder f = Utils.createFolder(buildFolder, "features/F");
IFolder bundle = Utils.createFolder(buildFolder, "plugins/bundle");
IFolder bar = Utils.createFolder(buildFolder, "plugins/bar");
Utils.generateBundleManifest(bundle, "foo", "1.0.0.qualifier", null);
Utils.generatePluginBuildProperties(bundle, null);
Utils.writeBuffer(bundle.getFile("src/foo.java"), new StringBuffer("public class foo { int i; }"));
Attributes extra = new Attributes();
extra.put(new Attributes.Name("Eclipse-BundleShape"), "jar");
Utils.generateBundleManifest(bar, "bar", "1.0.0.qualifier", extra);
Utils.generatePluginBuildProperties(bar, null);
Utils.writeBuffer(bar.getFile("src/bar.java"), new StringBuffer("public class bar { int i; }"));
//bug 274672, write the feature manually since generateFeature always adds an unpack attribute
StringBuffer buffer = new StringBuffer();
buffer.append("<feature id=\"F\" version=\"1.0.0.qualifier\"> \n");
buffer.append(" <plugin id=\"foo\" version=\"0.0.0\" /> \n");
buffer.append(" <plugin id=\"bar\" version=\"0.0.0\" /> \n");
buffer.append("</feature> \n");
Utils.writeBuffer(f.getFile("feature.xml"), buffer);
Properties properties = new Properties();
properties.put("bin.includes", "feature.xml");
Utils.storeBuildProperties(f, properties);
Properties buildProperties = BuildConfiguration.getBuilderProperties(buildFolder);
buildProperties.put("topLevelElementId", "F");
buildProperties.put("p2.gathering", "true");
buildProperties.put("filteredDependencyCheck", "true");
buildProperties.put("archivesFormat", "group,group,group-folder");
buildProperties.put("forceContextQualifier", "12345");
Utils.storeBuildProperties(buildFolder, buildProperties);
runBuild(buildFolder);
IFile featureXML = buildFolder.getFile("feature.xml");
assertResourceFile(buildFolder, "tmp/eclipse/features/F_1.0.0.12345.jar");
Utils.extractFromZip(buildFolder, "tmp/eclipse/features/F_1.0.0.12345.jar", "feature.xml", featureXML);
IMetadataRepository repo = loadMetadataRepository(buildFolder.getFolder("tmp/eclipse").getLocationURI());
IInstallableUnit iu = getIU(repo, "foo");
assertTouchpoint(iu, "zipped", "true");
iu = getIU(repo, "bar");
boolean hasZipped = false;
try {
assertTouchpoint(iu, "zipped", "true");
hasZipped = true;
} catch (AssertionFailedError e) {
}
assertFalse(hasZipped);
BuildTimeFeatureFactory factory = new BuildTimeFeatureFactory();
BuildTimeFeature model = factory.parseBuildFeature(featureXML.getLocationURI().toURL());
assertEquals(model.getVersion(), "1.0.0.12345");
assertEquals(model.getPluginEntries()[0].getVersion(), "1.0.0.12345");
}
public void testPublishBundle_customCallbacks() throws Exception {
IFolder buildFolder = newTest("PublishBundle_callbacks");
IFolder bundle = Utils.createFolder(buildFolder, "plugins/bundle");
Utils.writeBuffer(bundle.getFile("src/A.java"), new StringBuffer("import b.B; public class A { B b = new B(); }"));
Utils.writeBuffer(bundle.getFile("src/b/B.java"), new StringBuffer("package b; public class B { int i = 0; }"));
Utils.writeBuffer(bundle.getFile("META-INF/p2.inf"), new StringBuffer("instructions.install=myRandomAction(foo: bar);"));
Properties properties = new Properties();
properties.put("bin.includes", "META-INF/, .");
properties.put("customBuildCallbacks", "customBuildCallbacks.xml");
Attributes manifestAdditions = new Attributes();
manifestAdditions.put(new Attributes.Name("Require-Bundle"), OSGI);
Utils.generateBundleManifest(bundle, "bundle", "1.0.0.qualifier", manifestAdditions);
Utils.generatePluginBuildProperties(bundle, properties);
StringBuffer buffer = new StringBuffer();
buffer.append("<project name=\"customGather\" default=\"noDefault\"> \n");
buffer.append(" <target name=\"pre.gather.bin.parts\"> \n");
buffer.append(" <concat destfile=\"${target.folder}/a.txt\"> \n");
buffer.append(" Mary had a little lamb. \n");
buffer.append(" </concat> \n");
buffer.append(" </target> \n");
buffer.append(" <target name=\"post.gather.bin.parts\"> \n");
buffer.append(" <copy file=\"${build.result.folder}/@dot/A.class\" \n");
buffer.append(" tofile=\"${target.folder}/b.txt\" /> \n");
buffer.append(" </target> \n");
buffer.append("</project> \n");
Utils.writeBuffer(bundle.getFile("customBuildCallbacks.xml"), buffer);
properties = BuildConfiguration.getScriptGenerationProperties(buildFolder, "plugin", "bundle");
properties.put("forceContextQualifier", "v1234");
properties.put("p2.gathering", "true");
generateScripts(buildFolder, properties);
String buildXMLPath = bundle.getFile("build.xml").getLocation().toOSString();
runAntScript(buildXMLPath, new String[] {"build.jars", "publish.bin.parts"}, buildFolder.getLocation().toOSString(), properties);
HashSet contents = new HashSet();
contents.add("a.txt");
contents.add("b.txt");
assertZipContents(buildFolder, "buildRepo/plugins/bundle_1.0.0.v1234.jar", contents);
}
public void testPublishBundle_p2infCUs() throws Exception {
IFolder buildFolder = newTest("PublishBundle_p2infCUs");
IFolder bundle = Utils.createFolder(buildFolder, "plugins/bundle");
Utils.generateBundle(bundle, "bundle");
Utils.writeBuffer(bundle.getFile("src/A.java"), new StringBuffer("public class A { int i; }"));
StringBuffer inf = new StringBuffer();
inf.append("requires.1.namespace=my.awesome.namespace \n");
inf.append("requires.1.name=bundle.cu \n");
inf.append("requires.1.range=[1.0.0, 1.0.0] \n");
inf.append("requires.1.greedy=true \n");
inf.append("units.1.id=bundle.cu \n");
inf.append("units.1.version=1.0.0 \n");
inf.append("units.1.hostRequirements.1.namespace=osgi.bundle \n");
inf.append("units.1.hostRequirements.1.name=bundle \n");
inf.append("units.1.hostRequirements.1.range=[1.0.0, 1.0.0] \n");
inf.append("units.1.hostRequirements.2.namespace=org.eclipse.equinox.p2.eclipse.type\n");
inf.append("units.1.hostRequirements.2.name=bundle \n");
inf.append("units.1.hostRequirements.2.range=[1.0.0, 2.0.0) \n");
inf.append("units.1.hostRequirements.2.greedy=false \n");
inf.append("units.1.requires.1.namespace=osgi.bundle \n");
inf.append("units.1.requires.1.name=bundle \n");
inf.append("units.1.requires.1.range=[1.0.0, 1.0.0] \n");
inf.append("units.1.provides.1.namespace=my.awesome.namespace \n");
inf.append("units.1.provides.1.name=bundle.cu \n");
inf.append("units.1.provides.1.version=1.0.0 \n");
inf.append("units.1.instructions.configure=setStartLevel(startLevel:1);\\\n");
inf.append(" markStarted(started: true); \n");
inf.append("units.1.instructions.unconfigure=setStartLevel(startLevel:-1);\\\n");
inf.append(" markStarted(started: false); \n");
inf.append("units.1.instructions.install=installBundle(bundle:${artifact});\n");
inf.append("units.1.instructions.uninstall=uninstallBundle(bundle:${artifact});\n");
Utils.writeBuffer(bundle.getFile("META-INF/p2.inf"), inf);
IFile productFile = buildFolder.getFile("foo.product");
Utils.generateProduct(productFile, "foo", "1.0.0", null, new String[] {OSGI, "bundle"}, false);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("product", productFile.getLocation().toOSString());
properties.put("configs", "*,*,*");
properties.put("includeLaunchers", "false");
properties.put("archivesFormat", "*,*,*-folder");
properties.put("filteredDependencyCheck", "true");
properties.put("filterP2Base", "true");
properties.put("p2.gathering", "true");
properties.put("p2.director.log", "director.log");
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
assertLogContainsLine(buildFolder.getFile("tmp/eclipse/configuration/config.ini"), "bundle_1.0.0.jar@1\\:start");
assertLogContainsLine(buildFolder.getFile("director.log"), "Installing foo 1.0.0");
}
protected File findExecutableFeature(File delta) throws Exception {
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.startsWith(EQUINOX_EXECUTABLE);
}
};
File[] features = new File(delta, "features").listFiles(filter);
assertTrue(features.length > 0);
Arrays.sort(features, new Comparator() {
public int compare(Object o1, Object o2) {
return -1 * ((File) o1).getName().compareTo(((File) o2).getName());
}
});
return features[0];
}
public void testPublishFeature_customCallbacks() throws Exception {
IFolder buildFolder = newTest("PublishFeature_custom");
IFolder f = buildFolder.getFolder("features/f");
Utils.generateFeature(buildFolder, "f", null, null);
Properties properties = new Properties();
properties.put("bin.includes", "feature.xml");
properties.put("customBuildCallbacks", "customBuildCallbacks.xml");
Utils.storeBuildProperties(f, properties);
StringBuffer buffer = new StringBuffer();
buffer.append("<project name=\"customGather\" default=\"noDefault\"> \n");
buffer.append(" <target name=\"pre.gather.bin.parts\"> \n");
buffer.append(" <concat destfile=\"${feature.directory}/a.txt\"> \n");
buffer.append(" Mary had a little lamb. \n");
buffer.append(" </concat> \n");
buffer.append(" </target> \n");
buffer.append("</project> \n");
Utils.writeBuffer(f.getFile("customBuildCallbacks.xml"), buffer);
buffer = new StringBuffer();
buffer.append("provides.0.name=my.provides\n");
buffer.append("provides.0.namespace=test\n");
buffer.append("provides.0.version=1.2.3\n");
Utils.writeBuffer(f.getFile("p2.inf"), buffer);
properties = BuildConfiguration.getScriptGenerationProperties(buildFolder, "feature", "f");
properties.put("p2.gathering", "true");
generateScripts(buildFolder, properties);
String buildXMLPath = f.getFile("build.xml").getLocation().toOSString();
runAntScript(buildXMLPath, new String[] {"publish.bin.parts"}, buildFolder.getLocation().toOSString(), properties);
HashSet contents = new HashSet();
contents.add("a.txt");
contents.add("feature.xml");
contents.add("p2.inf");
assertZipContents(buildFolder, "buildRepo/features/f_1.0.0.jar", contents, false);
//p2.inf was not expected in the jar
assertEquals(contents.size(), 1);
assertTrue(contents.contains("p2.inf"));
IMetadataRepository repo = loadMetadataRepository(buildFolder.getFolder("buildRepo").getLocationURI());
IInstallableUnit iu = getIU(repo, "f.feature.group");
assertProvides(iu, "test", "my.provides");
}
public void testPublishFeature_ExecutableFeature() throws Exception {
if (BUG_429228)
return;
IFolder buildFolder = newTest("PublishFeature_Executable");
File delta = Utils.findDeltaPack();
assertNotNull(delta);
File originalExecutable = findExecutableFeature(delta);
Properties properties = BuildConfiguration.getScriptGenerationProperties(buildFolder, "feature", EQUINOX_EXECUTABLE);
properties.put("launcherName", "eclipse");
properties.put("p2.gathering", "true");
if (!delta.equals(new File((String) properties.get("baseLocation"))))
properties.put("pluginPath", delta.getAbsolutePath());
generateScripts(buildFolder, properties);
String buildXMLPath = new File(originalExecutable, "build.xml").getAbsolutePath();
runAntScript(buildXMLPath, new String[] {"publish.bin.parts"}, buildFolder.getLocation().toOSString(), properties);
String executable = EQUINOX_EXECUTABLE;
String fileName = originalExecutable.getName();
String version = fileName.substring(fileName.indexOf('_') + 1);
Set entries = new HashSet();
// Linux zips contain launcher and about.html (libCairo no longer packaged in the delta pack (bug 354978))
// entries.add("libcairo-swt.so");
// entries.add("about_files/about_cairo.html");
// entries.add("about_files/mpl-v11.txt");
// entries.add("about_files/pixman-licenses.txt");
// entries.add("about_files/");
entries.add("launcher");
entries.add("about.html");
assertZipContents(buildFolder.getFolder("buildRepo/binary"), executable + "_root.gtk.linux.x86_" + version, entries);
// Mac zips contain app structure
entries.add("Eclipse.app/");
entries.add("Eclipse.app/Contents/");
entries.add("Eclipse.app/Contents/Info.plist");
entries.add("Eclipse.app/Contents/MacOS/");
entries.add("Eclipse.app/Contents/MacOS/eclipse.ini");
entries.add("Eclipse.app/Contents/MacOS/launcher");
assertZipContents(buildFolder.getFolder("buildRepo/binary"), executable + "_root.cocoa.macosx.x86_" + version, entries);
// Windows zips just contain the launcher
IMetadataRepository repository = loadMetadataRepository("file:" + buildFolder.getFolder("buildRepo").getLocation().toOSString());
assertNotNull(repository);
IInstallableUnit iu = getIU(repository, "org.eclipse.equinox.executable_root.gtk.linux.ppc");
assertEquals(iu.getVersion().toString(), version);
// LibCairo no longer installed using a touchpoint (Bug 354978)
// assertTouchpoint(iu, "install", "chmod(targetDir:${installFolder}, targetFile:libcairo-swt.so, permissions:755);");
}
public void testPublishBundle_APITooling() throws Exception {
IFolder buildFolder = newTest("PublishBundle_APITooling");
IFolder bundle = Utils.createFolder(buildFolder, "plugins/bundle");
Utils.writeBuffer(bundle.getFile("src/A.java"), new StringBuffer("import b.B; public class A { B b = new B(); /** @nooverride */public void Bar(){}}"));
Utils.writeBuffer(bundle.getFile("src/b/B.java"), new StringBuffer("package b; /** @noextend */public class B { /** @noreference */public int i = 0; public void Foo(){}}"));
StringBuffer buffer = new StringBuffer();
buffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n");
buffer.append("<projectDescription> \n");
buffer.append(" <name>org.eclipse.pde.build</name> \n");
buffer.append(" <natures> \n");
buffer.append(" <nature>org.eclipse.jdt.core.javanature</nature> \n");
buffer.append(" <nature>org.eclipse.pde.PluginNature</nature> \n");
buffer.append(" <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> \n");
buffer.append(" </natures> \n");
buffer.append("</projectDescription> \n");
Utils.writeBuffer(bundle.getFile(".project"), buffer);
Properties properties = new Properties();
properties.put("bin.includes", "META-INF/, .");
Attributes manifestAdditions = new Attributes();
manifestAdditions.put(new Attributes.Name("Require-Bundle"), OSGI);
manifestAdditions.put(new Attributes.Name("Export-Package"), "b");
Utils.generateBundleManifest(bundle, "bundle", "1.0.0.qualifier", manifestAdditions);
Utils.generatePluginBuildProperties(bundle, properties);
properties = BuildConfiguration.getScriptGenerationProperties(buildFolder, "plugin", "bundle");
properties.put("forceContextQualifier", "v1234");
properties.put("generateAPIDescription", "true");
properties.put("p2.gathering", "true");
generateScripts(buildFolder, properties);
String buildXMLPath = bundle.getFile("build.xml").getLocation().toOSString();
runAntScript(buildXMLPath, new String[] {"build.jars", "publish.bin.parts"}, buildFolder.getLocation().toOSString(), properties);
assertResourceFile(buildFolder, "buildRepo/plugins/bundle_1.0.0.v1234.jar");
HashSet contents = new HashSet();
contents.add("A.class");
contents.add("b/B.class");
contents.add(".api_description");
assertZipContents(buildFolder, "buildRepo/plugins/bundle_1.0.0.v1234.jar", contents);
}
public void testPublish_Packaging_1() throws Exception {
IFolder buildFolder = newTest("packaging_1");
IFolder a = Utils.createFolder(buildFolder, "plugins/a");
Utils.generateFeature(buildFolder, "F", new String[] {"org.eclipse.cvs"}, new String[] {"a"});
Utils.generateBundle(a, "a");
Utils.writeBuffer(a.getFile("src/A.java"), new StringBuffer("public class A { int i; }"));
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "F");
properties.put("p2.gathering", "true");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
buildFolder.refreshLocal(IResource.DEPTH_INFINITE, null);
IMetadataRepository repository = loadMetadataRepository("file:" + buildFolder.getFolder("buildRepo").getLocation().toOSString());
assertNotNull(repository);
HashSet entries = new HashSet();
IInstallableUnit iu = getIU(repository, "a");
assertEquals(iu.getVersion().toString(), "1.0.0");
iu = getIU(repository, "org.eclipse.team.cvs.core");
assertNotNull(iu);
entries.add("plugins/org.eclipse.team.cvs.core_" + iu.getVersion() + ".jar");
IFile file = buildFolder.getFile("buildRepo/plugins/org.eclipse.team.cvs.core_" + iu.getVersion() + ".jar");
assertTrue(file.exists());
assertJarVerifies(file.getLocation().toFile());
iu = getIU(repository, "org.eclipse.cvs");
assertNotNull(iu);
entries.add("plugins/org.eclipse.cvs_" + iu.getVersion() + ".jar");
assertResourceFile(buildFolder, "buildRepo/plugins/org.eclipse.cvs_" + iu.getVersion() + ".jar");
iu = getIU(repository, "org.eclipse.team.cvs.ui");
assertNotNull(iu);
entries.add("plugins/org.eclipse.team.cvs.ui_" + iu.getVersion() + ".jar");
assertResourceFile(buildFolder, "buildRepo/plugins/org.eclipse.team.cvs.ui_" + iu.getVersion() + ".jar");
iu = getIU(repository, "org.eclipse.team.cvs.ssh2");
assertNotNull(iu);
entries.add("plugins/org.eclipse.team.cvs.ssh2_" + iu.getVersion() + ".jar");
assertResourceFile(buildFolder, "buildRepo/plugins/org.eclipse.team.cvs.ssh2_" + iu.getVersion() + ".jar");
iu = getIU(repository, "org.eclipse.cvs.feature.jar");
file = buildFolder.getFile("buildRepo/features/org.eclipse.cvs_" + iu.getVersion() + ".jar");
assertTrue(file.exists());
entries.add("features/org.eclipse.cvs_" + iu.getVersion() + ".jar");
assertJarVerifies(file.getLocation().toFile());
entries.add("artifacts.xml");
entries.add("content.xml");
assertZipContents(buildFolder, "I.TestBuild/F-TestBuild-group.group.group.zip", entries);
}
public void testPublish_Source_1() throws Exception {
IFolder buildFolder = newTest("source_1");
IFolder bundle = Utils.createFolder(buildFolder, "plugins/bundle");
Utils.writeBuffer(bundle.getFile("src/A.java"), new StringBuffer("import b.B; public class A { B b = new B(); public void Bar(){}}"));
Utils.writeBuffer(bundle.getFile("src/b/B.java"), new StringBuffer("package b; public class B { public int i = 0; public void Foo(){}}"));
Utils.generateBundle(bundle, "bundle");
Utils.generateFeature(buildFolder, "F", null, new String[] {"bundle", "bundle.source"});
Properties properties = new Properties();
properties.put("generate.plugin@bundle.source", "bundle");
properties.put("individualSourceBundles", "true");
Utils.storeBuildProperties(buildFolder.getFolder("features/F"), properties);
properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "F");
properties.put("p2.gathering", "true");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
assertResourceFile(buildFolder, "buildRepo/plugins/bundle.source_1.0.0.jar");
Set entries = new HashSet();
entries.add("A.java");
entries.add("b/B.java");
assertZipContents(buildFolder, "buildRepo/plugins/bundle.source_1.0.0.jar", entries);
}
public void testPublish_Brand_1() throws Exception {
if (BUG_429228)
return;
IFolder buildFolder = newTest("brand_1");
IFolder rcp = Utils.createFolder(buildFolder, "rcp");
File delta = Utils.findDeltaPack();
assertNotNull(delta);
File executable = findExecutableFeature(delta);
String executableVersion = executable.getName().substring(executable.getName().indexOf('_') + 1);
IFile product = rcp.getFile("rcp.product");
StringBuffer branding = new StringBuffer();
branding.append("<launcher name=\"branded\"> \n");
branding.append(" <macosx icon=\"mail.icns\" /> \n");
branding.append(" <win useIco=\"true\"> \n");
branding.append(" <ico path=\"mail.ico\" /> \n");
branding.append(" <bmp/> \n");
branding.append(" </win> \n");
branding.append("</launcher> \n");
//bug 273115 - no version
Utils.generateProduct(product, "org.example.rcp", null, null, new String[] {OSGI}, false, branding);
//steal the icons from test 237922
URL ico = FileLocator.find(Platform.getBundle(Activator.PLUGIN_ID), new Path("/resources/237922/rcp/icons/mail.ico"), null);
IFile icoFile = rcp.getFile("mail.ico");
icoFile.create(ico.openStream(), IResource.FORCE, null);
//cheat and spoof a icns file for mac
Utils.copy(icoFile.getLocation().toFile(), new File(rcp.getLocation().toFile(), "mail.icns"));
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("product", product.getLocation().toOSString());
if (!delta.equals(new File((String) properties.get("baseLocation"))))
properties.put("pluginPath", delta.getAbsolutePath());
//bug 274527 - cocoa.x86_64
properties.put("configs", "win32,win32,x86 & macosx, cocoa, x86_64");
properties.put("p2.gathering", "true");
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
Set entries = new HashSet();
entries.add("branded.app/Contents/Info.plist");
entries.add("branded.app/Contents/MacOS/branded.ini");
entries.add("branded.app/Contents/MacOS/branded");
entries.add("branded.app/Contents/Resources/mail.icns");
assertZipContents(buildFolder.getFolder("buildRepo/binary"), "org.example.rcp_root.cocoa.macosx.x86_64_" + executableVersion, entries);
entries.clear();
entries.add("branded.exe");
assertZipContents(buildFolder.getFolder("buildRepo/binary"), "org.example.rcp_root.win32.win32.x86_" + executableVersion, entries);
IMetadataRepository repository = loadMetadataRepository("file:" + buildFolder.getFolder("buildRepo").getLocation().toOSString());
assertNotNull(repository);
IInstallableUnit iu = getIU(repository, "org.example.rcp");
assertEquals(iu.getId(), "org.example.rcp");
assertEquals(iu.getVersion().toString(), "0.0.0");
assertRequires(iu, "org.eclipse.equinox.p2.iu", OSGI);
//bug 218377
iu = getIU(repository, "org.example.rcp_root.cocoa.macosx.x86_64");
assertTouchpoint(iu, "install", "targetFile:branded.app/Contents/MacOS/branded");
assertResourceFile(buildFolder, "I.TestBuild/eclipse-win32.win32.x86.zip");
iu = getIU(repository, "org.eclipse.equinox.launcher.cocoa.macosx.x86_64");
entries.clear();
entries.add("eclipse/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_" + iu.getVersion() + "/");
assertZipContents(buildFolder, "I.TestBuild/eclipse-macosx.cocoa.x86_64.zip", entries);
//bug 295282, bug 282652
IFile iniFile = buildFolder.getFile("branded.ini");
Utils.extractFromZip(buildFolder, "I.TestBuild/eclipse-macosx.cocoa.x86_64.zip", "eclipse/branded.app/Contents/MacOS/branded.ini", iniFile);
assertLogContainsLine(iniFile, "../../../plugins/org.eclipse.equinox.launcher");
IFile wrongFile = buildFolder.getFile("wrong.ini");
Utils.extractFromZip(buildFolder, "I.TestBuild/eclipse-macosx.cocoa.x86_64.zip", "eclipse/Branded.app/Contents/MacOS/branded.ini", wrongFile);
assertFalse(wrongFile.exists());
}
public void testAssemblePackage() throws Exception {
IFolder buildFolder = newTest("publishAssemblePackage");
IFolder p = Utils.createFolder(buildFolder, "plugins/p");
Utils.writeBuffer(p.getFile("src/A.java"), new StringBuffer("import b.B; public class A { B b = new B(); public void Bar(){}}"));
Utils.writeBuffer(p.getFile("src/b/B.java"), new StringBuffer("package b; public class B { public int i = 0; public void Foo(){}}"));
Utils.generateBundle(p, "p");
IFolder f = Utils.createFolder(buildFolder, "features/f");
Utils.generateFeature(buildFolder, "f", null, new String[] {"p", OSGI});
Utils.writeBuffer(f.getFile("about.html"), new StringBuffer("about!\n"));
Utils.writeBuffer(f.getFile("rootFiles/license.html"), new StringBuffer("license"));
Properties properties = new Properties();
properties.put("bin.includes", "about.html, feature.xml");
properties.put("root", "rootFiles");
Utils.storeBuildProperties(f, properties);
properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "f");
if (Platform.getOS().equals("linux"))
properties.put("archivesFormat", "group,group,group-tar");
else
properties.put("archivesFormat", "group,group,group-antTar");
properties.put("p2.metadata.repo.name", "MyMeta");
properties.put("p2.metadata.repo.name", "MyArtifact");
properties.put("p2.compress", "true");
properties.put("p2.gathering", "true");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
IMetadataRepository repository = loadMetadataRepository("file:" + buildFolder.getFolder("buildRepo").getLocation().toOSString());
IInstallableUnit osgi = getIU(repository, OSGI);
IFile tar = buildFolder.getFile("I.TestBuild/f-TestBuild-group.group.group.tar.gz");
assertResourceFile(tar);
File untarred = new File(buildFolder.getLocation().toFile(), "untarred");
FileUtils.unzipFile(tar.getLocation().toFile(), untarred);
assertResourceFile(buildFolder, "untarred/plugins/org.eclipse.osgi_" + osgi.getVersion() + ".jar");
assertResourceFile(buildFolder, "untarred/binary/f_root_1.0.0");
assertResourceFile(buildFolder, "untarred/plugins/p_1.0.0.jar");
assertResourceFile(buildFolder, "untarred/features/f_1.0.0.jar");
assertResourceFile(buildFolder, "untarred/artifacts.jar");
assertResourceFile(buildFolder, "untarred/content.jar");
HashSet entries = new HashSet();
entries.add("license.html");
assertZipContents(buildFolder, "untarred/binary/f_root_1.0.0", entries);
StringBuffer buffer = new StringBuffer();
buffer = new StringBuffer();
buffer.append("<site> \n");
buffer.append(" <feature url=\"features/f_1.0.0.jar\" id=\"f\" version=\"1.0.0\"> \n");
buffer.append(" <category name=\"new_category_1\"/> \n");
buffer.append(" </feature> \n");
buffer.append(" <category-def name=\"new_category_1\" label=\"New Category 1\"/> \n");
buffer.append("</site> \n");
IFile siteXML = buildFolder.getFile("site.xml");
Utils.writeBuffer(siteXML, buffer);
String repoLocation = URIUtil.toUnencodedString(buildFolder.getFolder("untarred").getLocationURI());
buffer = new StringBuffer();
buffer.append("<project name=\"test\" default=\"noDefault\"> \n");
buffer.append(" <target name=\"category\"> \n");
buffer.append(" <eclipse.publish.featuresAndBundles \n");
buffer.append(" artifactrepository=\"" + repoLocation + "\" \n");
buffer.append(" metadatarepository=\"" + repoLocation + "\" \n");
buffer.append(" site=\"" + URIUtil.toUnencodedString(siteXML.getLocationURI()) + "\" \n");
buffer.append(" compress=\"true\" /> \n");
buffer.append(" </target> \n");
buffer.append("</project> \n");
IFile script = buildFolder.getFile("append.xml");
Utils.writeBuffer(script, buffer);
runAntScript(script.getLocation().toOSString(), new String[] {"category"}, buildFolder.getLocation().toOSString(), null);
assertResourceFile(buildFolder, "untarred/artifacts.jar");
assertResourceFile(buildFolder, "untarred/content.jar");
IMetadataRepository repo = loadMetadataRepository(repoLocation);
getIU(repo, "new_category_1");
}
public void testPublishAndRunSimpleProduct() throws Exception {
IFolder buildFolder = newTest("PublishAndRunSimpleProduct");
File delta = Utils.findDeltaPack();
assertNotNull(delta);
//headless rcp hello world
IFolder headless = Utils.createFolder(buildFolder, "plugins/headless");
StringBuffer buffer = new StringBuffer();
buffer.append("package headless; \n");
buffer.append("import org.eclipse.equinox.app.IApplication; \n");
buffer.append("import org.eclipse.equinox.app.IApplicationContext; \n");
buffer.append("public class Application implements IApplication { \n");
buffer.append(" public Object start(IApplicationContext context) throws Exception { \n");
buffer.append(" System.out.println(\"Hello RCP World!\"); \n");
buffer.append(" return IApplication.EXIT_OK; \n");
buffer.append(" } \n");
buffer.append(" public void stop() { \n");
buffer.append(" } \n");
buffer.append("} \n");
Utils.writeBuffer(headless.getFile("src/headless/Application.java"), buffer);
buffer = new StringBuffer();
buffer.append("<plugin> \n");
buffer.append(" <extension id=\"application\" point=\"org.eclipse.core.runtime.applications\">\n");
buffer.append(" <application> \n");
buffer.append(" <run class=\"headless.Application\"/> \n");
buffer.append(" </application> \n");
buffer.append(" </extension> \n");
buffer.append(" <extension id=\"product\" point=\"org.eclipse.core.runtime.products\"> \n");
buffer.append(" <product application=\"headless.application\" name=\"Headless Name\"/> \n");
buffer.append(" </extension> \n");
buffer.append("</plugin> \n");
Utils.writeBuffer(headless.getFile("plugin.xml"), buffer);
Attributes additionalAttributes = new Attributes();
additionalAttributes = new Attributes();
additionalAttributes.put(new Attributes.Name("Require-Bundle"), "org.eclipse.core.runtime");
additionalAttributes.put(new Attributes.Name("Bundle-ActivationPolicy"), "lazy");
Utils.generateBundleManifest(headless, "headless;singleton:=true", "1.0.0", additionalAttributes);
Properties properties = new Properties();
properties.put("bin.includes", "META-INF/, ., plugin.xml");
Utils.generatePluginBuildProperties(headless, properties);
IFile productFile = buildFolder.getFile("headless.product");
String[] bundles = new String[] {"headless", "org.eclipse.core.contenttype", "org.eclipse.core.jobs", "org.eclipse.core.runtime", EQUINOX_APP, EQUINOX_COMMON, EQUINOX_PREFERENCES, EQUINOX_REGISTRY, OSGI};
Utils.generateProduct(productFile, "headless.product", "1.0.0.qualifier", "headless.application", "headless", bundles, false, null);
Properties p2Inf = new Properties(); // bug 268223
p2Inf.put("instructions.configure", "addRepository(type:0,location:file${#58}//foo/bar);");
Utils.storeProperties(buildFolder.getFile("p2.inf"), p2Inf);
properties = BuildConfiguration.getBuilderProperties(buildFolder);
String config = Platform.getOS() + ',' + Platform.getWS() + ',' + Platform.getOSArch();
if (!delta.equals(new File((String) properties.get("baseLocation"))))
properties.put("pluginPath", delta.getAbsolutePath());
if (Platform.getOS().equals("macosx"))
properties.put("archivePrefix", "Headless.app");
properties.put("product", productFile.getLocation().toOSString());
properties.put("configs", config);
properties.put("archivesFormat", config + "-folder");
properties.put("filteredDependencyCheck", "true");
properties.put("p2.gathering", "true");
properties.put("p2.metadata.repo", "file:" + buildFolder.getFolder("finalRepo").getLocation().toOSString());
properties.put("p2.artifact.repo", "file:" + buildFolder.getFolder("finalRepo").getLocation().toOSString());
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
IFile configFile = buildFolder.getFile("/tmp/eclipse/configuration/config.ini");
if (Platform.getOS().equals("macosx"))
configFile = buildFolder.getFile("/tmp/Headless.app/Contents/Eclipse/configuration/config.ini");
assertLogContainsLine(configFile, "eclipse.application=headless.application");
assertLogContainsLine(configFile, "eclipse.product=headless.product");
if (Platform.getOS().equals("macosx")) {
IFile iniFile = buildFolder.getFile("/tmp/Headless.app/Contents/Eclipse/headless.ini");
assertLogContainsLines(iniFile, new String[] {"-startup", "plugins/org.eclipse.equinox.launcher_"});
assertLogContainsLines(iniFile, new String[] {"--launcher.library", "plugins/org.eclipse.equinox.launcher."});
} else {
IFile iniFile = buildFolder.getFile("/tmp/eclipse/headless.ini");
assertLogContainsLines(iniFile, new String[] {"-startup", "plugins/org.eclipse.equinox.launcher_"});
assertLogContainsLines(iniFile, new String[] {"--launcher.library", "plugins/org.eclipse.equinox.launcher."});
}
IFolder binaryFolder = buildFolder.getFolder("/tmp/eclipse/binary");
assertFalse(binaryFolder.exists());
IMetadataRepository finalRepo = loadMetadataRepository("file:" + buildFolder.getFolder("finalRepo").getLocation().toOSString());
getIU(finalRepo, "a.jre.javase");
IInstallableUnit productIu = getIU(finalRepo, "headless.product");
assertFalse(productIu.getVersion().toString().equals("1.0.0.qualifier")); //bug 246060, should be a timestamp
//check up to the date on the timestamp, don't worry about hours/mins
assertTrue(PublisherHelper.toOSGiVersion(productIu.getVersion()).getQualifier().startsWith(QualifierReplacer.getDateQualifier().substring(0, 8)));
assertTouchpoint(productIu, "configure", "addRepository(type:0,location:file${#58}//foo/bar);");
IInstallableUnit iu = getIU(finalRepo, "toolingorg.eclipse.equinox.common");
assertEquals(iu.getVersion(), productIu.getVersion());
iu = getIU(finalRepo, "toolingheadless.product_root." + Platform.getWS() + '.' + Platform.getOS() + '.' + Platform.getOSArch());
assertTouchpoint(iu, "configure", "setLauncherName(name:headless");
assertEquals(iu.getVersion(), productIu.getVersion());
}
public void testBug265726() throws Exception {
IFolder buildFolder = newTest("265726");
if (Platform.getOS().equals("win32") && buildFolder.getLocation().toOSString().length() > 70) {
System.out.println("Skipping PublishingTests.testBug265726() because of path length issues.\n");
return;
}
IFolder p = Utils.createFolder(buildFolder, "plugins/p");
Utils.writeBuffer(p.getFile("src/A.java"), new StringBuffer("import b.B; public class A { B b = new B(); public void Bar(){}}"));
Utils.writeBuffer(p.getFile("src/b/B.java"), new StringBuffer("package b; public class B { public int i = 0; public void Foo(){}}"));
Utils.generateBundle(p, "p");
IFolder f = Utils.createFolder(buildFolder, "features/f");
Utils.generateFeature(buildFolder, "f", new String[] {"org.eclipse.rcp"}, new String[] {"p"});
Utils.writeBuffer(buildFolder.getFile("features/f/p2.inf"), new StringBuffer("properties.1.name=org.eclipse.equinox.p2.type.group\nproperties.1.value=false\n"));
Utils.writeBuffer(f.getFile("about.html"), new StringBuffer("about!\n"));
Properties properties = new Properties();
properties.put("bin.includes", "about.html, feature.xml");
Utils.storeBuildProperties(f, properties);
URL resource = FileLocator.find(Platform.getBundle("org.eclipse.pde.build.tests"), new org.eclipse.core.runtime.Path("/resources/keystore/keystore"), null);
assertNotNull(resource);
String keystorePath = FileLocator.toFileURL(resource).getPath();
properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "f");
properties.put("archivesFormat", "group,group,group-folder");
properties.put("p2.gathering", "true");
properties.put("signJars", "true");
properties.put("sign.alias", "pde.build");
properties.put("sign.keystore", keystorePath);
properties.put("sign.storepass", "storepass");
properties.put("sign.keypass", "keypass");
properties.put("jarProcessor.unsign", "true");
// TODO change this to "false" if you want to run the tests in 4.x builds.
properties.put("filteredDependencyCheck", "true");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
//bug 270887
IFolder repo = Utils.createFolder(buildFolder, "buildRepo");
URI repoURI = URIUtil.fromString("file:" + repo.getLocation().toOSString());
assertManagerDoesntContain(repoURI);
IMetadataRepository repository = loadMetadataRepository("file:" + buildFolder.getFolder("tmp/eclipse").getLocation().toOSString());
assertNotNull(repository);
//bug 274703
IInstallableUnit iu = getIU(repository, "f.feature.group");
assertFalse(Boolean.valueOf(iu.getProperty("org.eclipse.equinox.p2.type.group")).booleanValue());
File buildFile = buildFolder.getLocation().toFile();
assertJarVerifies(new File(buildFile, "tmp/eclipse/plugins/p_1.0.0.jar"), true);
assertJarVerifies(new File(buildFile, "tmp/eclipse/features/f_1.0.0.jar"), true);
HashSet entries = new HashSet();
entries.add("META-INF/PDE_BUIL.SF");
entries.add("META-INF/PDE_BUIL.DSA");
iu = getIU(repository, "com.ibm.icu");
assertNotNull(iu);
assertZipContents(buildFolder, "tmp/eclipse/plugins/com.ibm.icu_" + iu.getVersion() + ".jar", entries);
assertJarVerifies(new File(buildFile, "tmp/eclipse/plugins/com.ibm.icu_" + iu.getVersion() + ".jar"));
iu = getIU(repository, "org.eclipse.core.commands");
assertNotNull(iu);
assertZipContents(buildFolder, "tmp/eclipse/plugins/org.eclipse.core.commands_" + iu.getVersion() + ".jar", entries);
assertJarVerifies(new File(buildFile, "tmp/eclipse/plugins/org.eclipse.core.commands_" + iu.getVersion() + ".jar"));
iu = getIU(repository, EQUINOX_APP);
assertNotNull(iu);
assertZipContents(buildFolder, "tmp/eclipse/plugins/org.eclipse.equinox.app_" + iu.getVersion() + ".jar", entries);
iu = getIU(repository, "org.eclipse.help");
assertNotNull(iu);
assertZipContents(buildFolder, "tmp/eclipse/plugins/org.eclipse.help_" + iu.getVersion() + ".jar", entries);
iu = getIU(repository, "org.eclipse.swt");
assertNotNull(iu);
assertZipContents(buildFolder, "tmp/eclipse/plugins/org.eclipse.swt_" + iu.getVersion() + ".jar", entries);
iu = getIU(repository, "org.eclipse.ui");
assertNotNull(iu);
assertZipContents(buildFolder, "tmp/eclipse/plugins/org.eclipse.ui_" + iu.getVersion() + ".jar", entries);
}
public void testMultiConfig() throws Exception {
IFolder buildFolder = newTest("multiConfig");
Utils.generateFeature(buildFolder, "f", null, new String[] {OSGI + ";os=win32", EQUINOX_COMMON + ";os=linux"});
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "f");
properties.put("configs", "win32,win32,x86 & linux,gtk,x86");
properties.put("p2.gathering", "true");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
IFile tar = buildFolder.getFile("I.TestBuild/f-TestBuild-group.group.group.zip");
assertResourceFile(tar);
File untarred = new File(buildFolder.getLocation().toFile(), "unzipped");
FileUtils.unzipFile(tar.getLocation().toFile(), untarred);
IMetadataRepository repository = loadMetadataRepository("file:" + buildFolder.getFolder("unzipped").getLocation().toOSString());
IInstallableUnit osgi = getIU(repository, OSGI);
IInstallableUnit common = getIU(repository, EQUINOX_COMMON);
assertResourceFile(buildFolder, "unzipped/plugins/org.eclipse.osgi_" + osgi.getVersion() + ".jar");
assertResourceFile(buildFolder, "unzipped/plugins/org.eclipse.equinox.common_" + common.getVersion() + ".jar");
assertResourceFile(buildFolder, "unzipped/artifacts.xml");
assertResourceFile(buildFolder, "unzipped/content.xml");
}
public void testShape_267506() throws Exception {
IFolder buildFolder = newTest("publishShape");
IFolder a = Utils.createFolder(buildFolder, "plugins/a");
IFolder b = Utils.createFolder(buildFolder, "plugins/b");
Utils.generateFeature(buildFolder, "f", null, new String[] {"a;unpack=true", "b;unpack=false"});
Utils.generateBundle(a, "a");
//bug 287537
Properties props = new Properties();
props.put("customBuildCallbacks", "true");
Utils.generatePluginBuildProperties(a, props);
Utils.writeBuffer(a.getFile("src/A.java"), new StringBuffer("public class A { int i; }"));
Properties includes = new Properties();
includes.put("bin.includes", "META-INF/MANIFEST.MF, .");
Utils.generateBundleManifest(b, "b", "1.0.0", null);
Utils.generatePluginBuildProperties(b, includes);
Utils.writeBuffer(b.getFile("src/B.java"), new StringBuffer("public class B { int i; }"));
StringBuffer p2Inf = new StringBuffer();
p2Inf.append("properties.1.name=pde.build\n"); //$NON-NLS-1$
p2Inf.append("properties.1.value=true\n"); //$NON-NLS-1$
Utils.writeBuffer(b.getFile("META-INF/p2.inf"), p2Inf);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "f");
properties.put("p2.gathering", "true");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
URI uri = URIUtil.fromString("file:" + buildFolder.getFolder("I.TestBuild/f-TestBuild-group.group.group.zip").getLocation().toOSString());
IMetadataRepository repo = loadMetadataRepository(URIUtil.toJarURI(uri, new Path("")));
IInstallableUnit iuA = getIU(repo, "a");
assertTouchpoint(iuA, "zipped", "true");
IInstallableUnit iuB = getIU(repo, "b");
assertTrue(Boolean.valueOf((String) iuB.getProperties().get("pde.build")).booleanValue());
/*
* Part 2. Use the above zipped repo as input to a build to test reusing IUs (bug 259792)
*/
IFolder build2 = Utils.createFolder(buildFolder, "build2");
Utils.generateFeature(build2, "f", null, new String[] {"a;unpack=false", "b;unpack=false"});
properties = BuildConfiguration.getBuilderProperties(build2);
properties.put("topLevelElementId", "f");
properties.put("p2.gathering", "true");
properties.put("repoBaseLocation", buildFolder.getFolder("I.TestBuild").getLocation().toOSString());
//space here tries bug 267509, bug 267219
properties.put("transformedRepoLocation", build2.getFolder("trans formed").getLocation().toOSString());
Utils.storeBuildProperties(build2, properties);
//bug 269122
StringBuffer customBuffer = new StringBuffer();
customBuffer.append("<project name=\"custom\" default=\"noDefault\"> \n");
customBuffer.append(" <import file=\"${eclipse.pdebuild.templates}/headless-build/customTargets.xml\"/> \n");
customBuffer.append(" <target name=\"preProcessRepos\"> \n");
customBuffer.append(" <echo message=\"pre Process Repos!\" /> \n");
customBuffer.append(" </target> \n");
customBuffer.append(" <target name=\"postProcessRepos\"> \n");
customBuffer.append(" <echo message=\"post Process Repos!\" /> \n");
customBuffer.append(" </target> \n");
customBuffer.append("</project> \n");
Utils.writeBuffer(build2.getFile("customTargets.xml"), customBuffer);
//bug 269122
customBuffer = new StringBuffer();
customBuffer.append("<project name=\"custom\" default=\"noDefault\"> \n");
customBuffer.append(" <import file=\"${eclipse.pdebuild.templates}/headless-build/customAssembly.xml\"/> \n");
customBuffer.append(" <target name=\"post.gather.bin.parts\"> \n");
customBuffer.append(" <echo message=\"post bin parts!\" /> \n");
customBuffer.append(" </target> \n");
customBuffer.append("</project> \n");
Utils.writeBuffer(build2.getFile("customAssembly.xml"), customBuffer);
runBuild(build2);
IFile log = build2.getFile("log.log");
assertLogContainsLines(log, new String[] {"pre Process Repos!", "post Process Repos!"});
assertLogContainsLines(log, new String[] {"post bin parts!"});
//reusing the metadata from part 1
uri = URIUtil.fromString("file:" + build2.getFolder("I.TestBuild/f-TestBuild-group.group.group.zip").getLocation().toOSString());
repo = loadMetadataRepository(URIUtil.toJarURI(uri, new Path("")));
iuB = getIU(repo, "b");
assertTrue(Boolean.valueOf((String) iuB.getProperties().get("pde.build")).booleanValue());
repo = null;
removeMetadataRepository(uri);
}
public void testBug267461_2() throws Exception {
IFolder buildFolder = newTest("267461_2");
File delta = Utils.findDeltaPack();
assertNotNull(delta);
IFile productFile = buildFolder.getFile("rcp.product");
Utils.generateProduct(productFile, "uid.product", "rcp.product", "1.0.0.qualifier", "my.app", null, new String[] {OSGI, SIMPLE_CONFIGURATOR}, false, null);
Properties p2Inf = new Properties(); // bug 268223
p2Inf.put("org.eclipse.pde.build.append.launchers", "false");
Utils.storeProperties(buildFolder.getFile("p2.inf"), p2Inf);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("configs", "win32,win32,x86");
properties.put("archivesFormat", "win32,win32,x86-folder");
if (!delta.equals(new File((String) properties.get("baseLocation"))))
properties.put("pluginPath", delta.getAbsolutePath());
properties.put("product", productFile.getLocation().toOSString());
properties.put("p2.gathering", "true");
properties.put("p2.product.qualifier", "I10232"); //bug 246060
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
assertLogContainsLine(buildFolder.getFile("tmp/eclipse/configuration/config.ini"), "eclipse.product=rcp.product");
assertLogContainsLine(buildFolder.getFile("tmp/eclipse/configuration/config.ini"), "eclipse.application=my.app");
IFolder repo = Utils.createFolder(buildFolder, "buildRepo");
IMetadataRepository metadata = loadMetadataRepository("file:" + repo.getLocation().toOSString());
IInstallableUnit iu = getIU(metadata, "uid.product");
assertEquals(iu.getVersion().toString(), "1.0.0.I10232");
iu = getIU(metadata, "toolinguid.product.config.win32.win32.x86");
assertTouchpoint(iu, "configure", "setProgramProperty(propName:eclipse.application,propValue:my.app);");
assertTouchpoint(iu, "configure", "setProgramProperty(propName:eclipse.product,propValue:rcp.product);");
assertEquals(iu.getVersion().toString(), "1.0.0.I10232");
iu = getIU(metadata, "toolingorg.eclipse.equinox.simpleconfigurator");
assertEquals(iu.getVersion().toString(), "1.0.0.I10232");
assertTouchpoint(iu, "configure", "setStartLevel(startLevel:1);markStarted(started:true);");
assertFalse(buildFolder.getFile("tmp/eclipse/eclipse.exe").exists());
}
public void testBug267972() throws Exception {
IFolder buildFolder = newTest("267972");
File delta = Utils.findDeltaPack();
assertNotNull(delta);
IFile productFile = buildFolder.getFile("rcp.product");
Utils.generateProduct(productFile, "rcp.product", "1.0.0.qualifier", new String[] {OSGI, EQUINOX_COMMON, "org.eclipse.swt", "org.eclipse.swt.win32.win32.x86", "org.eclipse.swt.gtk.linux.x86"}, false);
Properties p2Inf = new Properties(); // bug 268223
p2Inf.put("org.eclipse.pde.build.append.startlevels", "false");
Utils.storeProperties(buildFolder.getFile("p2.inf"), p2Inf);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("configs", "win32,win32,x86");
if (!delta.equals(new File((String) properties.get("baseLocation"))))
properties.put("pluginPath", delta.getAbsolutePath());
properties.put("product", productFile.getLocation().toOSString());
properties.put("filteredDependencyCheck", "true");
properties.put("includeLaunchers", "false"); //bug 268119
properties.put("p2.gathering", "true");
properties.put("forceContextQualifier", "v1234"); //bug 246060
properties.put("skipDirector", "true"); //bug 271141
properties.put("skipMirroring", "true");
properties.put("p2.metadata.repo", "file:" + buildFolder.getFolder("finalRepo").getLocation().toOSString());
properties.put("p2.artifact.repo", "file:" + buildFolder.getFolder("finalRepo").getLocation().toOSString());
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
IFolder repo = Utils.createFolder(buildFolder, "buildRepo");
URI repoURI = URIUtil.fromString("file:" + repo.getLocation().toOSString());
assertManagerDoesntContain(repoURI); //bug 268867
IMetadataRepository metadata = loadMetadataRepository(repoURI);
IInstallableUnit iu = getIU(metadata, "rcp.product");
assertEquals(iu.getVersion().toString(), "1.0.0.v1234");
assertNull(getIU(metadata, "toolingorg.eclipse.equinox.common", false));
//bug 271141
assertFalse(buildFolder.getFile("I.TestBuild/eclipse-win32.win32.x86.zip").exists());
assertFalse(buildFolder.getFolder("finalRepo").exists());
}
public void testBug266488() throws Exception {
IFolder buildFolder = newTest("266488");
IFolder bundle = Utils.createFolder(buildFolder, "plugins/e");
IFolder f = Utils.createFolder(buildFolder, "features/f");
IFolder e = Utils.createFolder(buildFolder, "features/e");
Utils.generateFeature(buildFolder, "f", new String[] {"e", "e.source"}, null);
Properties properties = new Properties();
properties.put("generate.feature@e.source", "e");
properties.put("individualSourceBundles", "true");
Utils.storeBuildProperties(f, properties);
Utils.generateFeature(buildFolder, "e", null, new String[] {"e"});
Utils.writeBuffer(e.getFile("sourceTemplatePlugin/license.html"), new StringBuffer("important stuff!\n"));
Utils.generateBundle(bundle, "e");
properties = new Properties();
properties.put("bin.includes", "META-INF/, .");
Utils.storeBuildProperties(bundle, properties);
properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "f");
properties.put("p2.gathering", "true");
properties.put("archivesFormat", "group,group,group-folder");
properties.put("skipMirroring", "true"); //bug 271114
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
assertFalse(buildFolder.getFolder("tmp/eclipse").exists());
properties.remove("skipMirroring");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
assertResourceFile(buildFolder.getFile("tmp/eclipse/plugins/e.source_1.0.0.jar"));
assertResourceFile(buildFolder.getFile("tmp/eclipse/plugins/e_1.0.0.jar"));
assertResourceFile(buildFolder.getFile("tmp/eclipse/features/e.source_1.0.0.jar"));
Set entries = new HashSet();
entries.add("license.html");
assertZipContents(buildFolder, "tmp/eclipse/plugins/e.source_1.0.0.jar", entries);
}
public void testPublishFeature_Bug270882() throws Exception {
IFolder buildFolder = newTest("PublishFeature_Bug270882");
IFolder f = Utils.createFolder(buildFolder, "features/f");
IFile licenseFile = f.getFile("license.html");
Utils.writeBuffer(licenseFile, new StringBuffer("important stuff!\n"));
Utils.generateFeature(buildFolder, "f", null, null);
Properties properties = new Properties();
properties.put("root", "absolute:file:" + licenseFile.getLocation().toOSString());
properties.put("customBuildCallbacks", "customBuildCallbacks.xml");
Utils.storeBuildProperties(f, properties);
StringBuffer buffer = new StringBuffer();
buffer.append("<project name=\"customGather\" default=\"noDefault\"> \n");
buffer.append(" <target name=\"pre.gather.bin.parts\"> \n");
buffer.append(" <concat destfile=\"${feature.directory}/a.txt\"> \n");
buffer.append(" Mary had a little lamb. \n");
buffer.append(" </concat> \n");
buffer.append(" </target> \n");
buffer.append("</project> \n");
Utils.writeBuffer(f.getFile("customBuildCallbacks.xml"), buffer);
//bug 270894
buffer = new StringBuffer();
buffer.append("<site> \n");
buffer.append(" <feature url=\"features/f_1.0.0.qualifier.jar\" id=\"f\" version=\"1.0.0.qualifier\"> \n");
buffer.append(" <category name=\"new_category_1\"/> \n");
buffer.append(" </feature> \n");
buffer.append(" <category-def name=\"new_category_1\" label=\"New Category 1\"/> \n");
buffer.append("</site> \n");
IFile siteXML = buildFolder.getFile("site.xml");
Utils.writeBuffer(siteXML, buffer);
//bug 272362
IFile categoryXML = buildFolder.getFile("category.xml");
String categoryString = buffer.toString();
categoryString = categoryString.replaceAll("new_category_1", "new_category_2");
Utils.writeBuffer(categoryXML, new StringBuffer(categoryString));
properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "f");
properties.put("p2.gathering", "true");
properties.put("filteredDependencyCheck", "true");
properties.put("archivesFormat", "group,group,group-folder");
properties.put("p2.category.site", "file:" + siteXML.getLocation().toOSString());
properties.put("p2.category.definition", "file:" + categoryXML.getLocation().toOSString());
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
Set entries = new HashSet();
entries.add("license.html");
assertZipContents(buildFolder, "tmp/eclipse/binary/f_root_1.0.0", entries);
IFolder repo = buildFolder.getFolder("tmp/eclipse");
URI repoURI = URIUtil.fromString("file:" + repo.getLocation().toOSString());
IMetadataRepository metadata = loadMetadataRepository(repoURI);
IInstallableUnit iu = getIU(metadata, "new_category_1");
assertTrue(!iu.getVersion().toString().equals("0.0.0"));
assertNotNull(getIU(metadata, "new_category_2"));
assertFalse(buildFolder.getFile("tmp/eclipse/features/f_1.0.0.jar").exists());
assertNull(getIU(metadata, "f.feature.jar", false));
}
public void testBug264743_PublishExecutable() throws Exception {
IFolder buildFolder = newTest("264743").getFolder("build1");
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", EQUINOX_EXECUTABLE);
properties.put("p2.gathering", "true");
properties.put("filteredDependencyCheck", "true");
properties.put("archivesFormat", "group,group,group-folder");
properties.put("feature.temp.folder", buildFolder.getFolder("ftemp").getLocation().toOSString());
properties.put("elementPath", "${buildDirectory}/features/ee");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
IFolder repo = buildFolder.getFolder("tmp/eclipse");
URI repoURI = URIUtil.fromString("file:" + repo.getLocation().toOSString());
IMetadataRepository metadata = loadMetadataRepository(repoURI);
IInstallableUnit iu = getIU(metadata, "equinox.executable");
assertRequires(iu, "org.eclipse.equinox.p2.iu", "org.eclipse.equinox.executable.feature.jar");
assertRequires(iu, "org.eclipse.equinox.p2.iu", EQUINOX_LAUNCHER);
Set entries = new HashSet();
entries.add("bin/win32/win32/x86/launcher.exe");
entries.add("bin/carbon/macosx/ppc/Eclipse.app/Contents/MacOS/launcher");
entries.add("bin/gtk/linux/x86/launcher");
assertZipContents(buildFolder, "tmp/eclipse/features/org.eclipse.equinox.executable_3.3.200.jar", entries);
IFolder build2 = Utils.createFolder(buildFolder, "../build2");
IFile productFile = build2.getFile("rcp.product");
Utils.generateProduct(productFile, "rcp.product", "1.0.0", null, "rcp", new String[] {OSGI, EQUINOX_COMMON}, false, null);
properties = BuildConfiguration.getBuilderProperties(build2);
properties.put("configs", "win32,win32,x86 & linux,gtk,x86 & macosx,carbon,ppc");
properties.put("product", productFile.getLocation().toOSString());
properties.put("filteredDependencyCheck", "true");
properties.put("p2.gathering", "true");
properties.put("skipDirector", "true");
properties.put("skipMirroring", "true");
//this tests bug 269361
properties.put("repoBaseLocation", buildFolder.getFolder("tmp").getLocation().toOSString());
properties.put("transformedRepoLocation", build2.getFolder("transformed").getLocation().toOSString());
Utils.storeBuildProperties(build2, properties);
runProductBuild(build2);
repo = build2.getFolder("buildRepo");
repoURI = URIUtil.fromString("file:" + repo.getLocation().toOSString());
metadata = loadMetadataRepository(repoURI);
iu = getIU(metadata, "org.eclipse.equinox.executable.feature.group");
assertRequires(iu, "org.eclipse.equinox.p2.iu", "org.eclipse.equinox.executable_root.win32.win32.x86");
assertRequires(iu, "org.eclipse.equinox.p2.iu", "org.eclipse.equinox.executable_root.gtk.linux.x86");
assertRequires(iu, "org.eclipse.equinox.p2.iu", "org.eclipse.equinox.executable_root.carbon.macosx.ppc");
//bug 273059, the action will be written out of a map, so there is no order on the parameters
iu = getIU(metadata, "rcp.product_root.carbon.macosx.ppc");
assertResourceFile(repo, "binary/org.eclipse.equinox.executable_root.win32.win32.x86_3.3.200");
assertResourceFile(repo, "binary/org.eclipse.equinox.executable_root.gtk.linux.x86_3.3.200");
assertResourceFile(repo, "binary/org.eclipse.equinox.executable_root.carbon.macosx.ppc_3.3.200");
assertResourceFile(repo, "binary/rcp.product_root.gtk.linux.x86_1.0.0");
assertResourceFile(repo, "binary/rcp.product_root.win32.win32.x86_1.0.0");
}
public void testBug269972() throws Exception {
IFolder buildFolder = newTest("269972");
IFolder a = Utils.createFolder(buildFolder, "plugins/a");
IFolder b = Utils.createFolder(buildFolder, "plugins/b");
Utils.generateFeature(buildFolder, "f", null, new String[] {"a;unpack=false", "b;unpack=false"});
Utils.generateBundle(a, "a");
Utils.writeBuffer(a.getFile("src/A.java"), new StringBuffer("public class A { int i; ds }"));
Utils.generateBundle(b, "b");
Utils.writeBuffer(b.getFile("src/B.java"), new StringBuffer("public class B { int i; }"));
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "f");
properties.put("p2.gathering", "true");
properties.put("javacFailOnError", "false");
Utils.storeBuildProperties(buildFolder, properties);
try {
runBuild(buildFolder);
} catch (Exception e) {
assertTrue(e.getMessage().indexOf("Unable to find: Installable Unit [ id=a version=1.0.0 ]") > -1);
}
URI repoURI = URIUtil.fromString("file:" + buildFolder.getFolder("buildRepo").getLocation().toOSString());
IMetadataRepository metadata = loadMetadataRepository(repoURI);
IQueryResult queryResult = metadata.query(QueryUtil.createIUQuery("a"), null);
assertTrue(queryResult.isEmpty());
getIU(metadata, "b");
}
public void testBug259792_ReuseIUs() throws Exception {
IFolder root = newTest("259792");
IFolder build1 = Utils.createFolder(root, "build1");
IFolder a = Utils.createFolder(build1, "plugins/a");
IFolder b = Utils.createFolder(build1, "plugins/b");
Utils.generateFeature(build1, "f1", new String[] {"f2"}, new String[] {"a"});
Utils.generateFeature(build1, "f2", null, new String[] {"b"});
StringBuffer p2Inf = new StringBuffer();
P2InfUtils.printRequires(p2Inf, null, 1, P2InfUtils.NAMESPACE_IU, "a", "[1.0.0,1.0.0]", null, true);
Utils.writeBuffer(build1.getFile("features/f2/p2.inf"), p2Inf);
Utils.writeBuffer(build1.getFile("features/f2/a.txt"), new StringBuffer("boo-urns"));
Properties properties = new Properties();
properties.put("bin.includes", "feature.xml");
properties.put("root", "file:a.txt");
Utils.storeBuildProperties(build1.getFolder("features/f2"), properties);
Utils.generateBundle(a, "a");
Utils.generateBundle(b, "b");
properties = BuildConfiguration.getBuilderProperties(build1);
properties.put("topLevelElementId", "f1");
properties.put("p2.gathering", "true");
Utils.storeBuildProperties(build1, properties);
runBuild(build1);
URI repoURI = URIUtil.fromString("file:" + build1.getFile("I.TestBuild/f1-TestBuild-group.group.group.zip").getLocation().toOSString());
IMetadataRepository metadata = loadMetadataRepository(URIUtil.toJarURI(repoURI, null));
IInstallableUnit iu = getIU(metadata, "f2.feature.group");
assertRequires(iu, P2InfUtils.NAMESPACE_IU, "a");
IFolder build2 = Utils.createFolder(root, "build2");
Utils.generateFeature(build2, "f3", new String[] {"f2"}, null);
properties = BuildConfiguration.getBuilderProperties(build2);
properties.put("topLevelElementId", "f3");
properties.put("p2.gathering", "true");
properties.put("repoBaseLocation", build1.getFolder("I.TestBuild").getLocation().toOSString());
properties.put("transformedRepoLocation", build2.getFolder("transformed").getLocation().toOSString());
Utils.storeBuildProperties(build2, properties);
runBuild(build2);
//bug 272219
assertResourceFile(build2.getFolder("transformed"), "binary/f2_root_1.0.0");
repoURI = URIUtil.fromString("file:" + build2.getFile("I.TestBuild/f3-TestBuild-group.group.group.zip").getLocation().toOSString());
metadata = loadMetadataRepository(URIUtil.toJarURI(repoURI, null));
iu = getIU(metadata, "f2.feature.group");
assertRequires(iu, P2InfUtils.NAMESPACE_IU, "a");
getIU(metadata, "a");
getIU(metadata, "f2_root"); //bug 271848, mirroring from context
assertResourceFile(build2, "buildRepo/binary/f2_root_1.0.0");
metadata = null;
removeMetadataRepository(repoURI);
}
public void testPublish_FeatureBasedProduct() throws Exception {
IFolder buildFolder = newTest("featureBasedProduct");
IFolder finalRepo = Utils.createFolder(buildFolder, "final");
File delta = Utils.findDeltaPack();
assertNotNull(delta);
Utils.generateFeature(buildFolder, "f", null, new String[] {OSGI, EQUINOX_COMMON});
Utils.writeBuffer(buildFolder.getFile("features/f/important.txt"), new StringBuffer("boo-urns"));
Properties properties = new Properties();
properties.put("bin.includes", "feature.xml");
properties.put("root.folder.sub", "file:important.txt"); //bug 272392
Utils.storeBuildProperties(buildFolder.getFolder("features/f"), properties);
IFile productFile = buildFolder.getFile("rcp.product");
Utils.generateProduct(productFile, "rcp.product", "1.0.0", new String[] {"f"}, true);
properties = BuildConfiguration.getBuilderProperties(buildFolder);
if (!delta.equals(new File((String) properties.get("baseLocation"))))
properties.put("pluginPath", delta.getAbsolutePath());
properties.put("configs", "win32,win32,x86");
properties.put("product", productFile.getLocation().toOSString());
properties.put("filteredDependencyCheck", "true");
properties.put("p2.gathering", "true");
properties.put("skipMirroring", "true");
properties.put("p2.build.repo", "file:" + buildFolder.getFolder("buildRepo").getLocation().toOSString());
Utils.storeBuildProperties(buildFolder, properties);
//bug 269523
StringBuffer customBuffer = new StringBuffer();
customBuffer.append("<project name=\"custom\" default=\"noDefault\"> \n");
customBuffer.append(" <import file=\"${eclipse.pdebuild.templates}/headless-build/customTargets.xml\"/> \n");
customBuffer.append(" <target name=\"postBuild\"> \n");
customBuffer.append(" <p2.mirror destination=\"" + finalRepo.getLocation().toOSString() + "\" \n");
customBuffer.append(" source=\"${p2.build.repo}\" > \n");
customBuffer.append(" <slicingOptions platformFilter=\"win32,win32,x86\" \n");
customBuffer.append(" followStrict=\"true\" /> \n");
customBuffer.append(" <iu id=\"rcp.product\" version=\"1.0.0\" /> \n");
customBuffer.append(" </p2.mirror> \n");
customBuffer.append(" </target> \n");
customBuffer.append("</project> \n");
Utils.writeBuffer(buildFolder.getFile("customTargets.xml"), customBuffer);
runProductBuild(buildFolder);
assertResourceFile(finalRepo, "binary/f_root_1.0.0");
assertResourceFile(finalRepo, "binary/rcp.product_root.win32.win32.x86_1.0.0");
assertResourceFile(finalRepo, "features/f_1.0.0.jar");
HashSet entries = new HashSet();
entries.add("eclipse/eclipse.exe");
entries.add("eclipse/features/f_1.0.0/feature.xml");
entries.add("eclipse/sub/important.txt");
assertZipContents(buildFolder, "I.TestBuild/eclipse-win32.win32.x86.zip", entries);
}
public void testDirectorLogging() throws Exception {
IFolder buildFolder = newTest("directorLogging");
File delta = Utils.findDeltaPack();
assertNotNull(delta);
IFile productFile = buildFolder.getFile("rcp.product");
Utils.generateProduct(productFile, "uid.product", "rcp.product", "1.0.0.qualifier", "my.app", null, new String[] {OSGI, SIMPLE_CONFIGURATOR}, false, null);
Properties p2Inf = new Properties(); // bug 268223
p2Inf.put("requires.1.namespace", "foo");
p2Inf.put("requires.1.name", "bar");
p2Inf.put("requires.1.range", "[1.0.0,1.0.0]");
p2Inf.put("requires.1.greedy", "true");
Utils.storeProperties(buildFolder.getFile("p2.inf"), p2Inf);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("configs", "win32,win32,x86");
properties.put("archivesFormat", "win32,win32,x86-folder");
if (!delta.equals(new File((String) properties.get("baseLocation"))))
properties.put("pluginPath", delta.getAbsolutePath());
properties.put("product", productFile.getLocation().toOSString());
properties.put("p2.gathering", "true");
properties.put("p2.product.qualifier", "I10232");
properties.put("p2.director.log", "director.log");
properties.put("filteredDependencyCheck", "true");
Utils.storeBuildProperties(buildFolder, properties);
try {
runProductBuild(buildFolder);
} catch (Exception e) {
assertTrue(e.getMessage().indexOf("A problem occured while invoking the director") > -1);
}
assertLogContainsLines(buildFolder.getFile("director.log"), new String[] {"Installation failed.", "Missing requirement: rcp.product 1.0.0.I10232 (uid.product 1.0.0.I10232) requires 'foo bar [1.0.0]' but it could not be found"});
}
public void testBug272907() throws Exception {
IFolder buildFolder = newTest("272907");
IFolder foo = Utils.createFolder(buildFolder, "plugins/foo");
IFolder f = Utils.createFolder(buildFolder, "features/f");
Utils.generateBundleManifest(foo, "foo", "1.0.0", null);
Properties buildProperties = new Properties();
buildProperties.put("source.src.jar", "src/");
buildProperties.put("source..", "src2/");
buildProperties.put("bin.includes", "META-INF/, ., src.jar");
Utils.storeBuildProperties(foo, buildProperties);
Utils.writeBuffer(foo.getFile("src/foo.java"), new StringBuffer("public class foo { int i; }"));
Utils.writeBuffer(foo.getFile("src2/foob.java"), new StringBuffer("public class foob { int i; }"));
Utils.generateFeature(buildFolder, "f", null, new String[] {"foo"});
buildProperties = new Properties();
buildProperties.put("bin.includes", "feature.xml");
Utils.storeBuildProperties(f, buildProperties);
//bug 274702
StringBuffer buffer = new StringBuffer();
buffer.append("requires.0.namespace=org.eclipse.equinox.p2.iu \n");
buffer.append("requires.0.name=testid0 \n");
buffer.append("requires.0.range=[1.2.3,1.3) \n");
buffer.append("requires.0.greedy=true \n");
buffer.append("units.0.id=testid0 \n");
buffer.append("units.0.version=1.2.3 \n");
buffer.append("units.0.provides.0.name=testid0 \n");
buffer.append("units.0.provides.0.namespace=org.eclipse.equinox.p2.iu\n");
buffer.append("units.0.provides.0.version=1.2.3 \n");
Utils.writeBuffer(f.getFile("p2.inf"), buffer);
buildProperties = BuildConfiguration.getBuilderProperties(buildFolder);
buildProperties.put("topLevelElementId", "f");
buildProperties.put("p2.gathering", "true");
buildProperties.put("filteredDependencyCheck", "true");
buildProperties.put("archivesFormat", "group,group,group-folder");
Utils.storeBuildProperties(buildFolder, buildProperties);
runBuild(buildFolder);
Set entries = new HashSet();
entries.add("src.jar");
entries.add("foob.class");
assertZipContents(buildFolder, "tmp/eclipse/plugins/foo_1.0.0.jar", entries);
URI repoURI = URIUtil.fromString("file:" + buildFolder.getFolder("tmp/eclipse").getLocation().toOSString());
IMetadataRepository metadata = loadMetadataRepository(repoURI);
IInstallableUnit iu = getIU(metadata, "f.feature.group");
assertRequires(iu, P2InfUtils.NAMESPACE_IU, "testid0");
iu = getIU(metadata, "testid0");
assertProvides(iu, P2InfUtils.NAMESPACE_IU, "testid0");
}
public void testBug268498() throws Exception {
IFolder buildFolder = newTest("268498");
IFolder rcp = Utils.createFolder(buildFolder, "rcp");
File delta = Utils.findDeltaPack();
assertNotNull(delta);
IFile product = rcp.getFile("rcp.product");
StringBuffer extra = new StringBuffer();
extra.append("<launcherArgs> \n");
extra.append(" <programArgsMac>-vm myVm -showsplash org.eclipse.platform</programArgsMac> \n");
extra.append(" <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac> \n");
extra.append(" </launcherArgs> \n");
extra.append(" <configurations> \n");
extra.append(" <plugin id=\"" + EQUINOX_COMMON + "\" autoStart=\"true\" startLevel=\"2\" /> \n");
extra.append(" </configurations> \n");
Utils.generateProduct(product, "org.example.rcp", "1.0.0", null, new String[] {OSGI, EQUINOX_COMMON}, false, extra);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("archivePrefix", "Eclipse.app");
properties.put("product", product.getLocation().toOSString());
if (!delta.equals(new File((String) properties.get("baseLocation"))))
properties.put("pluginPath", delta.getAbsolutePath());
properties.put("configs", "macosx, cocoa, x86_64");
properties.put("p2.gathering", "true");
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
IFile ini = buildFolder.getFile("eclipse.ini");
boolean lowerCase = true;
if (!Utils.extractFromZip(buildFolder, "I.TestBuild/eclipse-macosx.cocoa.x86_64.zip", "eclipse.app/Contents/Eclipse/eclipse.ini", ini)) {
lowerCase = false;
Utils.extractFromZip(buildFolder, "I.TestBuild/eclipse-macosx.cocoa.x86_64.zip", "Eclipse.app/Contents/Eclipse/eclipse.ini", ini);
}
IFile zip = buildFolder.getFile("I.TestBuild/eclipse-macosx.cocoa.x86_64.zip");
String exeString = (lowerCase ? "eclipse.app/" : "Eclipse.app/") + "Contents/MacOS/eclipse";
assertZipPermissions(zip, exeString, "-rwxr-xr-x");
assertLogContainsLines(ini, new String[] {"-vm", "myVm"});
boolean duplicate = false;
try {
assertLogContainsLines(ini, new String[] {"-XstartOnFirstThread", "-XstartOnFirstThread"});
duplicate = true;
} catch (Error e) {
//expected
}
assertFalse(duplicate);
try {
assertLogContainsLines(ini, new String[] {"-showSplash", "org.eclipse.platform", "-showSplash", "org.eclipse.platform"});
duplicate = true;
} catch (Error e) {
//expected
}
assertFalse(duplicate);
IMetadataRepository repo = loadMetadataRepository(buildFolder.getFolder("buildRepo").getLocationURI());
IInstallableUnit iu = getIU(repo, "toolingcocoa.macosx.x86_64org.eclipse.equinox.common");
assertEquals(iu.getVersion().toString(), "1.0.0");
IInstallableUnit common = getIU(repo, EQUINOX_COMMON);
Collection/*<IRequirement>*/ required = iu.getRequirements();
assertEquals(required.size(), 2);
Iterator it = required.iterator();
IRequiredCapability req0 = (IRequiredCapability) it.next();
IRequiredCapability req1 = (IRequiredCapability) it.next();
if (req0.getName().equals(EQUINOX_COMMON))
assertEquals(req0.getRange(), new VersionRange(common.getVersion(), true, Version.MAX_VERSION, true));
else
assertEquals(req1.getRange(), new VersionRange(common.getVersion(), true, Version.MAX_VERSION, true));
}
public void testPublish_P2InfConfigProperty() throws Exception {
IFolder buildFolder = newTest("infConfig");
IFolder rcp = Utils.createFolder(buildFolder, "rcp");
File delta = Utils.findDeltaPack();
assertNotNull(delta);
IFile product = rcp.getFile("rcp.product");
Utils.generateProduct(product, "org.example.rcp", "1.0.0", null, new String[] {OSGI}, false, null);
StringBuffer inf = new StringBuffer();
inf.append("requires.1.namespace=org.eclipse.equinox.p2.iu \n");
inf.append("requires.1.name=toolingorg.eclipse.configuration.macosx \n");
inf.append("requires.1.filter=(osgi.os=macosx) \n");
inf.append("requires.1.range=[1.0.0,1.0.0] \n");
inf.append("requires.1.greedy=true \n");
inf.append("requires.2.namespace=org.eclipse.equinox.p2.iu \n");
inf.append("requires.2.name=toolingorg.eclipse.configuration \n");
inf.append("requires.2.filter=(!(osgi.os=macosx)) \n");
inf.append("requires.2.range=[1.0.0,1.0.0] \n");
inf.append("requires.2.greedy=true \n");
inf.append("units.1.id=toolingorg.eclipse.configuration.macosx \n");
inf.append("units.1.version=1.0.0 \n");
inf.append("units.1.provides.1.namespace=org.eclipse.equinox.p2.iu \n");
inf.append("units.1.provides.1.name=toolingorg.eclipse.configuration.macosx \n");
inf.append("units.1.provides.1.version=1.0.0 \n");
inf.append("units.1.filter=(osgi.os=macosx) \n");
inf.append("units.1.touchpoint.id=org.eclipse.equinox.p2.osgi \n");
inf.append("units.1.touchpoint.version=1.0.0 \n");
inf.append("units.1.instructions.configure=setProgramProperty(propName:osgi.instance.area.default,propValue:@user.home/Documents/workspace);\n");
inf.append("units.1.instructions.unconfigure=setProgramProperty(propName:osgi.instance.area.default,propValue:);\n");
inf.append("units.2.id=toolingorg.eclipse.configuration \n");
inf.append("units.2.version=1.0.0 \n");
inf.append("units.2.provides.1.namespace=org.eclipse.equinox.p2.iu \n");
inf.append("units.2.provides.1.name=toolingorg.eclipse.configuration \n");
inf.append("units.2.provides.1.version=1.0.0 \n");
inf.append("units.2.filter=(!(osgi.os=macosx)) \n");
inf.append("units.2.touchpoint.id=org.eclipse.equinox.p2.osgi \n");
inf.append("units.2.touchpoint.version=1.0.0 \n");
inf.append("units.2.instructions.configure=setProgramProperty(propName:osgi.instance.area.default,propValue:@user.home/workspace);\n");
inf.append("units.2.instructions.unconfigure=setProgramProperty(propName:osgi.instance.area.default,propValue:);\n");
Utils.writeBuffer(rcp.getFile("p2.inf"), inf);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("product", product.getLocation().toOSString());
properties.put("includeLaunchers", "false");
properties.put("p2.gathering", "true");
properties.put("configs", "macosx,carbon,ppc & macosx,cocoa,x86 & win32,win32,x86");
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
IFile ini = buildFolder.getFile("config-mac.ini");
Utils.extractFromZip(buildFolder, "I.TestBuild/eclipse-macosx.carbon.ppc.zip", "eclipse/configuration/config.ini", ini);
assertLogContainsLine(ini, "osgi.instance.area.default=@user.home/Documents/workspace");
ini = buildFolder.getFile("config-mac2.ini");
Utils.extractFromZip(buildFolder, "I.TestBuild/eclipse-macosx.cocoa.x86.zip", "eclipse/configuration/config.ini", ini);
assertLogContainsLine(ini, "osgi.instance.area.default=@user.home/Documents/workspace");
ini = buildFolder.getFile("config-win32.ini");
Utils.extractFromZip(buildFolder, "I.TestBuild/eclipse-win32.win32.x86.zip", "eclipse/configuration/config.ini", ini);
assertLogContainsLine(ini, "osgi.instance.area.default=@user.home/workspace");
}
public void testBug262464_customConfig() throws Exception {
IFolder buildFolder = newTest("262464");
IFolder bundle = Utils.createFolder(buildFolder, "plugins/bundle");
Utils.generateBundle(bundle, "bundle.foo");
Properties customConfig = new Properties();
customConfig.put("osgi.bundles", "org.eclipse.equinox.common@2:start, org.eclipse.equinox.app@start");
customConfig.put("org.eclipse.update.reconcile", "false");
Utils.storeProperties(bundle.getFile("config.ini"), customConfig);
IFile product = bundle.getFile("bundle.product");
StringBuffer extra = new StringBuffer();
extra.append("<configIni use=\"default\"> \n");
extra.append(" <win32>/bundle/config.ini</win32>\n");
extra.append(" <linux>/bundle/config.ini</linux>\n");
extra.append(" <macosx>/bundle/config.ini</macosx>\n");
extra.append("</configIni>\n");
String[] entries = new String[] {EQUINOX_COMMON, OSGI, EQUINOX_APP, EQUINOX_REGISTRY};
Utils.generateProduct(product, "bun.dle.pro.duct", "bundle.product", "1.0.0", null, null, entries, false, extra);
String configString = Platform.getOS() + ',' + Platform.getWS() + ',' + Platform.getOSArch();
Properties buildProperties = BuildConfiguration.getBuilderProperties(buildFolder);
buildProperties.put("product", product.getLocation().toOSString());
buildProperties.put("configs", configString);
buildProperties.put("includeLaunchers", "false");
buildProperties.put("p2.gathering", "true");
buildProperties.put("filteredDependencyCheck", "true");
buildProperties.put("archivesFormat", configString + "-folder");
Utils.storeBuildProperties(buildFolder, buildProperties);
runProductBuild(buildFolder);
IFolder productFolder = buildFolder.getFolder("features/org.eclipse.pde.build.container.feature/product");
//check we copied the config.ini file
assertResourceFile(productFolder.getFile("bundle/config.ini"));
URI repoURI = URIUtil.fromString("file:" + buildFolder.getFolder("buildRepo").getLocation().toOSString());
IMetadataRepository metadata = loadMetadataRepository(repoURI);
IFile eclipseProduct = buildFolder.getFile("tmp/eclipse/.eclipseproduct");
assertResourceFile(eclipseProduct);
Properties properties = Utils.loadProperties(eclipseProduct);
assertEquals(properties.getProperty("name"), "bundle.product");
assertEquals(properties.getProperty("id"), "bundle.product");
IFile config = buildFolder.getFile("tmp/eclipse/configuration/config.ini");
IInstallableUnit iu = getIU(metadata, EQUINOX_COMMON);
String line = "org.eclipse.equinox.common_" + iu.getVersion() + ".jar@2\\:start";
assertLogContainsLine(config, line);
iu = getIU(metadata, EQUINOX_APP);
line = "org.eclipse.equinox.app_" + iu.getVersion() + ".jar@4\\:start";
assertLogContainsLine(config, line);
}
public void testBug283060() throws Exception {
IFolder buildFolder = newTest("283060");
IFolder F = Utils.createFolder(buildFolder, "features/F");
IFolder rcp = Utils.createFolder(buildFolder, "rcp");
String[] bundles = new String[] {OSGI, EQUINOX_COMMON, CORE_JOBS, SIMPLE_CONFIGURATOR};
String[] bundleVersions = Utils.getVersionsNoQualifier(bundles);
StringBuffer buffer = new StringBuffer();
buffer.append("<feature id=\"F\" version=\"1.0.0\"> \n");
buffer.append(" <requires> \n");
for (int i = 0; i < bundleVersions.length; i++) {
buffer.append(" <import plugin=\"" + bundles[i] + "\" version=\"" + bundleVersions[i] + "\" match=\"equivalent\" /> \n");
}
buffer.append(" </requires> \n");
buffer.append("</feature> \n");
Utils.writeBuffer(F.getFile("feature.xml"), buffer);
Properties properties = new Properties();
properties.put("bin.includes", "feature.xml");
Utils.writeBuffer(F.getFile("feature.xml"), buffer);
IFile product = rcp.getFile("rcp.product");
StringBuffer extra = new StringBuffer();
extra.append(" <configurations> \n");
extra.append(" <plugin id=\"" + EQUINOX_COMMON + "\" autoStart=\"true\" startLevel=\"2\" /> \n");
extra.append(" <plugin id=\"org.eclipse.equinox.simpleconfigurator\" autoStart=\"true\" startLevel=\"1\" /> \n");
extra.append(" </configurations> \n");
Utils.generateProduct(product, "org.example.rcp", "1.0.0", null, new String[] {"F"}, true, extra);
properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("product", product.getLocation().toOSString());
properties.put("includeLaunchers", "false");
properties.put("configs", "win32,win32,x86");
properties.put("archivesFormat", "win32,win32,x86-folder");
properties.put("p2.gathering", "true");
properties.put("p2.context.repos", URIUtil.toUnencodedString(createCompositeFromBase(buildFolder.getFolder("context"))));
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
IFile bundlesInfo = buildFolder.getFile("tmp/eclipse/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info");
assertResourceFile(bundlesInfo);
assertLogContainsLine(bundlesInfo, ",2,true");
//bug 283091
IMetadataRepository meta = loadMetadataRepository(buildFolder.getFolder("buildRepo").getLocationURI());
assertNull(getIU(meta, EQUINOX_APP, false));
}
public void testBug284499() throws Exception {
IFolder buildFolder = newTest("284499");
Utils.generateFeature(buildFolder, "f", null, new String[] {OSGI, EQUINOX_COMMON});
IFile product = buildFolder.getFile("foo.product");
Utils.generateProduct(product, "foo", "1.0.0", null, new String[] {"f"}, true);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("product", product.getLocation().toOSString());
properties.put("includeLaunchers", "false");
properties.put("configs", "win32,win32,x86");
properties.put("archivesFormat", "win32,win32,x86-folder");
properties.put("p2.gathering", "true");
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
assertResourceFile(buildFolder.getFile("tmp/eclipse/.eclipseproduct"));
IMetadataRepository meta = loadMetadataRepository(buildFolder.getFolder("buildRepo").getLocationURI());
IInstallableUnit iu = getIU(meta, "foo");
assertRequires(iu, P2InfUtils.NAMESPACE_IU, "f.feature.group");
getIU(meta, "f.feature.group");
}
public void testBug293048() throws Exception {
IFolder buildFolder = newTest("293048");
IFolder A1 = Utils.createFolder(buildFolder, "plugins/A_1.0.0");
IFolder A2 = Utils.createFolder(buildFolder, "plugins/A_2.0.0");
Utils.generateBundle(A1, "a", "1.0.0.qualifier");
Utils.generateBundle(A2, "a", "2.0.0.qualifier");
IFile product = buildFolder.getFile("foo.product");
Utils.generateProduct(product, "foo", "1.0.0", new String[] {"a;version=1.0.0.qualifier", "a;version=2.0.0.qualifier"}, false);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("product", product.getLocation().toOSString());
properties.put("includeLaunchers", "false");
properties.put("archivesFormat", "*,*,*-folder");
properties.put("p2.gathering", "true");
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
IMetadataRepository repo = loadMetadataRepository(buildFolder.getFolder("buildRepo").getLocationURI());
IInstallableUnit iu = getIU(repo, "foo");
Collection/*<IRequirement>*/ required = iu.getRequirements();
for (Iterator iterator = required.iterator(); iterator.hasNext();) {
IRequiredCapability reqCap = (IRequiredCapability) iterator.next();
if (reqCap.getName().equals("a")) {
VersionRange range = reqCap.getRange();
assertTrue(PublisherHelper.toOSGiVersion(range.getMinimum()).getQualifier().startsWith("20"));
assertTrue(PublisherHelper.toOSGiVersion(range.getMinimum()).getMajor() == 1 || PublisherHelper.toOSGiVersion(range.getMinimum()).getMajor() == 2);
}
}
}
public void testBug307157() throws Exception {
IFolder buildFolder = newTest("307157");
Utils.generateFeature(buildFolder, "F", new String[] {"F1", "F2"}, null);
Utils.generateFeature(buildFolder, "F1", null, null);
Utils.generateFeature(buildFolder, "F2", null, null);
Utils.writeBuffer(buildFolder.getFile("features/F1/file1.txt"), new StringBuffer("for feature 1"));
Utils.writeBuffer(buildFolder.getFile("features/F2/file2.txt"), new StringBuffer("for feature 2"));
Properties buildProperties = new Properties();
buildProperties.put("bin.includes", "feature.xml,file*");
Utils.storeBuildProperties(buildFolder.getFolder("features/F1"), buildProperties);
Utils.storeBuildProperties(buildFolder.getFolder("features/F2"), buildProperties);
buildProperties = BuildConfiguration.getBuilderProperties(buildFolder);
buildProperties.put("topLevelElementId", "F");
buildProperties.put("p2.gathering", "true");
buildProperties.put("filteredDependencyCheck", "true");
buildProperties.put("archivesFormat", "group,group,group-folder");
buildProperties.put("feature.temp.folder", buildFolder.getFolder("temp").getLocation().toOSString());
Utils.storeBuildProperties(buildFolder, buildProperties);
runBuild(buildFolder);
Set entries = new HashSet();
entries.add("feature.xml");
entries.add("file1.txt");
assertZipContents(buildFolder, "tmp/eclipse/features/F1_1.0.0.jar", entries, true);
entries.add("feature.xml");
entries.add("file1.txt");
entries.add("file2.txt");
assertZipContents(buildFolder, "tmp/eclipse/features/F2_1.0.0.jar", entries, false);
assertTrue(entries.contains("file1.txt"));
}
public void testBug271373() throws Exception {
IFolder buildFolder = newTest("271373_publisher");
Utils.generateFeature(buildFolder, "F", null, new String[] {"A;os=win32,linux;unpack=false"});
IFolder A = Utils.createFolder(buildFolder, "plugins/A");
Attributes manifestAdditions = new Attributes();
manifestAdditions.put(new Attributes.Name("Eclipse-PlatformFilter"), "(| (osgi.os=win32) (osgi.os=linux))");
Utils.generateBundleManifest(A, "A", "1.0.0", manifestAdditions);
Utils.generatePluginBuildProperties(A, null);
Utils.writeBuffer(A.getFile("src/foo.java"), new StringBuffer("public class foo { int i; }"));
IFile product = buildFolder.getFile("foo.product");
Utils.generateProduct(product, "foo.product", "1.0.0", new String[] {"F"}, true);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("product", product.getLocation().toOSString());
properties.put("p2.gathering", "true");
properties.put("configs", "win32,win32,x86");
properties.put("baseLocation", "");
properties.put("includeLaunchers", "false");
properties.put("archivesFormat", "win32,win32,x86-folder");
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
assertResourceFile(buildFolder, "tmp/eclipse/plugins/A_1.0.0.jar");
}
public void testBug323286() throws Exception {
IFolder buildFolder = newTest("323286");
IFolder A_1 = Utils.createFolder(buildFolder, "plugins/A_1");
IFolder A_2 = Utils.createFolder(buildFolder, "plugins/A_2");
IFile productFile = buildFolder.getFile("product.product");
Utils.generateFeature(buildFolder, "F", null, new String[] {"A;version=1"});
Utils.generateBundle(A_1, "A", "1");
Utils.generateBundle(A_2, "A", "2");
Utils.generateProduct(productFile, "product", "1.0.0", new String[] {"A"}, false);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("product", productFile.getLocation().toOSString());
properties.put("topLevelElementId", "F");
properties.put("p2.gathering", "true");
properties.put("baseLocation", "");
properties.put("includeLaunchers", "false");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
}
public void testBug322340() throws Exception {
IFolder buildFolder = newTest("322340");
IFolder F = Utils.createFolder(buildFolder, "features/F");
IFolder A = Utils.createFolder(buildFolder, "plugins/A");
Utils.generateBundle(A, "A", "1");
Utils.generateFeature(buildFolder, "F", null, new String[] {"A"});
Utils.writeBuffer(F.getFile("file.txt"), new StringBuffer("I'm a file!"));
Utils.writeBuffer(F.getFile("meToo.txt"), new StringBuffer("I'm also a file!"));
Properties properties = new Properties();
properties.put("root", "file:file.txt, file:meToo.txt");
properties.put("root.permissions.755", "*.txt");
Utils.storeBuildProperties(F, properties);
IFile productFile = buildFolder.getFile("product.product");
Utils.generateProduct(productFile, "product", "1", new String[] {"F"}, true);
properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("product", productFile.getLocation().toOSString());
properties.put("p2.gathering", "true");
properties.put("configs", "linux,gtk,x86");
properties.put("baseLocation", "");
properties.put("includeLaunchers", "false");
properties.put("archivesFormat", "linux,gtk,x86-antZip");
Utils.storeBuildProperties(buildFolder, properties);
runProductBuild(buildFolder);
IFile zip = buildFolder.getFile("I.TestBuild/eclipse-linux.gtk.x86.zip");
assertZipPermissions(zip, "eclipse/meToo.txt", "-rwxr-xr-x");
assertZipPermissions(zip, "eclipse/file.txt", "-rwxr-xr-x");
}
public void testBug329162() throws Exception {
IFolder buildFolder = newTest("329162");
IFolder bundle = Utils.createFolder(buildFolder, "plugins/bundle");
Utils.writeBuffer(bundle.getFile("src/A.java"), new StringBuffer("import b.B; public class A { B b = new B(); public void Bar(){}}"));
Utils.writeBuffer(bundle.getFile("src/b/B.java"), new StringBuffer("package b; public class B { public int i = 0; public void Foo(){}}"));
Utils.generateBundle(bundle, "bundle");
Utils.generateFeature(buildFolder, "F", null, new String[] {"bundle", "org.eclipse.osgi"});
IFolder templateFolder = Utils.createFolder(buildFolder, "features/template");
StringBuffer buffer = new StringBuffer();
buffer.append("<feature id=\"template\" label=\"FooSource\" version=\"1.0.0.v123\"> \n");
buffer.append(" <description>generated source</description> \n");
buffer.append("</feature> \n");
Utils.writeBuffer(templateFolder.getFile("feature.xml"), buffer);
IFolder sourceTemplate = Utils.createFolder(templateFolder, "sourceTemplateFeature");
buffer = new StringBuffer();
buffer.append("requires.0.namespace=org.eclipse.equinox.p2.iu \n");
buffer.append("requires.0.name=testid0 \n");
buffer.append("requires.0.range=[1.2.3,1.3) \n");
Utils.writeBuffer(sourceTemplate.getFile("p2.inf"), buffer);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "F");
properties.put("p2.gathering", "true");
properties.put("sourceBundleMode", "all");
properties.put("sourceBundleTemplateFeature", "template");
properties.put("sourceBundleFeatureVersion", "1.0.0.v123");
properties.put("individualSourceBundles", "true");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
IMetadataRepository repo = loadMetadataRepository(buildFolder.getFolder("buildRepo").getLocationURI());
IInstallableUnit iu = getIU(repo, "template.source.feature.group");
assertRequires(iu, P2InfUtils.NAMESPACE_IU, "bundle.source");
assertRequires(iu, P2InfUtils.NAMESPACE_IU, "org.eclipse.osgi.source");
assertRequires(iu, P2InfUtils.NAMESPACE_IU, "testid0");
assertEquals(iu.getProperty("org.eclipse.equinox.p2.name"), "FooSource");
assertEquals(iu.getProperty("org.eclipse.equinox.p2.description"), "generated source");
getIU(repo, "org.eclipse.osgi.source");
getIU(repo, "bundle.source");
}
}