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