2 namespace TYPO3\CMS\Backend\Tests\Unit\Form;
17 use TYPO3\CMS\Backend\Form\Element;
18 use TYPO3\CMS\Core\Tests\UnitTestCase;
35 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
51 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
67 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
83 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
99 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
116 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
120 'class' =>
'fooClass',
125 'class' =>
'barClass',
138 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
154 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
170 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
186 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
202 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
219 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
223 'class' =>
'fooClass',
228 'class' =>
'barClass',
239 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
243 'class' =>
'fooClass',
248 'class' =>
'barClass',
262 $subject->create(array());
270 public function createThrowsExceptionIfNodeDoesNotImplementNodeInterface()
272 $mockNode = new \stdClass();
274 $mockSubject = $this->getMock(NodeFactory::class, array(
'instantiate'), array(),
'',
false);
275 $mockSubject->expects($this->once())->method(
'instantiate')->will($this->returnValue($mockNode));
276 $mockSubject->create(array(
'renderType' =>
'foo'));
285 $this->assertInstanceOf(Element\UnknownElement::class, $subject->create(array(
'renderType' =>
'foo')));
295 'renderType' =>
'selectTree',
298 $this->assertInstanceOf(Element\SelectTreeElement::class, $subject->create($data));
308 'renderType' =>
'selectSingle',
309 'parameterArray' => array(
310 'fieldConf' => array(
318 $this->assertInstanceOf(Element\SelectSingleElement::class, $subject->create($data));
324 public function createInstantiatesNewRegisteredElement()
326 $data = array(
'renderType' =>
'foo');
327 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
331 'class' => \stdClass::class,
334 $mockNode = $this->getMock(NodeInterface::class, array(), array(),
'',
false);
336 $mockSubject = $this->getMock(NodeFactory::class, array(
'instantiate'));
337 $mockSubject->expects($this->once())->method(
'instantiate')->with(
'stdClass')->will($this->returnValue($mockNode));
338 $mockSubject->create($data);
344 public function createInstantiatesElementRegisteredWithHigherPriorityWithOneGivenOrder()
346 $data = array(
'renderType' =>
'foo');
347 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
351 'class' =>
'foo1Class',
356 'class' =>
'foo2Class',
359 $mockNode = $this->getMock(NodeInterface::class, array(), array(),
'',
false);
361 $mockSubject = $this->getMock(NodeFactory::class, array(
'instantiate'));
362 $mockSubject->expects($this->once())->method(
'instantiate')->with(
'foo2Class')->will($this->returnValue($mockNode));
363 $mockSubject->create($data);
369 public function createInstantiatesElementRegisteredWithHigherPriorityWithOtherGivenOrder()
371 $data = array(
'renderType' =>
'foo');
372 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
376 'class' =>
'foo2Class',
381 'class' =>
'foo1Class',
384 $mockNode = $this->getMock(NodeInterface::class, array(), array(),
'',
false);
386 $mockSubject = $this->getMock(NodeFactory::class, array(
'instantiate'));
387 $mockSubject->expects($this->once())->method(
'instantiate')->with(
'foo2Class')->will($this->returnValue($mockNode));
388 $mockSubject->create($data);
396 public function createThrowsExceptionIfResolverDoesNotImplementNodeResolverInterface()
398 $data = array(
'renderType' =>
'foo');
399 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
403 'class' =>
'fooClass',
406 $mockResolver = $this->getMock(\stdClass::class);
409 $mockSubject = $this->getMock(NodeFactory::class, array(
'instantiate'));
410 $mockSubject->expects($this->at(0))->method(
'instantiate')->will($this->returnValue($mockResolver));
411 $mockSubject->create($data);
417 public function createInstantiatesResolverWithHighestPriorityFirstWithOneGivenOrder()
419 $data = array(
'renderType' =>
'foo');
420 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
424 'class' => \stdClass::class,
427 $mockNode = $this->getMock(NodeInterface::class, array(), array(),
'',
false);
429 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
433 'class' =>
'foo1Class',
438 'class' =>
'foo2Class',
441 $mockResolver1 = $this->getMock(NodeResolverInterface::class);
442 $mockResolver2 = $this->getMock(NodeResolverInterface::class);
445 $mockSubject = $this->getMock(NodeFactory::class, array(
'instantiate'));
446 $mockSubject->expects($this->at(0))->method(
'instantiate')->with(
'foo2Class')->will($this->returnValue($mockResolver2));
447 $mockSubject->expects($this->at(1))->method(
'instantiate')->with(
'foo1Class')->will($this->returnValue($mockResolver1));
448 $mockSubject->expects($this->at(2))->method(
'instantiate')->will($this->returnValue($mockNode));
449 $mockSubject->create($data);
455 public function createInstantiatesResolverWithHighestPriorityFirstWithOtherGivenOrder()
457 $data = array(
'renderType' =>
'foo');
458 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
462 'class' => \stdClass::class,
465 $mockNode = $this->getMock(NodeInterface::class, array(), array(),
'',
false);
467 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
471 'class' =>
'foo1Class',
476 'class' =>
'foo2Class',
479 $mockResolver1 = $this->getMock(NodeResolverInterface::class);
480 $mockResolver2 = $this->getMock(NodeResolverInterface::class);
483 $mockSubject = $this->getMock(NodeFactory::class, array(
'instantiate'));
484 $mockSubject->expects($this->at(0))->method(
'instantiate')->with(
'foo1Class')->will($this->returnValue($mockResolver1));
485 $mockSubject->expects($this->at(1))->method(
'instantiate')->with(
'foo2Class')->will($this->returnValue($mockResolver2));
486 $mockSubject->expects($this->at(2))->method(
'instantiate')->will($this->returnValue($mockNode));
487 $mockSubject->create($data);
493 public function createInstantiatesNodeClassReturnedByResolver()
495 $data = array(
'renderType' =>
'foo');
496 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
500 'class' => \stdClass::class,
503 $mockNode = $this->getMock(NodeInterface::class, array(), array(),
'',
false);
505 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
509 'class' =>
'foo1Class',
512 $mockResolver1 = $this->getMock(NodeResolverInterface::class);
513 $mockResolver1->expects($this->once())->method(
'resolve')->will($this->returnValue(
'fooNodeClass'));
516 $mockSubject = $this->getMock(NodeFactory::class, array(
'instantiate'));
517 $mockSubject->expects($this->at(0))->method(
'instantiate')->will($this->returnValue($mockResolver1));
518 $mockSubject->expects($this->at(1))->method(
'instantiate')->with(
'fooNodeClass')->will($this->returnValue($mockNode));
519 $mockSubject->create($data);
525 public function createDoesNotCallSecondResolverWithLowerPriorityIfFirstResolverReturnedClassName()
527 $data = array(
'renderType' =>
'foo');
528 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeRegistry'] = array(
532 'class' => \stdClass::class,
535 $mockNode = $this->getMock(NodeInterface::class, array(), array(),
'',
false);
537 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'formEngine'][
'nodeResolver'] = array(
541 'class' =>
'foo1Class',
546 'class' =>
'foo2Class',
549 $mockResolver1 = $this->getMock(NodeResolverInterface::class);
550 $mockResolver1->expects($this->once())->method(
'resolve')->will($this->returnValue(
'fooNodeClass'));
553 $mockSubject = $this->getMock(NodeFactory::class, array(
'instantiate'));
554 $mockSubject->expects($this->at(0))->method(
'instantiate')->with(
'foo1Class')->will($this->returnValue($mockResolver1));
555 $mockSubject->expects($this->at(1))->method(
'instantiate')->with(
'fooNodeClass')->will($this->returnValue($mockNode));
556 $mockSubject->create($data);