package jp.co.worksap.workspace.lombok;
import static org.hamcrest.CoreMatchers.either;
import static org.hamcrest.Matchers.contains;
import static org.junit.Assert.assertThat;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.util.List;
import java.util.Map;
import jp.co.worksap.workspace.common.NeverCalledProvider;
import jp.co.worksap.workspace.common.OperatingSystem;
import jp.co.worksap.workspace.common.download.Downloader;
import jp.co.worksap.workspace.ide.eclipse.EclipseConfiguration;
import jp.co.worksap.workspace.ide.eclipse.EclipseInstaller;
import jp.co.worksap.workspace.ide.eclipse.Version;
import org.codehaus.plexus.archiver.zip.ZipArchiver;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import com.google.common.base.Charsets;
import com.google.common.base.Optional;
import com.google.common.collect.Maps;
import com.google.common.io.Files;
public class LombokInstallerTest {
private static final String ZIP_FILE_PATH = "./target/empty.zip";
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@BeforeClass
public static void downloadLombokJar() throws IOException {
File jarFile = new File("src/test/resources", "lombok-1.12.2.jar");
if (jarFile.exists()) {
return;
}
URI uri = LombokConfiguration.fromString("1.12.4").getUrlToDownload();
Downloader downloader = Downloader.createFor(uri, new NeverCalledProvider());
downloader.download(uri, jarFile);
}
/**
* <p>To execute lombok installer, zip file should includes both of eclipse.exe and eclipse.ini</p>
* @see https://github.com/rzwitserloot/lombok/blob/45f9e9def12b8f32b76c86471487e735ebb7c09b/src/installer/lombok/installer/eclipse/EclipseLocationProvider.java
*/
@Before
public void makeZipFile() throws IOException {
ZipArchiver archiver = new ZipArchiver();
archiver.setDestFile(new File(ZIP_FILE_PATH));
archiver.getDestFile().delete();
File eclipseDir = folder.newFolder("eclipse");
File iniFile = new File(eclipseDir, "eclipse.ini");
File exeFile = new File(eclipseDir, "eclipse.exe");
Files.touch(iniFile);
Files.touch(exeFile);
archiver.addDirectory(eclipseDir);
archiver.addFile(iniFile, "eclipse/eclipse.ini");
archiver.addFile(exeFile, "eclipse/eclipse.exe");
archiver.createArchive();
}
@Test
public void installLombok() throws IOException {
File eclipseDir = installEclipse();
LombokConfiguration lombok = LombokConfiguration.fromString("1.12.2");
new LombokInstaller().install(Optional.of(lombok), eclipseDir, new NeverCalledProvider());
List<String> properties = Files.readLines(new File(eclipseDir, "eclipse.ini"), Charsets.UTF_8);
assertThat(properties,
// for Windows
either(contains("-javaagent:lombok.jar", "-Xbootclasspath/a:lombok.jar"))
// for Linux
.or(contains("-javaagent:" + eclipseDir.getAbsolutePath() + "/lombok.jar", "-Xbootclasspath/a:" + eclipseDir.getAbsolutePath() + "/lombok.jar")));
}
@Test
public void installLombokWithLocalFile() throws IOException {
File eclipseDir = installEclipse();
LombokConfiguration lombok = new LombokConfiguration(null, URI.create("src/test/resources/lombok-1.12.2.jar"));
new LombokInstaller().install(Optional.of(lombok), eclipseDir, new NeverCalledProvider());
List<String> properties = Files.readLines(new File(eclipseDir, "eclipse.ini"), Charsets.UTF_8);
assertThat(properties,
// for Windows
either(contains("-javaagent:lombok.jar", "-Xbootclasspath/a:lombok.jar"))
// for Linux
.or(contains("-javaagent:" + eclipseDir.getAbsolutePath() + "/lombok.jar", "-Xbootclasspath/a:" + eclipseDir.getAbsolutePath() + "/lombok.jar")));
}
private File installEclipse() throws IOException {
Map<OperatingSystem, String> downloadFrom = Maps.newHashMap();
Version juno = Version.fromString("juno");
downloadFrom.put(OperatingSystem.create(), ZIP_FILE_PATH);
EclipseConfiguration configuration = new EclipseConfiguration(juno, null, null, null, downloadFrom, null, null);
File targetDir = folder.newFolder();
EclipseInstaller eclipseInstaller = new EclipseInstaller();
return eclipseInstaller.install(configuration, targetDir, new NeverCalledProvider());
}
}