]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/PHPUnit/Extensions/Story/Scenario.php
Added unit tests.
[Github/sugarcrm.git] / tests / PHPUnit / Extensions / Story / Scenario.php
1 <?php
2 /**
3  * PHPUnit
4  *
5  * Copyright (c) 2002-2009, Sebastian Bergmann <sb@sebastian-bergmann.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  * @category   Testing
38  * @package    PHPUnit
39  * @author     Mattis Stordalen Flister <mattis@xait.no>
40  * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
41  * @copyright  2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
42  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
43
44  * @link       http://www.phpunit.de/
45  * @since      File available since Release 3.3.0
46  */
47
48 require_once 'PHPUnit/Extensions/Story/Step.php';
49 require_once 'PHPUnit/Extensions/Story/Given.php';
50 require_once 'PHPUnit/Extensions/Story/When.php';
51 require_once 'PHPUnit/Extensions/Story/Then.php';
52 require_once 'PHPUnit/Util/Filter.php';
53
54 PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT');
55
56 /**
57  * A scenario.
58  *
59  * @category   Testing
60  * @package    PHPUnit
61  * @author     Mattis Stordalen Flister <mattis@xait.no>
62  * @author     Sebastian Bergmann <sb@sebastian-bergmann.de>
63  * @copyright  2002-2009 Sebastian Bergmann <sb@sebastian-bergmann.de>
64  * @license    http://www.opensource.org/licenses/bsd-license.php  BSD License
65  * @version    Release: 3.3.17
66  * @link       http://www.phpunit.de/
67  * @since      Class available since Release 3.3.0
68  * @abstract
69  */
70 class PHPUnit_Extensions_Story_Scenario
71 {
72     /**
73      * @var    PHPUnit_Extensions_Story_TestCase
74      */
75     protected $test;
76
77     /**
78      * @var    array
79      */
80     protected $steps = array();
81
82     /**
83      * @var    string
84      */
85     protected $lastCalledMethod;
86
87     /**
88      * Constructor.
89      *
90      * @param  PHPUnit_Extensions_Story_TestCase $caller
91      */
92     public function __construct($test)
93     {
94         if ($test instanceof PHPUnit_Extensions_Story_TestCase ||
95             $test instanceof PHPUnit_Extensions_Story_SeleniumTestCase) {
96             $this->test = $test;
97         } else {
98             throw new Exception('$test must either be PHPUnit_Extensions_Story_TestCase or PHPUnit_Extensions_Story_SeleniumTestCase');
99         }
100     }
101
102     /**
103      * Adds a "Given" step to the scenario.
104      *
105      * @param  array $arguments
106      * @return PHPUnit_Extensions_Story_TestCase
107      */
108     public function given($arguments)
109     {
110         return $this->addStep(new PHPUnit_Extensions_Story_Given($arguments));
111     }
112
113     /**
114      * Adds a "When" step to the scenario.
115      *
116      * @param  array $arguments
117      * @return PHPUnit_Extensions_Story_TestCase
118      */
119     public function when($arguments)
120     {
121         return $this->addStep(new PHPUnit_Extensions_Story_When($arguments));
122     }
123
124     /**
125      * Adds a "Then" step to the scenario.
126      *
127      * @param  array $arguments
128      * @return PHPUnit_Extensions_Story_TestCase
129      */
130     public function then($arguments)
131     {
132         return $this->addStep(new PHPUnit_Extensions_Story_Then($arguments));
133     }
134
135     /**
136      * Add another step of the same type as the step that was added before.
137      *
138      * @param  array $arguments
139      * @return PHPUnit_Extensions_Story_TestCase
140      */
141     public function _and($arguments)
142     {
143         $lastCalledStepClass = get_class($this->steps[count($this->steps)-1]);
144
145         return $this->addStep(new $lastCalledStepClass($arguments));
146     }
147
148     /**
149      * Runs this scenario.
150      *
151      * @param  array $world
152      */
153     public function run(array &$world)
154     {
155         foreach ($this->steps as $step)
156         {
157             if ($step instanceof PHPUnit_Extensions_Story_Given) {
158                 $this->test->runGiven(
159                   $world, $step->getAction(), $step->getArguments()
160                 );
161             }
162
163             else if ($step instanceof PHPUnit_Extensions_Story_When) {
164                 $this->test->runWhen(
165                   $world, $step->getAction(), $step->getArguments()
166                 );
167             }
168
169             else {
170                 $this->test->runThen(
171                   $world, $step->getAction(), $step->getArguments()
172                 );
173             }
174         }
175     }
176
177     /**
178      * Adds a step to the scenario.
179      *
180      * @param  PHPUnit_Extensions_Story_Step $step
181      * @return PHPUnit_Extensions_Story_TestCase
182      */
183     protected function addStep(PHPUnit_Extensions_Story_Step $step)
184     {
185         $this->steps[] = $step;
186
187         return $this->test;
188     }
189
190     /**
191      * Returns the steps of this scenario.
192      *
193      * @return array
194      */
195     public function getSteps()
196     {
197         return $this->steps;
198     }
199 }
200 ?>