blob: 608ad3f2b9fa0893ef049dee6ce5636330ef7451 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2020 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Ferenc Hechler, ferenc_hechler@users.sourceforge.net - 83258 [jar exporter] Deploy java application as executable jar
* Ferenc Hechler, ferenc_hechler@users.sourceforge.net - 213638 [jar exporter] create ANT build file for current settings
* Ferenc Hechler, ferenc_hechler@users.sourceforge.net - 220257 [jar application] ANT build file does not create Class-Path Entry in Manifest
* Ferenc Hechler, ferenc_hechler@users.sourceforge.net - 243163 [jar exporter] export directory entries in "Runnable JAR File"
* Ferenc Hechler, ferenc_hechler@users.sourceforge.net - 219530 [jar application] add Jar-in-Jar ClassLoader option
* Ferenc Hechler, ferenc_hechler@users.sourceforge.net - 262766 [jar exporter] ANT file for Jar-in-Jar option contains relative path to jar-rsrc-loader.zip
* Ferenc Hechler, ferenc_hechler@users.sourceforge.net - 262763 [jar exporter] remove Built-By attribute in ANT files from Fat JAR Exporter
*******************************************************************************/
package org.eclipse.jdt.ui.tests.jarexport;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.DefaultHandler;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.eclipse.jdt.testplugin.JavaProjectHelper;
import org.eclipse.jdt.testplugin.JavaTestPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.Launch;
import org.eclipse.debug.core.model.IProcess;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.jdt.launching.IVMRunner;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.jdt.launching.VMRunnerConfiguration;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jdt.ui.jarpackager.IJarExportRunnable;
import org.eclipse.jdt.ui.jarpackager.JarPackageData;
import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.jarpackager.JarPackagerUtil;
import org.eclipse.jdt.internal.ui.jarpackagerfat.FatJarAntExporter;
import org.eclipse.jdt.internal.ui.jarpackagerfat.FatJarPackageWizardPage;
import org.eclipse.jdt.internal.ui.jarpackagerfat.FatJarPackageWizardPage.CopyLibraryHandler;
import org.eclipse.jdt.internal.ui.jarpackagerfat.FatJarPackageWizardPage.ExtractLibraryHandler;
import org.eclipse.jdt.internal.ui.jarpackagerfat.FatJarPackageWizardPage.LibraryHandler;
import org.eclipse.jdt.internal.ui.jarpackagerfat.FatJarPackageWizardPage.PackageLibraryHandler;
import org.eclipse.jdt.internal.ui.jarpackagerfat.FatJarRsrcUrlBuilder;
import org.eclipse.jdt.internal.ui.util.BusyIndicatorRunnableContext;
public class FatJarExportTests {
@Rule
public ProjectTestSetup pts=new ProjectTestSetup();
@Rule
public TestName tn=new TestName();
private static final int JAVA_RUN_TIMEOUT= 50; // 10th of a second
@BeforeClass
public static void setUpTest() {
System.setProperty("jdt.bug.367669", "non-null");
}
private IJavaProject fProject;
private IPackageFragmentRoot fMainRoot;
@Before
public void setUp() throws Exception {
fProject= ProjectTestSetup.getProject();
Map<String, String> options= fProject.getOptions(false);
String compliance= JavaCore.VERSION_1_4;
JavaModelUtil.setComplianceOptions(options, compliance);
JavaModelUtil.setDefaultClassfileOptions(options, compliance); // complete compliance options
fProject.setOptions(options);
fMainRoot= JavaProjectHelper.addSourceContainer(fProject, "src"); //$NON-NLS-1$
IPackageFragment fragment= fMainRoot.createPackageFragment("org.eclipse.jdt.ui.test", true, null); //$NON-NLS-1$
StringBuilder buf= new StringBuilder();
buf.append("package org.eclipse.jdt.ui.test;\n"); //$NON-NLS-1$
buf.append("import mylib.Foo;\n"); //$NON-NLS-1$
buf.append("public class Main {\n"); //$NON-NLS-1$
buf.append(" public static void main(String[] args) {\n"); //$NON-NLS-1$
buf.append(" new Foo();\n"); //$NON-NLS-1$
buf.append(" new Foo.FooInner();\n"); //$NON-NLS-1$
buf.append(" new Foo.FooInner.FooInnerInner();\n"); //$NON-NLS-1$
buf.append(" }\n"); //$NON-NLS-1$
buf.append("}\n"); //$NON-NLS-1$
fragment.createCompilationUnit("Main.java", buf.toString(), true, null); //$NON-NLS-1$
}
@After
public void tearDown() throws Exception {
JavaProjectHelper.clear(fProject, ProjectTestSetup.getDefaultClasspath());
}
private static String getFooContent() {
StringBuilder buf= new StringBuilder();
buf.append("package mylib;\n"); //$NON-NLS-1$
buf.append("public class Foo {\n"); //$NON-NLS-1$
buf.append(" public Foo() {\n"); //$NON-NLS-1$
buf.append(" System.out.println(\"created \" + Foo.class.getName());\n"); //$NON-NLS-1$
buf.append(" }\n"); //$NON-NLS-1$
buf.append(" public static class FooInner {\n"); //$NON-NLS-1$
buf.append(" public static class FooInnerInner {\n"); //$NON-NLS-1$
buf.append(" }\n"); //$NON-NLS-1$
buf.append(" }\n"); //$NON-NLS-1$
buf.append("}\n"); //$NON-NLS-1$
return buf.toString();
}
private static JarPackageData createAndRunFatJar(IJavaProject project, String testName, boolean compressJar, LibraryHandler libraryHandler) throws Exception, CoreException {
JarPackageData data= null;
// create jar and check contents
switch (libraryHandler.getID()) {
case ExtractLibraryHandler.ID: {
data= assertFatJarExport(project, testName, compressJar, libraryHandler);
break;
}
case PackageLibraryHandler.ID: {
data= assertFatJarWithLoaderExport(project, testName, compressJar, libraryHandler);
break;
}
case CopyLibraryHandler.ID: {
data= assertFatJarWithSubfolderExport(project, testName, compressJar, libraryHandler);
break;
}
default: {
fail("invalid library handling '" + libraryHandler.getID() + "'"); //$NON-NLS-1$ //$NON-NLS-2$
break;
}
}
// run newly generated jar and check stdout
String stdout= runJar(project, data.getJarLocation().toOSString());
// normalize EndOfLine to \n
stdout= stdout.replaceAll("\r\n", "\n").replaceAll("\r", "\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
// check for successful call of Foo
String expected= "created mylib.Foo\n"; //$NON-NLS-1$
assertEquals(expected, stdout);
return data;
}
private static JarPackageData assertFatJarExport(IJavaProject project, String testName, boolean compressJar, LibraryHandler libraryHandler) throws Exception {
//create class files
buildProject();
//create data
JarPackageData data= createJarPackageData(project, testName, libraryHandler);
// set compression
data.setCompress(compressJar);
//assert archive content as expected
try ( //create archive
ZipFile generatedArchive = createArchive(data)) {
//assert archive content as expected
assertNotNull(generatedArchive);
assertNotNull(generatedArchive.getEntry("org/eclipse/jdt/ui/test/Main.class")); //$NON-NLS-1$
assertNotNull(generatedArchive.getEntry("mylib/Foo.class")); //$NON-NLS-1$
assertNotNull(generatedArchive.getEntry("mylib/Foo$FooInner.class")); //$NON-NLS-1$
assertNotNull(generatedArchive.getEntry("mylib/Foo$FooInner$FooInnerInner.class")); //$NON-NLS-1$
}
MultiStatus status= new MultiStatus(JavaUI.ID_PLUGIN, 0, "", null); //$NON-NLS-1$
FatJarAntExporter antExporter= libraryHandler.getAntExporter(antScriptLocation(testName), data.getAbsoluteJarLocation(), createTempLaunchConfig(project));
antExporter.run(status);
assertTrue(getProblems(status), status.getSeverity() == IStatus.OK || status.getSeverity() == IStatus.INFO);
return data;
}
private static JarPackageData assertFatJarWithLoaderExport(IJavaProject project, String testName, boolean compressJar, LibraryHandler libraryHandler) throws Exception {
//create class files
buildProject();
//create data with Jar-in-Jar Loader
JarPackageData data= createJarPackageData(project, testName, libraryHandler);
// set compression
data.setCompress(compressJar);
//assert archive content as expected
try ( //create archive
ZipFile generatedArchive = createArchive(data)) {
//assert archive content as expected
assertNotNull(generatedArchive);
assertNotNull(generatedArchive.getEntry("org/eclipse/jdt/ui/test/Main.class")); //$NON-NLS-1$
// get loader entry
ZipEntry loaderClassEntry= generatedArchive.getEntry("org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.class"); //$NON-NLS-1$
assertNotNull(loaderClassEntry);
int magic;
int minorVersion;
int majorVersion;
try ( // check version of class file JarRsrcLoader (jdk 1.6 = version 50.0)
InputStream in = generatedArchive.getInputStream(loaderClassEntry)) {
magic = 0;
for (int i= 0; i < 4; i++)
magic = (magic << 8) + in.read();
minorVersion = ((in.read() << 8) + in.read());
majorVersion = ((in.read() << 8) + in.read());
}
assertEquals("loader is a class file", 0xCAFEBABE, magic); //$NON-NLS-1$
assertEquals("loader compiled with JDK 1.6", "50.0", majorVersion + "." + minorVersion); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
MultiStatus status= new MultiStatus(JavaUI.ID_PLUGIN, 0, "", null); //$NON-NLS-1$
FatJarAntExporter antExporter= libraryHandler.getAntExporter(antScriptLocation(testName), data.getAbsoluteJarLocation(), createTempLaunchConfig(project));
antExporter.run(status);
assertTrue(getProblems(status), status.getSeverity() == IStatus.OK || status.getSeverity() == IStatus.INFO);
// check that jar-rsrc-loader.zip file was created next to build.xml
IPath zipLocation= antScriptLocation(testName).removeLastSegments(1).append(FatJarRsrcUrlBuilder.JAR_RSRC_LOADER_ZIP);
assertTrue("loader zip missing: " + zipLocation.toOSString(), zipLocation.toFile().exists());
return data;
}
private static JarPackageData assertFatJarWithSubfolderExport(IJavaProject project, String testName, boolean compressJar, LibraryHandler libraryHandler) throws Exception {
//create class files
buildProject();
//create data with Jar-in-Jar Loader
JarPackageData data= createJarPackageData(project, testName, libraryHandler);
// set compression
data.setCompress(compressJar);
//assert archive content as expected
try ( //create archive
ZipFile generatedArchive = createArchive(data)) {
//assert archive content as expected
assertNotNull(generatedArchive);
assertNotNull(generatedArchive.getEntry("org/eclipse/jdt/ui/test/Main.class")); //$NON-NLS-1$
// check for libraries sub-folder
File jarFile= new File(generatedArchive.getName());
String subFolderName= jarFile.getName().replaceFirst("^(.*)[.]jar$", "$1_lib"); //$NON-NLS-1$//$NON-NLS-2$
File subFolderDir= new File(jarFile.getParentFile(), subFolderName);
assertTrue("actual: '" + subFolderDir.toString() + "'", subFolderDir.isDirectory()); //$NON-NLS-1$//$NON-NLS-2$
}
MultiStatus status= new MultiStatus(JavaUI.ID_PLUGIN, 0, "", null); //$NON-NLS-1$
FatJarAntExporter antExporter= libraryHandler.getAntExporter(antScriptLocation(testName), data.getAbsoluteJarLocation(), createTempLaunchConfig(project));
antExporter.run(status);
assertTrue(getProblems(status), status.getSeverity() == IStatus.OK || status.getSeverity() == IStatus.INFO);
return data;
}
private static void buildProject() throws CoreException {
ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null);
for (IMarker marker : ResourcesPlugin.getWorkspace().getRoot().findMarkers(null, true, IResource.DEPTH_INFINITE)) {
assertNotEquals((String) marker.getAttribute(IMarker.MESSAGE), IMarker.SEVERITY_ERROR, marker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO));
}
}
private static IPath antScriptLocation(String testName) {
return ResourcesPlugin.getWorkspace().getRoot().getLocation().append("build_" + testName + ".xml"); //$NON-NLS-1$//$NON-NLS-2$
}
private static JarPackageData createJarPackageData(IJavaProject project, String testName, LibraryHandler libraryHandler) throws CoreException {
JarPackageData data= new JarPackageData();
data.setOverwrite(true);
data.setIncludeDirectoryEntries(true);
IPath destination= ResourcesPlugin.getWorkspace().getRoot().getLocation().append(testName + ".jar"); //$NON-NLS-1$
data.setJarLocation(destination);
ILaunchConfiguration launchConfig= createTempLaunchConfig(project);
MultiStatus status= new MultiStatus(JavaUI.ID_PLUGIN, 0, "", null); //$NON-NLS-1$
Object[] children= FatJarPackageWizardPage.getSelectedElementsWithoutContainedChildren(launchConfig, data, new BusyIndicatorRunnableContext(), status);
assertTrue(getProblems(status), status.getSeverity() == IStatus.OK || status.getSeverity() == IStatus.INFO);
data.setElements(children);
data.setJarBuilder(libraryHandler.getBuilder(data));
return data;
}
private static String getProblems(MultiStatus status) {
StringBuilder result= new StringBuilder();
for (IStatus child : status.getChildren()) {
result.append(child.getMessage()).append("\n"); //$NON-NLS-1$
}
return result.toString();
}
/*
* From org.eclipse.jdt.internal.debug.ui.launcher.JavaApplicationLaunchShortcut
*
* For internal use only (testing), clients must not call.
*/
public static ILaunchConfiguration createTempLaunchConfig(IJavaProject project) {
String projectName= project.getElementName();
String configname= "fatjar_cfg_eraseme_" + projectName; //$NON-NLS-1$
ILaunchConfiguration config= null;
ILaunchConfigurationWorkingCopy wc= null;
try {
ILaunchManager launchManager= DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType configType= launchManager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
wc= configType.newInstance(null, launchManager.generateLaunchConfigurationName(configname));
} catch (CoreException e) {
JavaPlugin.log(e);
return null;
}
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "org.eclipse.jdt.ui.test.Main"); //$NON-NLS-1$
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, projectName);
try {
config= wc.doSave();
} catch (CoreException e) {
JavaPlugin.log(e);
}
return config;
}
private static ZipFile createArchive(JarPackageData data) throws Exception, CoreException {
IWorkbenchWindow window= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IJarExportRunnable op= data.createJarExportRunnable(window.getShell());
window.run(false, false, op);
IStatus status= op.getStatus();
if (status.getSeverity() == IStatus.ERROR)
throw new CoreException(status);
return JarPackagerUtil.getArchiveFile(data.getJarLocation());
}
private static String runJar(IJavaProject project, String jarPath) throws CoreException {
IVMInstall vmInstall= JavaRuntime.getVMInstall(project);
if (vmInstall == null)
vmInstall= JavaRuntime.getDefaultVMInstall();
if (vmInstall == null)
throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), "Could not find a VM Install")); //$NON-NLS-1$
IVMRunner vmRunner= vmInstall.getVMRunner(ILaunchManager.RUN_MODE);
if (vmRunner == null)
throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), "Could not create a VM Runner")); //$NON-NLS-1$
VMRunnerConfiguration vmConfig= new VMRunnerConfiguration("-jar", new String[] {}); //$NON-NLS-1$
vmConfig.setWorkingDirectory(new File(jarPath).getParent());
vmConfig.setProgramArguments(new String[] { jarPath });
ILaunch launch= new Launch(null, ILaunchManager.RUN_MODE, null);
vmRunner.run(vmConfig, launch, null);
IProcess[] processes= launch.getProcesses();
if (processes.length == 0)
throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), "Could not launch jar")); //$NON-NLS-1$
int timeout= JAVA_RUN_TIMEOUT;
while (timeout > 0 && !processes[0].isTerminated()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
timeout--;
}
if (!processes[0].isTerminated())
throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), "Process did not terminate within timeout")); //$NON-NLS-1$
int exitCode= processes[0].getExitValue();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
if (exitCode != 0) {
String stdout= processes[0].getStreamsProxy().getOutputStreamMonitor().getContents();
String errout= processes[0].getStreamsProxy().getErrorStreamMonitor().getContents();
throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), "Run failed: exitcode=" + exitCode + ", stdout=[" + stdout + "], stderr=[" + errout + "]")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
} else {
return processes[0].getStreamsProxy().getOutputStreamMonitor().getContents();
}
}
private static void assertAntScript(JarPackageData data, IPath antScriptLocation, LibraryHandler libraryHandler, String[] filesets, String[] zipfilesets) throws Exception {
String archiveName= data.getAbsoluteJarLocation().lastSegment();
switch (libraryHandler.getID()) {
case ExtractLibraryHandler.ID: {
assertAntScriptExtract(archiveName, antScriptLocation, filesets, zipfilesets);
break;
}
case PackageLibraryHandler.ID: {
assertAntScriptPackage(archiveName, antScriptLocation, filesets, zipfilesets);
break;
}
case CopyLibraryHandler.ID: {
assertAntScriptCopy(archiveName, antScriptLocation, filesets, zipfilesets);
break;
}
default: {
fail("unknown library handling '" + libraryHandler.getID() + "'"); //$NON-NLS-1$//$NON-NLS-2$
break;
}
}
}
private static void assertAntScriptCopy(String archiveName, IPath antScriptLocation, String[] filesets, String[] zipfilesets) throws Exception {
String subfolderName= archiveName.replaceFirst("^(.*)[.]jar$", "$1_lib"); //$NON-NLS-1$//$NON-NLS-2$
String projectNameValue= "Create Runnable Jar for Project TestSetupProject"; //$NON-NLS-1$
projectNameValue+= " with libraries in sub-folder"; //$NON-NLS-1$
Element xmlProject= readXML(antScriptLocation);
assertEquals("project", xmlProject.getNodeName()); //$NON-NLS-1$
assertEquals("create_run_jar", xmlProject.getAttribute("default")); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(projectNameValue, xmlProject.getAttribute("name")); //$NON-NLS-1$
Element xmlTarget= (Element)xmlProject.getElementsByTagName("target").item(0); //$NON-NLS-1$
assertEquals("create_run_jar", xmlTarget.getAttribute("name")); //$NON-NLS-1$//$NON-NLS-2$
Element xmlJar= (Element)xmlTarget.getElementsByTagName("jar").item(0); //$NON-NLS-1$
assertTrue("actual: " + xmlJar.getAttribute("destfile"), xmlJar.getAttribute("destfile").endsWith(archiveName)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Element xmlManifest= (Element)xmlJar.getElementsByTagName("manifest").item(0); //$NON-NLS-1$
Element xmlAttribute1= (Element)xmlManifest.getElementsByTagName("attribute").item(0); //$NON-NLS-1$
assertEquals("Main-Class", xmlAttribute1.getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("org.eclipse.jdt.ui.test.Main", xmlAttribute1.getAttribute("value")); //$NON-NLS-1$ //$NON-NLS-2$
Element xmlAttribute2= (Element)xmlManifest.getElementsByTagName("attribute").item(1); //$NON-NLS-1$
assertEquals("Class-Path", xmlAttribute2.getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue("actual value: " + xmlAttribute2.getAttribute("value"), xmlAttribute2.getAttribute("value").startsWith(".")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
NodeList xmlFilesets= xmlJar.getElementsByTagName("fileset"); //$NON-NLS-1$
assertEquals(filesets.length, xmlFilesets.getLength());
for (int i= 0; i < xmlFilesets.getLength(); i++) {
String dir= ((Element)xmlFilesets.item(i)).getAttribute("dir"); //$NON-NLS-1$
boolean found= false;
for (String fileset : filesets) {
if (dir.endsWith(fileset)) {
found= true;
break;
}
}
assertTrue("found fileset: '" + dir + "'", found); //$NON-NLS-1$//$NON-NLS-2$
}
Element xmlDelete= (Element)xmlTarget.getElementsByTagName("delete").item(0); //$NON-NLS-1$
assertTrue("actual: " + xmlDelete.getAttribute("dir"), xmlDelete.getAttribute("dir").endsWith(subfolderName)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Element xmlMkdir= (Element)xmlTarget.getElementsByTagName("mkdir").item(0); //$NON-NLS-1$
assertTrue("actual: " + xmlMkdir.getAttribute("dir"), xmlMkdir.getAttribute("dir").endsWith(subfolderName)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
NodeList xmlCopies= xmlTarget.getElementsByTagName("copy"); //$NON-NLS-1$
assertEquals(zipfilesets.length, xmlCopies.getLength());
for (int i= 0; i < xmlCopies.getLength(); i++) {
String absLibPath= ((Element)xmlCopies.item(i)).getAttribute("file"); //$NON-NLS-1$
String libName= new File(absLibPath).getName();
boolean found= false;
for (String zipfileset : zipfilesets) {
if (libName.equals(zipfileset)) {
found= true;
break;
}
}
assertTrue("find zipfileset lib: '" + libName + "'", found); //$NON-NLS-1$ //$NON-NLS-2$
}
}
private static void assertAntScriptPackage(String archiveName, IPath antScriptLocation, String[] filesets, String[] zipfilesets) throws Exception {
String projectNameValue= "Create Runnable Jar for Project TestSetupProject"; //$NON-NLS-1$
projectNameValue+= " with Jar-in-Jar Loader"; //$NON-NLS-1$
Element xmlProject= readXML(antScriptLocation);
assertEquals("project", xmlProject.getNodeName()); //$NON-NLS-1$
assertEquals("create_run_jar", xmlProject.getAttribute("default")); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(projectNameValue, xmlProject.getAttribute("name")); //$NON-NLS-1$
Element xmlTarget= (Element)xmlProject.getElementsByTagName("target").item(0); //$NON-NLS-1$
assertEquals("create_run_jar", xmlTarget.getAttribute("name")); //$NON-NLS-1$//$NON-NLS-2$
Element xmlJar= (Element)xmlTarget.getElementsByTagName("jar").item(0); //$NON-NLS-1$
assertTrue("actual: " + xmlJar.getAttribute("destfile"), xmlJar.getAttribute("destfile").endsWith(archiveName)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Element xmlManifest= (Element)xmlJar.getElementsByTagName("manifest").item(0); //$NON-NLS-1$
Element xmlAttribute1= (Element)xmlManifest.getElementsByTagName("attribute").item(0); //$NON-NLS-1$
assertEquals("Main-Class", xmlAttribute1.getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader", xmlAttribute1.getAttribute("value")); //$NON-NLS-1$ //$NON-NLS-2$
Element xmlAttribute2= (Element)xmlManifest.getElementsByTagName("attribute").item(1); //$NON-NLS-1$
assertEquals("Rsrc-Main-Class", xmlAttribute2.getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("org.eclipse.jdt.ui.test.Main", xmlAttribute2.getAttribute("value")); //$NON-NLS-1$ //$NON-NLS-2$
Element xmlAttribute3= (Element)xmlManifest.getElementsByTagName("attribute").item(2); //$NON-NLS-1$
assertEquals("Class-Path", xmlAttribute3.getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(".", xmlAttribute3.getAttribute("value")); //$NON-NLS-1$ //$NON-NLS-2$
Element xmlAttribute4= (Element)xmlManifest.getElementsByTagName("attribute").item(3); //$NON-NLS-1$
assertEquals("Rsrc-Class-Path", xmlAttribute4.getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue("actual value: " + xmlAttribute4.getAttribute("value"), xmlAttribute4.getAttribute("value").startsWith("./")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
NodeList xmlFilesets= xmlJar.getElementsByTagName("fileset"); //$NON-NLS-1$
assertEquals(filesets.length, xmlFilesets.getLength());
NodeList xmlZipfilesets= xmlJar.getElementsByTagName("zipfileset"); //$NON-NLS-1$
assertEquals(zipfilesets.length + 1, xmlZipfilesets.getLength());
for (int i= 0; i < xmlFilesets.getLength(); i++) {
String dir= ((Element)xmlFilesets.item(i)).getAttribute("dir"); //$NON-NLS-1$
boolean found= false;
for (String fileset : filesets) {
if (dir.endsWith(fileset)) {
found= true;
break;
}
}
assertTrue("found fileset: '" + dir + "'", found); //$NON-NLS-1$//$NON-NLS-2$
}
for (int i= 0; i < xmlZipfilesets.getLength(); i++) {
String libName= ((Element)xmlZipfilesets.item(i)).getAttribute("includes"); //$NON-NLS-1$
boolean found= false;
if (libName.isEmpty()) {
libName= ((Element)xmlZipfilesets.item(i)).getAttribute("src"); //$NON-NLS-1$
found= libName.equals(FatJarRsrcUrlBuilder.JAR_RSRC_LOADER_ZIP);
}
for (String zipfileset : zipfilesets) {
if (libName.equals(zipfileset)) {
found= true;
break;
}
}
assertTrue("find zipfileset lib: '" + libName + "'", found); //$NON-NLS-1$ //$NON-NLS-2$
}
}
private static void assertAntScriptExtract(String archiveName, IPath antScriptLocation, String[] filesets, String[] zipfilesets) throws Exception {
String projectNameValue= "Create Runnable Jar for Project TestSetupProject"; //$NON-NLS-1$
Element xmlProject= readXML(antScriptLocation);
assertEquals("project", xmlProject.getNodeName()); //$NON-NLS-1$
assertEquals("create_run_jar", xmlProject.getAttribute("default")); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(projectNameValue, xmlProject.getAttribute("name")); //$NON-NLS-1$
Element xmlTarget= (Element)xmlProject.getElementsByTagName("target").item(0); //$NON-NLS-1$
assertEquals("create_run_jar", xmlTarget.getAttribute("name")); //$NON-NLS-1$//$NON-NLS-2$
Element xmlJar= (Element)xmlTarget.getElementsByTagName("jar").item(0); //$NON-NLS-1$
assertTrue("actual: " + xmlJar.getAttribute("destfile"), xmlJar.getAttribute("destfile").endsWith(archiveName)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals("mergewithoutmain", xmlJar.getAttribute("filesetmanifest")); //$NON-NLS-1$ //$NON-NLS-2$
Element xmlManifest= (Element)xmlJar.getElementsByTagName("manifest").item(0); //$NON-NLS-1$
Element xmlAttribute1= (Element)xmlManifest.getElementsByTagName("attribute").item(0); //$NON-NLS-1$
assertEquals("Main-Class", xmlAttribute1.getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals("org.eclipse.jdt.ui.test.Main", xmlAttribute1.getAttribute("value")); //$NON-NLS-1$ //$NON-NLS-2$
Element xmlAttribute2= (Element)xmlManifest.getElementsByTagName("attribute").item(1); //$NON-NLS-1$
assertEquals("Class-Path", xmlAttribute2.getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(".", xmlAttribute2.getAttribute("value")); //$NON-NLS-1$ //$NON-NLS-2$
NodeList xmlFilesets= xmlJar.getElementsByTagName("fileset"); //$NON-NLS-1$
assertEquals(filesets.length, xmlFilesets.getLength());
NodeList xmlZipfilesets= xmlJar.getElementsByTagName("zipfileset"); //$NON-NLS-1$
assertEquals(zipfilesets.length, xmlZipfilesets.getLength());
for (int i= 0; i < xmlFilesets.getLength(); i++) {
String dir= ((Element)xmlFilesets.item(i)).getAttribute("dir"); //$NON-NLS-1$
boolean found= false;
for (String fileset : filesets) {
if (dir.endsWith(fileset)) {
found= true;
break;
}
}
assertTrue("found fileset: '" + dir + "'", found); //$NON-NLS-1$//$NON-NLS-2$
}
for (int i= 0; i < xmlZipfilesets.getLength(); i++) {
String excludes= ((Element)xmlZipfilesets.item(i)).getAttribute("excludes"); //$NON-NLS-1$
assertEquals("META-INF/*.SF", excludes); //$NON-NLS-1$
String src= ((Element)xmlZipfilesets.item(i)).getAttribute("src"); //$NON-NLS-1$
boolean found= false;
for (String zipfileset : zipfilesets) {
if (src.endsWith(zipfileset)) {
found= true;
break;
}
}
assertTrue("found zipfileset: '" + src + "'", found); //$NON-NLS-1$ //$NON-NLS-2$
}
}
/**
* Helper class to open a xml file
*
* @param xmlFilePath path to xml file to read
* @return root element of the parsed xml-document
* @throws Exception if anything went wrong
*/
private static Element readXML(IPath xmlFilePath) throws Exception {
try (InputStream in = new FileInputStream(xmlFilePath.toFile())) {
DocumentBuilder parser= DocumentBuilderFactory.newInstance().newDocumentBuilder();
parser.setErrorHandler(new DefaultHandler());
Element root= parser.parse(new InputSource(in)).getDocumentElement();
in.close();
return root;
}
}
private String getName() {
return tn.getMethodName();
}
@Test
public void exportSameSrcRoot() throws Exception {
IPackageFragment pack= fMainRoot.createPackageFragment("mylib", true, null); //$NON-NLS-1$
try {
pack.createCompilationUnit("Foo.java", getFooContent(), true, null); //$NON-NLS-1$
JarPackageData data= createAndRunFatJar(fProject, getName(), true, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()), new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(), new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
} finally {
pack.delete(true, null);
}
}
@Test
public void exportSrcRootWithOutputFolder() throws Exception {
IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(fProject, "other", new IPath[0], new IPath[0], "otherout"); //$NON-NLS-1$ //$NON-NLS-2$
try {
IPackageFragment pack= root.createPackageFragment("mylib", true, null); //$NON-NLS-1$
pack.createCompilationUnit("Foo.java", getFooContent(), true, null); //$NON-NLS-1$
JarPackageData data= createAndRunFatJar(fProject, getName(), true, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()),
new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin", "TestSetupProject/otherout" },//$NON-NLS-1$ //$NON-NLS-2$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin", "TestSetupProject/otherout" },//$NON-NLS-2$ //$NON-NLS-1$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(), new String[] { "TestSetupProject/bin", "TestSetupProject/otherout" },//$NON-NLS-2$ //$NON-NLS-1$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
} finally {
JavaProjectHelper.removeSourceContainer(fProject, root.getElementName());
}
}
@Test
public void exportOtherSrcRoot() throws Exception {
IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(fProject, "other"); //$NON-NLS-1$
try {
IPackageFragment pack= root.createPackageFragment("mylib", true, null); //$NON-NLS-1$
pack.createCompilationUnit("Foo.java", getFooContent(), true, null); //$NON-NLS-1$
JarPackageData data= createAndRunFatJar(fProject, getName(), true, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()),
new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin" }, new String[] { "rtstubs15.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(),
new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
} finally {
JavaProjectHelper.removeSourceContainer(fProject, root.getElementName());
}
}
@Test
public void exportOtherProject() throws Exception {
IJavaProject otherProject= JavaProjectHelper.createJavaProject("OtherProject", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
try {
otherProject.setRawClasspath(ProjectTestSetup.getDefaultClasspath(), null);
IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(otherProject, "other"); //$NON-NLS-1$
IPackageFragment pack= root.createPackageFragment("mylib", true, null); //$NON-NLS-1$
pack.createCompilationUnit("Foo.java", getFooContent(), true, null); //$NON-NLS-1$
JavaProjectHelper.addRequiredProject(fProject, otherProject);
JarPackageData data= createAndRunFatJar(fProject, getName(), true, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()),
new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin", "OtherProject/bin" }, new String[] { "rtstubs15.jar" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin", "OtherProject/bin" },//$NON-NLS-1$ //$NON-NLS-2$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(),
new String[] { "TestSetupProject/bin", "OtherProject/bin" },//$NON-NLS-1$ //$NON-NLS-2$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
} finally {
JavaProjectHelper.removeFromClasspath(fProject, otherProject.getProject().getFullPath());
JavaProjectHelper.delete(otherProject);
}
}
@Test
public void exportInternalLib() throws Exception {
File lib= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.MYLIB_STDOUT);
IPackageFragmentRoot root= JavaProjectHelper.addLibraryWithImport(fProject, Path.fromOSString(lib.getPath()), null, null);
try {
JarPackageData data= createAndRunFatJar(fProject, getName(), true, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()),
new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar", "TestSetupProject/mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin" },//$NON-NLS-1$
new String[] { "rtstubs15.jar", "mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(),
new String[] { "TestSetupProject/bin" },//$NON-NLS-1$
new String[] { "rtstubs15.jar", "mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
} finally {
JavaProjectHelper.removeFromClasspath(fProject, root.getPath());
}
}
@Test
public void exportInternalLib_UncompressedJar() throws Exception {
File lib= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.MYLIB_STDOUT);
IPackageFragmentRoot root= JavaProjectHelper.addLibraryWithImport(fProject, Path.fromOSString(lib.getPath()), null, null);
try {
JarPackageData data= createAndRunFatJar(fProject, getName(), false, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()),
new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin" }, new String[] { "rtstubs15.jar", "TestSetupProject/mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar", "mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(),
new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar", "mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
} finally {
JavaProjectHelper.removeFromClasspath(fProject, root.getPath());
}
}
@Test
public void exportExternalLib() throws Exception {
File lib= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.MYLIB_STDOUT);
IPackageFragmentRoot root= JavaProjectHelper.addLibrary(fProject, Path.fromOSString(lib.getPath()));
try {
// normal Jar
JarPackageData data= createAndRunFatJar(fProject, getName(), true, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()),
new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin" }, new String[] { "rtstubs15.jar", "testresources/mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar", "mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(), new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar", "mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
} finally {
JavaProjectHelper.removeFromClasspath(fProject, root.getPath());
}
}
@Test
public void classFolder() throws Exception {
File lib= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.MYLIB_STDOUT);
IPackageFragmentRoot root= JavaProjectHelper.addClassFolderWithImport(fProject, "cf", null, null, lib); //$NON-NLS-1$
try {
// normal Jar
JarPackageData data= createAndRunFatJar(fProject, getName(), true, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()),
new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin", "TestSetupProject/cf" }, new String[] { "rtstubs15.jar" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin", "TestSetupProject/cf" },//$NON-NLS-1$ //$NON-NLS-2$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(), new String[] { "TestSetupProject/bin", "TestSetupProject/cf" },//$NON-NLS-1$ //$NON-NLS-2$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
} finally {
JavaProjectHelper.removeFromClasspath(fProject, root.getPath());
}
}
@Test
public void variable() throws Exception {
File lib= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.MYLIB_STDOUT);
JavaCore.setClasspathVariable("MYLIB", Path.fromOSString(lib.getPath()), null); //$NON-NLS-1$
JavaProjectHelper.addVariableEntry(fProject, new Path("MYLIB"), null, null); //$NON-NLS-1$
try {
// normal Jar
JarPackageData data= createAndRunFatJar(fProject, getName(), true, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()),
new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin" }, new String[] { "rtstubs15.jar", "testresources/mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar", "mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(), new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar", "mylib_stdout.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
} finally {
JavaProjectHelper.removeFromClasspath(fProject, new Path("MYLIB")); //$NON-NLS-1$
}
}
@Test
public void signedLibs() throws Exception {
File lib= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.MYLIB_SIG);
IPackageFragmentRoot root= JavaProjectHelper.addLibraryWithImport(fProject, Path.fromOSString(lib.getPath()), null, null);
try {
// normal Jar
JarPackageData data= createAndRunFatJar(fProject, getName(), true, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()),
new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin" }, new String[] { "rtstubs15.jar", "TestSetupProject/mylib_sig.jar" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar", "mylib_sig.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(), new String[] { "TestSetupProject/bin" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar", "mylib_sig.jar" }); //$NON-NLS-1$ //$NON-NLS-2$
} finally {
JavaProjectHelper.removeFromClasspath(fProject, root.getPath());
}
}
@Test
public void externalClassFolder() throws Exception {
File classFolder= JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/externalClassFolder/"));//$NON-NLS-1$
assertTrue("class folder not found", classFolder != null && classFolder.exists());//$NON-NLS-1$
IPackageFragmentRoot externalRoot= JavaProjectHelper.addLibrary(fProject, Path.fromOSString(classFolder.getPath()), null, null);
try {
JarPackageData data= createAndRunFatJar(fProject, getName(), true, new ExtractLibraryHandler());
assertAntScript(data, antScriptLocation(getName()),
new ExtractLibraryHandler(),
new String[] { "TestSetupProject/bin", "testresources/externalClassFolder" }, new String[] { "rtstubs15.jar" }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
// Jar-in-Jar loader
data= createAndRunFatJar(fProject, getName() + "_JiJ", true, new PackageLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_JiJ"), //$NON-NLS-1$
new PackageLibraryHandler(),
new String[] { "TestSetupProject/bin", "testresources/externalClassFolder" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
// sub-folder libraries
data= createAndRunFatJar(fProject, getName() + "_SL", true, new CopyLibraryHandler()); //$NON-NLS-1$
assertAntScript(data, antScriptLocation(getName() + "_SL"), //$NON-NLS-1$
new CopyLibraryHandler(), new String[] { "TestSetupProject/bin", "testresources/externalClassFolder" }, //$NON-NLS-1$
new String[] { "rtstubs15.jar" }); //$NON-NLS-1$
} finally {
JavaProjectHelper.removeFromClasspath(fProject, externalRoot.getPath());
}
}
}