public static Runnable withChildTestContext(Runnable runnable) { return () -> runWithChildTestContext(runnable); }
public static void runWithChildTestContext(Runnable runnable) { runWithTestContext(testContext().createChildContext(), runnable); }
private void doFulfillment(TestContextStack<GuiceTestContext> testContextStack, List<Class<? extends RequirementFulfiller>> fulfillerClasses, Set<Requirement> requirements) { List<Class<? extends RequirementFulfiller>> successfulFulfillerClasses = newArrayList(); try { for (Class<? extends RequirementFulfiller> fulfillerClass : fulfillerClasses) { LOGGER.debug("Fulfilling using {}", fulfillerClass); GuiceTestContext testContext = testContextStack.peek(); runWithTestContext(testContext, () -> { RequirementFulfiller fulfiller = testContext.getDependency(fulfillerClass); GuiceTestContext testContextWithNewStates = testContext.createChildContext(fulfiller.fulfill(requirements)); successfulFulfillerClasses.add(fulfillerClass); testContextStack.push(testContextWithNewStates); }); } } catch (RuntimeException e) { LOGGER.debug("error during fulfillment", e); doCleanup(testContextStack, successfulFulfillerClasses, FAILURE); throw e; } }
private void doCleanup(TestContextStack<GuiceTestContext> testContextStack, List<Class<? extends RequirementFulfiller>> fulfillerClasses, TestStatus testStatus) { // one base test context plus one test context for each fulfiller checkState(testContextStack.size() == fulfillerClasses.size() + 1); for (Class<? extends RequirementFulfiller> fulfillerClass : reverse(fulfillerClasses)) { LOGGER.debug("Cleaning for fulfiller {}", fulfillerClass); TestContext testContext = testContextStack.pop(); testContext.close(); runWithTestContext(testContext, () -> testContextStack.peek().getDependency(fulfillerClass).cleanup(testStatus)); } if (testContextStack.size() == 1) { // we are going to close last context, so we need to close TableManager's first testContextStack.peek().getOptionalDependency(TableManagerDispatcher.class) .ifPresent(dispatcher -> dispatcher.getAllTableManagers().forEach(TableManager::close)); } // remove close init test context too testContextStack.peek().close(); }