use Java 7 and 8 features

- diamond operator
- lambda
This commit is contained in:
xuwei-k 2018-07-08 22:25:08 +09:00
parent e5af0fe0e9
commit 6936ca024e
1 changed files with 22 additions and 30 deletions

View File

@ -246,7 +246,7 @@ final public class ForkMain {
if (framework == null) if (framework == null)
continue; continue;
final ArrayList<TaskDef> filteredTests = new ArrayList<TaskDef>(); final ArrayList<TaskDef> filteredTests = new ArrayList<>();
for (final Fingerprint testFingerprint : framework.fingerprints()) { for (final Fingerprint testFingerprint : framework.fingerprints()) {
for (final TaskDef test : tests) { for (final TaskDef test : tests) {
// TODO: To pass in correct explicitlySpecified and selectors // TODO: To pass in correct explicitlySpecified and selectors
@ -258,12 +258,7 @@ final public class ForkMain {
final Task[] tasks = runner.tasks(filteredTests.toArray(new TaskDef[filteredTests.size()])); final Task[] tasks = runner.tasks(filteredTests.toArray(new TaskDef[filteredTests.size()]));
logDebug(os, "Runner for " + framework.getClass().getName() + " produced " + tasks.length + " initial tasks for " + filteredTests.size() + " tests."); logDebug(os, "Runner for " + framework.getClass().getName() + " produced " + tasks.length + " initial tasks for " + filteredTests.size() + " tests.");
Thread callDoneOnShutdown = new Thread() { Thread callDoneOnShutdown = new Thread(() -> runner.done());
@Override
public void run() {
runner.done();
}
};
Runtime.getRuntime().addShutdownHook(callDoneOnShutdown); Runtime.getRuntime().addShutdownHook(callDoneOnShutdown);
runTestTasks(executor, tasks, loggers, os); runTestTasks(executor, tasks, loggers, os);
@ -278,14 +273,14 @@ final public class ForkMain {
private void runTestTasks(final ExecutorService executor, final Task[] tasks, final Logger[] loggers, final ObjectOutputStream os) { private void runTestTasks(final ExecutorService executor, final Task[] tasks, final Logger[] loggers, final ObjectOutputStream os) {
if( tasks.length > 0 ) { if( tasks.length > 0 ) {
final List<Future<Task[]>> futureNestedTasks = new ArrayList<Future<Task[]>>(); final List<Future<Task[]>> futureNestedTasks = new ArrayList<>();
for( final Task task : tasks ) { for( final Task task : tasks ) {
futureNestedTasks.add(runTest(executor, task, loggers, os)); futureNestedTasks.add(runTest(executor, task, loggers, os));
} }
// Note: this could be optimized further, we could have a callback once a test finishes that executes immediately the nested tasks // Note: this could be optimized further, we could have a callback once a test finishes that executes immediately the nested tasks
// At the moment, I'm especially interested in JUnit, which doesn't have nested tasks. // At the moment, I'm especially interested in JUnit, which doesn't have nested tasks.
final List<Task> nestedTasks = new ArrayList<Task>(); final List<Task> nestedTasks = new ArrayList<>();
for( final Future<Task[]> futureNestedTask : futureNestedTasks ) { for( final Future<Task[]> futureNestedTask : futureNestedTasks ) {
try { try {
nestedTasks.addAll( Arrays.asList(futureNestedTask.get())); nestedTasks.addAll( Arrays.asList(futureNestedTask.get()));
@ -298,28 +293,25 @@ final public class ForkMain {
} }
private Future<Task[]> runTest(final ExecutorService executor, final Task task, final Logger[] loggers, final ObjectOutputStream os) { private Future<Task[]> runTest(final ExecutorService executor, final Task task, final Logger[] loggers, final ObjectOutputStream os) {
return executor.submit(new Callable<Task[]>() { return executor.submit(() -> {
@Override ForkEvent[] events;
public Task[] call() { Task[] nestedTasks;
ForkEvent[] events; final TaskDef taskDef = task.taskDef();
Task[] nestedTasks; try {
final TaskDef taskDef = task.taskDef(); final Collection<ForkEvent> eventList = new ConcurrentLinkedDeque<>();
try { final EventHandler handler = new EventHandler() { public void handle(final Event e){ eventList.add(new ForkEvent(e)); } };
final Collection<ForkEvent> eventList = new ConcurrentLinkedDeque<ForkEvent>(); logDebug(os, " Running " + taskDef);
final EventHandler handler = new EventHandler() { public void handle(final Event e){ eventList.add(new ForkEvent(e)); } }; nestedTasks = task.execute(handler, loggers);
logDebug(os, " Running " + taskDef); if(nestedTasks.length > 0 || eventList.size() > 0)
nestedTasks = task.execute(handler, loggers); logDebug(os, " Produced " + nestedTasks.length + " nested tasks and " + eventList.size() + " events.");
if(nestedTasks.length > 0 || eventList.size() > 0) events = eventList.toArray(new ForkEvent[eventList.size()]);
logDebug(os, " Produced " + nestedTasks.length + " nested tasks and " + eventList.size() + " events.");
events = eventList.toArray(new ForkEvent[eventList.size()]);
}
catch (final Throwable t) {
nestedTasks = new Task[0];
events = new ForkEvent[] { testError(os, taskDef, "Uncaught exception when running " + taskDef.fullyQualifiedName() + ": " + t.toString(), t) };
}
writeEvents(os, taskDef, events);
return nestedTasks;
} }
catch (final Throwable t) {
nestedTasks = new Task[0];
events = new ForkEvent[] { testError(os, taskDef, "Uncaught exception when running " + taskDef.fullyQualifiedName() + ": " + t.toString(), t) };
}
writeEvents(os, taskDef, events);
return nestedTasks;
}); });
} }