diff --git a/main/actions/src/main/scala/sbt/ForkTests.scala b/main/actions/src/main/scala/sbt/ForkTests.scala index 44aee8249..d29ab4cc8 100755 --- a/main/actions/src/main/scala/sbt/ForkTests.scala +++ b/main/actions/src/main/scala/sbt/ForkTests.scala @@ -61,7 +61,7 @@ private[sbt] object ForkTests { os.writeBoolean(log.ansiCodesSupported) val testsFiltered = tests.filter(test => filters.forall(_(test.name))).map{ - t => new ForkTestDefinition(t.name, t.fingerprint) + t => new ForkTestDefinition(t.name, t.fingerprint, t.explicitlySpecified, t.selectors) }.toArray os.writeObject(testsFiltered) diff --git a/testing/agent/src/main/java/sbt/ForkMain.java b/testing/agent/src/main/java/sbt/ForkMain.java index ff542ae52..1b51f5c24 100755 --- a/testing/agent/src/main/java/sbt/ForkMain.java +++ b/testing/agent/src/main/java/sbt/ForkMain.java @@ -42,14 +42,21 @@ public class ForkMain { public static class ForkTestDefinition implements Serializable { public String name; public Fingerprint fingerprint; + public boolean explicitlySpecified; + public Selector[] selectors; - public ForkTestDefinition(String name, Fingerprint fingerprint) { + public ForkTestDefinition(String name, Fingerprint fingerprint, boolean explicitlySpecified, Selector[] selectors) { this.name = name; if (fingerprint instanceof SubclassFingerprint) { this.fingerprint = new SubclassFingerscan((SubclassFingerprint) fingerprint); } else { this.fingerprint = new AnnotatedFingerscan((AnnotatedFingerprint) fingerprint); } + this.explicitlySpecified = explicitlySpecified; + int length = selectors.length; + this.selectors = new Selector[length]; + for (int i = 0; i < length; i++) + this.selectors[i] = forkSelector(selectors[i]); } } static class ForkError extends Exception { @@ -64,6 +71,13 @@ public class ForkMain { public Exception getCause() { return cause; } } + static Selector forkSelector(Selector selector) { + if (selector instanceof Serializable) + return selector; + else + throw new UnsupportedOperationException("Selector implementation must be Serializable, but " + selector.getClass().getName() + " is not."); + } + static class ForkEvent implements Event, Serializable { private String fullyQualifiedName; private Fingerprint fingerprint; @@ -93,12 +107,6 @@ public class ForkMain { public Status status() { return status; } public OptionalThrowable throwable() { return throwable; } public long duration() { return duration; } - protected Selector forkSelector(Selector selector) { - if (selector instanceof Serializable) - return selector; - else - throw new UnsupportedOperationException("Selector implementation must be Serializable."); - } } public static void main(String[] args) throws Exception { Socket socket = new Socket(InetAddress.getByName(null), Integer.valueOf(args[0])); @@ -190,7 +198,7 @@ public class ForkMain { for (ForkTestDefinition test : tests) { // TODO: To pass in correct explicitlySpecified and selectors if (matches(testFingerprint, test.fingerprint)) - filteredTests.add(new TaskDef(test.name, test.fingerprint, false, new Selector[] { new SuiteSelector() })); + filteredTests.add(new TaskDef(test.name, test.fingerprint, test.explicitlySpecified, test.selectors)); } } final Runner runner = framework.runner(frameworkArgs, remoteFrameworkArgs, getClass().getClassLoader());