5 * Copyright (c) 2002-2011, Sebastian Bergmann <sebastian@phpunit.de>.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
20 * * Neither the name of Sebastian Bergmann nor the names of his
21 * contributors may be used to endorse or promote products derived
22 * from this software without specific prior written permission.
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 * POSSIBILITY OF SUCH DAMAGE.
38 * @subpackage Extensions_Story
39 * @author Mattis Stordalen Flister <mattis@xait.no>
40 * @author Sebastian Bergmann <sebastian@phpunit.de>
41 * @copyright 2002-2011 Sebastian Bergmann <sebastian@phpunit.de>
42 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
43 * @link http://www.phpunit.de/
44 * @since File available since Release 3.3.0
51 * @subpackage Extensions_Story
52 * @author Mattis Stordalen Flister <mattis@xait.no>
53 * @author Sebastian Bergmann <sebastian@phpunit.de>
54 * @copyright 2002-2011 Sebastian Bergmann <sebastian@phpunit.de>
55 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
56 * @version Release: 3.5.14
57 * @link http://www.phpunit.de/
58 * @since Class available since Release 3.3.0
60 abstract class PHPUnit_Extensions_Story_TestCase extends PHPUnit_Framework_TestCase
63 * @var PHPUnit_Extensions_Story_Scenario
70 protected $world = array();
73 * Constructs a test case with the given name.
77 * @param string $dataName
79 public function __construct($name = NULL, array $data = array(), $dataName = '')
81 parent::__construct($name, $data, $dataName);
82 $this->scenario = new PHPUnit_Extensions_Story_Scenario($this);
86 * @method PHPUnit_Extensions_Story_Step and($contextOrOutcome)
88 public function __call($command, $arguments)
92 return $this->scenario->_and($arguments);
97 throw new BadMethodCallException(
98 "Method $command not defined."
105 * Returns this test's scenario.
107 * @return PHPUnit_Extensions_Story_Scenario
109 public function getScenario()
111 return $this->scenario;
118 protected function notImplemented($action)
120 if (strstr($action, ' ')) {
121 $this->markTestIncomplete("step: $action not implemented.");
124 throw new BadMethodCallException("Method $action not defined.");
128 * Adds a "Given" step to the scenario.
130 * @param array $arguments
131 * @return PHPUnit_Extensions_Story_TestCase
133 protected function given($context)
135 return $this->scenario->given(func_get_args());
139 * Adds a "When" step to the scenario.
141 * @param array $arguments
142 * @return PHPUnit_Extensions_Story_TestCase
144 protected function when($event)
146 return $this->scenario->when(func_get_args());
150 * Adds a "Then" step to the scenario.
152 * @param array $arguments
153 * @return PHPUnit_Extensions_Story_TestCase
155 protected function then($outcome)
157 return $this->scenario->then(func_get_args());
161 * Add another step of the same type as the step that was added before.
163 * @param array $arguments
164 * @return PHPUnit_Extensions_Story_TestCase
166 protected function _and($contextOrOutcome)
168 return $this->scenario->_and(func_get_args());
172 * Run this test's scenario.
175 * @throws RuntimeException
177 protected function runTest()
179 $testResult = parent::runTest();
180 $this->scenario->run($this->world);
185 * Implementation for "Given" steps.
187 * @param array $world
188 * @param string $action
189 * @param array $arguments
191 abstract protected function runGiven(&$world, $action, $arguments);
194 * Implementation for "When" steps.
196 * @param array $world
197 * @param string $action
198 * @param array $arguments
200 abstract protected function runWhen(&$world, $action, $arguments);
203 * Implementation for "Then" steps.
205 * @param array $world
206 * @param string $action
207 * @param array $arguments
209 abstract protected function runThen(&$world, $action, $arguments);