// Copyright © 2011-2013, Esko Luontola <www.orfjackal.net>
// This software is released under the Apache License 2.0.
// The license text is at http://www.apache.org/licenses/LICENSE-2.0
package fi.jumi.core.runs;
import fi.jumi.actors.ActorRef;
import fi.jumi.api.drivers.*;
import fi.jumi.core.stdout.OutputCapturer;
import javax.annotation.concurrent.ThreadSafe;
@ThreadSafe
public class ThreadBoundSuiteNotifier implements SuiteNotifier {
private final InheritableThreadLocal<Run> currentRun = new InheritableThreadLocal<>();
private final ActorRef<RunListener> listener;
private final RunIdSequence runIdSequence;
private final OutputCapturer outputCapturer;
public ThreadBoundSuiteNotifier(ActorRef<RunListener> listener, RunIdSequence runIdSequence, OutputCapturer outputCapturer) {
this.listener = listener;
this.runIdSequence = runIdSequence;
this.outputCapturer = outputCapturer;
}
@Override
public void fireTestFound(TestId testId, String name) {
listener.tell().onTestFound(testId, name);
}
@Override
public TestNotifier fireTestStarted(TestId testId) {
Run run = this.currentRun.get();
if (run == null || run.isRunFinished()) {
run = new Run(listener, outputCapturer, runIdSequence.nextRunId());
run.fireRunStarted();
this.currentRun.set(run);
}
return run.fireTestStarted(testId);
}
@Override
public void fireInternalError(String message, Throwable cause) {
listener.tell().onInternalError(message, cause);
}
}