public function initAfterModulesAvailable(StoryTeller $st, CliEngine $engine, Injectables $injectables)
{
// shorthand
$output = $injectables->output;
// are we keeping the test environment hanging around afterwards?
if (isset($engine->options->persistTarget) && $engine->options->persistTarget) {
$injectables->activeConfig->setData('storyplayer.phases.testEnvShutdown.TestEnvironmentDestruction', false);
$injectables->activeConfig->unsetData('storyplayer.phases.userAbort.TestEnvironmentDestruction');
$st->setPersistTestEnvironment();
}
// are we trying to use a test environment that has previously
// been persisted?
if (isset($engine->options->reuseTarget) && $engine->options->reuseTarget) {
// does the target exist to be reused?
$output->setSilentMode();
$hasTarget = $st->fromTargetsTable()->hasCurrentTestEnvironment();
$output->resetSilentMode();
if (!$hasTarget) {
$output->logCliWarning("target environment '" . $st->getTestEnvironmentName() . "' does not exist; ignoring --reuse-target switch");
return;
}
// okay, so we have the test environment in the targets table,
// but has the test environment been changed at all?
$output->setSilentMode();
$origSig = $st->fromTargetsTable()->getCurrentTestEnvironmentSignature();
$currentSig = $st->getTestEnvironmentSignature();
$output->resetSilentMode();
if ($origSig != $currentSig) {
// our test environment entry isn't valid, so remove it
$output->setSilentMode();
$st->usingTargetsTable()->removeCurrentTestEnvironment();
$output->resetSilentMode();
$output->logCliWarning("target environment '" . $st->getTestEnvironmentName() . "' has changed; ignoring --reuse-target switch");
return;
}
// if we get here, then we do not need to create the test environment
$injectables->activeConfig->setData('storyplayer.phases.testEnvStartup.TestEnvironmentConstruction', false);
} else {
// do we already have this target?
//
// this can happen when the test environment was previously
// persisted, and this time we're being run without the
// --reuse-target flag
// does the target exist to be reused?
$output->setSilentMode();
$hasTarget = $st->fromTargetsTable()->hasCurrentTestEnvironment();
$output->resetSilentMode();
if ($hasTarget) {
// remove this target from the table
$output->setSilentMode();
$st->usingTargetsTable()->removeCurrentTestEnvironment();
$output->resetSilentMode();
}
}
}