diff --git a/src/main/java/rife/bld/extension/PitestOperation.java b/src/main/java/rife/bld/extension/PitestOperation.java index 5564cc7..36758ef 100644 --- a/src/main/java/rife/bld/extension/PitestOperation.java +++ b/src/main/java/rife/bld/extension/PitestOperation.java @@ -18,10 +18,14 @@ package rife.bld.extension; import rife.bld.BaseProject; import rife.bld.operations.AbstractProcessOperation; +import rife.bld.operations.exceptions.ExitStatusException; -import java.nio.file.Path; +import java.io.File; +import java.io.IOException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Level; +import java.util.logging.Logger; /** * Mutation testing and coverage with PIT. @@ -34,17 +38,12 @@ public class PitestOperation extends AbstractProcessOperation { * False constant. */ protected static final String FALSE = "false"; - /** - * Source directories command line option. - */ - protected static final String SOURCE_DIRS = "--sourceDirs"; /** * True constant. */ protected static final String TRUE = "true"; - /** - * The PIT options. - */ + private static final Logger LOGGER = Logger.getLogger(PitestOperation.class.getName()); + private static final String SOURCE_DIRS = "--sourceDirs"; private final Map options_ = new ConcurrentHashMap<>(); private BaseProject project_; @@ -330,33 +329,45 @@ public class PitestOperation extends AbstractProcessOperation { return this; } + @Override + public void execute() throws IOException, InterruptedException, ExitStatusException { + if (project_ == null) { + if (LOGGER.isLoggable(Level.SEVERE) && !silent()) { + LOGGER.severe("A project must be specified."); + } + throw new ExitStatusException(ExitStatusException.EXIT_FAILURE); + } else { + super.execute(); + } + } + /** * Part of the {@link #execute} operation, constructs the command list * to use for building the process. */ @Override protected List executeConstructProcessCommandList() { - if (project_ == null) { - throw new IllegalArgumentException("A project must be specified."); - } else if (!options_.containsKey(SOURCE_DIRS)) { - options_.put(SOURCE_DIRS, project_.srcDirectory().getPath()); - } - final List args = new ArrayList<>(); - args.add(javaTool()); - args.add("-cp"); - args.add(String.format("%s:%s:%s:%s", Path.of(project_.libTestDirectory().getPath(), "*"), - Path.of(project_.libCompileDirectory().getPath(), "*"), project_.buildMainDirectory(), - project_.buildTestDirectory())); - args.add("org.pitest.mutationtest.commandline.MutationCoverageReport"); + if (project_ != null) { + args.add(javaTool()); + args.add("-cp"); + args.add(String.format("%s:%s:%s:%s", new File(project_.libTestDirectory(), "*"), + new File(project_.libCompileDirectory(), "*"), project_.buildMainDirectory(), + project_.buildTestDirectory())); + args.add("org.pitest.mutationtest.commandline.MutationCoverageReport"); - options_.forEach((k, v) -> { - args.add(k); - if (!v.isEmpty()) { - args.add(v); + if (!options_.containsKey(SOURCE_DIRS)) { + options_.put(SOURCE_DIRS, project_.srcDirectory().getPath()); } - }); + + options_.forEach((k, v) -> { + args.add(k); + if (!v.isEmpty()) { + args.add(v); + } + }); + } return args; } diff --git a/src/test/java/rife/bld/extension/PitestOperationTest.java b/src/test/java/rife/bld/extension/PitestOperationTest.java index 57623b2..0fb9902 100644 --- a/src/test/java/rife/bld/extension/PitestOperationTest.java +++ b/src/test/java/rife/bld/extension/PitestOperationTest.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; import rife.bld.BaseProject; import rife.bld.Project; import rife.bld.WebProject; +import rife.bld.operations.exceptions.ExitStatusException; import java.io.IOException; import java.nio.file.Files; @@ -29,7 +30,8 @@ import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatCode; -import static rife.bld.extension.PitestOperation.*; +import static rife.bld.extension.PitestOperation.FALSE; +import static rife.bld.extension.PitestOperation.TRUE; class PitestOperationTest { private static final String AS_LIST = "as list"; @@ -287,6 +289,12 @@ class PitestOperationTest { "--sourceDirs c:\\myProject\\src"); } + @Test + void executeNoProject() { + var op = new PitestOperation(); + assertThatCode(op::execute).isInstanceOf(ExitStatusException.class); + } + @Test void exportLineCoverage() { var op = new PitestOperation() @@ -547,12 +555,12 @@ class PitestOperationTest { var op = new PitestOperation() .fromProject(new BaseProject()) .sourceDirs(FOO, BAR); - assertThat(op.options().get(SOURCE_DIRS)).isEqualTo(FOOBAR); + assertThat(op.options().get("--sourceDirs")).isEqualTo(FOOBAR); op = new PitestOperation() .fromProject(new Project()) .sourceDirs(List.of(FOO, BAR)); - assertThat(op.options().get(SOURCE_DIRS)).as(AS_LIST).isEqualTo(FOOBAR); + assertThat(op.options().get("--sourceDirs")).as(AS_LIST).isEqualTo(FOOBAR); } @Test