// Copyright © 2013-2014 Esko Luontola <www.orfjackal.net>
// This software is released under the Apache License 2.0.
// The license text is at http://www.apache.org/licenses/LICENSE-2.0
package net.orfjackal.retrolambda.maven;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.toolchain.*;
import org.apache.maven.toolchain.java.*;
import org.junit.*;
import org.junit.rules.ExpectedException;
import java.io.File;
import java.util.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.*;
public class ProcessClassesMojoTest {
@Rule
public final ExpectedException thrown = ExpectedException.none();
private final Log log = mock(Log.class);
private final FakeToolchainManager toolchainManager = new FakeToolchainManager();
private final ProcessMainClassesMojo mojo = new ProcessMainClassesMojo();
@Before
public void sensibleDefaults() {
mojo.setLog(log);
mojo.toolchainManager = toolchainManager;
mojo.target = "1.7";
}
@Test
public void error_message_lists_the_accepted_targets() throws MojoExecutionException {
mojo.target = "1.0";
thrown.expect(MojoExecutionException.class);
thrown.expectMessage("1.5, 1.6, 1.7, 1.8");
mojo.execute();
}
@Test
public void java_command_defaults_to_current_jvm() {
assertThat(mojo.getJavaCommand(), is(new File(System.getProperty("java.home"), "bin/java").getAbsolutePath()));
}
@Test
public void java_command_from_toolchain_overrides_the_current_jvm() {
toolchainManager.setJdkToolChain(new FakeJavaToolChain("jdk-from-toolchain"));
assertThat(mojo.getJavaCommand(), is("jdk-from-toolchain/bin/java"));
verify(log).info("Toolchain in retrolambda-maven-plugin: JDK[jdk-from-toolchain]");
}
@Test
public void java_command_from_local_configuration_overrides_the_toolchain() {
toolchainManager.setJdkToolChain(new FakeJavaToolChain("jdk-from-toolchain"));
mojo.java8home = new File("jdk-from-local-configuration");
assertThat(mojo.getJavaCommand().replace('\\', '/'), is("jdk-from-local-configuration/bin/java"));
verify(log).warn("Toolchains are ignored, 'java8home' parameter is set to jdk-from-local-configuration");
}
private static class FakeToolchainManager implements ToolchainManager {
private final Map<String, Toolchain> toolChainsByType = new HashMap<String, Toolchain>();
@Override
public Toolchain getToolchainFromBuildContext(String type, MavenSession context) {
return toolChainsByType.get(type);
}
public void setJdkToolChain(JavaToolChain toolChain) {
toolChainsByType.put("jdk", toolChain);
}
}
private static class FakeJavaToolChain extends DefaultJavaToolChain {
public FakeJavaToolChain(String javaHome) {
super(null, null);
setJavaHome(javaHome);
}
@Override
public String findTool(String toolName) {
return getJavaHome() + "/bin/" + toolName;
}
}
}