summaryrefslogtreecommitdiff
path: root/testng
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-04-08 23:39:40 -0700
committerLi Haoyi <haoyi.sg@gmail.com>2018-04-09 13:20:45 -0700
commitdb8d967d461fb6323fd83c40ef81e26f2d0fa225 (patch)
treecad8bb41b7337f38fed00536498e437c7007ebb9 /testng
parent41180adbc0d9e67677e9cd5d1dbd25208672d5d5 (diff)
downloadmill-db8d967d461fb6323fd83c40ef81e26f2d0fa225.tar.gz
mill-db8d967d461fb6323fd83c40ef81e26f2d0fa225.tar.bz2
mill-db8d967d461fb6323fd83c40ef81e26f2d0fa225.zip
Get first `caffeine.test` suite running in `CaffeineTests`
Diffstat (limited to 'testng')
-rw-r--r--testng/src/mill/testng/EventRecorder.java8
-rw-r--r--testng/src/mill/testng/ResultEvent.java69
-rw-r--r--testng/src/mill/testng/TestNGFramework.java16
-rw-r--r--testng/src/mill/testng/TestNGInstance.java3
-rw-r--r--testng/src/mill/testng/TestNGRunner.java73
5 files changed, 105 insertions, 64 deletions
diff --git a/testng/src/mill/testng/EventRecorder.java b/testng/src/mill/testng/EventRecorder.java
index 3400bf6d..59af5927 100644
--- a/testng/src/mill/testng/EventRecorder.java
+++ b/testng/src/mill/testng/EventRecorder.java
@@ -1,16 +1,16 @@
package mill.testng;
-import org.scalatools.testing.Event;
+import sbt.testing.Event;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
-import org.scalatools.testing.EventHandler;
-import org.scalatools.testing.Logger;
+import sbt.testing.EventHandler;
+import sbt.testing.Logger;
import java.util.HashMap;
public class EventRecorder extends TestListenerAdapter {
- private HashMap<String, java.util.List<Event>> basket = new HashMap<>();
+ private final HashMap<String, java.util.List<Event>> basket = new HashMap<>();
String initKey(ITestResult result){
String key = ResultEvent.classNameOf(result);
diff --git a/testng/src/mill/testng/ResultEvent.java b/testng/src/mill/testng/ResultEvent.java
index 7c943a17..215723cd 100644
--- a/testng/src/mill/testng/ResultEvent.java
+++ b/testng/src/mill/testng/ResultEvent.java
@@ -1,40 +1,45 @@
package mill.testng;
-import org.scalatools.testing.Event;
-import org.scalatools.testing.Result;
+import sbt.testing.*;
import org.testng.ITestResult;
-public class ResultEvent implements Event {
- public Result result;
- public String testName;
- public String description;
- public Throwable error;
-
- public ResultEvent(Result result, String testName, String description, Throwable error) {
- this.result = result;
- this.testName = testName;
- this.description = description;
- this.error = error;
- }
-
-
- public Result result(){ return result; }
- public String testName(){ return testName; }
- public String description(){ return description; }
- public Throwable error(){ return error; }
-
- static ResultEvent failure(ITestResult result){ return event(Result.Failure, result); }
- static ResultEvent skipped(ITestResult result){ return event(Result.Skipped, result); }
- static ResultEvent success(ITestResult result){ return event(Result.Success, result); }
-
- static ResultEvent event(Result result, ITestResult testNGResult) {
- return new ResultEvent(
- result,
- testNGResult.getName(),
- testNGResult.getName(),
- result != Result.Success ? testNGResult.getThrowable() : null
- );
+public class ResultEvent {
+ static Event failure(ITestResult result){ return event(Status.Failure, result); }
+ static Event skipped(ITestResult result){ return event(Status.Skipped, result); }
+ static Event success(ITestResult result){ return event(Status.Success, result); }
+
+ static Event event(Status result, ITestResult testNGResult) {
+ return new Event() {
+ public String fullyQualifiedName() {
+ return testNGResult.getTestClass().getName();
+ }
+
+ public Fingerprint fingerprint() {
+ return Annotated.instance;
+ }
+
+ public Selector selector() {
+ return new SuiteSelector();
+ }
+
+ public Status status() {
+ return result;
+ }
+
+ public OptionalThrowable throwable() {
+ if (result != Status.Success){
+ return new OptionalThrowable(testNGResult.getThrowable());
+ }else {
+ return new OptionalThrowable();
+ }
+ }
+
+ @Override
+ public long duration() {
+ return testNGResult.getEndMillis() - testNGResult.getStartMillis();
+ }
+ };
}
static String classNameOf(ITestResult result){ return result.getTestClass().getName(); }
} \ No newline at end of file
diff --git a/testng/src/mill/testng/TestNGFramework.java b/testng/src/mill/testng/TestNGFramework.java
index bc278caa..50041440 100644
--- a/testng/src/mill/testng/TestNGFramework.java
+++ b/testng/src/mill/testng/TestNGFramework.java
@@ -2,25 +2,27 @@ package mill.testng;
-import org.scalatools.testing.*;
+import sbt.testing.*;
public class TestNGFramework implements Framework {
public String name(){ return "TestNG"; }
- public Fingerprint[] tests(){
- return new Fingerprint[]{
- new Annotated("org.testng.annotations.Test")
- };
+
+ public Fingerprint[] fingerprints() {
+ return new Fingerprint[]{Annotated.instance};
}
- public Runner testRunner(ClassLoader testClassLoader, Logger[] loggers){
- return new TestNGRunner(testClassLoader, loggers, sharedState);
+ @Override
+ public Runner runner(String[] args, String[] remoteArgs, ClassLoader classLoader) {
+ return new TestNGRunner(args, remoteArgs, classLoader, sharedState);
}
+
private TestRunState sharedState = new TestRunState();
}
class Annotated implements AnnotatedFingerprint{
+ final public static Annotated instance = new Annotated("org.testng.annotations.Test");
String annotationName;
public Annotated(String annotationName) {
this.annotationName = annotationName;
diff --git a/testng/src/mill/testng/TestNGInstance.java b/testng/src/mill/testng/TestNGInstance.java
index f1e52870..afb1e8f7 100644
--- a/testng/src/mill/testng/TestNGInstance.java
+++ b/testng/src/mill/testng/TestNGInstance.java
@@ -1,8 +1,7 @@
package mill.testng;
-import org.scalatools.testing.EventHandler;
-import org.scalatools.testing.Logger;
+import sbt.testing.Logger;
import org.testng.CommandLineArgs;
import org.testng.TestNG;
diff --git a/testng/src/mill/testng/TestNGRunner.java b/testng/src/mill/testng/TestNGRunner.java
index d59c60da..0ad6caa7 100644
--- a/testng/src/mill/testng/TestNGRunner.java
+++ b/testng/src/mill/testng/TestNGRunner.java
@@ -1,37 +1,72 @@
package mill.testng;
-import org.scalatools.testing.Fingerprint;
-import org.scalatools.testing.Logger;
-import org.scalatools.testing.Runner2;
-import org.scalatools.testing.EventHandler;
+import sbt.testing.*;
-public class TestNGRunner extends Runner2 {
- ClassLoader testClassLoader;
- Logger[] loggers;
- TestRunState state;
- public TestNGRunner(ClassLoader testClassLoader, Logger[] loggers, TestRunState state) {
- this.testClassLoader = testClassLoader;
- this.loggers = loggers;
- this.state = state;
+class TestNGTask implements Task {
+
+ TaskDef taskDef;
+ TestNGRunner runner;
+ public TestNGTask(TaskDef taskDef, TestNGRunner runner){
+ this.taskDef = taskDef;
+ this.runner = runner;
}
- public void run(String testClassname, Fingerprint fingerprint, EventHandler eventHandler, String[] testOptions) {
+
+ @Override
+ public String[] tags() {
+ return new String[0];
+ }
+
+ @Override
+ public Task[] execute(EventHandler eventHandler, Logger[] loggers) {
if (TestRunState.permissionToExecute.tryAcquire()) {
TestNGInstance.start(
TestNGInstance.loggingTo(loggers)
- .loadingClassesFrom(testClassLoader)
- .using(testOptions)
- .storingEventsIn(state.recorder)
+ .loadingClassesFrom(runner.testClassLoader)
+ .using(runner.args())
+ .storingEventsIn(runner.state.recorder)
);
- state.testCompletion.countDown();
+ runner.state.testCompletion.countDown();
}
try{
- state.testCompletion.await();
+ runner.state.testCompletion.await();
}catch(InterruptedException e){
throw new RuntimeException(e);
}
- state.recorder.replayTo(eventHandler, testClassname, loggers);
+ runner.state.recorder.replayTo(eventHandler, taskDef.fullyQualifiedName(), loggers);
+ return new Task[0];
+ }
+
+ @Override
+ public TaskDef taskDef() {
+ return taskDef;
+ }
+}
+public class TestNGRunner implements Runner {
+ ClassLoader testClassLoader;
+ TestRunState state;
+ String[] args;
+ String[] remoteArgs;
+ public TestNGRunner(String[] args, String[] remoteArgs, ClassLoader testClassLoader, TestRunState state) {
+ this.testClassLoader = testClassLoader;
+ this.state = state;
+ this.args = args;
+ this.remoteArgs = remoteArgs;
+ }
+
+ public Task[] tasks(TaskDef[] taskDefs) {
+ Task[] out = new Task[taskDefs.length];
+ for (int i = 0; i < taskDefs.length; i += 1) {
+ out[i] = new TestNGTask(taskDefs[i], this);
+ }
+ return out;
}
+
+ public String done() { return null; }
+
+ public String[] remoteArgs() { return remoteArgs; }
+
+ public String[] args() { return args; }
}