ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
assClozeGapTest.php
Go to the documentation of this file.
1 <?php
2 
20 
29 {
30  protected $backupGlobals = false;
31 
32  protected function setUp(): void
33  {
34  chdir(dirname(__FILE__));
35  chdir('../../../');
36 
37  parent::setUp();
38 
39  $util_mock = $this->createMock('ilUtil', array('stripSlashes'), array(), '', false);
40  $util_mock->expects($this->any())->method('stripSlashes')->will($this->returnArgument(0));
41  $this->setGlobalVariable('ilUtils', $util_mock);
42  }
43 
45  {
46  // Act
47  $instance = new assClozeGap(0); // 0 - text gap
48 
49  $this->assertInstanceOf('assClozeGap', $instance);
50  }
51 
53  {
54  $instance = new assClozeGap(0); // 0 - text gap
55  $expected = 1; // 1 - select gap
56 
57  // Act
58  $instance->setType($expected);
59  $actual = $instance->getType();
60 
61  // Assert
62  $this->assertEquals($expected, $actual);
63  }
64 
66  {
67  $instance = new assClozeGap(0); // 0 - text gap
68  $expected = 0; // 0 - text gap
69 
70  // Act
71  $instance->setType();
72  $actual = $instance->getType();
73 
74  // Assert
75  $this->assertEquals($expected, $actual);
76  }
77 
79  {
80  $instance = new assClozeGap(0); // 0 - text gap
81  $expected = true;
82 
83  // Act
84  $instance->setShuffle($expected);
85  $actual = $instance->getShuffle();
86 
87  // Assert
88  $this->assertEquals($expected, $actual);
89  }
90 
92  {
93  $instance = new assClozeGap(0); // 0 - text gap
94 
95  // Act
96  $the_unexpected = array('Killing', 'Kunkel', 'Luetzenkirchen',
97  'Meyer', 'Jansen', 'Heyser', 'Becker');
98  $instance->items = $the_unexpected;
99  $instance->setShuffle(true);
100  $theExpected = ['hua', 'haaa', 'some random values'];
101 
102  $transformationMock = $this->getMockBuilder(Transformation::class)->getMock();
103  $transformationMock->expects(self::once())->method('transform')->with($the_unexpected)->willReturn($theExpected);
104  $actual = $instance->getItems($transformationMock);
105 
106  // Assert
107  $this->assertEquals($theExpected, $actual);
108  }
109 
111  {
112  $instance = new assClozeGap(0); // 0 - text gap
113  $expected = new assAnswerCloze('Esther', 1.0, 0);
114 
115  // Act
116  $instance->addItem($expected);
117  $actual = $instance->getItem(0);
118 
119  // Assert
120  $this->assertEquals($expected, $actual);
121  }
122 
124  {
125  $instance = new assClozeGap(0); // 0 - text gap
126  $answer = new assAnswerCloze('Bert', 1.0, 0);
127  $expected = new assAnswerCloze('Esther', 1.0, 0);
128 
129  // Act
130  $instance->addItem($answer);
131  $instance->addItem($expected);
132  $actual = $instance->getItem(0);
133 
134  // Assert
135  $this->assertEquals($expected, $actual);
136  }
137 
139  {
140  $instance = new assClozeGap(0); // 0 - text gap
141  $answer1 = new assAnswerCloze('Bert', 1.0, 0);
142  $answer2 = new assAnswerCloze('Esther', 1.0, 1);
143 
144  $instance->addItem($answer1);
145  $instance->addItem($answer2);
146 
147  $expected = null;
148 
149  // Act
150  $actual = $instance->getItem(2);
151 
152  // Assert
153  $this->assertEquals($expected, $actual);
154  }
155 
157  {
158  $instance = new assClozeGap(0); // 0 - text gap
159  $answer = new assAnswerCloze('Bert', 1.0, 1);
160  $answer2 = new assAnswerCloze('Fred', 1.0, 2);
161  $answer3 = new assAnswerCloze('Karl', 1.0, 3);
162  $expected = new assAnswerCloze('Esther', 1.0, 0);
163 
164  // Act
165  $instance->addItem($answer);
166  $instance->addItem($answer2);
167  $instance->addItem($answer3);
168  $instance->addItem($expected);
169  $actual = $instance->getItem(0);
170 
171  // Assert
172  $this->assertEquals($expected, $actual);
173  }
174 
175  public function test_getItems_shouldReturnItemsAdded(): void
176  {
177  $instance = new assClozeGap(0); // 0 - text gap
178  $item1 = new assAnswerCloze('Bert', 1.0, 0);
179  $item2 = new assAnswerCloze('Fred', 1.0, 1);
180  $item3 = new assAnswerCloze('Karl', 1.0, 2);
181  $item4 = new assAnswerCloze('Esther', 1.0, 3);
182  $instance->setShuffle(false);
183  $expected = array($item1, $item2, $item3, $item4);
184  // Act
185  $instance->addItem($item1);
186  $instance->addItem($item2);
187  $instance->addItem($item3);
188  $instance->addItem($item4);
189  $transformationMock = $this->getMockBuilder(Transformation::class)->getMock();
190  $transformationMock->expects(self::never())->method('transform');
191  $actual = $instance->getItems($transformationMock);
192 
193  // Assert
194  $this->assertEquals($expected, $actual);
195  }
196 
198  {
199  $instance = new assClozeGap(0); // 0 - text gap
200  $instance->setShuffle(true);
201  $expected = [
202  new assAnswerCloze('Bert', 1.0, 0),
203  new assAnswerCloze('Fred', 1.0, 1),
204  new assAnswerCloze('Karl', 1.0, 2),
205  new assAnswerCloze('Esther', 1.0, 3),
206  new assAnswerCloze('Herbert', 1.0, 4),
207  new assAnswerCloze('Karina', 1.0, 5),
208  new assAnswerCloze('Helmut', 1.0, 6),
209  new assAnswerCloze('Kerstin', 1.0, 7),
210  ];
211 
212  $shuffledArray = ['some shuffled array', 'these values dont matter'];
213 
214  // Act
215  foreach ($expected as $item) {
216  $instance->addItem($item);
217  }
218 
219  $transformationMock = $this->getMockBuilder(Transformation::class)->getMock();
220  $transformationMock->expects(self::once())->method('transform')->with($expected)->willReturn($shuffledArray);
221  $actual = $instance->getItems($transformationMock);
222 
223  // Assert
224 
225  $this->assertEquals($shuffledArray, $actual);
226  }
227 
229  {
230  $instance = new assClozeGap(0); // 0 - text gap
231  $item1 = new assAnswerCloze('Bert', 1.0, 0);
232  $item2 = new assAnswerCloze('Fred', 1.0, 1);
233  $item3 = new assAnswerCloze('Karl', 1.0, 2);
234  $item4 = new assAnswerCloze('Esther', 1.0, 3);
235  $expected = array($item1, $item2, $item3, $item4);
236 
237  // Act
238  $instance->addItem($item1);
239  $instance->addItem($item2);
240  $instance->addItem($item3);
241  $instance->addItem($item4);
242  $actual = $instance->getItemsRaw();
243 
244  // Assert
245  $this->assertEquals($expected, $actual);
246  }
247 
249  {
250  $instance = new assClozeGap(0); // 0 - text gap
251  $item1 = new assAnswerCloze('Bert', 1.0, 0);
252  $item2 = new assAnswerCloze('Fred', 1.0, 2);
253  $item3 = new assAnswerCloze('Karl', 1.0, 1);
254  $item4 = new assAnswerCloze('Esther', 1.0, 3);
255  $expected = 4;
256 
257  // Act
258  $instance->addItem($item1);
259  $instance->addItem($item2);
260  $instance->addItem($item3);
261  $instance->addItem($item4);
262  $actual = $instance->getItemCount();
263 
264  // Assert
265  $this->assertEquals($expected, $actual);
266  }
267 
268  public function test_setItemPoints_shouldSetItemPoints(): void
269  {
270  $instance = new assClozeGap(0); // 0 - text gap
271  $item1 = new assAnswerCloze('Esther', 1.0, 0);
272  $instance->addItem($item1);
273  $expected = 4;
274 
275  // Act
276  $instance->setItemPoints(0, $expected);
278  $item_retrieved = $instance->getItem(0);
279  $actual = $item_retrieved->getPoints();
280 
281  // Assert
282  $this->assertEquals($expected, $actual);
283  }
284 
286  {
287  $instance = new assClozeGap(0); // 0 - text gap
288  $item1 = new assAnswerCloze('Bert', 1.0, 0);
289  $item2 = new assAnswerCloze('Fred', 1.0, 1);
290 
291  $instance->addItem($item1);
292  $instance->addItem($item2);
293 
294  $expected = array('1' => $item2);
295 
296  // Act
297  $instance->deleteItem(0);
298 
299  $actual = $instance->getItemsRaw();
300 
301  // Assert
302  $this->assertEquals($expected, $actual);
303  }
304 
305  public function test_clearItems_shouldClearItems(): void
306  {
307  $instance = new assClozeGap(0); // 0 - text gap
308  $item1 = new assAnswerCloze('Bert', 1.0, 0);
309  $item2 = new assAnswerCloze('Fred', 1.0, 2);
310  $item3 = new assAnswerCloze('Karl', 1.0, 1);
311  $item4 = new assAnswerCloze('Esther', 1.0, 3);
312 
313  $instance->addItem($item1);
314  $instance->addItem($item2);
315  $instance->addItem($item3);
316  $instance->addItem($item4);
317 
318  $expected = 0;
319 
320  // Act
321  $instance->clearItems();
322  $actual = $instance->getItemCount();
323 
324  // Assert
325  $this->assertEquals($expected, $actual);
326  }
327 
329  {
330  $instance = new assClozeGap(0); // 0 - text gap
331  $item1 = new assAnswerCloze(20, 1.0, 0);
332 
333  $instance->addItem($item1);
334 
335  $expected = 10;
336 
337  // Act
338  $instance->setItemLowerBound(0, $expected);
339  $item_retrieved = $instance->getItem(0);
340  $actual = $item_retrieved->getLowerBound();
341 
342  // Assert
343  $this->assertEquals($expected, $actual);
344  }
345 
347  {
348  $instance = new assClozeGap(0); // 0 - text gap
349  $item1 = new assAnswerCloze(20, 1.0, 0);
350 
351  $instance->addItem($item1);
352 
353  $expected = 40;
354 
355  // Act
356  $instance->setItemLowerBound(0, $expected);
357  $item_retrieved = $instance->getItem(0);
358  $actual = $item_retrieved->getLowerBound();
359 
360  // Assert
361  $this->assertNotEquals($expected, $actual);
362  $this->assertEquals($item_retrieved->getAnswerText(), $actual);
363  }
364 
366  {
367  $instance = new assClozeGap(0); // 0 - text gap
368  $item1 = new assAnswerCloze(5, 1.0, 0);
369 
370  $instance->addItem($item1);
371 
372  $expected = 10;
373 
374  // Act
375  $instance->setItemUpperBound(0, $expected);
376  $item_retrieved = $instance->getItem(0);
377  $actual = $item_retrieved->getUpperBound();
378 
379  // Assert
380  $this->assertEquals($expected, $actual);
381  }
382 
384  {
385  $instance = new assClozeGap(0); // 0 - text gap
386  $item1 = new assAnswerCloze(20, 1.0, 0);
387 
388  $instance->addItem($item1);
389 
390  $expected = 10;
391 
392  // Act
393  $instance->setItemUpperBound(0, $expected);
394  $item_retrieved = $instance->getItem(0);
395  $actual = $item_retrieved->getUpperBound();
396 
397  // Assert
398  $this->assertNotEquals($expected, $actual);
399  $this->assertEquals($item_retrieved->getAnswerText(), $actual);
400  }
401 
403  {
404  $instance = new assClozeGap(0); // 0 - text gap
405  $item1 = new assAnswerCloze('Bert', 1.0, 0);
406  $item2 = new assAnswerCloze('Fred', 1.0, 2);
407  $item3 = new assAnswerCloze('Karl', 1.0, 1);
408  $item4 = new assAnswerCloze('Esther', 1.0, 3);
409 
410  $instance->addItem($item1);
411  $instance->addItem($item2);
412  $instance->addItem($item3);
413  $instance->addItem($item4);
414 
415  $expected = strlen($item4->getAnswertext());
416 
417  // Act
418  $actual = $instance->getMaxWidth();
419 
420  // Assert
421  $this->assertEquals($expected, $actual);
422  }
423 
425  {
426  $instance = new assClozeGap(0); // 0 - text gap
427  $item1 = new assAnswerCloze('Bert', 1.0, 0);
428  $item2 = new assAnswerCloze('Fred', 2.0, 2);
429  $item3 = new assAnswerCloze('Karl', 3.0, 1);
430  $item4 = new assAnswerCloze('Esther', 4.0, 3);
431 
432  $instance->addItem($item1);
433  $instance->addItem($item2);
434  $instance->addItem($item3);
435  $instance->addItem($item4);
436 
437  $expected = array( 0 => 3 );
438 
439  // Act
440  $actual = $instance->getBestSolutionIndexes();
441 
442  // Assert
443  $this->assertEquals($expected, $actual);
444  }
445 
447  {
448  $instance = new assClozeGap(0); // 0 - text gap
449  $item1 = new assAnswerCloze('Bert', 1.0, 0);
450  $item2 = new assAnswerCloze('Fred', 2.0, 2);
451  $item3 = new assAnswerCloze('Karl', 3.0, 1);
452  $item4 = new assAnswerCloze('Esther', 4.0, 3);
453 
454  $lng_mock = $this->createMock('ilLanguage', array('txt'), array(), '', false);
455  $lng_mock->expects($this->any())->method('txt')->will($this->returnValue('Test'));
456  global $DIC;
457  unset($DIC['lng']);
458  $DIC['lng'] = $lng_mock;
459  $GLOBALS['lng'] = $DIC['lng'];
460 
461  $instance->addItem($item1);
462  $instance->addItem($item2);
463  $instance->addItem($item3);
464  $instance->addItem($item4);
465 
466  $expected = 'Esther';
467 
468  // Act
469  $actual = $instance->getBestSolutionOutput($this->getDummyTransformationMock());
470 
471  // Assert
472  $this->assertEquals($expected, $actual);
473  }
474 
476  {
477  $instance = new assClozeGap(0); // 0 - text gap
478  $item1 = new assAnswerCloze('Bert', 1.0, 0);
479  $item2 = new assAnswerCloze('Fred', 2.0, 2);
480  $item3 = new assAnswerCloze('Karl', 4, 1);
481  $item4 = new assAnswerCloze('Esther', 4, 3);
482 
483  $lng_mock = $this->createMock('ilLanguage', array('txt'), array(), '', false);
484  $lng_mock->expects($this->any())->method('txt')->will($this->returnValue('or'));
485  global $DIC;
486  unset($DIC['lng']);
487  $DIC['lng'] = $lng_mock;
488  $GLOBALS['lng'] = $DIC['lng'];
489 
490  $instance->setShuffle(true);
491  $instance->addItem($item1);
492  $instance->addItem($item2);
493  $instance->addItem($item3);
494  $instance->addItem($item4);
495 
496  $expected1 = 'Karl or Esther';
497  $expected2 = 'Esther or Karl';
498 
499  // Act
500  $actual = $instance->getBestSolutionOutput($this->getDummyTransformationMock());
501 
502  // Assert
503  $this->assertTrue(($actual == $expected1) || ($actual == $expected2));
504  }
505 
507  {
508  // Arrange
509  $instance = new assClozeGap(2); // 0 - text gap
510  $item1 = new assAnswerCloze(10, 1.0, 0);
511  $item2 = new assAnswerCloze(20, 2.0, 2);
512  $item3 = new assAnswerCloze(30, 3.0, 1);
513  $item4 = new assAnswerCloze(100, 4.0, 3);
514 
515  $lng_mock = $this->createMock('ilLanguage', array('txt'), array(), '', false);
516  $lng_mock->expects($this->any())->method('txt')->will($this->returnValue('Test'));
517  global $DIC;
518  unset($DIC['lng']);
519  $DIC['lng'] = $lng_mock;
520  $GLOBALS['lng'] = $DIC['lng'];
521 
522  $instance->addItem($item1);
523  $instance->addItem($item2);
524  $instance->addItem($item3);
525  $instance->addItem($item4);
526 
527  $expected = 100;
528 
529  // Act
530  $actual = $instance->getBestSolutionOutput($this->getDummyTransformationMock());
531 
532  // Assert
533  $this->assertEquals($expected, $actual);
534  }
535 
537  {
538  $instance = new assClozeGap(11); // 0 - text gap
539  $item1 = new assAnswerCloze(10, 1.0, 0);
540  $item2 = new assAnswerCloze(20, 2.0, 2);
541  $item3 = new assAnswerCloze(30, 3.0, 1);
542  $item4 = new assAnswerCloze(100, 4.0, 3);
543 
544  $lng_mock = $this->createMock('ilLanguage', array('txt'), array(), '', false);
545  $lng_mock->expects($this->any())->method('txt')->will($this->returnValue('Test'));
546  global $DIC;
547  unset($DIC['lng']);
548  $DIC['lng'] = $lng_mock;
549  $GLOBALS['lng'] = $DIC['lng'];
550 
551  $instance->addItem($item1);
552  $instance->addItem($item2);
553  $instance->addItem($item3);
554  $instance->addItem($item4);
555 
556  $expected = '';
557 
558  // Act
559  $actual = $instance->getBestSolutionOutput($this->getDummyTransformationMock());
560 
561  // Assert
562  $this->assertEquals($expected, $actual);
563  }
564 
566  {
567  $transformationMock = $this->getMockBuilder(Transformation::class)->getMock();
568  $transformationMock->expects(self::any())->method('transform')->willReturnCallback(static function (array $array) {
569  return $array;
570  });
571 
572  return $transformationMock;
573  }
574 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
test_addGetItem_shouldReturnValueUnchanged()
test_getItemsWithShuffle_shouldReturnItemsAddedShuffled()
test_getMaxWidth_shouldReturnCharacterCountOfLongestAnswertext()
test_getBestSolutionOutput_shouldReturnBestSolutionOutput_CaseNumeric()
test_getBestSolutionOutput_shouldReturnBestSolutionOutput_CaseTextMulti()
test_instantiateObject_shouldReturnInstance()
Class assBaseTestCase.
test_setType_shouldSetDefaultIfNotPassed()
Class for cloze question gaps.
test_getItemsRaw_shouldReturnItemsAdded()
test_addGetItem_shouldReturnValueUnchangedMultiplePlus()
global $DIC
Definition: feed.php:28
test_setItemUpperBound_shouldSetItemsAnswerIfBoundTooLow()
$GLOBALS["DIC"]
Definition: wac.php:31
test_deleteItem_shouldDeleteGivenItem()
test_setItemLowerBound_shouldSetItemsLowerBound()
test_getItemCount_shouldReturnCorrectCount()
test_getBestSolutionIndexes_shouldReturnBestSolutionIndexes()
test_setItemUpperBound_shouldSetItemsUpperBound()
test_arrayShuffle_shouldNotReturnArrayUnshuffled()
test_getBestSolutionOutput_shouldReturnBestSolutionOutput_CaseText()
test_getItem_shouldReturnNullIfNoItemAtGivenIndex()
test_getItems_shouldReturnItemsAdded()
test_getBestSolutionOutput_shouldReturnEmptyStringOnUnknownType_WhichMakesNoSenseButK()
A transformation is a function from one datatype to another.
setGlobalVariable(string $name, $value)
test_addGetItem_shouldReturnValueUnchangedMultiple()
test_setItemLowerBound_shouldSetItemsAnswerIfBoundTooHigh()
test_setGetType_shouldReturnUnchangedValue()
test_setGetShuffle_shouldReturnUnchangedValue()