diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index ffdaf71..ef31ff4 100644 Binary files a/lib/bld/bld-wrapper.jar and b/lib/bld/bld-wrapper.jar differ diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index cab667f..b07a9cc 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,8 +1,8 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extension-pmd=com.uwyn.rife2:bld-pmd:0.9.9 -bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.5 -bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.downloadLocation= +bld.extension-jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.5 +bld.extension-pmd=com.uwyn.rife2:bld-pmd:1.0.1 +bld.repositories=MAVEN_CENTRAL,MAVEN_LOCAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.sourceDirectories= bld.version=1.9.1 diff --git a/src/bld/java/rife/bld/extension/ExecOperationBuild.java b/src/bld/java/rife/bld/extension/ExecOperationBuild.java index 46e4875..d141cb7 100644 --- a/src/bld/java/rife/bld/extension/ExecOperationBuild.java +++ b/src/bld/java/rife/bld/extension/ExecOperationBuild.java @@ -48,7 +48,7 @@ public class ExecOperationBuild extends Project { scope(test) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2))) - .include(dependency("org.assertj", "assertj-core", version(3, 25, 3))); + .include(dependency("org.assertj", "assertj-core", version(3, 26, 0))); javadocOperation() .javadocOptions() diff --git a/src/main/java/rife/bld/extension/ExecOperation.java b/src/main/java/rife/bld/extension/ExecOperation.java index af192d0..aa035c5 100644 --- a/src/main/java/rife/bld/extension/ExecOperation.java +++ b/src/main/java/rife/bld/extension/ExecOperation.java @@ -37,7 +37,7 @@ import java.util.logging.Logger; */ public class ExecOperation extends AbstractOperation { private static final Logger LOGGER = Logger.getLogger(ExecOperation.class.getName()); - private final List args_ = new ArrayList<>(); + private final Collection args_ = new ArrayList<>(); private boolean failOnExit_ = true; private BaseProject project_; private int timeout_ = 30; @@ -61,6 +61,16 @@ public class ExecOperation extends AbstractOperation { return this; } + /** + * Returns the command and arguments to be executed. + * + * @return the command and arguments + */ + public Collection command() { + return args_; + } + + /** * Configures the command and arguments to be executed. * @@ -92,7 +102,7 @@ public class ExecOperation extends AbstractOperation { if (workDir.isDirectory()) { var pb = new ProcessBuilder(); pb.inheritIO(); - pb.command(args_); + pb.command(args_.stream().toList()); pb.directory(workDir); if (LOGGER.isLoggable(Level.INFO)) { @@ -137,6 +147,15 @@ public class ExecOperation extends AbstractOperation { return this; } + /** + * Returns whether the operation should fail if the command exit value/status is not 0. + * + * @return {@code true} or {@code false} + */ + public boolean isFailOnExit() { + return failOnExit_; + } + /** * Configure the command timeout. * @@ -148,6 +167,15 @@ public class ExecOperation extends AbstractOperation { return this; } + /** + * Returns the command timeout. + * + * @return the timeout + */ + public int timeout() { + return timeout_; + } + /** * Configures the working directory. * @@ -168,4 +196,13 @@ public class ExecOperation extends AbstractOperation { public ExecOperation workDir(String dir) { return workDir(new File(dir)); } + + /** + * Returns the working directory. + * + * @return the directory + */ + public File workDir() { + return workDir_; + } } diff --git a/src/test/java/rife/bld/extension/ExecOperationTest.java b/src/test/java/rife/bld/extension/ExecOperationTest.java index d070e15..ee1c06e 100644 --- a/src/test/java/rife/bld/extension/ExecOperationTest.java +++ b/src/test/java/rife/bld/extension/ExecOperationTest.java @@ -19,6 +19,7 @@ package rife.bld.extension; import org.junit.jupiter.api.Test; import rife.bld.BaseProject; import rife.bld.Project; +import rife.bld.WebProject; import java.io.File; import java.util.List; @@ -31,16 +32,10 @@ class ExecOperationTest { private static final String FOO = "foo"; @Test - void testCat() throws Exception { - var tmpFile = new File("hello.tmp"); - tmpFile.deleteOnExit(); - new ExecOperation() - .fromProject(new Project()) - .timeout(10) - .command("touch", tmpFile.getName()) - .execute(); - - assertThat(tmpFile).exists(); + void testCommand() { + var op = new ExecOperation().fromProject(new WebProject()) + .command(FOO, "bar"); + assertThat(op.command()).isEqualTo(List.of(FOO, "bar")); } @Test @@ -63,32 +58,49 @@ class ExecOperationTest { @Test void testFailOnExit() { - assertThatCode(() -> - new ExecOperation() - .fromProject(new BaseProject()) - .command(List.of("cat", FOO)) - .failOnExit(false) - .execute()).doesNotThrowAnyException(); + var op = new ExecOperation() + .fromProject(new BaseProject()) + .command(List.of("cat", FOO)) + .failOnExit(false); + assertThat(op.isFailOnExit()).isFalse(); + assertThatCode(op::execute).doesNotThrowAnyException(); + + op.failOnExit(true); + assertThat(op.isFailOnExit()).isTrue(); } @Test void testTimeout() { - assertThatCode(() -> - new ExecOperation() - .fromProject(new BaseProject()) - .timeout(5) - .command(List.of("sleep", "10")) - .execute()).message().contains("timed out"); + var op = new ExecOperation() + .fromProject(new BaseProject()) + .timeout(5) + .command(List.of("sleep", "10")); + assertThat(op.timeout()).isEqualTo(5); + assertThatCode(op::execute).message().contains("timed out"); + } + + @Test + void testTouch() throws Exception { + var tmpFile = new File("hello.tmp"); + tmpFile.deleteOnExit(); + new ExecOperation() + .fromProject(new Project()) + .timeout(10) + .command("touch", tmpFile.getName()) + .execute(); + + assertThat(tmpFile).exists(); } @Test void testWorkDir() { - assertThatCode(() -> - new ExecOperation() - .fromProject(new BaseProject()) - .command("echo", FOO) - .workDir(new File(System.getProperty("java.io.tmpdir"))) - .execute()).doesNotThrowAnyException(); + var workDir = new File(System.getProperty("java.io.tmpdir")); + var op = new ExecOperation() + .fromProject(new BaseProject()) + .command("echo", FOO) + .workDir(workDir); + assertThat(op.workDir()).isEqualTo(workDir); + assertThatCode(op::execute).doesNotThrowAnyException(); } @Test