]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/PHPUnit/PHPUnit/Extensions/Story/TestCase.php
Add .gitignore
[Github/sugarcrm.git] / tests / PHPUnit / PHPUnit / Extensions / Story / TestCase.php
1 <?php
2 /**
3  * PHPUnit
4  *
5  * Copyright (c) 2002-2011, Sebastian Bergmann <sebastian@phpunit.de>.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  *   * Redistributions of source code must retain the above copyright
13  *     notice, this list of conditions and the following disclaimer.
14  *
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
18  *     distribution.
19  *
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.
23  *
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.
36  *
37  * @package    PHPUnit
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
45  */
46
47 /**
48  * A story test case.
49  *
50  * @package    PHPUnit
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.13
57  * @link       http://www.phpunit.de/
58  * @since      Class available since Release 3.3.0
59  */
60 abstract class PHPUnit_Extensions_Story_TestCase extends PHPUnit_Framework_TestCase
61 {
62     /**
63      * @var    PHPUnit_Extensions_Story_Scenario
64      */
65     protected $scenario;
66
67     /**
68      * @var    array
69      */
70     protected $world = array();
71
72     /**
73      * Constructs a test case with the given name.
74      *
75      * @param  string $name
76      * @param  array  $data
77      * @param  string $dataName
78      */
79     public function __construct($name = NULL, array $data = array(), $dataName = '')
80     {
81         parent::__construct($name, $data, $dataName);
82         $this->scenario = new PHPUnit_Extensions_Story_Scenario($this);
83     }
84
85     /**
86      * @method PHPUnit_Extensions_Story_Step and($contextOrOutcome)
87      */
88     public function __call($command, $arguments)
89     {
90         switch ($command) {
91             case 'and': {
92                 return $this->scenario->_and($arguments);
93             }
94             break;
95
96             default: {
97                 throw new BadMethodCallException(
98                   "Method $command not defined."
99                 );
100             }
101         }
102     }
103
104     /**
105      * Returns this test's scenario.
106      *
107      * @return PHPUnit_Extensions_Story_Scenario
108      */
109     public function getScenario()
110     {
111         return $this->scenario;
112     }
113
114     /**
115      *
116      *
117      */
118     protected function notImplemented($action)
119     {
120         if (strstr($action, ' ')) {
121             $this->markTestIncomplete("step: $action not implemented.");
122         }
123
124         throw new BadMethodCallException("Method $action not defined.");
125     }
126
127     /**
128      * Adds a "Given" step to the scenario.
129      *
130      * @param  array $arguments
131      * @return PHPUnit_Extensions_Story_TestCase
132      */
133     protected function given($context)
134     {
135         return $this->scenario->given(func_get_args());
136     }
137
138     /**
139      * Adds a "When" step to the scenario.
140      *
141      * @param  array $arguments
142      * @return PHPUnit_Extensions_Story_TestCase
143      */
144     protected function when($event)
145     {
146         return $this->scenario->when(func_get_args());
147     }
148
149     /**
150      * Adds a "Then" step to the scenario.
151      *
152      * @param  array $arguments
153      * @return PHPUnit_Extensions_Story_TestCase
154      */
155     protected function then($outcome)
156     {
157         return $this->scenario->then(func_get_args());
158     }
159
160     /**
161      * Add another step of the same type as the step that was added before.
162      *
163      * @param  array $arguments
164      * @return PHPUnit_Extensions_Story_TestCase
165      */
166     protected function _and($contextOrOutcome)
167     {
168         return $this->scenario->_and(func_get_args());
169     }
170
171     /**
172      * Run this test's scenario.
173      *
174      * @return mixed
175      * @throws RuntimeException
176      */
177     protected function runTest()
178     {
179         $testResult = parent::runTest();
180         $this->scenario->run($this->world);
181         return $testResult;
182     }
183
184     /**
185      * Implementation for "Given" steps.
186      *
187      * @param  array  $world
188      * @param  string $action
189      * @param  array  $arguments
190      */
191     abstract protected function runGiven(&$world, $action, $arguments);
192
193     /**
194      * Implementation for "When" steps.
195      *
196      * @param  array  $world
197      * @param  string $action
198      * @param  array  $arguments
199      */
200     abstract protected function runWhen(&$world, $action, $arguments);
201
202     /**
203      * Implementation for "Then" steps.
204      *
205      * @param  array  $world
206      * @param  string $action
207      * @param  array  $arguments
208      */
209     abstract protected function runThen(&$world, $action, $arguments);
210 }