ILIAS  trunk Revision v11.0_alpha-1744-gb0451eebef4
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
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(__DIR__ . '/../../../../');
35 
36  parent::setUp();
37 
38  $util_mock = $this->createMock('ilUtil', ['stripSlashes'], [], '', false);
39  $util_mock->expects($this->any())->method('stripSlashes')->will($this->returnArgument(0));
40  $this->setGlobalVariable('ilUtils', $util_mock);
41  }
42 
44  {
45  $instance = new assClozeGap(0); // 0 - text gap
46 
47  $this->assertInstanceOf(assClozeGap::class, $instance);
48  }
49 
51  {
52  $instance = new assClozeGap(0); // 0 - text gap
53  $expected = 1; // 1 - select gap
54 
55  $instance->setType($expected);
56  $actual = $instance->getType();
57 
58  $this->assertEquals($expected, $actual);
59  }
60 
62  {
63  $instance = new assClozeGap(0); // 0 - text gap
64  $expected = 0; // 0 - text gap
65 
66  $instance->setType();
67  $actual = $instance->getType();
68 
69  $this->assertEquals($expected, $actual);
70  }
71 
73  {
74  $instance = new assClozeGap(0); // 0 - text gap
75  $expected = true;
76 
77  $instance->setShuffle($expected);
78  $actual = $instance->getShuffle();
79 
80  $this->assertEquals($expected, $actual);
81  }
82 
84  {
85  $instance = new assClozeGap(0); // 0 - text gap
86 
87  $the_unexpected = ['Killing', 'Kunkel', 'Luetzenkirchen',
88  'Meyer', 'Jansen', 'Heyser', 'Becker'];
89  $instance->items = $the_unexpected;
90  $instance->setShuffle(true);
91  $theExpected = ['hua', 'haaa', 'some random values'];
92 
93  $transformationMock = $this->getMockBuilder(Transformation::class)->getMock();
94  $transformationMock->expects(self::once())->method('transform')->with($the_unexpected)->willReturn($theExpected);
95  $actual = $instance->getItems($transformationMock);
96 
97  $this->assertEquals($theExpected, $actual);
98  }
99 
101  {
102  $instance = new assClozeGap(0); // 0 - text gap
103  $expected = new assAnswerCloze('Esther', 1.0, 0);
104 
105  $instance->addItem($expected);
106  $actual = $instance->getItem(0);
107 
108  $this->assertEquals($expected, $actual);
109  }
110 
112  {
113  $instance = new assClozeGap(0); // 0 - text gap
114  $answer = new assAnswerCloze('Bert', 1.0, 0);
115  $expected = new assAnswerCloze('Esther', 1.0, 0);
116 
117  $instance->addItem($answer);
118  $instance->addItem($expected);
119  $actual = $instance->getItem(0);
120 
121  $this->assertEquals($expected, $actual);
122  }
123 
125  {
126  $instance = new assClozeGap(0); // 0 - text gap
127  $answer1 = new assAnswerCloze('Bert', 1.0, 0);
128  $answer2 = new assAnswerCloze('Esther', 1.0, 1);
129 
130  $instance->addItem($answer1);
131  $instance->addItem($answer2);
132 
133  $expected = null;
134 
135  $actual = $instance->getItem(2);
136 
137  $this->assertEquals($expected, $actual);
138  }
139 
141  {
142  $instance = new assClozeGap(0); // 0 - text gap
143  $answer = new assAnswerCloze('Bert', 1.0, 1);
144  $answer2 = new assAnswerCloze('Fred', 1.0, 2);
145  $answer3 = new assAnswerCloze('Karl', 1.0, 3);
146  $expected = new assAnswerCloze('Esther', 1.0, 0);
147 
148  $instance->addItem($answer);
149  $instance->addItem($answer2);
150  $instance->addItem($answer3);
151  $instance->addItem($expected);
152  $actual = $instance->getItem(0);
153 
154  $this->assertEquals($expected, $actual);
155  }
156 
157  public function test_getItems_shouldReturnItemsAdded(): void
158  {
159  $instance = new assClozeGap(0); // 0 - text gap
160  $item1 = new assAnswerCloze('Bert', 1.0, 0);
161  $item2 = new assAnswerCloze('Fred', 1.0, 1);
162  $item3 = new assAnswerCloze('Karl', 1.0, 2);
163  $item4 = new assAnswerCloze('Esther', 1.0, 3);
164  $instance->setShuffle(false);
165  $expected = [$item1, $item2, $item3, $item4];
166  $instance->addItem($item1);
167  $instance->addItem($item2);
168  $instance->addItem($item3);
169  $instance->addItem($item4);
170  $transformationMock = $this->getMockBuilder(Transformation::class)->getMock();
171  $transformationMock->expects(self::never())->method('transform');
172  $actual = $instance->getItems($transformationMock);
173 
174  $this->assertEquals($expected, $actual);
175  }
176 
178  {
179  $instance = new assClozeGap(0); // 0 - text gap
180  $instance->setShuffle(true);
181  $expected = [
182  new assAnswerCloze('Bert', 1.0, 0),
183  new assAnswerCloze('Fred', 1.0, 1),
184  new assAnswerCloze('Karl', 1.0, 2),
185  new assAnswerCloze('Esther', 1.0, 3),
186  new assAnswerCloze('Herbert', 1.0, 4),
187  new assAnswerCloze('Karina', 1.0, 5),
188  new assAnswerCloze('Helmut', 1.0, 6),
189  new assAnswerCloze('Kerstin', 1.0, 7),
190  ];
191 
192  $shuffledArray = ['some shuffled array', 'these values dont matter'];
193 
194  foreach ($expected as $item) {
195  $instance->addItem($item);
196  }
197 
198  $transformationMock = $this->getMockBuilder(Transformation::class)->getMock();
199  $transformationMock->expects(self::once())->method('transform')->with($expected)->willReturn($shuffledArray);
200  $actual = $instance->getItems($transformationMock);
201 
202  $this->assertEquals($shuffledArray, $actual);
203  }
204 
206  {
207  $instance = new assClozeGap(0); // 0 - text gap
208  $item1 = new assAnswerCloze('Bert', 1.0, 0);
209  $item2 = new assAnswerCloze('Fred', 1.0, 1);
210  $item3 = new assAnswerCloze('Karl', 1.0, 2);
211  $item4 = new assAnswerCloze('Esther', 1.0, 3);
212  $expected = [$item1, $item2, $item3, $item4];
213 
214  $instance->addItem($item1);
215  $instance->addItem($item2);
216  $instance->addItem($item3);
217  $instance->addItem($item4);
218  $actual = $instance->getItemsRaw();
219 
220  $this->assertEquals($expected, $actual);
221  }
222 
224  {
225  $instance = new assClozeGap(0); // 0 - text gap
226  $item1 = new assAnswerCloze('Bert', 1.0, 0);
227  $item2 = new assAnswerCloze('Fred', 1.0, 2);
228  $item3 = new assAnswerCloze('Karl', 1.0, 1);
229  $item4 = new assAnswerCloze('Esther', 1.0, 3);
230  $expected = 4;
231 
232  $instance->addItem($item1);
233  $instance->addItem($item2);
234  $instance->addItem($item3);
235  $instance->addItem($item4);
236  $actual = $instance->getItemCount();
237 
238  $this->assertEquals($expected, $actual);
239  }
240 
241  public function test_setItemPoints_shouldSetItemPoints(): void
242  {
243  $instance = new assClozeGap(0); // 0 - text gap
244  $item1 = new assAnswerCloze('Esther', 1.0, 0);
245  $instance->addItem($item1);
246  $expected = 4;
247 
248  $instance->setItemPoints(0, $expected);
250  $item_retrieved = $instance->getItem(0);
251  $actual = $item_retrieved->getPoints();
252 
253  $this->assertEquals($expected, $actual);
254  }
255 
257  {
258  $instance = new assClozeGap(0); // 0 - text gap
259  $item1 = new assAnswerCloze('Bert', 1.0, 0);
260  $item2 = new assAnswerCloze('Fred', 1.0, 1);
261 
262  $instance->addItem($item1);
263  $instance->addItem($item2);
264 
265  $expected = ['1' => $item2];
266 
267  $instance->deleteItem(0);
268 
269  $actual = $instance->getItemsRaw();
270 
271  $this->assertEquals($expected, $actual);
272  }
273 
274  public function test_clearItems_shouldClearItems(): void
275  {
276  $instance = new assClozeGap(0); // 0 - text gap
277  $item1 = new assAnswerCloze('Bert', 1.0, 0);
278  $item2 = new assAnswerCloze('Fred', 1.0, 2);
279  $item3 = new assAnswerCloze('Karl', 1.0, 1);
280  $item4 = new assAnswerCloze('Esther', 1.0, 3);
281 
282  $instance->addItem($item1);
283  $instance->addItem($item2);
284  $instance->addItem($item3);
285  $instance->addItem($item4);
286 
287  $expected = 0;
288 
289  $instance->clearItems();
290  $actual = $instance->getItemCount();
291 
292  $this->assertEquals($expected, $actual);
293  }
294 
296  {
297  $instance = new assClozeGap(0); // 0 - text gap
298  $item1 = new assAnswerCloze(20, 1.0, 0);
299 
300  $instance->addItem($item1);
301 
302  $expected = 10;
303 
304  $instance->setItemLowerBound(0, $expected);
305  $item_retrieved = $instance->getItem(0);
306  $actual = $item_retrieved->getLowerBound();
307 
308  $this->assertEquals($expected, $actual);
309  }
310 
312  {
313  $instance = new assClozeGap(0); // 0 - text gap
314  $item1 = new assAnswerCloze(20, 1.0, 0);
315 
316  $instance->addItem($item1);
317 
318  $expected = 40;
319 
320  $instance->setItemLowerBound(0, $expected);
321  $item_retrieved = $instance->getItem(0);
322  $actual = $item_retrieved->getLowerBound();
323 
324  $this->assertNotEquals($expected, $actual);
325  $this->assertEquals($item_retrieved->getAnswerText(), $actual);
326  }
327 
329  {
330  $instance = new assClozeGap(0); // 0 - text gap
331  $item1 = new assAnswerCloze(5, 1.0, 0);
332 
333  $instance->addItem($item1);
334 
335  $expected = 10;
336 
337  $instance->setItemUpperBound(0, $expected);
338  $item_retrieved = $instance->getItem(0);
339  $actual = $item_retrieved->getUpperBound();
340 
341  $this->assertEquals($expected, $actual);
342  }
343 
345  {
346  $instance = new assClozeGap(0); // 0 - text gap
347  $item1 = new assAnswerCloze(20, 1.0, 0);
348 
349  $instance->addItem($item1);
350 
351  $expected = 10;
352 
353  $instance->setItemUpperBound(0, $expected);
354  $item_retrieved = $instance->getItem(0);
355  $actual = $item_retrieved->getUpperBound();
356 
357  $this->assertNotEquals($expected, $actual);
358  $this->assertEquals($item_retrieved->getAnswerText(), $actual);
359  }
360 
362  {
363  $instance = new assClozeGap(0); // 0 - text gap
364  $item1 = new assAnswerCloze('Bert', 1.0, 0);
365  $item2 = new assAnswerCloze('Fred', 1.0, 2);
366  $item3 = new assAnswerCloze('Karl', 1.0, 1);
367  $item4 = new assAnswerCloze('Esther', 1.0, 3);
368 
369  $instance->addItem($item1);
370  $instance->addItem($item2);
371  $instance->addItem($item3);
372  $instance->addItem($item4);
373 
374  $expected = strlen($item4->getAnswertext());
375 
376  $actual = $instance->getMaxWidth();
377 
378  $this->assertEquals($expected, $actual);
379  }
380 
382  {
383  $instance = new assClozeGap(0); // 0 - text gap
384  $item1 = new assAnswerCloze('Bert', 1.0, 0);
385  $item2 = new assAnswerCloze('Fred', 2.0, 2);
386  $item3 = new assAnswerCloze('Karl', 3.0, 1);
387  $item4 = new assAnswerCloze('Esther', 4.0, 3);
388 
389  $instance->addItem($item1);
390  $instance->addItem($item2);
391  $instance->addItem($item3);
392  $instance->addItem($item4);
393 
394  $expected = [ 0 => 3 ];
395 
396  $actual = $instance->getBestSolutionIndexes();
397 
398  $this->assertEquals($expected, $actual);
399  }
400 
402  {
403  $instance = new assClozeGap(0); // 0 - text gap
404  $item1 = new assAnswerCloze('Bert', 1.0, 0);
405  $item2 = new assAnswerCloze('Fred', 2.0, 2);
406  $item3 = new assAnswerCloze('Karl', 3.0, 1);
407  $item4 = new assAnswerCloze('Esther', 4.0, 3);
408 
409  $lng_mock = $this->createMock('ilLanguage', ['txt'], [], '', false);
410  $lng_mock->expects($this->any())->method('txt')->will($this->returnValue('Test'));
411  global $DIC;
412  unset($DIC['lng']);
413  $DIC['lng'] = $lng_mock;
414  $GLOBALS['lng'] = $DIC['lng'];
415 
416  $instance->addItem($item1);
417  $instance->addItem($item2);
418  $instance->addItem($item3);
419  $instance->addItem($item4);
420 
421  $expected = 'Esther';
422 
423  $actual = $instance->getBestSolutionOutput($this->getDummyTransformationMock());
424 
425  $this->assertEquals($expected, $actual);
426  }
427 
429  {
430  $instance = new assClozeGap(0); // 0 - text gap
431  $item1 = new assAnswerCloze('Bert', 1.0, 0);
432  $item2 = new assAnswerCloze('Fred', 2.0, 2);
433  $item3 = new assAnswerCloze('Karl', 4, 1);
434  $item4 = new assAnswerCloze('Esther', 4, 3);
435 
436  $lng_mock = $this->createMock('ilLanguage', ['txt'], [], '', false);
437  $lng_mock->expects($this->any())->method('txt')->will($this->returnValue('or'));
438  global $DIC;
439  unset($DIC['lng']);
440  $DIC['lng'] = $lng_mock;
441  $GLOBALS['lng'] = $DIC['lng'];
442 
443  $instance->setShuffle(true);
444  $instance->addItem($item1);
445  $instance->addItem($item2);
446  $instance->addItem($item3);
447  $instance->addItem($item4);
448 
449  $expected1 = 'Karl or Esther';
450  $expected2 = 'Esther or Karl';
451 
452  $actual = $instance->getBestSolutionOutput($this->getDummyTransformationMock());
453 
454  $this->assertTrue(($actual == $expected1) || ($actual == $expected2));
455  }
456 
458  {
459  $instance = new assClozeGap(2); // 0 - text gap
460  $item1 = new assAnswerCloze(10, 1.0, 0);
461  $item2 = new assAnswerCloze(20, 2.0, 2);
462  $item3 = new assAnswerCloze(30, 3.0, 1);
463  $item4 = new assAnswerCloze(100, 4.0, 3);
464 
465  $lng_mock = $this->createMock('ilLanguage', ['txt'], [], '', false);
466  $lng_mock->expects($this->any())->method('txt')->will($this->returnValue('Test'));
467  global $DIC;
468  unset($DIC['lng']);
469  $DIC['lng'] = $lng_mock;
470  $GLOBALS['lng'] = $DIC['lng'];
471 
472  $instance->addItem($item1);
473  $instance->addItem($item2);
474  $instance->addItem($item3);
475  $instance->addItem($item4);
476 
477  $expected = 100;
478 
479  $actual = $instance->getBestSolutionOutput($this->getDummyTransformationMock());
480 
481  $this->assertEquals($expected, $actual);
482  }
483 
485  {
486  $instance = new assClozeGap(11); // 0 - text gap
487  $item1 = new assAnswerCloze(10, 1.0, 0);
488  $item2 = new assAnswerCloze(20, 2.0, 2);
489  $item3 = new assAnswerCloze(30, 3.0, 1);
490  $item4 = new assAnswerCloze(100, 4.0, 3);
491 
492  $lng_mock = $this->createMock('ilLanguage', ['txt'], [], '', false);
493  $lng_mock->expects($this->any())->method('txt')->will($this->returnValue('Test'));
494  global $DIC;
495  unset($DIC['lng']);
496  $DIC['lng'] = $lng_mock;
497  $GLOBALS['lng'] = $DIC['lng'];
498 
499  $instance->addItem($item1);
500  $instance->addItem($item2);
501  $instance->addItem($item3);
502  $instance->addItem($item4);
503 
504  $expected = '';
505 
506  $actual = $instance->getBestSolutionOutput($this->getDummyTransformationMock());
507 
508  $this->assertEquals($expected, $actual);
509  }
510 
512  {
513  $transformationMock = $this->getMockBuilder(Transformation::class)->getMock();
514  $transformationMock->expects(self::any())->method('transform')->willReturnCallback(static function (array $array) {
515  return $array;
516  });
517 
518  return $transformationMock;
519  }
520 }
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()
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
test_setItemUpperBound_shouldSetItemsAnswerIfBoundTooLow()
$GLOBALS["DIC"]
Definition: wac.php:53
test_deleteItem_shouldDeleteGivenItem()
test_setItemLowerBound_shouldSetItemsLowerBound()
test_getItemCount_shouldReturnCorrectCount()
global $DIC
Definition: shib_login.php:22
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.
test_addGetItem_shouldReturnValueUnchangedMultiple()
test_setItemLowerBound_shouldSetItemsAnswerIfBoundTooHigh()
test_setGetType_shouldReturnUnchangedValue()
test_setGetShuffle_shouldReturnUnchangedValue()