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  }
PhpIncludeInspection

◆ tearDown()

ilConditionalNodeTest::tearDown ( )

Definition at line 27 of file ilConditionalNodeTest.php.

References $ilSetting.

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

◆ 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  }
PhpIncludeInspection
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  }
PhpIncludeInspection
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  }
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
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  }
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection
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  }
PhpIncludeInspection
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection

◆ 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  }
PhpIncludeInspection
PhpIncludeInspection

◆ testNotifyDetectorSatisfactionAndTransit()

ilConditionalNodeTest::testNotifyDetectorSatisfactionAndTransit ( )

Definition at line 498 of file ilConditionalNodeTest.php.

References $GLOBALS.

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.
PhpIncludeInspection
PhpIncludeInspection

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