/Tests/Unit/Object/Configuration/ConfigurationBuilderTest.php

https://github.com/arbyte/FLOW3-X-TYPO3.FLOW3 · PHP · 132 lines · 79 code · 21 blank · 32 comment · 0 complexity · 4451a700cc57b735313e069f06e7ea2d MD5 · raw file

  1. <?php
  2. namespace TYPO3\FLOW3\Tests\Unit\Object\Configuration;
  3. /* *
  4. * This script belongs to the FLOW3 framework. *
  5. * *
  6. * It is free software; you can redistribute it and/or modify it under *
  7. * the terms of the GNU Lesser General Public License, either version 3 *
  8. * of the License, or (at your option) any later version. *
  9. * *
  10. * The TYPO3 project - inspiring people to share! *
  11. * */
  12. /**
  13. * Testcase for the object configuration builder
  14. *
  15. */
  16. class ConfigurationBuilderTest extends \TYPO3\FLOW3\Tests\UnitTestCase {
  17. /**
  18. * @test
  19. */
  20. public function allBasicOptionsAreSetCorrectly() {
  21. $factoryObjectName = 'ConfigurationBuilderTest' . md5(uniqid(mt_rand(), TRUE));
  22. eval('class ' . $factoryObjectName . ' { public function manufacture() {} } ');
  23. $configurationArray = array();
  24. $configurationArray['scope'] = 'prototype';
  25. $configurationArray['className'] = __CLASS__;
  26. $configurationArray['factoryObjectName'] = $factoryObjectName;
  27. $configurationArray['factoryMethodName'] = 'manufacture';
  28. $configurationArray['lifecycleInitializationMethodName'] = 'initializationMethod';
  29. $configurationArray['lifecycleShutdownMethodName'] = 'shutdownMethod';
  30. $configurationArray['autowiring'] = FALSE;
  31. $objectConfiguration = new \TYPO3\FLOW3\Object\Configuration\Configuration('TestObject', __CLASS__);
  32. $objectConfiguration->setScope(\TYPO3\FLOW3\Object\Configuration\Configuration::SCOPE_PROTOTYPE);
  33. $objectConfiguration->setClassName(__CLASS__);
  34. $objectConfiguration->setFactoryObjectName($factoryObjectName);
  35. $objectConfiguration->setFactoryMethodName('manufacture');
  36. $objectConfiguration->setLifecycleInitializationMethodName('initializationMethod');
  37. $objectConfiguration->setLifecycleShutdownMethodName('shutdownMethod');
  38. $objectConfiguration->setAutowiring(\TYPO3\FLOW3\Object\Configuration\Configuration::AUTOWIRING_MODE_OFF);
  39. $configurationBuilder = $this->getAccessibleMock('TYPO3\FLOW3\Object\Configuration\ConfigurationBuilder', array('dummy'));
  40. $builtObjectConfiguration = $configurationBuilder->_call('parseConfigurationArray', 'TestObject', $configurationArray, __CLASS__);
  41. $this->assertEquals($objectConfiguration, $builtObjectConfiguration, 'The manually created and the built object configuration don\'t match.');
  42. }
  43. /**
  44. * @test
  45. */
  46. public function argumentsOfTypeObjectCanSpecifyAdditionalObjectConfigurationOptions() {
  47. $configurationArray = array();
  48. $configurationArray['arguments'][1]['object']['name'] = 'Foo';
  49. $configurationArray['arguments'][1]['object']['className'] = __CLASS__;
  50. $argumentObjectConfiguration = new \TYPO3\FLOW3\Object\Configuration\Configuration('Foo', __CLASS__);
  51. $argumentObjectConfiguration->setConfigurationSourceHint(__CLASS__ . ', argument "1"');
  52. $objectConfiguration = new \TYPO3\FLOW3\Object\Configuration\Configuration('TestObject', 'TestObject');
  53. $objectConfiguration->setArgument(new \TYPO3\FLOW3\Object\Configuration\ConfigurationArgument(1, $argumentObjectConfiguration, \TYPO3\FLOW3\Object\Configuration\ConfigurationArgument::ARGUMENT_TYPES_OBJECT));
  54. $configurationBuilder = $this->getAccessibleMock('TYPO3\FLOW3\Object\Configuration\ConfigurationBuilder', array('dummy'));
  55. $builtObjectConfiguration = $configurationBuilder->_call('parseConfigurationArray', 'TestObject', $configurationArray, __CLASS__);
  56. $this->assertEquals($objectConfiguration, $builtObjectConfiguration);
  57. }
  58. /**
  59. * @test
  60. */
  61. public function propertiesOfTypeObjectCanSpecifyAdditionalObjectConfigurationOptions() {
  62. $configurationArray = array();
  63. $configurationArray['properties']['theProperty']['object']['name'] = 'Foo';
  64. $configurationArray['properties']['theProperty']['object']['className'] = __CLASS__;
  65. $propertyObjectConfiguration = new \TYPO3\FLOW3\Object\Configuration\Configuration('Foo', __CLASS__);
  66. $propertyObjectConfiguration->setConfigurationSourceHint(__CLASS__ . ', property "theProperty"');
  67. $objectConfiguration = new \TYPO3\FLOW3\Object\Configuration\Configuration('TestObject', 'TestObject');
  68. $objectConfiguration->setProperty(new \TYPO3\FLOW3\Object\Configuration\ConfigurationProperty('theProperty', $propertyObjectConfiguration, \TYPO3\FLOW3\Object\Configuration\ConfigurationProperty::PROPERTY_TYPES_OBJECT));
  69. $configurationBuilder = $this->getAccessibleMock('TYPO3\FLOW3\Object\Configuration\ConfigurationBuilder', array('dummy'));
  70. $builtObjectConfiguration = $configurationBuilder->_call('parseConfigurationArray', 'TestObject', $configurationArray, __CLASS__);
  71. $this->assertEquals($objectConfiguration, $builtObjectConfiguration);
  72. }
  73. /**
  74. * @test
  75. */
  76. public function itIsPossibleToPassArraysAsStraightArgumentOrPropertyValues() {
  77. $configurationArray = array();
  78. $configurationArray['properties']['straightValueProperty']['value'] = array('foo' => 'bar', 'object' => 'nö');
  79. $configurationArray['arguments'][1]['value'] = array('foo' => 'bar', 'object' => 'nö');
  80. $objectConfiguration = new \TYPO3\FLOW3\Object\Configuration\Configuration('TestObject', 'TestObject');
  81. $objectConfiguration->setProperty(new \TYPO3\FLOW3\Object\Configuration\ConfigurationProperty('straightValueProperty', array('foo' => 'bar', 'object' => 'nö')));
  82. $objectConfiguration->setArgument(new \TYPO3\FLOW3\Object\Configuration\ConfigurationArgument(1, array('foo' => 'bar', 'object' => 'nö')));
  83. $configurationBuilder = $this->getAccessibleMock('TYPO3\FLOW3\Object\Configuration\ConfigurationBuilder', array('dummy'));
  84. $builtObjectConfiguration = $configurationBuilder->_call('parseConfigurationArray', 'TestObject', $configurationArray, __CLASS__);
  85. $this->assertEquals($objectConfiguration, $builtObjectConfiguration);
  86. }
  87. /**
  88. * @test
  89. */
  90. public function settingsCanBeInjectedAsArgumentOrProperty() {
  91. $configurationArray = array();
  92. $configurationArray['arguments'][1]['setting'] = 'TYPO3.Foo.Bar';
  93. $configurationArray['properties']['someProperty']['setting'] = 'TYPO3.Bar.Baz';
  94. $objectConfiguration = new \TYPO3\FLOW3\Object\Configuration\Configuration('TestObject', 'TestObject');
  95. $objectConfiguration->setArgument(new \TYPO3\FLOW3\Object\Configuration\ConfigurationArgument(1, 'TYPO3.Foo.Bar', \TYPO3\FLOW3\Object\Configuration\ConfigurationProperty::PROPERTY_TYPES_SETTING));
  96. $objectConfiguration->setProperty(new \TYPO3\FLOW3\Object\Configuration\ConfigurationProperty('someProperty', 'TYPO3.Bar.Baz', \TYPO3\FLOW3\Object\Configuration\ConfigurationProperty::PROPERTY_TYPES_SETTING));
  97. $configurationBuilder = $this->getAccessibleMock('TYPO3\FLOW3\Object\Configuration\ConfigurationBuilder', array('dummy'));
  98. $builtObjectConfiguration = $configurationBuilder->_call('parseConfigurationArray', 'TestObject', $configurationArray, __CLASS__);
  99. $this->assertEquals($objectConfiguration, $builtObjectConfiguration);
  100. }
  101. /**
  102. * @test
  103. * @expectedException \TYPO3\FLOW3\Object\Exception\InvalidObjectConfigurationException
  104. */
  105. public function invalidOptionResultsInException() {
  106. $configurationArray = array('scoopy' => 'prototype');
  107. $configurationBuilder = $this->getAccessibleMock('TYPO3\FLOW3\Object\Configuration\ConfigurationBuilder', array('dummy'));
  108. $configurationBuilder->_call('parseConfigurationArray', 'TestObject', $configurationArray, __CLASS__);
  109. }
  110. }
  111. ?>