/**
* set up any templated methods from a predefined class
*
* @return Story
*/
public function basedOn(StoryTemplate $tmpl)
{
// tell the template which story it is being used with
$tmpl->setStory($this);
$tmpl->hasTestCanRunCheck() && $this->addTestCanRunCheck($tmpl->getTestCanRunCheck());
$tmpl->hasTestSetup() && $this->addTestSetup($tmpl->getTestSetup());
$tmpl->hasTestTeardown() && $this->addTestTeardown($tmpl->getTestTeardown());
$tmpl->hasPerPhaseSetup() && $this->addPerPhaseSetup($tmpl->getPerPhaseSetup());
$tmpl->hasPerPhaseTeardown() && $this->addPerPhaseTeardown($tmpl->getPerPhaseTeardown());
$tmpl->hasDeviceSetup() && $this->addDeviceSetup($tmpl->getDeviceSetup());
$tmpl->hasDeviceTeardown() && $this->addDeviceTeardown($tmpl->getDeviceTeardown());
$tmpl->hasHints() && $this->addHints($tmpl->getHints());
$tmpl->hasPreTestPrediction() && $this->addPreTestPrediction($tmpl->getPreTestPrediction());
$tmpl->hasPreTestInspection() && $this->addPreTestInspection($tmpl->getPreTestInspection());
$tmpl->hasAction() && $this->addAction($tmpl->getAction());
$tmpl->hasPostTestInspection() && $this->addPostTestInspection($tmpl->getPostTestInspection());
// remember this template for future use
$this->storyTemplates[] = $tmpl;
// Return $this for a fluent interface
return $this;
}