package jp.co.worksap.workspace.ide.eclipse;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assume.assumeThat;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.util.Map;
import java.util.regex.Pattern;
import jp.co.worksap.workspace.common.NeverCalledProvider;
import jp.co.worksap.workspace.common.OperatingSystem;
import jp.co.worksap.workspace.common.download.Downloader;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.io.PatternFilenameFilter;
public class EclipsePluginInstallerTest {
private static final String INSTALLER_NAME = "eclipse-jee-kepler-SR1-win32-x86_64.zip";
private static final Pattern CDT_DIR_NAME = Pattern.compile("^org\\.eclipse\\.cdt_.*");
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Before
public void ensureWindows64bit() {
OperatingSystem os = OperatingSystem.create();
assumeThat(os, is(equalTo(OperatingSystem.WIN64)));
}
@Before
public void ensureInstallerExists() throws MalformedURLException, IOException {
File installer = new File("src/test/resources", INSTALLER_NAME);
if (installer.exists()) {
return;
}
Version keplerSr1 = Version.fromString("4.3.1");
String urlToDownload = new DownloadUrlFinder().findDownloadUrl(keplerSr1);
Downloader downloader = Downloader.createFor(URI.create(urlToDownload).toURL(), new NeverCalledProvider());
downloader.download(URI.create(urlToDownload).toURL(), installer);
}
@Test
public void installPlugin() throws IOException {
assumeThat(OperatingSystem.create(), is(OperatingSystem.fromString("win.64")));
Map<OperatingSystem, String> downloadFrom = Maps.newHashMap();
downloadFrom.put(OperatingSystem.fromString("win.64"), "./src/test/resources/" + INSTALLER_NAME);
Version juno = Version.fromString("kepler");
EclipseConfiguration configuration = new EclipseConfiguration(juno, null,
Lists.newArrayList(EclipsePlugin.of("org.eclipse.cdt.feature.group", "8.2.1.201309180223")),
Lists.newArrayList("http://download.eclipse.org/tools/cdt/releases/kepler"),
downloadFrom, null, null);
File targetDir = folder.newFolder();
EclipseInstaller eclipseInstaller = new EclipseInstaller();
File eclipseDir = eclipseInstaller.install(configuration, targetDir, new NeverCalledProvider());
assertThatCdtHasBeenInstalled(eclipseDir, false);
EclipsePluginInstaller pluginInstaller = new EclipsePluginInstaller();
pluginInstaller.install(configuration, targetDir);
assertThatCdtHasBeenInstalled(eclipseDir, true);
}
private void assertThatCdtHasBeenInstalled(File eclipseDir, boolean expect) {
File features = new File(eclipseDir, "features");
features.mkdir();
boolean installed = features.list(new PatternFilenameFilter(CDT_DIR_NAME)).length > 0;
assertEquals(expect, installed);
}
}