diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-04-09 01:29:14 -0700 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-04-09 13:20:45 -0700 |
commit | 11122c48452d40eb32086fa247ce06d5d6f1a789 (patch) | |
tree | 5383042fe2db7d9f24f437e71fd1bc44e70c61cc /testng | |
parent | db8d967d461fb6323fd83c40ef81e26f2d0fa225 (diff) | |
download | mill-11122c48452d40eb32086fa247ce06d5d6f1a789.tar.gz mill-11122c48452d40eb32086fa247ce06d5d6f1a789.tar.bz2 mill-11122c48452d40eb32086fa247ce06d5d6f1a789.zip |
Caffeine junit & testng suites seem to pass
Diffstat (limited to 'testng')
-rw-r--r-- | testng/src/mill/testng/EventRecorder.java | 40 | ||||
-rw-r--r-- | testng/src/mill/testng/TestNGFramework.java | 7 | ||||
-rw-r--r-- | testng/src/mill/testng/TestNGInstance.java | 80 | ||||
-rw-r--r-- | testng/src/mill/testng/TestNGRunner.java | 35 | ||||
-rw-r--r-- | testng/src/mill/testng/TestRunState.java | 10 |
5 files changed, 72 insertions, 100 deletions
diff --git a/testng/src/mill/testng/EventRecorder.java b/testng/src/mill/testng/EventRecorder.java deleted file mode 100644 index 59af5927..00000000 --- a/testng/src/mill/testng/EventRecorder.java +++ /dev/null @@ -1,40 +0,0 @@ -package mill.testng; - -import sbt.testing.Event; -import org.testng.ITestResult; -import org.testng.TestListenerAdapter; - -import sbt.testing.EventHandler; -import sbt.testing.Logger; - -import java.util.HashMap; - -public class EventRecorder extends TestListenerAdapter { - private final HashMap<String, java.util.List<Event>> basket = new HashMap<>(); - - String initKey(ITestResult result){ - String key = ResultEvent.classNameOf(result); - if (!basket.containsKey(key)) basket.put(key, new java.util.ArrayList<Event>()); - return key; - } - public void onTestFailure(ITestResult result){ - String key = initKey(result); - basket.get(key).add(ResultEvent.failure(result)); - } - public void onTestSkipped(ITestResult result){ - String key = initKey(result); - basket.get(key).add(ResultEvent.skipped(result)); - } - public void onTestSuccess(ITestResult result){ - String key = initKey(result); - basket.get(key).add(ResultEvent.success(result)); - } - - void replayTo(EventHandler sbt, String className, Logger[] loggers){ - synchronized (basket){ - for(Event e: basket.remove(className)){ - sbt.handle(e); - } - } - } -} diff --git a/testng/src/mill/testng/TestNGFramework.java b/testng/src/mill/testng/TestNGFramework.java index 50041440..924dc113 100644 --- a/testng/src/mill/testng/TestNGFramework.java +++ b/testng/src/mill/testng/TestNGFramework.java @@ -14,11 +14,8 @@ public class TestNGFramework implements Framework { @Override public Runner runner(String[] args, String[] remoteArgs, ClassLoader classLoader) { - return new TestNGRunner(args, remoteArgs, classLoader, sharedState); + return new TestNGRunner(args, remoteArgs, classLoader); } - - - private TestRunState sharedState = new TestRunState(); } class Annotated implements AnnotatedFingerprint{ @@ -29,4 +26,4 @@ class Annotated implements AnnotatedFingerprint{ } public String annotationName(){return annotationName;} public boolean isModule(){return false;} -}
\ No newline at end of file +} diff --git a/testng/src/mill/testng/TestNGInstance.java b/testng/src/mill/testng/TestNGInstance.java index afb1e8f7..9ad990e0 100644 --- a/testng/src/mill/testng/TestNGInstance.java +++ b/testng/src/mill/testng/TestNGInstance.java @@ -1,42 +1,74 @@ package mill.testng; +import org.testng.*; +import sbt.testing.EventHandler; import sbt.testing.Logger; -import org.testng.CommandLineArgs; -import org.testng.TestNG; - import com.beust.jcommander.JCommander; -public class TestNGInstance { - Logger[] loggers; - ConfigurableTestNG configurableTestNG = new ConfigurableTestNG(); - public TestNGInstance(Logger[] loggers){ - this.loggers = loggers; +import java.net.URLClassLoader; +import java.util.Arrays; + +class TestNGListener implements ITestListener{ + EventHandler basket; + String lastName = ""; + public TestNGListener(EventHandler basket){ + this.basket = basket; } - TestNGInstance loadingClassesFrom(ClassLoader testClassLoader){ - configurableTestNG.addClassLoader(testClassLoader); - return TestNGInstance.this; + public void onTestStart(ITestResult iTestResult) { + String newName = iTestResult.getTestClass().getName() + " " + iTestResult.getName() + " "; + if(!newName.equals(lastName)){ + if (!lastName.equals("")){ + System.out.println(); + } + lastName = newName; + System.out.print(lastName); + } } - TestNGInstance using(String[] testOptions){ - CommandLineArgs args = new CommandLineArgs(); - new JCommander(args, testOptions); // args is an output parameter of the constructor! - configurableTestNG.configure(args); - return TestNGInstance.this; + + public void onTestSuccess(ITestResult iTestResult) { + System.out.print('+'); + basket.handle(ResultEvent.success(iTestResult)); + } + + public void onTestFailure(ITestResult iTestResult) { + System.out.print('X'); + basket.handle(ResultEvent.failure(iTestResult)); } - TestNGInstance storingEventsIn(EventRecorder basket){ - configurableTestNG.addListener(basket); - return TestNGInstance.this; + public void onTestSkipped(ITestResult iTestResult) { + System.out.print('-'); + basket.handle(ResultEvent.skipped(iTestResult)); } - static void start(TestNGInstance testNG){ - testNG.configurableTestNG.run(); + public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) { + basket.handle(ResultEvent.failure(iTestResult)); } - static TestNGInstance loggingTo(Logger[] loggers){ return new TestNGInstance(loggers); } + + public void onStart(ITestContext iTestContext) {} + + public void onFinish(ITestContext iTestContext) {} } +public class TestNGInstance extends TestNG{ + public TestNGInstance(Logger[] loggers, + ClassLoader testClassLoader, + String[] testOptions, + String suiteName, + EventHandler eventHandler) { + addClassLoader(testClassLoader); -class ConfigurableTestNG extends TestNG{ // the TestNG method we need is protected - public void configure(CommandLineArgs args) { super.configure(args); } + try{ + this.setTestClasses(new Class[]{Class.forName(suiteName)}); + }catch(ClassNotFoundException e){ + throw new RuntimeException(e); + } + this.addListener(new TestNGListener(eventHandler)); + CommandLineArgs args = new CommandLineArgs(); + new JCommander(args, testOptions); // args is an output parameter of the constructor! + configure(args); + } } + + diff --git a/testng/src/mill/testng/TestNGRunner.java b/testng/src/mill/testng/TestNGRunner.java index 0ad6caa7..29ebb7dd 100644 --- a/testng/src/mill/testng/TestNGRunner.java +++ b/testng/src/mill/testng/TestNGRunner.java @@ -2,6 +2,9 @@ package mill.testng; import sbt.testing.*; +import java.util.Arrays; +import java.util.Collections; + class TestNGTask implements Task { TaskDef taskDef; @@ -18,24 +21,14 @@ class TestNGTask implements Task { @Override public Task[] execute(EventHandler eventHandler, Logger[] loggers) { - if (TestRunState.permissionToExecute.tryAcquire()) { - TestNGInstance.start( - TestNGInstance.loggingTo(loggers) - .loadingClassesFrom(runner.testClassLoader) - .using(runner.args()) - .storingEventsIn(runner.state.recorder) - ); - - runner.state.testCompletion.countDown(); - } - - try{ - runner.state.testCompletion.await(); - }catch(InterruptedException e){ - throw new RuntimeException(e); - } - - runner.state.recorder.replayTo(eventHandler, taskDef.fullyQualifiedName(), loggers); + System.out.println("Executing " + taskDef.fullyQualifiedName()); + new TestNGInstance( + loggers, + runner.testClassLoader, + runner.args(), + taskDef.fullyQualifiedName(), + eventHandler + ).run(); return new Task[0]; } @@ -44,19 +37,19 @@ class TestNGTask implements Task { 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) { + public TestNGRunner(String[] args, String[] remoteArgs, ClassLoader testClassLoader) { this.testClassLoader = testClassLoader; - this.state = state; this.args = args; this.remoteArgs = remoteArgs; } public Task[] tasks(TaskDef[] taskDefs) { + System.out.println("TestNGRunner#tasks " + Arrays.toString(taskDefs)); Task[] out = new Task[taskDefs.length]; for (int i = 0; i < taskDefs.length; i += 1) { out[i] = new TestNGTask(taskDefs[i], this); diff --git a/testng/src/mill/testng/TestRunState.java b/testng/src/mill/testng/TestRunState.java deleted file mode 100644 index 3edb2a4d..00000000 --- a/testng/src/mill/testng/TestRunState.java +++ /dev/null @@ -1,10 +0,0 @@ -package mill.testng; - -import java.util.concurrent.Semaphore; -import java.util.concurrent.CountDownLatch; - -public class TestRunState { - public static Semaphore permissionToExecute = new Semaphore(1); - public static CountDownLatch testCompletion = new CountDownLatch(1); - public static EventRecorder recorder = new EventRecorder(); -}
\ No newline at end of file |