EventsWatcher.java
package io.github.giulong.spectrum.extensions.watchers;
import io.github.giulong.spectrum.enums.Result;
import io.github.giulong.spectrum.utils.events.EventsDispatcher;
import org.junit.jupiter.api.TestFactory;
import org.junit.jupiter.api.extension.*;
import java.util.Optional;
import java.util.Set;
import static io.github.giulong.spectrum.enums.Result.*;
import static io.github.giulong.spectrum.utils.events.EventsDispatcher.*;
public class EventsWatcher implements TestWatcher, BeforeAllCallback, BeforeEachCallback, AfterEachCallback, AfterAllCallback {
private final EventsDispatcher eventsDispatcher = EventsDispatcher.getInstance();
@Override
public void beforeAll(final ExtensionContext context) {
notifyClass(context, BEFORE, null, Set.of(CLASS));
}
@Override
public void beforeEach(final ExtensionContext context) {
notifyTest(context, BEFORE, null, Set.of(TEST));
}
@Override
public void afterEach(final ExtensionContext context) {
if (context.getRequiredTestMethod().isAnnotationPresent(TestFactory.class)) {
notifyTest(context, AFTER, SUCCESSFUL, Set.of(TEST_FACTORY));
}
}
@Override
public void afterAll(final ExtensionContext context) {
notifyClass(context, AFTER, null, Set.of(CLASS));
}
@Override
public void testDisabled(final ExtensionContext context, final Optional<String> reason) {
notifyTest(context, AFTER, DISABLED, Set.of(TEST));
}
@Override
public void testSuccessful(final ExtensionContext context) {
notifyTest(context, AFTER, SUCCESSFUL, Set.of(TEST));
}
@Override
public void testAborted(final ExtensionContext context, final Throwable throwable) {
notifyTest(context, AFTER, ABORTED, Set.of(TEST));
}
@Override
public void testFailed(final ExtensionContext context, final Throwable exception) {
notifyTest(context, AFTER, FAILED, Set.of(TEST));
}
void notifyClass(final ExtensionContext context, final String reason, final Result result, final Set<String> tags) {
final String className = context.getDisplayName();
eventsDispatcher.fire(className, null, reason, result, tags, context);
}
void notifyTest(final ExtensionContext context, final String reason, final Result result, final Set<String> tags) {
final String className = context.getParent().orElse(context.getRoot()).getDisplayName();
final String testName = context.getDisplayName();
eventsDispatcher.fire(className, testName, reason, result, tags, context);
}
}