@@ 62-174 (lines=113) @@ | ||
59 | * @link http://datasift.github.io/storyplayer |
|
60 | */ |
|
61 | ||
62 | class ActionPhase extends StoryPhase |
|
63 | { |
|
64 | protected $sequenceNo = 5; |
|
65 | ||
66 | public function doPhase($story) |
|
67 | { |
|
68 | // shorthand |
|
69 | $st = $this->st; |
|
70 | $storyResult = $story->getResult(); |
|
71 | ||
72 | // keep track of what happens with the action |
|
73 | $phaseResult = $this->getNewPhaseResult(); |
|
74 | ||
75 | // do we have anything to do? |
|
76 | if (!$story->hasActions()) |
|
77 | { |
|
78 | $phaseResult->setContinuePlaying( |
|
79 | $phaseResult::HASNOACTIONS, |
|
80 | "story has no action instructions" |
|
81 | ); |
|
82 | return $phaseResult; |
|
83 | } |
|
84 | ||
85 | try { |
|
86 | // do any setup |
|
87 | $this->doPerPhaseSetup(); |
|
88 | ||
89 | $callbacks = $story->getAction(); |
|
90 | foreach ($callbacks as $action) { |
|
91 | if (is_callable($action)) { |
|
92 | call_user_func($action,$st); |
|
93 | } |
|
94 | } |
|
95 | ||
96 | // if we get here, all is well |
|
97 | if ($storyResult->getStoryShouldFail()) { |
|
98 | $phaseResult->setPlayingFailed( |
|
99 | $phaseResult::COMPLETED, |
|
100 | "action completed successfully; was expected to fail" |
|
101 | ); |
|
102 | $storyResult->setStoryHasFailed($phaseResult); |
|
103 | } |
|
104 | else { |
|
105 | $phaseResult->setContinuePlaying(); |
|
106 | } |
|
107 | } |
|
108 | ||
109 | // if the set of actions fails, it will throw this exception |
|
110 | catch (ActionFailedException $e) { |
|
111 | if ($storyResult->getStoryShouldFail()) { |
|
112 | $phaseResult->setContinuePlaying( |
|
113 | $phaseResult::FAILED, |
|
114 | $e->getMessage(), |
|
115 | $e |
|
116 | ); |
|
117 | } |
|
118 | else { |
|
119 | $phaseResult->setPlayingFailed( |
|
120 | $phaseResult::FAILED, |
|
121 | $e->getMessage(), |
|
122 | $e |
|
123 | ); |
|
124 | $storyResult->setStoryHasFailed($phaseResult); |
|
125 | } |
|
126 | } |
|
127 | catch (ExpectFailedException $e) { |
|
128 | if ($storyResult->getStoryShouldFail()) { |
|
129 | $phaseResult->setContinuePlaying( |
|
130 | $phaseResult::FAILED, |
|
131 | $e->getMessage(), |
|
132 | $e |
|
133 | ); |
|
134 | } |
|
135 | else { |
|
136 | $phaseResult->setPlayingFailed( |
|
137 | $phaseResult::FAILED, |
|
138 | $e->getMessage(), |
|
139 | $e |
|
140 | ); |
|
141 | $storyResult->setStoryHasFailed($phaseResult); |
|
142 | } |
|
143 | } |
|
144 | ||
145 | // we treat this as a hard failure |
|
146 | catch (NotImplementedException $e) { |
|
147 | $phaseResult->setPlayingFailed( |
|
148 | $phaseResult::INCOMPLETE, |
|
149 | $e->getMessage(), |
|
150 | $e |
|
151 | ); |
|
152 | $storyResult->setStoryIsIncomplete($phaseResult); |
|
153 | } |
|
154 | ||
155 | // if this happens, something has gone badly wrong |
|
156 | catch (Exception $e) { |
|
157 | $phaseResult->setPlayingFailed( |
|
158 | $phaseResult::ERROR, |
|
159 | $e->getMessage(), |
|
160 | $e |
|
161 | ); |
|
162 | $storyResult->setStoryHasError($phaseResult); |
|
163 | } |
|
164 | ||
165 | // close off any open log actions |
|
166 | $st->closeAllOpenActions(); |
|
167 | ||
168 | // tidy up after ourselves |
|
169 | $this->doPerPhaseTeardown(); |
|
170 | ||
171 | // all done |
|
172 | return $phaseResult; |
|
173 | } |
|
174 | } |
|
175 |
@@ 63-175 (lines=113) @@ | ||
60 | * @link http://datasift.github.io/storyplayer |
|
61 | */ |
|
62 | ||
63 | class PostTestInspectionPhase extends StoryPhase |
|
64 | { |
|
65 | protected $sequenceNo = 6; |
|
66 | ||
67 | public function doPhase($story) |
|
68 | { |
|
69 | // shorthand |
|
70 | $st = $this->st; |
|
71 | $storyResult = $story->getResult(); |
|
72 | ||
73 | // our results object |
|
74 | $phaseResult = $this->getNewPhaseResult(); |
|
75 | ||
76 | try { |
|
77 | // do we have anything to do? |
|
78 | if (!$story->hasPostTestInspection()) |
|
79 | { |
|
80 | $phaseResult->setContinuePlaying( |
|
81 | $phaseResult::HASNOACTIONS, |
|
82 | "story has no post-test inspection instructions" |
|
83 | ); |
|
84 | return $phaseResult; |
|
85 | } |
|
86 | ||
87 | // do any necessary setup |
|
88 | $this->doPerPhaseSetup(); |
|
89 | ||
90 | // make the call |
|
91 | $story = $st->getStory(); |
|
92 | $callbacks = $story->getPostTestInspection(); |
|
93 | foreach ($callbacks as $callback) { |
|
94 | if (is_callable($callback)) { |
|
95 | call_user_func($callback, $st); |
|
96 | } |
|
97 | } |
|
98 | ||
99 | // if we get here, the post-test inspection did not fail |
|
100 | // ... but should it have? |
|
101 | if ($storyResult->getStoryShouldFail()) { |
|
102 | $phaseResult->setPlayingFailed( |
|
103 | $phaseResult::SUCCEEDED, |
|
104 | "post-test inspection succeeded when it was expected to fail" |
|
105 | ); |
|
106 | $storyResult->setStoryHasFailed($phaseResult); |
|
107 | } |
|
108 | else { |
|
109 | $phaseResult->setContinuePlaying(); |
|
110 | } |
|
111 | } |
|
112 | catch (ActionFailedException $e) { |
|
113 | if ($storyResult->getStoryShouldFail()) { |
|
114 | $phaseResult->setContinuePlaying( |
|
115 | $phaseResult::SUCCEEDED, |
|
116 | $e->getMessage(), |
|
117 | $e |
|
118 | ); |
|
119 | } |
|
120 | else { |
|
121 | $phaseResult->setPlayingFailed( |
|
122 | $phaseResult::FAILED, |
|
123 | $e->getMessage(), |
|
124 | $e |
|
125 | ); |
|
126 | $storyResult->setStoryHasFailed($phaseResult); |
|
127 | } |
|
128 | } |
|
129 | catch (ExpectFailedException $e) { |
|
130 | if ($storyResult->getStoryShouldFail()) { |
|
131 | $phaseResult->setContinuePlaying( |
|
132 | $phaseResult::SUCCEEDED, |
|
133 | $e->getMessage(), |
|
134 | $e |
|
135 | ); |
|
136 | } |
|
137 | else { |
|
138 | $phaseResult->setPlayingFailed( |
|
139 | $phaseResult::FAILED, |
|
140 | $e->getMessage(), |
|
141 | $e |
|
142 | ); |
|
143 | $storyResult->setStoryHasFailed($phaseResult); |
|
144 | } |
|
145 | } |
|
146 | ||
147 | // this is treated as a hard fail |
|
148 | catch (NotImplementedException $e) { |
|
149 | $phaseResult->setPlayingFailed( |
|
150 | $phaseResult::INCOMPLETE, |
|
151 | $e->getMessage(), |
|
152 | $e |
|
153 | ); |
|
154 | $storyResult->setStoryIsIncomplete($phaseResult); |
|
155 | } |
|
156 | // this only happens when something has gone very badly wrong |
|
157 | catch (Exception $e) { |
|
158 | $phaseResult->setPlayingFailed( |
|
159 | $phaseResult::ERROR, |
|
160 | $e->getMessage(), |
|
161 | $e |
|
162 | ); |
|
163 | $storyResult->setStoryHasError($phaseResult); |
|
164 | } |
|
165 | ||
166 | // close off any open log actions |
|
167 | $st->closeAllOpenActions(); |
|
168 | ||
169 | // tidy up after ourselves |
|
170 | $this->doPerPhaseTeardown(); |
|
171 | ||
172 | // all done |
|
173 | return $phaseResult; |
|
174 | } |
|
175 | } |
|
176 |