ContextManager.java
package io.github.giulong.spectrum.utils;
import lombok.NoArgsConstructor;
import org.junit.jupiter.api.extension.ExtensionContext;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import static lombok.AccessLevel.PRIVATE;
@NoArgsConstructor(access = PRIVATE)
public final class ContextManager {
private static final ContextManager INSTANCE = new ContextManager();
public static ContextManager getInstance() {
return INSTANCE;
}
private final Map<String, TestContext> testContexts = new ConcurrentHashMap<>();
public TestContext initFor(final ExtensionContext context) {
return initFor(context, new TestContext());
}
public TestContext initWithParentFor(final ExtensionContext context) {
return initFor(context, testContexts.get(context.getParent().orElseThrow().getUniqueId()));
}
public void put(final ExtensionContext context, final String key, final Object value) {
get(context).put(key, value);
}
public TestContext get(final ExtensionContext context) {
final TestContext testContext = testContexts.get(context.getUniqueId());
if (testContext != null) {
return testContext;
}
return initFor(context);
}
public <T> T get(final ExtensionContext context, final String key, final Class<T> clazz) {
return get(context).get(key, clazz);
}
TestContext initFor(final ExtensionContext context, final TestContext testContext) {
testContexts.put(context.getUniqueId(), testContext);
return testContext;
}
}