DataSift\Storyplayer\PlayerLib\Story_Player::play PHP Method

play() public method

public play ( StoryTeller $st, DataSift\Storyplayer\Injectables $injectables )
$st StoryTeller
$injectables DataSift\Storyplayer\Injectables
    public function play(StoryTeller $st, Injectables $injectables)
    {
        // shorthand
        $output = $st->getOutput();
        // we're going to use this to play our setup and teardown phases
        $phasesPlayer = new PhaseGroup_Player();
        // load our story
        $story = Story_Loader::loadStory($this->storyFilename);
        $st->setStory($story);
        // does our story want to keep the test device open between
        // phases?
        if ($story->getPersistDevice()) {
            $st->setPersistDevice();
        }
        // set default callbacks up
        $story->setDefaultCallbacks();
        // make sure we start with a brand new checkpoint
        $st->setCheckpoint(new Story_Checkpoint($st));
        // tell the outside world what we're doing
        $activity = "Running story";
        $name = $story->getCategory() . ' > ' . $story->getGroupAsString() . ' > ' . $story->getName();
        $output->startPhaseGroup($activity, $name);
        // run the phases before the story truly starts
        $phasesPlayer->playPhases($activity, $st, $injectables, $this->startupPhases, $story);
        // what happened?
        $result = $story->getResult();
        if (!$result->getPhaseGroupSucceeded()) {
            // make sure the result has the story's filename in
            $result->filename = $this->storyFilename;
            // announce the results
            $output->endPhaseGroup($result);
            // all done
            return;
        }
        // run the phases in the 'story' section
        $phasesPlayer->playPhases($activity, $st, $injectables, $this->storyPhases, $story);
        // grab the result at this point
        $result = clone $story->getResult();
        // run the shutdown phase
        $phasesPlayer->playPhases($activity, $st, $injectables, $this->shutdownPhases, $story);
        // do we also need to look at any failures that happened during
        // the shutdown phase?
        if ($result->getPhaseGroupSucceeded()) {
            $result = $story->getResult();
        }
        // make sure the result has the story's filename in
        $result->filename = $this->storyFilename;
        // announce the results
        $output->endPhaseGroup($result);
        // all done
    }