package io.takari.maven.plugins.resources; import static io.takari.maven.testing.TestMavenRuntime.newParameter; import static io.takari.maven.testing.TestResources.assertFileContents; import static io.takari.maven.testing.TestResources.cp; import static io.takari.maven.testing.TestResources.rm; import java.io.File; import java.nio.charset.Charset; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.project.MavenProject; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; import com.google.common.io.Files; import io.takari.incrementalbuild.maven.testing.IncrementalBuildRule; import io.takari.maven.testing.TestResources; public class ResourcesTest { @Rule public final TestResources resources = new TestResources(); @Rule public final IncrementalBuildRule mojos = new IncrementalBuildRule(); @Test public void resources() throws Exception { File basedir = resources.getBasedir("resources/project-with-resources"); mojos.executeMojo(basedir, "process-resources"); File resource = new File(basedir, "target/classes/resource.txt"); Assert.assertTrue(resource.exists()); String line = Files.readFirstLine(resource, Charset.defaultCharset()); Assert.assertTrue(line.contains("resource.txt")); } @Test public void resources_skip() throws Exception { File basedir = resources.getBasedir("resources/project-with-resources"); File resource = new File(basedir, "target/classes/resource.txt"); MavenProject project = mojos.readMavenProject(basedir); MavenSession session = mojos.newMavenSession(project); MojoExecution execution = mojos.newMojoExecution("process-resources"); execution.getConfiguration().addChild(newParameter("skip", "true")); mojos.executeMojo(session, project, execution); Assert.assertFalse(resource.exists()); mojos.executeMojo(basedir, "process-resources"); Assert.assertTrue(resource.exists()); execution = mojos.newMojoExecution("process-resources"); execution.getConfiguration().addChild(newParameter("skip", "true")); mojos.executeMojo(session, project, execution); Assert.assertTrue(resource.exists()); } @Test public void resourcesWithTargetPath() throws Exception { File basedir = resources.getBasedir("resources/project-with-resources-with-target-path"); mojos.executeMojo(basedir, "process-resources"); File resource = new File(basedir, "target/classes/resources/targetPath/resource.txt"); Assert.assertTrue(resource.exists()); String line = Files.readFirstLine(resource, Charset.defaultCharset()); Assert.assertTrue(line.contains("resource.txt")); } @Test public void resourcesWithFiltering() throws Exception { File basedir = resources.getBasedir("resources/project-with-resources-filtered"); mojos.executeMojo(basedir, "process-resources"); assertFileContents(basedir, "expected-resource.txt", "target/classes/resource.txt"); } @Test public void resourcesWithProjectFilters() throws Exception { File basedir = resources.getBasedir("resources/project-with-resources-filters"); mojos.executeMojo(basedir, "process-resources"); assertFileContents(basedir, "expected-resource.txt", "target/classes/resource.txt"); } @Test public void testCustomResources() throws Exception { File basedir = resources.getBasedir("resources/project-with-custom-resources"); mojos.executeMojo(basedir, "process-resources"); mojos.assertBuildOutputs(basedir, "target/custom/custom.txt"); } @Test public void testRelativeResourcesDirectory() throws Exception { File basedir = resources.getBasedir("resources/project-with-relative-resources-directory"); mojos.executeMojo(basedir, "process-resources"); mojos.assertBuildOutputs(basedir, "target/custom/custom.txt"); } @Test public void testIncremental() throws Exception { File basedir = resources.getBasedir("resources/resources-incremental"); mojos.executeMojo(basedir, "process-resources"); mojos.assertBuildOutputs(basedir, "target/classes/resource.txt"); // no change rebuild mojos.executeMojo(basedir, "process-resources"); mojos.assertCarriedOverOutputs(basedir, "target/classes/resource.txt"); // pom.xml change, non-filtered resources are carried over as-is cp(basedir, "pom.xml-description", "pom.xml"); mojos.executeMojo(basedir, "process-resources"); mojos.assertCarriedOverOutputs(basedir, "target/classes/resource.txt"); // resource change cp(basedir, "resource.txt-changed", "src/main/resources/resource.txt"); mojos.executeMojo(basedir, "process-resources"); mojos.assertBuildOutputs(basedir, "target/classes/resource.txt"); // resource delete rm(basedir, "src/main/resources/resource.txt"); mojos.executeMojo(basedir, "process-resources"); mojos.assertDeletedOutputs(basedir, "target/classes/resource.txt"); } @Test public void testIncrementalFiltering() throws Exception { File basedir = resources.getBasedir("resources/resources-incremental-filtering"); mojos.executeMojo(basedir, "process-resources"); mojos.assertBuildOutputs(basedir, "target/classes/filtered-resource.txt"); assertFileContents(basedir, "expected/filtered-resource.txt", "target/classes/filtered-resource.txt"); // no change rebuild, note that filtered resources are always processed mojos.executeMojo(basedir, "process-resources"); mojos.assertBuildOutputs(basedir, "target/classes/filtered-resource.txt"); assertFileContents(basedir, "expected/filtered-resource.txt", "target/classes/filtered-resource.txt"); // pom change cp(basedir, "pom.xml-description", "pom.xml"); mojos.executeMojo(basedir, "process-resources"); mojos.assertBuildOutputs(basedir, "target/classes/filtered-resource.txt"); assertFileContents(basedir, "expected/filtered-resource.txt-pomChanged", "target/classes/filtered-resource.txt"); // resource change cp(basedir, "filtered-resource.txt-changed", "src/main/resources/filtered-resource.txt"); mojos.executeMojo(basedir, "process-resources"); mojos.assertBuildOutputs(basedir, "target/classes/filtered-resource.txt"); assertFileContents(basedir, "expected/filtered-resource.txt-resourceChanged", "target/classes/filtered-resource.txt"); // resource delete rm(basedir, "src/main/resources/filtered-resource.txt"); mojos.executeMojo(basedir, "process-resources"); mojos.assertDeletedOutputs(basedir, "target/classes/filtered-resource.txt"); } @Test public void testBinaryResource() throws Exception { File basedir = resources.getBasedir("resources/project-with-binary-resources"); mojos.executeMojo(basedir, "process-resources"); mojos.assertBuildOutputs(basedir, "target/classes/resource.data"); byte[] expected = Files.toByteArray(new File(basedir, "src/main/resources/resource.data")); byte[] actual = Files.toByteArray(new File(basedir, "target/classes/resource.data")); Assert.assertArrayEquals(expected, actual); } }