‪TYPO3CMS  10.4
AbstractFinisherTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Prophecy\Argument;
21 use Prophecy\Prophecy\ObjectProphecy;
29 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
30 
34 class ‪AbstractFinisherTest extends UnitTestCase
35 {
40  {
41  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
42  AbstractFinisher::class,
43  [],
44  '',
45  false
46  );
47 
48  self::assertNull($mockAbstractFinisher->_call('parseOption', 'translation'));
49  }
50 
55  {
56  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
57  AbstractFinisher::class,
58  [],
59  '',
60  false
61  );
62 
63  $mockAbstractFinisher->_set('options', []);
64 
65  self::assertNull($mockAbstractFinisher->_call('parseOption', 'foo'));
66  }
67 
72  {
73  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
74  AbstractFinisher::class,
75  [],
76  '',
77  false
78  );
79 
80  $mockAbstractFinisher->_set('options', []);
81 
82  self::assertNull($mockAbstractFinisher->_call('parseOption', 'foo'));
83  }
84 
89  {
90  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
91  AbstractFinisher::class,
92  [],
93  '',
94  false
95  );
96 
97  $mockAbstractFinisher->_set('options', [
98  'foo1' => false,
99  ]);
100 
101  $expected = false;
102 
103  self::assertSame($expected, $mockAbstractFinisher->_call('parseOption', 'foo1'));
104  }
105 
110  {
111  $expected = 'defaultValue';
112 
113  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
114  AbstractFinisher::class,
115  [],
116  '',
117  false,
118  false,
119  true,
120  [
121  'translateFinisherOption'
122  ]
123  );
124 
125  $mockAbstractFinisher
126  ->expects(self::any())
127  ->method('translateFinisherOption')
128  ->willReturnArgument(0);
129 
130  $mockAbstractFinisher->_set('options', []);
131  $mockAbstractFinisher->_set('defaultOptions', [
132  'subject' => $expected
133  ]);
134 
135  $finisherContextProphecy = $this->prophesize(FinisherContext::class);
136 
137  $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
138  $formRuntimeProphecy->offsetExists(Argument::cetera())->willReturn(true);
139  $formRuntimeProphecy->offsetGet(Argument::cetera())->willReturn(null);
140 
141  $finisherContextProphecy->getFormRuntime(Argument::cetera())
142  ->willReturn($formRuntimeProphecy->reveal());
143  $finisherContextProphecy->getFinisherVariableProvider(Argument::cetera())
144  ->willReturn(new ‪FinisherVariableProvider());
145 
146  $mockAbstractFinisher->_set('finisherContext', $finisherContextProphecy->reveal());
147 
148  self::assertSame($expected, $mockAbstractFinisher->_call('parseOption', 'subject'));
149  }
150 
155  {
156  $elementIdentifier = 'element-identifier-1';
157  $expected = 'defaultValue';
158 
159  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
160  AbstractFinisher::class,
161  [],
162  '',
163  false,
164  false,
165  true,
166  [
167  'translateFinisherOption'
168  ]
169  );
170 
171  $mockAbstractFinisher
172  ->expects(self::any())
173  ->method('translateFinisherOption')
174  ->willReturnArgument(0);
175 
176  $mockAbstractFinisher->_set('options', [
177  'subject' => '{' . $elementIdentifier . '}'
178  ]);
179  $mockAbstractFinisher->_set('defaultOptions', [
180  'subject' => $expected
181  ]);
182 
183  $finisherContextProphecy = $this->prophesize(FinisherContext::class);
184 
185  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
186  $elementIdentifier => ''
187  ]);
188 
189  $finisherContextProphecy->getFormRuntime(Argument::cetera())
190  ->willReturn($formRuntimeProphecy->reveal());
191 
192  $mockAbstractFinisher->_set('finisherContext', $finisherContextProphecy->reveal());
193 
194  self::assertSame($expected, $mockAbstractFinisher->_call('parseOption', 'subject'));
195  }
196 
201  {
202  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
203  AbstractFinisher::class,
204  [],
205  '',
206  false,
207  false,
208  true,
209  [
210  'translateFinisherOption'
211  ]
212  );
213 
214  $elementIdentifier = 'element-identifier-1';
215  $elementValue = 'element-value-1';
216  $elementReferenceName = '{' . $elementIdentifier . '}';
217 
218  $translationValue = 'subject: ' . $elementReferenceName;
219  $expected = 'subject: ' . $elementValue;
220 
221  $mockAbstractFinisher
222  ->expects(self::any())
223  ->method('translateFinisherOption')
224  ->willReturn($translationValue);
225 
226  $mockAbstractFinisher->_set('options', [
227  'subject' => ''
228  ]);
229 
230  $finisherContextProphecy = $this->prophesize(FinisherContext::class);
231 
232  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
233  $elementIdentifier => $elementValue
234  ]);
235 
236  $finisherContextProphecy->getFormRuntime(Argument::cetera())
237  ->willReturn($formRuntimeProphecy->reveal());
238 
239  $mockAbstractFinisher->_set('finisherContext', $finisherContextProphecy->reveal());
240 
241  self::assertSame($expected, $mockAbstractFinisher->_call('parseOption', 'subject'));
242  }
243 
248  {
249  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
250  AbstractFinisher::class,
251  [],
252  '',
253  false
254  );
255 
256  $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
257 
258  $input = ['bar', 'foobar', ['x', 'y']];
259  $expected = ['bar', 'foobar', ['x', 'y']];
260 
261  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
262  }
263 
268  {
269  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
270  AbstractFinisher::class,
271  [],
272  '',
273  false
274  );
275 
276  $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
277 
278  $input = 'foobar';
279  $expected = 'foobar';
280 
281  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
282  }
283 
288  {
289  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
290  AbstractFinisher::class,
291  [],
292  '',
293  false
294  );
295 
296  $elementIdentifier = 'element-identifier-1';
297  $input = '{' . $elementIdentifier . '}';
298  $expected = 'element-value';
299 
300  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
301  $elementIdentifier => $expected
302  ]);
303 
304  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
305  }
306 
311  {
312  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
313  AbstractFinisher::class,
314  [],
315  '',
316  false
317  );
318 
319  $elementIdentifier1 = 'element-identifier-1';
320  $elementValue1 = 'element-value-1';
321  $elementIdentifier2 = 'element-identifier-2';
322  $elementValue2 = 'element-value-2';
323 
324  $input = '{' . $elementIdentifier1 . '},{' . $elementIdentifier2 . '}';
325  $expected = $elementValue1 . ',' . $elementValue2;
326 
327  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
328  $elementIdentifier1 => $elementValue1,
329  $elementIdentifier2 => $elementValue2
330  ]);
331 
332  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
333  }
334 
339  {
340  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
341  AbstractFinisher::class,
342  [],
343  '',
344  false
345  );
346 
347  $elementIdentifier = 'element-identifier-1';
348  $input = '{' . $elementIdentifier . '}';
349  $expected = ['bar', 'foobar'];
350 
351  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
352  $elementIdentifier => $expected
353  ]);
354 
355  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
356  }
357 
362  {
363  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
364  AbstractFinisher::class,
365  [],
366  '',
367  false
368  );
369 
370  $elementIdentifier1 = 'element-identifier-1';
371  $elementValue1 = ['klaus', 'fritz'];
372  $elementIdentifier2 = 'element-identifier-2';
373  $elementValue2 = ['stan', 'steve'];
374 
375  $input = [
376  '{' . $elementIdentifier1 . '}',
377  'static value',
378  'norbert' => [
379  'lisa',
380  '{' . $elementIdentifier1 . '}',
381  '{' . $elementIdentifier2 . '}',
382  ],
383  ];
384  $expected = [
385  ['klaus', 'fritz'],
386  'static value',
387  'norbert' => [
388  'lisa',
389  ['klaus', 'fritz'],
390  ['stan', 'steve'],
391  ]
392  ];
393 
394  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
395  $elementIdentifier1 => $elementValue1,
396  $elementIdentifier2 => $elementValue2
397  ]);
398 
399  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
400  }
401 
406  {
407  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
408  AbstractFinisher::class,
409  [],
410  '',
411  false
412  );
413 
414  $elementIdentifier = 'element-identifier-1';
415  $input = '{' . $elementIdentifier . '}';
416  $expected = '{' . $elementIdentifier . '}';
417 
418  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
419  $elementIdentifier => $expected
420  ]);
421 
422  $finisherContextProphecy = $this->prophesize(FinisherContext::class);
423  $finisherContextProphecy->getFinisherVariableProvider(Argument::cetera())->willReturn(new ‪FinisherVariableProvider());
424  $mockAbstractFinisher->_set('finisherContext', $finisherContextProphecy->reveal());
425 
426  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
427  }
428 
433  {
434  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
435  AbstractFinisher::class,
436  [],
437  '',
438  false
439  );
440 
441  $input = '{__currentTimestamp}';
442  $expected = '#^([0-9]{10})$#';
443 
444  $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
445 
446  self::assertEquals(1, preg_match($expected, (string)$mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal())));
447  }
448 
453  {
454  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
455  AbstractFinisher::class,
456  [],
457  '',
458  false
459  );
460 
461  $elementIdentifier1 = 'element-identifier-1';
462  $elementValue1 = 'norbert';
463  $elementIdentifier2 = 'element-identifier-2';
464  $elementValue2 = ['stan', 'steve'];
465 
466  $input = [
467  '{' . $elementIdentifier1 . '}' => [
468  'lisa',
469  '{' . $elementIdentifier2 . '}',
470  ],
471  ];
472  $expected = [
473  'norbert' => [
474  'lisa',
475  ['stan', 'steve'],
476  ]
477  ];
478 
479  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
480  $elementIdentifier1 => $elementValue1,
481  $elementIdentifier2 => $elementValue2
482  ]);
483 
484  self::assertSame($expected, $mockAbstractFinisher->_call('substituteRuntimeReferences', $input, $formRuntimeProphecy->reveal()));
485  }
486 
491  {
492  $date = new \DateTime('@1574415600');
493  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
494  'date-1' => $date,
495  ]);
496 
497  $stringableElement = new class() implements ‪StringableFormElementInterface {
501  public function valueToString($value): string
502  {
503  return $value->format('Y-m-d');
504  }
505  };
506  $formDefinitionProphecy = $this->prophesize(FormDefinition::class);
507  $formDefinitionProphecy->getElementByIdentifier('date-1')->willReturn($stringableElement);
508  $formRuntimeProphecy->getFormDefinition()->willReturn($formDefinitionProphecy->reveal());
509 
510  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
511  AbstractFinisher::class,
512  [],
513  '',
514  false
515  );
516  $result = $mockAbstractFinisher->_call(
517  'substituteRuntimeReferences',
518  'When: {date-1}',
519  $formRuntimeProphecy->reveal()
520  );
521 
522  self::assertSame('When: 2019-11-22', $result);
523  }
524 
529  {
530  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
531  'date-1' => new \DateTime(),
532  ]);
533 
534  $formDefinitionProphecy = $this->prophesize(FormDefinition::class);
535  $formDefinitionProphecy->getElementByIdentifier('date-1')->willReturn($this->prophesize(FormElementInterface::class)->reveal());
536  $formRuntimeProphecy->getFormDefinition()->willReturn($formDefinitionProphecy->reveal());
537 
538  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
539  AbstractFinisher::class,
540  [],
541  '',
542  false
543  );
544 
545  $this->expectException(FinisherException::class);
546  $this->expectExceptionCode(1574362327);
547 
548  $mockAbstractFinisher->_call(
549  'substituteRuntimeReferences',
550  'When: {date-1}',
551  $formRuntimeProphecy->reveal()
552  );
553  }
554 
559  {
560  $mockAbstractFinisher = $this->getAccessibleMockForAbstractClass(
561  AbstractFinisher::class,
562  [],
563  '',
564  false
565  );
566 
567  $elementIdentifier = 'element-identifier-1';
568  $input = 'BEFORE {' . $elementIdentifier . '} AFTER';
569 
570  $formRuntimeProphecy = $this->‪createFormRuntimeProphecy([
571  $elementIdentifier => ['value-1', 'value-2']
572  ]);
573 
574  $finisherContextProphecy = $this->prophesize(FinisherContext::class);
575  $finisherContextProphecy->getFinisherVariableProvider(Argument::cetera())->willReturn(new ‪FinisherVariableProvider());
576  $mockAbstractFinisher->_set('finisherContext', $finisherContextProphecy->reveal());
577 
578  $this->expectException(FinisherException::class);
579  $this->expectExceptionCode(1519239265);
580 
581  $mockAbstractFinisher->_call(
582  'substituteRuntimeReferences',
583  $input,
584  $formRuntimeProphecy->reveal()
585  );
586  }
587 
592  protected function ‪createFormRuntimeProphecy(array $values)
593  {
595  $formRuntimeProphecy = $this->prophesize(FormRuntime::class);
596  foreach ($values as $key => $value) {
597  $formRuntimeProphecy->offsetExists(Argument::exact($key))->willReturn(true);
598  $formRuntimeProphecy->offsetGet(Argument::exact($key))->willReturn($value);
599  }
600  return $formRuntimeProphecy;
601  }
602 }
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime
Definition: FormRuntime.php:103
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputIsArrayAndSomeItemsReferenceAFormElementIdentifierWhoseValueIsAnArray
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputIsArrayAndSomeItemsReferenceAFormElementIdentifierWhoseValueIsAnArray()
Definition: AbstractFinisherTest.php:361
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsStringIfInputIsString
‪substituteRuntimeReferencesReturnsStringIfInputIsString()
Definition: AbstractFinisherTest.php:267
‪TYPO3\CMS\Form\Domain\Finishers\FinisherVariableProvider
Definition: FinisherVariableProvider.php:31
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceMultipleFormElementIdentifierWhoseValueIsAString
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceMultipleFormElementIdentifierWhoseValueIsAString()
Definition: AbstractFinisherTest.php:310
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesConvertsObjectsToString
‪substituteRuntimeReferencesConvertsObjectsToString()
Definition: AbstractFinisherTest.php:490
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsNoReplacedValueIfInputReferenceANonExistingFormElement
‪substituteRuntimeReferencesReturnsNoReplacedValueIfInputReferenceANonExistingFormElement()
Definition: AbstractFinisherTest.php:405
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAString
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAString()
Definition: AbstractFinisherTest.php:287
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\createFormRuntimeProphecy
‪ObjectProphecy FormRuntime createFormRuntimeProphecy(array $values)
Definition: AbstractFinisherTest.php:592
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsNullIfOptionNameNotExistsWithinDefaultOptions
‪parseOptionReturnsNullIfOptionNameNotExistsWithinDefaultOptions()
Definition: AbstractFinisherTest.php:71
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsResolvesElementIdentifiersInArrayKeys
‪substituteRuntimeReferencesReturnsResolvesElementIdentifiersInArrayKeys()
Definition: AbstractFinisherTest.php:452
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesThrowsExceptionOnMultipleVariablesResolvedAsArray
‪substituteRuntimeReferencesThrowsExceptionOnMultipleVariablesResolvedAsArray()
Definition: AbstractFinisherTest.php:558
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsArrayIfInputIsArray
‪substituteRuntimeReferencesReturnsArrayIfInputIsArray()
Definition: AbstractFinisherTest.php:247
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsNullIfOptionNameNotExistsWithinOptions
‪parseOptionReturnsNullIfOptionNameNotExistsWithinOptions()
Definition: AbstractFinisherTest.php:54
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAnArray
‪substituteRuntimeReferencesReturnsValueFromFormRuntimeIfInputReferenceAFormElementIdentifierWhoseValueIsAnArray()
Definition: AbstractFinisherTest.php:338
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsDefaultOptionValueIfOptionNameNotExistsWithinOptionsButWithinDefaultOptions
‪parseOptionReturnsDefaultOptionValueIfOptionNameNotExistsWithinOptionsButWithinDefaultOptions()
Definition: AbstractFinisherTest.php:109
‪TYPO3\CMS\Form\Domain\Finishers\AbstractFinisher
Definition: AbstractFinisher.php:41
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsNullIfOptionNameIsTranslation
‪parseOptionReturnsNullIfOptionNameIsTranslation()
Definition: AbstractFinisherTest.php:39
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsBoolOptionValuesAsBool
‪parseOptionReturnsBoolOptionValuesAsBool()
Definition: AbstractFinisherTest.php:88
‪TYPO3\CMS\Form\Domain\Finishers\Exception\FinisherException
Definition: FinisherException.php:26
‪TYPO3\CMS\Form\Domain\Model\FormElements\StringableFormElementInterface
Definition: StringableFormElementInterface.php:30
‪TYPO3\CMS\Form\Domain\Finishers\FinisherContext
Definition: FinisherContext.php:37
‪TYPO3\CMS\Form\Domain\Model\FormDefinition
Definition: FormDefinition.php:223
‪TYPO3\CMS\Form\Domain\Runtime\FormRuntime
Definition: FormSession.php:18
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesThrowsExceptionOnObjectWithoutStringableElement
‪substituteRuntimeReferencesThrowsExceptionOnObjectWithoutStringableElement()
Definition: AbstractFinisherTest.php:528
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest
Definition: AbstractFinisherTest.php:35
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionResolvesFormElementReferenceFromTranslation
‪parseOptionResolvesFormElementReferenceFromTranslation()
Definition: AbstractFinisherTest.php:200
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\parseOptionReturnsDefaultOptionValueIfOptionValueIsAFormElementReferenceAndTheFormElementValueIsEmpty
‪parseOptionReturnsDefaultOptionValueIfOptionValueIsAFormElementReferenceAndTheFormElementValueIsEmpty()
Definition: AbstractFinisherTest.php:154
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers
Definition: AbstractFinisherTest.php:18
‪TYPO3\CMS\Form\Tests\Unit\Domain\Finishers\AbstractFinisherTest\substituteRuntimeReferencesReturnsTimestampIfInputIsATimestampRequestTrigger
‪substituteRuntimeReferencesReturnsTimestampIfInputIsATimestampRequestTrigger()
Definition: AbstractFinisherTest.php:432