package de.is24.deadcode4j.plugin; import de.is24.deadcode4j.junit.LoggingRule; import org.apache.maven.plugin.logging.Log; import org.apache.maven.plugin.testing.MojoRule; import org.junit.Rule; import org.junit.Test; import java.io.File; import java.net.URL; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; public class IT_PuttingItAllTogether { @Rule public final MojoRule mojoSetUp = new MojoRule(); private Log logMock; private FindDeadCodeMojo findDeadCodeMojo; @Test public void isConfiguredAndAnalyzesClassesAsExpected() throws Exception { setUpMojo("de/is24/deadcode4j/plugin/projects/pom.xml"); findDeadCodeMojo.execute(); verify(logMock).warn("Class [com.acme.Foo] should be ignored, but does not exist. You should remove the configuration entry."); verify(logMock).info("Ignoring 1 class(es) which seem(s) to be unused."); verify(logMock).info("Analyzed 28 class(es)."); verify(logMock).warn("Found 3 unused class(es):"); verify(logMock).warn(" ClassWithTypeArgument"); verify(logMock).warn(" DeadServlet"); verify(logMock).warn(" SomeServletInitializer"); // this doesn't work because the classpath is faked } @Test public void handlesRuntimeException() throws Exception { setUpMojo("de/is24/deadcode4j/plugin/projects/misconfig.pom.xml"); try { findDeadCodeMojo.execute(); fail("Should throw an exception"); } catch (IllegalArgumentException ignored) { } verify(logMock).error(eq("An unexpected exception occurred. " + "Please consider reporting an issue at https://github.com/ImmobilienScout24/deadcode4j/issues"), any(IllegalArgumentException.class)); } private void setUpMojo(String pomFile) throws Exception { URL pomUrl = getClass().getClassLoader().getResource(pomFile); assertNotNull(pomUrl); File pom = new File(pomUrl.toURI()); assertTrue(pom.exists()); findDeadCodeMojo = (FindDeadCodeMojo) mojoSetUp.lookupMojo("find", pom); assertNotNull(findDeadCodeMojo); logMock = LoggingRule.createMock(); findDeadCodeMojo.setLog(logMock); } }