ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
ilConditionalNodeTest Class Reference

ilConditionalNodeTest is part of the petri net based workflow engine. More...

+ Inheritance diagram for ilConditionalNodeTest:
+ Collaboration diagram for ilConditionalNodeTest:

Public Member Functions

 setUp ()
 
 tearDown ()
 
 testConstructorValidContext ()
 
 testGetContext ()
 
 testIsActiveAndActivate ()
 
 testDeactivate ()
 
 testCheckTransitionPreconditionsValidThen ()
 
 testCheckTransitionPreconditionsValidElse ()
 
 testCheckTransitionPreconditionsInvalid ()
 
 testExecuteTransitionThen ()
 
 testExecuteTransitionElse ()
 
 testExecuteActivitiesViaExecuteTransition ()
 
 testExecuteElseActivitiesViaExecuteTransition ()
 
 testExecuteEmitterViaExecuteTransition ()
 
 testExecuteElseEmitterViaExecuteTransition ()
 
 testExecuteElseEmitterViaAttemptTransition ()
 
 testAddDetectorFirst ()
 
 testAddEmitterFirst ()
 
 testAddElseEmitterFirst ()
 
 testAddActivityFirst ()
 
 testAddElseActivityFirst ()
 
 testNotifyDetectorSatisfaction ()
 
 testNotifyDetectorSatisfactionAndTransit ()
 

Detailed Description

ilConditionalNodeTest is part of the petri net based workflow engine.

This class holds all tests for the class nodes/class.ilConditionalNode

Author
Maximilian Becker mbeck.nosp@m.er@d.nosp@m.ataba.nosp@m.y.de
Version
$Id$

/

Definition at line 15 of file ilConditionalNodeTest.php.

Member Function Documentation

◆ setUp()

ilConditionalNodeTest::setUp ( )

Definition at line 17 of file ilConditionalNodeTest.php.

18 {
19 include_once("./Services/PHPUnit/classes/class.ilUnitUtil.php");
20 //ilUnitUtil::performInitialisation();
21
22 // Empty workflow.
23 require_once './Services/WorkflowEngine/classes/workflows/class.ilEmptyWorkflow.php';
24 $this->workflow = new ilEmptyWorkflow();
25 }
@noinspection PhpIncludeInspection

◆ tearDown()

ilConditionalNodeTest::tearDown ( )

Definition at line 27 of file ilConditionalNodeTest.php.

28 {
29 global $ilSetting;
30 if ($ilSetting != NULL)
31 {
32 $ilSetting->delete('IL_PHPUNIT_TEST_TIME');
33 $ilSetting->delete('IL_PHPUNIT_TEST_MICROTIME');
34 }
35 }
global $ilSetting
Definition: privfeed.php:17

References $ilSetting.

◆ testAddActivityFirst()

ilConditionalNodeTest::testAddActivityFirst ( )

Definition at line 442 of file ilConditionalNodeTest.php.

443 {
444 // Arrange
445 $node = new ilConditionalNode($this->workflow);
446 require_once './Services/WorkflowEngine/classes/activities/class.ilLoggingActivity.php';
447 $activity = new ilLoggingActivity($node);
448
449 // Act
450 $node->addActivity($activity);
451 $activities = $node->getActivities();
452
453 // Assert
454 $this->assertEquals($activity, $activities[0]);
455 }
@noinspection PhpIncludeInspection
@noinspection PhpIncludeInspection

◆ testAddDetectorFirst()

ilConditionalNodeTest::testAddDetectorFirst ( )

Definition at line 397 of file ilConditionalNodeTest.php.

398 {
399 // Arrange
400 $node = new ilConditionalNode($this->workflow);
401 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
402 $detector = new ilSimpleDetector($node);
403
404 // Act
405 $node->addDetector($detector);
406 $detectors = $node->getDetectors();
407
408 // Assert
409 $this->assertEquals($detector, $detectors[0]);
410 }
@noinspection PhpIncludeInspection

◆ testAddElseActivityFirst()

ilConditionalNodeTest::testAddElseActivityFirst ( )

Definition at line 457 of file ilConditionalNodeTest.php.

458 {
459 // Arrange
460 $node = new ilConditionalNode($this->workflow);
461 require_once './Services/WorkflowEngine/classes/activities/class.ilLoggingActivity.php';
462 $activity = new ilLoggingActivity($node);
463
464 // Act
465 $node->addActivity($activity, true);
466 $activities = $node->getActivities(true);
467
468 // Assert
469 $this->assertEquals($activity, $activities[0]);
470 }

◆ testAddElseEmitterFirst()

ilConditionalNodeTest::testAddElseEmitterFirst ( )

Definition at line 427 of file ilConditionalNodeTest.php.

428 {
429 // Arrange
430 $node = new ilConditionalNode($this->workflow);
431 require_once './Services/WorkflowEngine/classes/emitters/class.ilSimpleEmitter.php';
432 $emitter = new ilSimpleEmitter($node);
433
434 // Act
435 $node->addEmitter($emitter, true);
436 $emitters = $node->getEmitters(true);
437
438 // Assert
439 $this->assertEquals($emitter, $emitters[0]);
440 }
@noinspection PhpIncludeInspection

◆ testAddEmitterFirst()

ilConditionalNodeTest::testAddEmitterFirst ( )

Definition at line 412 of file ilConditionalNodeTest.php.

413 {
414 // Arrange
415 $node = new ilConditionalNode($this->workflow);
416 require_once './Services/WorkflowEngine/classes/emitters/class.ilSimpleEmitter.php';
417 $emitter = new ilSimpleEmitter($node);
418
419 // Act
420 $node->addEmitter($emitter);
421 $emitters = $node->getEmitters();
422
423 // Assert
424 $this->assertEquals($emitter, $emitters[0]);
425 }

◆ testCheckTransitionPreconditionsInvalid()

ilConditionalNodeTest::testCheckTransitionPreconditionsInvalid ( )

Definition at line 179 of file ilConditionalNodeTest.php.

180 {
181 // Arrange
182 $node = new ilConditionalNode($this->workflow);
183 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
184 $detector1 = new ilSimpleDetector($node);
185 $node->addDetector($detector1);
186 $detector2 = new ilSimpleDetector($node);
187 $node->addDetector($detector2);
188
189 $evaluation_expression =
190 '
191 $retval = null;
192 if ($detectors[0]->getDetectorState() == false
193 && $detectors[1]->getDetectorState() == true)
194 {
195 $retval = false;
196 }
197
198 if ($detectors[0]->getDetectorState() == true
199 && $detectors[1]->getDetectorState() == false)
200 {
201 $retval = true;
202 }
203 return $retval;
204 ';
205
206 $node->setEvaluationExpression($evaluation_expression);
207
208 // Act
209 $preconditions = $node->checkTransitionPreconditions();
210
211 // Assert
212 $this->assertFalse($preconditions);
213 }

◆ testCheckTransitionPreconditionsValidElse()

ilConditionalNodeTest::testCheckTransitionPreconditionsValidElse ( )

Definition at line 142 of file ilConditionalNodeTest.php.

143 {
144 // Arrange
145 $node = new ilConditionalNode($this->workflow);
146 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
147 $detector1 = new ilSimpleDetector($node);
148 $node->addDetector($detector1);
149 $detector2 = new ilSimpleDetector($node);
150 $node->addDetector($detector2);
151
152 $evaluation_expression =
153 '
154 $retval = null;
155 if ($detectors[0]->getDetectorState() == false
156 && $detectors[1]->getDetectorState() == true)
157 {
158 $retval = false;
159 }
160
161 if ($detectors[0]->getDetectorState() == true
162 && $detectors[1]->getDetectorState() == false)
163 {
164 $retval = true;
165 }
166 return $retval;
167 ';
168
169 $node->setEvaluationExpression($evaluation_expression);
170 $detector2->trigger(null);
171
172 // Act
173 $preconditions = $node->checkTransitionPreconditions();
174
175 // Assert
176 $this->assertTrue($preconditions);
177 }

◆ testCheckTransitionPreconditionsValidThen()

ilConditionalNodeTest::testCheckTransitionPreconditionsValidThen ( )

Definition at line 105 of file ilConditionalNodeTest.php.

106 {
107 // Arrange
108 $node = new ilConditionalNode($this->workflow);
109 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
110 $detector1 = new ilSimpleDetector($node);
111 $node->addDetector($detector1);
112 $detector2 = new ilSimpleDetector($node);
113 $node->addDetector($detector2);
114
115 $evaluation_expression =
116 '
117 $retval = null;
118 if ($detectors[0]->getDetectorState() == false
119 && $detectors[1]->getDetectorState() == true)
120 {
121 $retval = false;
122 }
123
124 if ($detectors[0]->getDetectorState() == true
125 && $detectors[1]->getDetectorState() == false)
126 {
127 $retval = true;
128 }
129 return $retval;
130 ';
131
132 $node->setEvaluationExpression($evaluation_expression);
133 $detector1->trigger(null);
134
135 // Act
136 $preconditions = $node->checkTransitionPreconditions();
137
138 // Assert
139 $this->assertTrue($preconditions);
140 }

◆ testConstructorValidContext()

ilConditionalNodeTest::testConstructorValidContext ( )

Definition at line 37 of file ilConditionalNodeTest.php.

38 {
39 // Act
40 $node = new ilConditionalNode($this->workflow);
41
42 // Assert
43 // No exception - good
44 $this->assertTrue(
45 true,
46 'Construction failed with valid context passed to constructor.'
47 );
48 }

◆ testDeactivate()

ilConditionalNodeTest::testDeactivate ( )

Definition at line 85 of file ilConditionalNodeTest.php.

86 {
87 // Arrange
88 $node = new ilConditionalNode($this->workflow);
89 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
90 $detector = new ilSimpleDetector($node);
91 $node->addDetector($detector);
92 $evaluation_expression = 'return null;';
93 $node->setEvaluationExpression($evaluation_expression);
94
95 // Act
96 $node->activate();
97 $was_activated = $node->isActive();
98 $node->deactivate();
99 $was_deactivated = !$node->isActive();
100
101 // Assert
102 $this->assertEquals($was_activated, $was_deactivated);
103 }

◆ testExecuteActivitiesViaExecuteTransition()

ilConditionalNodeTest::testExecuteActivitiesViaExecuteTransition ( )

Definition at line 251 of file ilConditionalNodeTest.php.

252 {
253 // Arrange
254 $node = new ilConditionalNode($this->workflow);
255 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
256 $detector = new ilSimpleDetector($node);
257 $node->addDetector($detector);
258
259 require_once './Services/WorkflowEngine/classes/activities/class.ilLoggingActivity.php';
260 $activity = new ilLoggingActivity($node);
261 $activity->setLogFile('ilTransitionLog.txt');
262 $activity->setLogLevel('MESSAGE');
263 $activity->setLogMessage('TEST');
264 $node->addActivity($activity);
265
266 // Act
267 $node->activate();
268 $node->executeTransition();
269
270 // Assert
271 $expected = ' :: MESSAGE :: TEST';
272 $fp = fopen('ilTransitionLog.txt', 'r');
273 $line = fgets($fp);
274 $actual = substr($line, 25, strlen($line)-27);
275 @unlink('ilTransitionLog.txt'); // TODO: Use vfsStream
276 $this->assertEquals(
277 $actual,
278 $expected
279 );
280 }

◆ testExecuteElseActivitiesViaExecuteTransition()

ilConditionalNodeTest::testExecuteElseActivitiesViaExecuteTransition ( )

Definition at line 282 of file ilConditionalNodeTest.php.

283 {
284 // Arrange
285 $node = new ilConditionalNode($this->workflow);
286 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
287 $detector = new ilSimpleDetector($node);
288 $node->addDetector($detector);
289
290 require_once './Services/WorkflowEngine/classes/activities/class.ilLoggingActivity.php';
291 $activity = new ilLoggingActivity($node);
292 $activity->setLogFile('ilTransitionLog.txt');
293 $activity->setLogLevel('MESSAGE');
294 $activity->setLogMessage('TEST');
295 $node->addActivity($activity, true);
296
297 // Act
298 $node->activate();
299 $node->executeElseTransition();
300
301 // Assert
302 $expected = ' :: MESSAGE :: TEST';
303 $fp = fopen('ilTransitionLog.txt', 'r');
304 $line = fgets($fp);
305 $actual = substr($line, 25, strlen($line)-27);
306 @unlink('ilTransitionLog.txt'); // TODO: Use vfsStream
307 $this->assertEquals(
308 $actual,
309 $expected
310 );
311 }

◆ testExecuteElseEmitterViaAttemptTransition()

ilConditionalNodeTest::testExecuteElseEmitterViaAttemptTransition ( )

Definition at line 369 of file ilConditionalNodeTest.php.

370 {
371 // Arrange
372 $node = new ilConditionalNode($this->workflow);
373 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
374 $detector = new ilSimpleDetector($node);
375 $node->addDetector($detector);
376
377 require_once './Services/WorkflowEngine/classes/emitters/class.ilActivationEmitter.php';
378 $t_node = new ilBasicNode($this->workflow);
379 $t_detector = new ilSimpleDetector($t_node);
380 $t_node->addDetector($t_detector);
381 $foo_detector = new ilSimpleDetector($t_node);
382 $t_node->addDetector($foo_detector);
383 // again a foo_detector to keep the t_node from transitting
384
385 $emitter = new ilActivationEmitter($node);
386 $emitter->setTargetDetector($t_detector);
387 $node->addEmitter($emitter,true);
388 $node->setEvaluationExpression("return false;");
389 // Act
390 $node->activate();
391 $node->AttemptTransition();
392
393 // Assert
394 $this->assertTrue($t_node->isActive());
395 }
@noinspection PhpIncludeInspection
@noinspection PhpIncludeInspection

◆ testExecuteElseEmitterViaExecuteTransition()

ilConditionalNodeTest::testExecuteElseEmitterViaExecuteTransition ( )

Definition at line 341 of file ilConditionalNodeTest.php.

342 {
343 // Arrange
344 $node = new ilConditionalNode($this->workflow);
345 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
346 $detector = new ilSimpleDetector($node);
347 $node->addDetector($detector);
348
349 require_once './Services/WorkflowEngine/classes/emitters/class.ilActivationEmitter.php';
350 $t_node = new ilBasicNode($this->workflow);
351 $t_detector = new ilSimpleDetector($t_node);
352 $t_node->addDetector($t_detector);
353 $foo_detector = new ilSimpleDetector($t_node);
354 $t_node->addDetector($foo_detector);
355 // again a foo_detector to keep the t_node from transitting
356
357 $emitter = new ilActivationEmitter($node);
358 $emitter->setTargetDetector($t_detector);
359 $node->addEmitter($emitter,true);
360
361 // Act
362 $node->activate();
363 $node->executeElseTransition();
364
365 // Assert
366 $this->assertTrue($t_node->isActive());
367 }

◆ testExecuteEmitterViaExecuteTransition()

ilConditionalNodeTest::testExecuteEmitterViaExecuteTransition ( )

Definition at line 313 of file ilConditionalNodeTest.php.

314 {
315 // Arrange
316 $node = new ilConditionalNode($this->workflow);
317 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
318 $detector = new ilSimpleDetector($node);
319 $node->addDetector($detector);
320
321 require_once './Services/WorkflowEngine/classes/emitters/class.ilActivationEmitter.php';
322 $t_node = new ilBasicNode($this->workflow);
323 $t_detector = new ilSimpleDetector($t_node);
324 $t_node->addDetector($t_detector);
325 $foo_detector = new ilSimpleDetector($t_node);
326 $t_node->addDetector($foo_detector);
327 // again a foo_detector to keep the t_node from transitting
328
329 $emitter = new ilActivationEmitter($node);
330 $emitter->setTargetDetector($t_detector);
331 $node->addEmitter($emitter);
332
333 // Act
334 $node->activate();
335 $node->executeTransition();
336
337 // Assert
338 $this->assertTrue($t_node->isActive());
339 }

◆ testExecuteTransitionElse()

ilConditionalNodeTest::testExecuteTransitionElse ( )

Definition at line 232 of file ilConditionalNodeTest.php.

233 { // This is test #100 of the WorkflowEngine, written on 9th of May, 2012
234 // @ 14:15
235
236 // Arrange
237 $node = new ilConditionalNode($this->workflow);
238 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
239 $detector = new ilSimpleDetector($node);
240 $node->addDetector($detector);
241 $node->activate();
242
243 // Act
244 $node->executeElseTransition();
245 $state = $node->isActive();
246
247 // Assert
248 $this->assertFalse($state);
249 }

◆ testExecuteTransitionThen()

ilConditionalNodeTest::testExecuteTransitionThen ( )

Definition at line 215 of file ilConditionalNodeTest.php.

216 {
217 // Arrange
218 $node = new ilConditionalNode($this->workflow);
219 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
220 $detector = new ilSimpleDetector($node);
221 $node->addDetector($detector);
222 $node->activate();
223
224 // Act
225 $node->executeTransition();
226 $state = $node->isActive();
227
228 // Assert
229 $this->assertFalse($state);
230 }

◆ testGetContext()

ilConditionalNodeTest::testGetContext ( )

Definition at line 50 of file ilConditionalNodeTest.php.

51 {
52 // Arrange
53 $node = new ilConditionalNode($this->workflow);
54
55 // Act
56 $actual = $node->getContext();
57
58 // Assert
59 if ($actual === $this->workflow)
60 {
61 $this->assertEquals($actual, $this->workflow);
62 } else {
63 $this->assertTrue(false, 'Context not identical.');
64 }
65 }

◆ testIsActiveAndActivate()

ilConditionalNodeTest::testIsActiveAndActivate ( )

Definition at line 67 of file ilConditionalNodeTest.php.

68 {
69 // Arrange
70 $node = new ilConditionalNode($this->workflow);
71 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
72 $detector = new ilSimpleDetector($node);
73 $node->addDetector($detector);
74 $evaluation_expression = 'return null;';
75 $node->setEvaluationExpression($evaluation_expression);
76
77 // Act
78 $node->activate();
79
80 // Assert
81 $actual = $node->isActive();
82 $this->assertTrue($actual);
83 }

◆ testNotifyDetectorSatisfaction()

ilConditionalNodeTest::testNotifyDetectorSatisfaction ( )

Definition at line 472 of file ilConditionalNodeTest.php.

473 {
474 // Arrange
475 $node = new ilConditionalNode($this->workflow);
476
477 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
478 $detector = new ilSimpleDetector($node);
479 $node->addDetector($detector);
480 $detector->setDetectorState(true);
481 $node->setEvaluationExpression('return true;');
482
483 $node->activate();
484 /* Setting the detector to true will actually be reported
485 * with notifyDetectorSatisfaction.
486 * To isolate this call, we need to reset the node back
487 * to active prior to evaluating if it successfully executes
488 * the transition and sets itself to inactive.
489 */
490
491 // Act
492 $node->notifyDetectorSatisfaction($detector);
493
494 // Assert
495 $this->assertFalse($node->isActive());
496 }

◆ testNotifyDetectorSatisfactionAndTransit()

ilConditionalNodeTest::testNotifyDetectorSatisfactionAndTransit ( )

Definition at line 498 of file ilConditionalNodeTest.php.

499 {
500 // Arrange
501 $node = new ilConditionalNode($this->workflow);
502 require_once './Services/WorkflowEngine/classes/detectors/class.ilSimpleDetector.php';
503 $detector1 = new ilSimpleDetector($node);
504 $node->addDetector($detector1);
505 $detector2 = new ilSimpleDetector($node);
506 $node->addDetector($detector2);
507 $node->setEvaluationExpression('return $GLOBALS["expr_retval"];');
508 $GLOBALS['expr_retval'] = null;
509
510 // Act
511 $node->activate();
512 $this->assertTrue($node->isActive());
513 $GLOBALS['expr_retval'] = true;
514
515 $detector1->trigger(null);
516 $detector2->trigger(null);
517 // TODO: Assert something more meaningful here.
518 $this->assertFalse($node->isActive());
519 }
$GLOBALS['loaded']
Global hash that tracks already loaded includes.

References $GLOBALS.


The documentation for this class was generated from the following file: