ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
ilCaseNodeTest.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2014 ILIAS open source, Extended GPL, see docs/LICENSE */
3
16{
18 public $workflow;
19
20 public function setUp()
21 {
22 include_once("./Services/PHPUnit/classes/class.ilUnitUtil.php");
23 //ilUnitUtil::performInitialisation();
24
25 // Empty workflow.
26 require_once './Services/WorkflowEngine/classes/workflows/class.ilEmptyWorkflow.php';
27 $this->workflow = new ilEmptyWorkflow();
28 }
29
30 public function tearDown()
31 {
32 global $ilSetting;
33 if ($ilSetting != NULL)
34 {
35 $ilSetting->delete('IL_PHPUNIT_TEST_TIME');
36 $ilSetting->delete('IL_PHPUNIT_TEST_MICROTIME');
37 }
38 }
39
41 {
42 // Act
43 $node = new ilCaseNode($this->workflow);
44
45 // Assert
46 // No exception - good
47 $this->assertTrue(
48 true,
49 'Construction failed with valid context passed to constructor.'
50 );
51 }
52
53 public function testGetContext()
54 {
55 // Arrange
56 $node = new ilCaseNode($this->workflow);
57
58 // Act
59 $actual = $node->getContext();
60
61 // Assert
62 if ($actual === $this->workflow)
63 {
64 $this->assertEquals($actual, $this->workflow);
65 } else {
66 $this->assertTrue(false, 'Context not identical.');
67 }
68 }
69
70 public function testIsActiveAndActivate()
71 {
72 // Arrange
73 $node = new ilCaseNode($this->workflow);
74 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
75 $detector = new ilSimpleDetector($node);
76 $node->addDetector($detector);
77
78 // Act
79 $node->activate();
80
81 // Assert
82 $actual = $node->isActive();
83 $this->assertTrue($actual);
84 }
85
86 public function testDeactivate()
87 {
88 // Arrange
89 $node = new ilCaseNode($this->workflow);
90 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
91 $detector = new ilSimpleDetector($node);
92 $node->addDetector($detector);
93
94 // Act
95 $node->activate();
96 $was_activated = $node->isActive();
97 $node->deactivate();
98 $was_deactivated = !$node->isActive();
99
100 // Assert
101 $this->assertEquals($was_activated, $was_deactivated);
102 }
103
105 {
106 // Arrange
107 $node = new ilCaseNode($this->workflow);
108 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
109 $detector1 = new ilSimpleDetector($node);
110 $node->addDetector($detector1);
111 $detector2 = new ilSimpleDetector($node);
112 $node->addDetector($detector2);
113
114 $detector1->trigger(null);
115 $detector2->trigger(null);
116
117 // Act
118 $preconditions = $node->checkTransitionPreconditions();
119
120 // Assert
121 $this->assertTrue($preconditions);
122 }
123
125 {
126 // Arrange
127 $node = new ilCaseNode($this->workflow);
128 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
129 $detector1 = new ilSimpleDetector($node);
130 $node->addDetector($detector1);
131 $detector2 = new ilSimpleDetector($node);
132 $node->addDetector($detector2);
133 $node->setIsExclusiveJoin(true);
134 $detector1->trigger(null);
135 $detector2->trigger(null);
136
137 // Act
138 $preconditions = $node->checkTransitionPreconditions();
139
140 // Assert
141 $this->assertTrue($preconditions);
142 }
143
145 {
146 // Arrange
147 $node = new ilCaseNode($this->workflow);
148 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
149 $detector1 = new ilSimpleDetector($node);
150 $node->addDetector($detector1);
151 $detector2 = new ilSimpleDetector($node);
152 $node->addDetector($detector2);
153
154 // Act
155 $node->activate();
156 $this->assertTrue($node->isActive());
157 $detector1->trigger(null);
158 $detector2->trigger(null);
159 // TODO: Assert something more meaningful here.
160 $this->assertFalse($node->isActive());
161 }
162
164 {
165 // Arrange
166 $node = new ilCaseNode($this->workflow);
167 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
168 $detector1 = new ilSimpleDetector($node);
169 $node->addDetector($detector1);
170 $detector2 = new ilSimpleDetector($node);
171 $node->addDetector($detector2);
172
173 $detector1->trigger(null);
174 //$detector2->trigger(null);
175
176 // Act
177 $preconditions = $node->checkTransitionPreconditions();
178
179 // Assert
180 $this->assertFalse($preconditions);
181 }
182
184 {
185 // Arrange
186 $node = new ilCaseNode($this->workflow);
187 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
188 $detector1 = new ilSimpleDetector($node);
189 $node->addDetector($detector1);
190 $detector2 = new ilSimpleDetector($node);
191 $node->addDetector($detector2);
192 $node->setIsExclusiveJoin(true);
193 $detector1->trigger(null);
194 $detector2->trigger(null);
195
196 // Act
197 $success = $node->attemptTransition();
198
199 // Assert
200 $this->assertTrue($success);
201 }
202
203 public function testExecuteTransition()
204 {
205 // Arrange
206 $node = new ilCaseNode($this->workflow);
207 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
208 $detector = new ilSimpleDetector($node);
209 $node->addDetector($detector);
210 $node->activate();
211
212 // Act
213 $node->executeTransition();
214 $state = $node->isActive();
215
216 // Assert
217 $this->assertFalse($state);
218 }
219
221 {
222 // Arrange
223 $node = new ilCaseNode($this->workflow);
224 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
225 $detector = new ilSimpleDetector($node);
226 $node->addDetector($detector);
227 $node->activate();
228 $node->setIsExclusiveFork(true);
229
230 // Act
231 $node->executeTransition();
232 $state = $node->isActive();
233
234 // Assert
235 $this->assertFalse($state);
236 }
237
239 {
240 // Arrange
241 $node = new ilCaseNode($this->workflow);
242 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
243 $detector = new ilSimpleDetector($node);
244 $node->addDetector($detector);
245
246 require_once './Services/WorkflowEngine/classes/activities/class.ilLoggingActivity.php';
247 $activity = new ilLoggingActivity($node);
248 $activity->setLogFile('ilTransitionLog.txt');
249 $activity->setLogLevel('MESSAGE');
250 $activity->setLogMessage('TEST');
251 $node->addActivity($activity);
252
253 // Act
254 $node->activate();
255 $node->executeTransition();
256
257 // Assert
258 $expected = ' :: MESSAGE :: TEST';
259 $fp = fopen('ilTransitionLog.txt', r);
260 $line = fgets($fp);
261 $actual = substr($line, 25, strlen($line)-27);
262 @unlink('ilTransitionLog.txt'); // TODO: Use vfsStrream
263 $this->assertEquals(
264 $expected,
265 $actual
266 );
267 }
268
270 {
271 // Arrange
272 $node = new ilCaseNode($this->workflow);
273 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
274 $detector = new ilSimpleDetector($node);
275 $node->addDetector($detector);
276
277 require_once './Services/WorkflowEngine/classes/emitters/class.ilActivationEmitter.php';
278 $t_node = new ilBasicNode($this->workflow);
279 $t_detector = new ilSimpleDetector($t_node);
280 $t_node->addDetector($t_detector);
281 $foo_detector = new ilSimpleDetector($t_node);
282 $t_node->addDetector($foo_detector);
283 // again a foo_detector to keep the t_node from transitting
284
285 $emitter = new ilActivationEmitter($node);
286 $emitter->setTargetDetector($t_detector);
287 $node->addEmitter($emitter);
288
289 // Act
290 $node->activate();
291 $node->executeTransition();
292
293 // Assert
294 $this->assertTrue($t_node->isActive());
295 }
296
298 {
299 // Arrange
300 $node = new ilCaseNode($this->workflow);
301 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
302 $detector = new ilSimpleDetector($node);
303 $node->addDetector($detector);
304
305 require_once './Services/WorkflowEngine/classes/emitters/class.ilActivationEmitter.php';
306 $t_node = new ilBasicNode($this->workflow);
307 $t_detector = new ilSimpleDetector($t_node);
308 $t_node->addDetector($t_detector);
309 $foo_detector = new ilSimpleDetector($t_node);
310 $t_node->addDetector($foo_detector);
311 // again a foo_detector to keep the t_node from transitting
312
313 $emitter = new ilActivationEmitter($node);
314 $emitter->setTargetDetector($t_detector);
315 $node->addEmitter($emitter);
316 $node->setIsExclusiveFork(true);
317
318 // Act
319 $node->activate();
320 $node->executeTransition();
321
322 // Assert
323 $this->assertTrue($t_node->isActive());
324 }
325
326 public function testAddDetectorFirst()
327 {
328 // Arrange
329 $node = new ilCaseNode($this->workflow);
330 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
331 $detector = new ilSimpleDetector($node);
332
333 // Act
334 $node->addDetector($detector);
335 $detectors = $node->getDetectors();
336
337 // Assert
338 $this->assertEquals($detector, $detectors[0]);
339 }
340
341 public function testAddGetActivity()
342 {
343 // Arrange
344 $node = new ilCaseNode( $this->workflow );
345 require_once './Services/WorkflowEngine/classes/activities/class.ilLoggingActivity.php';
346 $activity = new ilLoggingActivity( $node );
347
348 // Act
349 $node->addActivity( $activity );
350 $activities = $node->getActivities();
351
352 // Assert
353 $this->assertEquals( $activity, $activities[0] );
354 }
355}
$success
Definition: Utf8Test.php:86
An exception for terminatinating execution or to throw for unit testing.
@noinspection PhpIncludeInspection
@noinspection PhpIncludeInspection
ilCaseNodeTest is part of the petri net based workflow engine.
testExecuteEmitterViaExecuteTransitionExclusiveFork()
testExecuteEmitterViaExecuteTransition()
testNotifyDetectorSatisfactionAndTransit()
testCheckTransitionPreconditionsValidOnExclusiveJoin()
testExecuteTransitionExclusiveFork()
testExecuteActivitiesViaExecuteTransition()
testCheckTransitionPreconditionsInvalid()
testCheckTransitionPreconditionsValid()
testAttemptTransitionPreconditionsValidOnExclusiveJoin()
@noinspection PhpIncludeInspection
@noinspection PhpIncludeInspection
@noinspection PhpIncludeInspection
@noinspection PhpIncludeInspection
global $ilSetting
Definition: privfeed.php:17