diff --git a/typo3/sysext/core/Classes/Utility/ClassNamingUtility.php b/typo3/sysext/core/Classes/Utility/ClassNamingUtility.php index 9ba293045ef093924940a1b725e90c2d22c348ea..629c49f1fd7b4ff9abd6979cd3c48da309750316 100644 --- a/typo3/sysext/core/Classes/Utility/ClassNamingUtility.php +++ b/typo3/sysext/core/Classes/Utility/ClassNamingUtility.php @@ -34,8 +34,8 @@ class ClassNamingUtility public static function translateModelNameToRepositoryName($modelName) { return str_replace( - ['\\Domain\\Model', '_Domain_Model_'], - ['\\Domain\\Repository', '_Domain_Repository_'], + '\\Domain\\Model', + '\\Domain\\Repository', $modelName ) . 'Repository'; } @@ -51,8 +51,8 @@ class ClassNamingUtility public static function translateModelNameToValidatorName($modelName) { return str_replace( - ['\\Domain\\Model\\', '_Domain_Model_'], - ['\\Domain\\Validator\\', '_Domain_Validator_'], + '\\Domain\\Model\\', + '\\Domain\\Validator\\', $modelName ) . 'Validator'; } @@ -68,8 +68,8 @@ class ClassNamingUtility public static function translateRepositoryNameToModelName($repositoryName) { return preg_replace( - ['/\\\\Domain\\\\Repository/', '/_Domain_Repository_/', '/Repository$/'], - ['\\Domain\\Model', '_Domain_Model_', ''], + ['/\\\\Domain\\\\Repository/', '/Repository$/'], + ['\\Domain\\Model', ''], $repositoryName ); } @@ -85,26 +85,18 @@ class ClassNamingUtility { $matches = []; - if (strpos($controllerObjectName, '\\') !== false) { - if (substr($controllerObjectName, 0, 9) === 'TYPO3\\CMS') { - $extensionName = '^(?P<vendorName>[^\\\\]+\\\[^\\\\]+)\\\(?P<extensionName>[^\\\\]+)'; - } else { - $extensionName = '^(?P<vendorName>[^\\\\]+)\\\\(?P<extensionName>[^\\\\]+)'; - } - - preg_match( - '/' . $extensionName . '\\\\(Controller|Command|(?P<subpackageKey>.+)\\\\Controller)\\\\(?P<controllerName>[a-z\\\\]+)Controller$/ix', - $controllerObjectName, - $matches - ); + if (substr($controllerObjectName, 0, 9) === 'TYPO3\\CMS') { + $extensionName = '^(?P<vendorName>[^\\\\]+\\\[^\\\\]+)\\\(?P<extensionName>[^\\\\]+)'; } else { - preg_match( - '/^Tx_(?P<extensionName>[^_]+)_(Controller|Command|(?P<subpackageKey>.+)_Controller)_(?P<controllerName>[a-z_]+)Controller$/ix', - $controllerObjectName, - $matches - ); + $extensionName = '^(?P<vendorName>[^\\\\]+)\\\\(?P<extensionName>[^\\\\]+)'; } + preg_match( + '/' . $extensionName . '\\\\(Controller|Command|(?P<subpackageKey>.+)\\\\Controller)\\\\(?P<controllerName>[a-z\\\\]+)Controller$/ix', + $controllerObjectName, + $matches + ); + return array_filter($matches, 'is_string', ARRAY_FILTER_USE_KEY); } } diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-85036-RemoveSupportForNonNamespacedClassesInExtbase.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-85036-RemoveSupportForNonNamespacedClassesInExtbase.rst new file mode 100644 index 0000000000000000000000000000000000000000..1eaf3ea737c288bd6bf51446c991e62a2990d99b --- /dev/null +++ b/typo3/sysext/core/Documentation/Changelog/master/Breaking-85036-RemoveSupportForNonNamespacedClassesInExtbase.rst @@ -0,0 +1,39 @@ +.. include:: ../../Includes.txt + +======================================================================== +Breaking: #85036 - Removed support for non-namespaced classes in Extbase +======================================================================== + +See :issue:`85036` + +Description +=========== + +Non-namespaced classes like :php:`Tx_Extension_Controller_FooController` are not supported any more +and all magic based on class names no longer works with classes like these: + +* Translating model name to repository name (and vice versa) +* Translating model name to validator name +* Guessing the extension name +* Guessing the controller name by looking at a command name +* Translating model name to (database) table name +* Recognizing child property types in object storage annotations + +Impact +====== + +All this magic no longer works with non-namespaced classes. + + +Affected Installations +====================== + +All installations that still use non-namespaced classes in Extbase. + + +Migration +========= + +Use namespaced class names for Extbase. + +.. index:: NotScanned, ext:extbase diff --git a/typo3/sysext/core/Tests/Unit/Utility/ClassNamingUtilityTest.php b/typo3/sysext/core/Tests/Unit/Utility/ClassNamingUtilityTest.php index d0c813799c6f5b8cf14b7367c70a127abb6f4c9d..0baff28314798f9d9e3ba0223c27efcb376acae8 100644 --- a/typo3/sysext/core/Tests/Unit/Utility/ClassNamingUtilityTest.php +++ b/typo3/sysext/core/Tests/Unit/Utility/ClassNamingUtilityTest.php @@ -34,41 +34,6 @@ class ClassNamingUtilityTest extends UnitTestCase public function repositoryAndModelClassNames(): array { return [ - [ - 'Tx_BlogExample_Domain_Repository_BlogRepository', - 'Tx_BlogExample_Domain_Model_Blog', - 'Tx_BlogExample_Domain_Validator_BlogValidator' - ], - [ - ' _Domain_Repository_Content_PageRepository', - ' _Domain_Model_Content_Page', - ' _Domain_Validator_Content_PageValidator' - ], - [ - 'Tx_RepositoryExample_Domain_Repository_SomeModelRepository', - 'Tx_RepositoryExample_Domain_Model_SomeModel', - 'Tx_RepositoryExample_Domain_Validator_SomeModelValidator' - ], - [ - 'Tx_RepositoryExample_Domain_Repository_RepositoryRepository', - 'Tx_RepositoryExample_Domain_Model_Repository', - 'Tx_RepositoryExample_Domain_Validator_RepositoryValidator' - ], - [ - 'Tx_Repository_Domain_Repository_RepositoryRepository', - 'Tx_Repository_Domain_Model_Repository', - 'Tx_Repository_Domain_Validator_RepositoryValidator' - ], - [ - 'Tx_ModelCollection_Domain_Repository_ModelRepository', - 'Tx_ModelCollection_Domain_Model_Model', - 'Tx_ModelCollection_Domain_Validator_ModelValidator' - ], - [ - 'Tx_Model_Domain_Repository_ModelRepository', - 'Tx_Model_Domain_Model_Model', - 'Tx_Model_Domain_Validator_ModelValidator' - ], [ 'VENDOR\\EXT\\Domain\\Repository\\BlogRepository', 'VENDOR\\EXT\\Domain\\Model\\Blog', @@ -208,31 +173,6 @@ class ClassNamingUtilityTest extends UnitTestCase 'controllerName' => 'Foo', ] ], - // Oldschool - [ - 'Tx_Ext_Controller_FooController', - [ - 'extensionName' => 'Ext', - 'subpackageKey' => '', - 'controllerName' => 'Foo', - ] - ], - [ - 'Tx_Ext_Command_FooCommandController', - [ - 'extensionName' => 'Ext', - 'subpackageKey' => '', - 'controllerName' => 'FooCommand', - ] - ], - [ - 'Tx_Fluid_ViewHelpers_Widget_Controller_PaginateController', - [ - 'extensionName' => 'Fluid', - 'subpackageKey' => 'ViewHelpers_Widget', - 'controllerName' => 'Paginate', - ] - ], ]; } diff --git a/typo3/sysext/extbase/Classes/Core/Bootstrap.php b/typo3/sysext/extbase/Classes/Core/Bootstrap.php index e8b50a24b019c41f71d01cd77264f8787385e3d8..0620f0b20065bef9bae0ca2b3f8f1fb5824b99fe 100644 --- a/typo3/sysext/extbase/Classes/Core/Bootstrap.php +++ b/typo3/sysext/extbase/Classes/Core/Bootstrap.php @@ -64,6 +64,9 @@ class Bootstrap implements \TYPO3\CMS\Extbase\Core\BootstrapInterface public function initialize($configuration) { if (!$this->isInCliMode()) { + if (!isset($configuration['vendorName']) || $configuration['vendorName'] === '') { + throw new \RuntimeException('Invalid configuration: "vendorName" is not set', 1526629315); + } if (!isset($configuration['extensionName']) || $configuration['extensionName'] === '') { throw new \RuntimeException('Invalid configuration: "extensionName" is not set', 1290623020); } diff --git a/typo3/sysext/extbase/Classes/Mvc/Cli/Command.php b/typo3/sysext/extbase/Classes/Mvc/Cli/Command.php index aa3a51e61fee7cc96a8c90883343e5051276493a..974d69df3384a8353ce0e84d30db75235763852c 100644 --- a/typo3/sysext/extbase/Classes/Mvc/Cli/Command.php +++ b/typo3/sysext/extbase/Classes/Mvc/Cli/Command.php @@ -93,8 +93,7 @@ class Command $this->controllerClassName = $controllerClassName; $this->controllerCommandName = $controllerCommandName; $this->controllerCommandMethod = $this->controllerCommandName . 'Command'; - $delimiter = strpos($controllerClassName, '\\') !== false ? '\\' : '_'; - $classNameParts = explode($delimiter, $controllerClassName); + $classNameParts = explode('\\', $controllerClassName); if (isset($classNameParts[0]) && $classNameParts[0] === 'TYPO3' && isset($classNameParts[1]) && $classNameParts[1] === 'CMS') { $classNameParts[0] .= '\\' . $classNameParts[1]; unset($classNameParts[1]); diff --git a/typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php b/typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php index 1a6e9de921f50fbf43b23c72c3595cdcd66c422d..1db33d4424243d7173859d40deed04eda18901df 100644 --- a/typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php +++ b/typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php @@ -131,16 +131,12 @@ abstract class AbstractController implements ControllerInterface public function __construct() { $className = static::class; - if (strpos($className, '\\') !== false) { - $classNameParts = explode('\\', $className, 4); - // Skip vendor and product name for core classes - if (strpos($className, 'TYPO3\\CMS\\') === 0) { - $this->extensionName = $classNameParts[2]; - } else { - $this->extensionName = $classNameParts[1]; - } + $classNameParts = explode('\\', $className, 4); + // Skip vendor and product name for core classes + if (strpos($className, 'TYPO3\\CMS\\') === 0) { + $this->extensionName = $classNameParts[2]; } else { - list(, $this->extensionName) = explode('_', $className); + $this->extensionName = $classNameParts[1]; } } diff --git a/typo3/sysext/extbase/Classes/Mvc/Request.php b/typo3/sysext/extbase/Classes/Mvc/Request.php index ac96ad6019d7431a75b121aba534352fd6bb4b6f..87141f4739554ef2823cbb5d071117c207cd47e7 100644 --- a/typo3/sysext/extbase/Classes/Mvc/Request.php +++ b/typo3/sysext/extbase/Classes/Mvc/Request.php @@ -25,13 +25,6 @@ class Request implements RequestInterface { const PATTERN_MATCH_FORMAT = '/^[a-z0-9]{1,5}$/'; - /** - * Pattern after which the controller object name is built - * - * @var string - */ - protected $controllerObjectNamePattern = 'Tx_@extension_@subpackage_Controller_@controllerController'; - /** * Pattern after which the namespaced controller object name is built * @@ -146,42 +139,24 @@ class Request implements RequestInterface */ public function getControllerObjectName() { - if (null !== $this->controllerVendorName) { - // It's safe to assume a namespaced name as namespaced names have to follow PSR-0 - $objectName = str_replace( - [ - '@extension', - '@subpackage', - '@controller', - '@vendor', - '\\\\' - ], - [ - $this->controllerExtensionName, - $this->controllerSubpackageKey, - $this->controllerName, - $this->controllerVendorName, - '\\' - ], - $this->namespacedControllerObjectNamePattern - ); - } else { - $objectName = str_replace( - [ - '@extension', - '@subpackage', - '@controller', - '__' - ], - [ - $this->controllerExtensionName, - $this->controllerSubpackageKey, - $this->controllerName, - '_' - ], - $this->controllerObjectNamePattern - ); - } + $objectName = str_replace( + [ + '@extension', + '@subpackage', + '@controller', + '@vendor', + '\\\\' + ], + [ + $this->controllerExtensionName, + $this->controllerSubpackageKey, + $this->controllerName, + $this->controllerVendorName, + '\\' + ], + $this->namespacedControllerObjectNamePattern + ); + // @todo implement getCaseSensitiveObjectName() if ($objectName === false) { throw new \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchControllerException('The controller object "' . $objectName . '" does not exist.', 1220884009); @@ -296,9 +271,6 @@ class Request implements RequestInterface if (!is_string($controllerName) && $controllerName !== null) { throw new \TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException('The controller name must be a valid string, ' . gettype($controllerName) . ' given.', 1187176358); } - if (strpos($controllerName, '_') !== false) { - throw new \TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerNameException('The controller name must not contain underscores.', 1217846412); - } if ($controllerName !== null) { $this->controllerName = $controllerName; } diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapFactory.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapFactory.php index 65c08515374190f9ecf16a7237b522146b0405bf..63999f03f11934663957f7956d7da819a184e0f9 100644 --- a/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapFactory.php +++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapFactory.php @@ -185,18 +185,15 @@ class DataMapFactory implements \TYPO3\CMS\Core\SingletonInterface protected function resolveTableName($className) { $className = ltrim($className, '\\'); - if (strpos($className, '\\') !== false) { - $classNameParts = explode('\\', $className); - // Skip vendor and product name for core classes - if (strpos($className, 'TYPO3\\CMS\\') === 0) { - $classPartsToSkip = 2; - } else { - $classPartsToSkip = 1; - } - $tableName = 'tx_' . strtolower(implode('_', array_slice($classNameParts, $classPartsToSkip))); + $classNameParts = explode('\\', $className); + // Skip vendor and product name for core classes + if (strpos($className, 'TYPO3\\CMS\\') === 0) { + $classPartsToSkip = 2; } else { - $tableName = strtolower($className); + $classPartsToSkip = 1; } + $tableName = 'tx_' . strtolower(implode('_', array_slice($classNameParts, $classPartsToSkip))); + return $tableName; } diff --git a/typo3/sysext/extbase/Classes/Property/PropertyMappingConfiguration.php b/typo3/sysext/extbase/Classes/Property/PropertyMappingConfiguration.php index 42a17d6e2b4ffffc13440e5d3bd9c2f8531ee029..3081c4988d0fdb54cd03b6eb7c5bd41ec610f238 100644 --- a/typo3/sysext/extbase/Classes/Property/PropertyMappingConfiguration.php +++ b/typo3/sysext/extbase/Classes/Property/PropertyMappingConfiguration.php @@ -21,8 +21,6 @@ namespace TYPO3\CMS\Extbase\Property; * The TYPO3 project - inspiring people to share! * * */ -use TYPO3\CMS\Core\Core\ClassLoadingInformation; - /** * Concrete configuration object for the PropertyMapper. * @@ -303,9 +301,6 @@ class PropertyMappingConfiguration implements PropertyMappingConfigurationInterf */ public function setTypeConverterOptions($typeConverter, array $options) { - if (strpos($typeConverter, '_') !== false) { - $typeConverter = ClassLoadingInformation::getClassNameForAlias($typeConverter); - } foreach ($this->getTypeConvertersWithParentClasses($typeConverter) as $typeConverter) { $this->configuration[$typeConverter] = $options; } @@ -323,9 +318,6 @@ class PropertyMappingConfiguration implements PropertyMappingConfigurationInterf */ public function setTypeConverterOption($typeConverter, $optionKey, $optionValue) { - if (strpos($typeConverter, '_') !== false) { - $typeConverter = ClassLoadingInformation::getClassNameForAlias($typeConverter); - } foreach ($this->getTypeConvertersWithParentClasses($typeConverter) as $typeConverter) { $this->configuration[$typeConverter][$optionKey] = $optionValue; } diff --git a/typo3/sysext/extbase/Classes/Scheduler/FieldProvider.php b/typo3/sysext/extbase/Classes/Scheduler/FieldProvider.php index f3a639f4a6382b6a5f3c19bbd28b012428d3e102..aece956952f7d94dc8edbc71a9471b351f0a460d 100644 --- a/typo3/sysext/extbase/Classes/Scheduler/FieldProvider.php +++ b/typo3/sysext/extbase/Classes/Scheduler/FieldProvider.php @@ -138,22 +138,16 @@ class FieldProvider implements \TYPO3\CMS\Scheduler\AdditionalFieldProviderInter continue; } $className = $command->getControllerClassName(); - if (strpos($className, '\\')) { - $classNameParts = explode('\\', $className); - // Skip vendor and product name for core classes - if (strpos($className, 'TYPO3\\CMS\\') === 0) { - $classPartsToSkip = 2; - } else { - $classPartsToSkip = 1; - } - $classNameParts = array_slice($classNameParts, $classPartsToSkip); - $extensionName = $classNameParts[0]; - $controllerName = $classNameParts[2]; + $classNameParts = explode('\\', $className); + // Skip vendor and product name for core classes + if (strpos($className, 'TYPO3\\CMS\\') === 0) { + $classPartsToSkip = 2; } else { - $classNameParts = explode('_', $className); - $extensionName = $classNameParts[1]; - $controllerName = $classNameParts[3]; + $classPartsToSkip = 1; } + $classNameParts = array_slice($classNameParts, $classPartsToSkip); + $extensionName = $classNameParts[0]; + $controllerName = $classNameParts[2]; $identifier = $command->getCommandIdentifier(); $options[$identifier] = $extensionName . ' ' . str_replace('CommandController', '', $controllerName) . ': ' . $command->getControllerCommandName(); } diff --git a/typo3/sysext/extbase/Classes/Utility/TypeHandlingUtility.php b/typo3/sysext/extbase/Classes/Utility/TypeHandlingUtility.php index 9d1c98664f60b57db6b3a8f32d43bb732a6a08f2..b0bdd026e13fa6b3d1043844f0d8f4091d9c380d 100644 --- a/typo3/sysext/extbase/Classes/Utility/TypeHandlingUtility.php +++ b/typo3/sysext/extbase/Classes/Utility/TypeHandlingUtility.php @@ -19,7 +19,7 @@ class TypeHandlingUtility /** * A property type parse pattern. */ - const PARSE_TYPE_PATTERN = '/^\\\\?(?P<type>integer|int|float|double|boolean|bool|string|DateTime|Tx_[a-zA-Z0-9_]+|[A-Z][a-zA-Z0-9\\\\_]+|object|resource|array|ArrayObject|SplObjectStorage|TYPO3\\\\CMS\\\\Extbase\\\\Persistence\\\\ObjectStorage)(?:<\\\\?(?P<elementType>[a-zA-Z0-9\\\\_]+)>)?/'; + const PARSE_TYPE_PATTERN = '/^\\\\?(?P<type>integer|int|float|double|boolean|bool|string|DateTime|[A-Z][a-zA-Z0-9\\\\]+|object|resource|array|ArrayObject|SplObjectStorage|TYPO3\\\\CMS\\\\Extbase\\\\Persistence\\\\ObjectStorage)(?:<\\\\?(?P<elementType>[a-zA-Z0-9\\\\]+)>)?/'; /** * A type pattern to detect literal types. diff --git a/typo3/sysext/extbase/Classes/Validation/ValidatorResolver.php b/typo3/sysext/extbase/Classes/Validation/ValidatorResolver.php index 8e28b7aff2da9234820a353d12d2c92c2438410c..4722fd5ee1a58edb7dee6fa9ad83c6808ba55d51 100644 --- a/typo3/sysext/extbase/Classes/Validation/ValidatorResolver.php +++ b/typo3/sysext/extbase/Classes/Validation/ValidatorResolver.php @@ -28,14 +28,13 @@ class ValidatorResolver implements \TYPO3\CMS\Core\SingletonInterface { /** * Match validator names and options - * @todo: adjust [a-z0-9_:.\\\\] once Tx_Extbase_Foo syntax is outdated. * @deprecated and will be removed in TYPO3 v10.0. * * @var string */ const PATTERN_MATCH_VALIDATORS = '/ (?:^|,\s*) - (?P<validatorName>[a-z0-9_:.\\\\]+) + (?P<validatorName>[a-z0-9:.\\\\]+) \s* (?:\( (?P<validatorOptions>(?:\s*[a-z0-9]+\s*=\s*(?: @@ -182,8 +181,7 @@ class ValidatorResolver implements \TYPO3\CMS\Core\SingletonInterface throw new Exception\InvalidTypeHintException('Missing type information, probably no @param annotation for parameter "$' . $parameterName . '" in ' . $className . '->' . $methodName . '()', 1281962564); } - // @todo: remove check for old underscore model name syntax once it's possible - if (strpbrk($methodParameter['type'], '_\\') === false) { + if (strpbrk($methodParameter['type'], '\\') === false) { $typeValidator = $this->createValidator($methodParameter['type']); } else { $typeValidator = null; @@ -478,19 +476,17 @@ class ValidatorResolver implements \TYPO3\CMS\Core\SingletonInterface $extensionName = array_pop($extensionNameParts); $vendorName = implode('\\', $extensionNameParts); $possibleClassName = $vendorName . '\\' . $extensionName . '\\Validation\\Validator\\' . $extensionValidatorName; - } else { - $possibleClassName = 'Tx_' . $extensionName . '_Validation_Validator_' . $extensionValidatorName; } } else { // Shorthand built in $possibleClassName = 'TYPO3\\CMS\\Extbase\\Validation\\Validator\\' . $this->getValidatorType($validatorName); } - } elseif (strpbrk($validatorName, '_\\') === false) { + } elseif (strpbrk($validatorName, '\\') === false) { // Shorthand built in $possibleClassName = 'TYPO3\\CMS\\Extbase\\Validation\\Validator\\' . $this->getValidatorType($validatorName); } else { // Full qualified - // Tx_MyExt_Validation_Validator_MyValidator or \Acme\Ext\Validation\Validator\FooValidator + // Example: \Acme\Ext\Validation\Validator\FooValidator $possibleClassName = $validatorName; if (!empty($possibleClassName) && $possibleClassName[0] === '\\') { $possibleClassName = substr($possibleClassName, 1); diff --git a/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/CommandTest.php b/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/CommandTest.php index eb047169078672afb54d8fad7e2111a0e7f0a71f..22438e2f3594e4492967c1727652e9f47bbfc05a 100644 --- a/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/CommandTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/CommandTest.php @@ -55,9 +55,10 @@ class CommandTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase public function commandIdentifiers() { return [ - ['Tx_ExtensionKey_Command_CacheCommandController', 'flush', 'extension_key:cache:flush'], - ['Tx_Ext_Command_CookieCommandController', 'bake', 'ext:cookie:bake'], - ['Tx_OtherExtensionKey_Foo_Faa_Fuuum_Command_CoffeeCommandController', 'brew', 'other_extension_key:coffee:brew'], + + ['Tx\ExtensionKey\Command\CacheCommandController', 'flush', 'extension_key:cache:flush'], + ['Tx\Ext\Command\CookieCommandController', 'bake', 'ext:cookie:bake'], + ['Tx\OtherExtensionKey\Foo\Faa\Fuuum\Command\CoffeeCommandController', 'brew', 'other_extension_key:coffee:brew'], ]; } diff --git a/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/RequestBuilderTest.php b/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/RequestBuilderTest.php index e8df0955b7b405d849b8326ee93b9dcec71018e4..fb28db9451bdef97fc091aa96ad6a9b7856a09bb 100644 --- a/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/RequestBuilderTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/RequestBuilderTest.php @@ -71,7 +71,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase $this->mockObjectManager = $this->createMock(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface::class); $this->mockObjectManager->expects($this->any())->method('get')->with(\TYPO3\CMS\Extbase\Mvc\Cli\Request::class)->will($this->returnValue($this->request)); $this->mockCommand = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class); - $this->mockCommand->expects($this->any())->method('getControllerClassName')->will($this->returnValue('Tx_SomeExtensionName_Command_DefaultCommandController')); + $this->mockCommand->expects($this->any())->method('getControllerClassName')->will($this->returnValue('Tx\\SomeExtensionName\\Command\\DefaultCommandController')); $this->mockCommand->expects($this->any())->method('getControllerCommandName')->will($this->returnValue('list')); $this->mockCommandManager = $this->createMock(\TYPO3\CMS\Extbase\Mvc\Cli\CommandManager::class); $this->mockCommandManager->expects($this->any())->method('getCommandByIdentifier')->with('some_extension_name:default:list')->will($this->returnValue($this->mockCommand)); @@ -93,7 +93,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase { $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->will($this->returnValue([])); $request = $this->requestBuilder->build('some_extension_name:default:list'); - $this->assertSame('Tx_SomeExtensionName_Command_DefaultCommandController', $request->getControllerObjectName()); + $this->assertSame('Tx\\SomeExtensionName\\Command\\DefaultCommandController', $request->getControllerObjectName()); $this->assertSame('list', $request->getControllerCommandName(), 'The CLI request specifying a package, controller and action name did not return a request object pointing to the expected action.'); } @@ -128,7 +128,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase $methodParameters = [ 'testArgument' => ['optional' => false, 'type' => 'string'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument=value'); $this->assertTrue($request->hasArgument('testArgument'), 'The given "testArgument" was not found in the built request.'); $this->assertSame($request->getArgument('testArgument'), 'value', 'The "testArgument" had not the given value.'); @@ -145,7 +145,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'testArgument' => ['optional' => false, 'type' => 'string'], 'testArgument2' => ['optional' => false, 'type' => 'string'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument=value --test-argument2=value2'); $this->assertTrue($request->hasArgument('testArgument'), 'The given "testArgument" was not found in the built request.'); $this->assertTrue($request->hasArgument('testArgument2'), 'The given "testArgument2" was not found in the built request.'); @@ -166,7 +166,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'testArgument3' => ['optional' => false, 'type' => 'string'], 'testArgument4' => ['optional' => false, 'type' => 'string'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument= value --test-argument2 =value2 --test-argument3 = value3 --test-argument4=value4'); $this->assertTrue($request->hasArgument('testArgument'), 'The given "testArgument" was not found in the built request.'); $this->assertTrue($request->hasArgument('testArgument2'), 'The given "testArgument2" was not found in the built request.'); @@ -190,7 +190,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'd' => ['optional' => false, 'type' => 'string'], 'f' => ['optional' => false, 'type' => 'string'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $request = $this->requestBuilder->build('some_extension_name:default:list -d valued -f=valuef -a = valuea'); $this->assertTrue($request->hasArgument('d'), 'The given "d" was not found in the built request.'); $this->assertTrue($request->hasArgument('f'), 'The given "f" was not found in the built request.'); @@ -224,7 +224,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'k' => ['optional' => false, 'type' => 'string'], 'm' => ['optional' => false, 'type' => 'string'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument=value --test-argument2= value2 -k --test-argument-3 = value3 --test-argument4=value4 -f valuef -d=valued -a = valuea -c --testArgument7 --test-argument5 = 5 --test-argument6 -j kjk -m'); $this->assertTrue($request->hasArgument('testArgument'), 'The given "testArgument" was not found in the built request.'); $this->assertTrue($request->hasArgument('testArgument2'), 'The given "testArgument2" was not found in the built request.'); @@ -260,7 +260,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'testArgument1' => ['optional' => false, 'type' => 'string'], 'testArgument2' => ['optional' => false, 'type' => 'string'] ]; - $this->mockReflectionService->expects($this->exactly(2))->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->exactly(2))->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument1 firstArgumentValue --test-argument2 secondArgumentValue'); $this->assertSame('firstArgumentValue', $request->getArgument('testArgument1')); $this->assertSame('secondArgumentValue', $request->getArgument('testArgument2')); @@ -280,7 +280,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'argument1' => ['optional' => false, 'type' => 'string'], 'argument2' => ['optional' => false, 'type' => 'string'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $request = $this->requestBuilder->build('some_extension_name:default:list --some -option=value file1 file2'); $this->assertSame('list', $request->getControllerCommandName()); $this->assertTrue($request->getArgument('some')); @@ -297,7 +297,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'testArgument1' => ['optional' => false, 'type' => 'string'], 'testArgument2' => ['optional' => false, 'type' => 'string'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $expectedArguments = ['testArgument1' => 'firstArgumentValue', 'testArgument2' => 'secondArgumentValue']; $request = $this->requestBuilder->build('some_extension_name:default:list --test-argument1=firstArgumentValue --test-argument2 secondArgumentValue exceedingArgument1'); $this->assertEquals($expectedArguments, $request->getArguments()); @@ -315,7 +315,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'testArgument1' => ['optional' => false, 'type' => 'string'], 'testArgument2' => ['optional' => false, 'type' => 'string'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $this->requestBuilder->build('some_extension_name:default:list --test-argument1 firstArgumentValue secondArgumentValue'); } @@ -330,7 +330,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'requiredArgument1' => ['optional' => false, 'type' => 'string'], 'requiredArgument2' => ['optional' => false, 'type' => 'string'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $this->requestBuilder->build('some_extension_name:default:list firstArgumentValue --required-argument2 secondArgumentValue'); } @@ -344,7 +344,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'requiredArgument2' => ['optional' => false, 'type' => 'string'], 'booleanOption' => ['optional' => true, 'type' => 'boolean'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $expectedArguments = ['requiredArgument1' => 'firstArgumentValue', 'requiredArgument2' => 'secondArgumentValue', 'booleanOption' => true]; $request = $this->requestBuilder->build('some_extension_name:default:list --booleanOption firstArgumentValue secondArgumentValue'); $this->assertEquals($expectedArguments, $request->getArguments()); @@ -363,7 +363,7 @@ class RequestBuilderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'b5' => ['optional' => true, 'type' => 'boolean'], 'b6' => ['optional' => true, 'type' => 'boolean'] ]; - $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx_SomeExtensionName_Command_DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); + $this->mockReflectionService->expects($this->once())->method('getMethodParameters')->with('Tx\\SomeExtensionName\\Command\\DefaultCommandController', 'listCommand')->will($this->returnValue($methodParameters)); $expectedArguments = ['b1' => true, 'b2' => true, 'b3' => true, 'b4' => false, 'b5' => false, 'b6' => false]; $request = $this->requestBuilder->build('some_extension_name:default:list --b2 y --b1 1 --b3 true --b4 false --b5 n --b6 0'); $this->assertEquals($expectedArguments, $request->getArguments()); diff --git a/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/RequestTest.php b/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/RequestTest.php index e4d12fab64b3f4c9a611f5bee796c1c09a4ef963..a4333c3add079b8c5dd5bf967283b7c7dcdfac99 100644 --- a/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/RequestTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Mvc/Cli/RequestTest.php @@ -26,69 +26,13 @@ namespace TYPO3\CMS\Extbase\Tests\Unit\Mvc\Cli; */ class RequestTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase { - /** - * @var \TYPO3\CMS\Extbase\Mvc\Cli\Request|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface - */ - protected $request; - - /** - * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface - */ - protected $mockObjectManager; - - /** - * Sets up this test case - */ - protected function setUp() - { - $this->request = $this->getAccessibleMock(\TYPO3\CMS\Extbase\Mvc\Cli\Request::class, ['dummy']); - $this->mockObjectManager = $this->createMock(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface::class); - $this->request->_set('objectManager', $this->mockObjectManager); - } - - /** - * @test - */ - public function getCommandReturnsTheCommandObjectReflectingTheRequestInformation() - { - $this->request->setControllerObjectName('Tx_Extbase_Command_CacheCommandController'); - $this->request->setControllerCommandName('flush'); - $this->mockObjectManager->expects($this->once())->method('get')->with(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class, 'Tx_Extbase_Command_CacheCommandController', 'flush'); - $this->request->getCommand(); - } - - /** - * @test - */ - public function setControllerObjectNameAndSetControllerCommandNameUnsetTheBuiltCommandObject() - { - $this->request->setControllerObjectName('Tx_Extbase_Command_CacheCommandController'); - $this->request->setControllerCommandName('flush'); - $this->request->getCommand(); - $this->request->setControllerObjectName('Tx_SomeExtension_Command_BeerCommandController'); - $this->request->setControllerCommandName('drink'); - $this->mockObjectManager->expects($this->once())->method('get')->with(\TYPO3\CMS\Extbase\Mvc\Cli\Command::class, 'Tx_SomeExtension_Command_BeerCommandController', 'drink'); - $this->request->getCommand(); - } - /** * @test */ public function setControllerObjectNameProperlyResolvesExtensionNameWithNamespaces() { $mockCliRequest = new \TYPO3\CMS\Extbase\Mvc\Cli\Request; - $mockCliRequest->setControllerObjectName(\TYPO3\CMS\Extbase\Command\NamespacedMockCommandController::class); - - $this->assertSame('Extbase', $mockCliRequest->getControllerExtensionName()); - } - - /** - * @test - */ - public function setControllerObjectNameProperlyResolvesExtensionNameWithoutNamespaces() - { - $mockCliRequest = new \TYPO3\CMS\Extbase\Mvc\Cli\Request; - $mockCliRequest->setControllerObjectName('Tx_Extbase_Command_OldschoolMockCommandController'); + $mockCliRequest->setControllerObjectName('TYPO3\CMS\Extbase\Command\NamespacedMockCommandController'); $this->assertSame('Extbase', $mockCliRequest->getControllerExtensionName()); } diff --git a/typo3/sysext/extbase/Tests/Unit/Mvc/Controller/AbstractControllerTest.php b/typo3/sysext/extbase/Tests/Unit/Mvc/Controller/AbstractControllerTest.php index 39009a9fecd2d524af32d3dd3a6b1d1d87c2b49d..6ca18b0f077a4134e94bb15bf82deb2b3eec0b53 100644 --- a/typo3/sysext/extbase/Tests/Unit/Mvc/Controller/AbstractControllerTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Mvc/Controller/AbstractControllerTest.php @@ -19,19 +19,6 @@ namespace TYPO3\CMS\Extbase\Tests\Unit\Mvc\Controller; */ class AbstractControllerTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase { - /** - * @test - */ - public function constructResolvesExtensionnameFromOldStyle() - { - $className = $this->getUniqueId('Tx_Extbase_Tests_Fixtures_Controller'); - eval('class ' . $className . ' extends \\' . \TYPO3\CMS\Extbase\Mvc\Controller\AbstractController::class . ' { function getExtensionName() { return $this->extensionName; } }'); - $mockController = new $className(); - $expectedResult = 'Extbase'; - $actualResult = $mockController->getExtensionName(); - $this->assertEquals($expectedResult, $actualResult); - } - /** * @test */ diff --git a/typo3/sysext/extbase/Tests/Unit/Mvc/Controller/ActionControllerTest.php b/typo3/sysext/extbase/Tests/Unit/Mvc/Controller/ActionControllerTest.php index b7f33cb4a9c1c963da5f0a2e29ca141df372350b..a983469df91cda9b96eda7dfe25a9cbabe51097c 100644 --- a/typo3/sysext/extbase/Tests/Unit/Mvc/Controller/ActionControllerTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Mvc/Controller/ActionControllerTest.php @@ -20,15 +20,11 @@ use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; use TYPO3\CMS\Extbase\Mvc\Controller\Arguments; use TYPO3\CMS\Extbase\Mvc\Controller\ControllerContext; -use TYPO3\CMS\Extbase\Mvc\Controller\MvcPropertyMappingConfigurationService; use TYPO3\CMS\Extbase\Mvc\Exception\InvalidArgumentTypeException; use TYPO3\CMS\Extbase\Mvc\Exception\NoSuchActionException; use TYPO3\CMS\Extbase\Mvc\Request; use TYPO3\CMS\Extbase\Mvc\RequestInterface; use TYPO3\CMS\Extbase\Mvc\View\ViewInterface; -use TYPO3\CMS\Extbase\Mvc\Web\Request as WebRequest; -use TYPO3\CMS\Extbase\Mvc\Web\Response; -use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder; use TYPO3\CMS\Extbase\Object\ObjectManager; use TYPO3\CMS\Extbase\Object\ObjectManagerInterface; use TYPO3\CMS\Extbase\Reflection\ReflectionService; @@ -62,58 +58,6 @@ class ActionControllerTest extends UnitTestCase */ protected $mockMvcPropertyMappingConfigurationService; - protected function setUp() - { - $this->actionController = $this->getAccessibleMock(ActionController::class); - } - - /** - * @test - */ - public function processRequestSticksToSpecifiedSequence() - { - $mockRequest = $this->createMock(WebRequest::class); - $mockRequest->expects($this->once())->method('setDispatched')->with(true); - $mockUriBuilder = $this->createMock(UriBuilder::class); - $mockUriBuilder->expects($this->once())->method('setRequest')->with($mockRequest); - $mockObjectManager = $this->createMock(ObjectManagerInterface::class); - $mockObjectManager->expects($this->once())->method('get')->with(UriBuilder::class)->will($this->returnValue($mockUriBuilder)); - $mockResponse = $this->createMock(Response::class); - $configurationService = $this->createMock(MvcPropertyMappingConfigurationService::class); - /** @var \TYPO3\CMS\Extbase\Mvc\Controller\ActionController|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface */ - $mockController = $this->getAccessibleMock(ActionController::class, [ - 'initializeFooAction', - 'initializeAction', - 'resolveActionMethodName', - 'initializeActionMethodArguments', - 'initializeActionMethodValidators', - 'mapRequestArgumentsToControllerArguments', - 'buildControllerContext', - 'resolveView', - 'initializeView', - 'callActionMethod', - 'checkRequestHash' - ], [], '', false); - $mockController->_set('objectManager', $mockObjectManager); - - $mockController->expects($this->at(0))->method('resolveActionMethodName')->will($this->returnValue('fooAction')); - $mockController->expects($this->at(1))->method('initializeActionMethodArguments'); - $mockController->expects($this->at(2))->method('initializeActionMethodValidators'); - $mockController->expects($this->at(3))->method('initializeAction'); - $mockController->expects($this->at(4))->method('initializeFooAction'); - $mockController->expects($this->at(5))->method('mapRequestArgumentsToControllerArguments'); - $mockController->expects($this->at(6))->method('checkRequestHash'); - $mockController->expects($this->at(7))->method('buildControllerContext'); - $mockController->expects($this->at(8))->method('resolveView'); - - $mockController->_set('mvcPropertyMappingConfigurationService', $configurationService); - $mockController->_set('arguments', new Arguments()); - - $mockController->processRequest($mockRequest, $mockResponse); - $this->assertSame($mockRequest, $mockController->_get('request')); - $this->assertSame($mockResponse, $mockController->_get('response')); - } - /** * @test */ diff --git a/typo3/sysext/extbase/Tests/Unit/Mvc/RequestTest.php b/typo3/sysext/extbase/Tests/Unit/Mvc/RequestTest.php index 00544a07603afbe1bb71edae0c77736d15fa825d..3d49ce492948b2b6af3958a8791b9d97c01b54de 100644 --- a/typo3/sysext/extbase/Tests/Unit/Mvc/RequestTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Mvc/RequestTest.php @@ -325,24 +325,6 @@ class RequestTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase ], 'VENDOR\\Ext\\ViewHelpers\\Widget\\Controller\\FooController', ], - 'No vendor, extension, controller given' => [ - [ - 'vendorName' => null, - 'extensionName' => 'Ext', - 'subpackageKey' => '', - 'controllerName' => 'Foo', - ], - 'Tx_Ext_Controller_FooController', - ], - 'No vendor, extension, subpackage, controller given' => [ - [ - 'vendorName' => null, - 'extensionName' => 'Fluid', - 'subpackageKey' => 'ViewHelpers_Widget', - 'controllerName' => 'Paginate', - ], - 'Tx_Fluid_ViewHelpers_Widget_Controller_PaginateController', - ], ]; } diff --git a/typo3/sysext/extbase/Tests/Unit/Persistence/Fixture/Domain/Model/Entity.php b/typo3/sysext/extbase/Tests/Unit/Persistence/Fixture/Domain/Model/Entity.php new file mode 100644 index 0000000000000000000000000000000000000000..39770569178e0e378b357936fe8a37b7b2d19a71 --- /dev/null +++ b/typo3/sysext/extbase/Tests/Unit/Persistence/Fixture/Domain/Model/Entity.php @@ -0,0 +1,21 @@ +<?php +declare(strict_types = 1); + +namespace TYPO3\CMS\Extbase\Tests\Unit\Persistence\Fixture\Domain\Model; + +/* + * This file is part of the TYPO3 CMS project. + * + * It is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, either version 2 + * of the License, or any later version. + * + * For the full copyright and license information, please read the + * LICENSE.txt file that was distributed with this source code. + * + * The TYPO3 project - inspiring people to share! + */ + +class Entity extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ +} diff --git a/typo3/sysext/extbase/Tests/Unit/Persistence/Fixture/Domain/Repository/EntityRepository.php b/typo3/sysext/extbase/Tests/Unit/Persistence/Fixture/Domain/Repository/EntityRepository.php new file mode 100644 index 0000000000000000000000000000000000000000..93ca1876ecd3880774ebda2c573dc1f4e9023c43 --- /dev/null +++ b/typo3/sysext/extbase/Tests/Unit/Persistence/Fixture/Domain/Repository/EntityRepository.php @@ -0,0 +1,21 @@ +<?php +declare(strict_types = 1); + +namespace TYPO3\CMS\Extbase\Tests\Unit\Persistence\Fixture\Domain\Repository; + +/* + * This file is part of the TYPO3 CMS project. + * + * It is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, either version 2 + * of the License, or any later version. + * + * For the full copyright and license information, please read the + * LICENSE.txt file that was distributed with this source code. + * + * The TYPO3 project - inspiring people to share! + */ + +class EntityRepository extends \TYPO3\CMS\Extbase\Persistence\Repository +{ +} diff --git a/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/Mapper/DataMapFactoryTest.php b/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/Mapper/DataMapFactoryTest.php index 747ce3d29931e2597a40063b4df1cf624a23d315..d862e339eb8fde719b2e8df02df7b536bcc93fcb 100644 --- a/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/Mapper/DataMapFactoryTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Persistence/Generic/Mapper/DataMapFactoryTest.php @@ -515,8 +515,6 @@ class DataMapFactoryTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase 'Core classes with namespaces and leading backslash' => [\TYPO3\CMS\Belog\Domain\Model\LogEntry::class, 'tx_belog_domain_model_logentry'], 'Extension classes' => ['ExtbaseTeam\\BlogExample\\Domain\\Model\\Blog', 'tx_blogexample_domain_model_blog'], 'Extension classes with namespaces and leading backslash' => ['\\ExtbaseTeam\\BlogExample\\Domain\\Model\\Blog', 'tx_blogexample_domain_model_blog'], - 'Extension classes without namespace' => ['Tx_News_Domain_Model_News', 'tx_news_domain_model_news'], - 'Extension classes without namespace but leading slash' => ['\\Tx_News_Domain_Model_News', 'tx_news_domain_model_news'], ]; } diff --git a/typo3/sysext/extbase/Tests/Unit/Persistence/RepositoryTest.php b/typo3/sysext/extbase/Tests/Unit/Persistence/RepositoryTest.php index d70d569b8a17a7935984facfa2a4d095b283db93..ea38f9547be7e9fac3a58f4ec1bf6649e68f2289 100644 --- a/typo3/sysext/extbase/Tests/Unit/Persistence/RepositoryTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Persistence/RepositoryTest.php @@ -328,41 +328,19 @@ class RepositoryTest extends UnitTestCase $repository->update(new \stdClass()); } - /** - * dataProvider for createQueryCallsQueryFactoryWithExpectedType - * - * @return array - */ - public function modelAndRepositoryClassNames() - { - return [ - ['Tx_BlogExample_Domain_Repository_BlogRepository', 'Tx_BlogExample_Domain_Model_Blog'], - ['_Domain_Repository_Content_PageRepository', '_Domain_Model_Content_Page'], - ['Tx_RepositoryExample_Domain_Repository_SomeModelRepository', 'Tx_RepositoryExample_Domain_Model_SomeModel'], - ['Tx_RepositoryExample_Domain_Repository_RepositoryRepository', 'Tx_RepositoryExample_Domain_Model_Repository'], - ['Tx_Repository_Domain_Repository_RepositoryRepository', 'Tx_Repository_Domain_Model_Repository'] - ]; - } - /** * @test - * @dataProvider modelAndRepositoryClassNames - * @param string $repositoryClassName - * @param string $modelClassName */ - public function constructSetsObjectTypeFromClassName($repositoryClassName, $modelClassName) + public function constructSetsObjectTypeFromClassName() { - $repositoryClassNameWithNS = __NAMESPACE__ . '\\' . $repositoryClassName; - eval('namespace ' . __NAMESPACE__ . '; class ' . $repositoryClassName . ' extends \\TYPO3\\CMS\\Extbase\\Persistence\\Repository { - protected function getRepositoryClassName() { - return \'' . $repositoryClassName . '\'; - } - public function _getObjectType() { - return $this->objectType; - } - }'); - $this->repository = new $repositoryClassNameWithNS($this->mockObjectManager); - $this->assertEquals($modelClassName, $this->repository->_getObjectType()); + $repository = new Fixture\Domain\Repository\EntityRepository($this->mockObjectManager); + + $reflectionClass = new \ReflectionClass($repository); + $reflectionProperty = $reflectionClass->getProperty('objectType'); + $reflectionProperty->setAccessible(true); + $objectType = $reflectionProperty->getValue($repository); + + $this->assertEquals(Fixture\Domain\Model\Entity::class, $objectType); } /** diff --git a/typo3/sysext/extbase/Tests/Unit/Scheduler/FieldProviderTest.php b/typo3/sysext/extbase/Tests/Unit/Scheduler/FieldProviderTest.php index 8a4613684c431ecc63761d656c2526edbabaee5b..359777a5a8b9f98af0ae110b51e0bcc8d6d50c7d 100644 --- a/typo3/sysext/extbase/Tests/Unit/Scheduler/FieldProviderTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Scheduler/FieldProviderTest.php @@ -49,19 +49,11 @@ class FieldProviderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase $command2->expects($this->once())->method('getControllerCommandName')->will($this->returnValue('FuncB')); $command2->expects($this->once())->method('getCommandIdentifier')->will($this->returnValue('mypkg:mockb:funcb')); - /** @var Command|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $command3 */ - $command3 = $this->getAccessibleMock(Command::class, [], [], '', false); - $command3->expects($this->once())->method('isInternal')->will($this->returnValue(false)); - $command3->expects($this->once())->method('isCliOnly')->will($this->returnValue(false)); - $command3->expects($this->once())->method('getControllerClassName')->will($this->returnValue('Tx_Extbase_Command_MockCCommandController')); - $command3->expects($this->once())->method('getControllerCommandName')->will($this->returnValue('FuncC')); - $command3->expects($this->once())->method('getCommandIdentifier')->will($this->returnValue('extbase:mockc:funcc')); - /** @var CommandManager|\PHPUnit_Framework_MockObject_MockObject $commandManager */ $commandManager = $this->getMockBuilder(CommandManager::class) ->setMethods(['getAvailableCommands']) ->getMock(); - $commandManager->expects($this->any())->method('getAvailableCommands')->will($this->returnValue([$command1, $command2, $command3])); + $commandManager->expects($this->any())->method('getAvailableCommands')->will($this->returnValue([$command1, $command2])); /** @var FieldProvider|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface $fieldProvider */ $fieldProvider = $this->getAccessibleMock( @@ -76,7 +68,6 @@ class FieldProviderTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase $actualResult = $fieldProvider->_call('getCommandControllerActionField', []); $this->assertContains('<option title="test" value="extbase:mocka:funca">Extbase MockA: FuncA</option>', $actualResult['code']); $this->assertContains('<option title="test" value="mypkg:mockb:funcb">Mypkg MockB: FuncB</option>', $actualResult['code']); - $this->assertContains('<option title="test" value="extbase:mockc:funcc">Extbase MockC: FuncC</option>', $actualResult['code']); } /** diff --git a/typo3/sysext/extbase/Tests/UnitDeprecated/Validation/ValidatorResolverTest.php b/typo3/sysext/extbase/Tests/UnitDeprecated/Validation/ValidatorResolverTest.php index 113dfd921b2be60a49acf87d8c9c39ed0a1487b9..2fe4b457b180e17242310c894270eb3f65ad8033 100644 --- a/typo3/sysext/extbase/Tests/UnitDeprecated/Validation/ValidatorResolverTest.php +++ b/typo3/sysext/extbase/Tests/UnitDeprecated/Validation/ValidatorResolverTest.php @@ -226,15 +226,6 @@ class ValidatorResolverTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCa ] ] ], - [ - '$var F3_TestPackage_Quux', - [ - 'argumentName' => 'var', - 'validators' => [ - ['validatorName' => 'F3_TestPackage_Quux', 'validatorOptions' => []] - ] - ] - ], [ '$var Baz(Foo="5"), Bar(Quux="123")', [ diff --git a/typo3/sysext/extensionmanager/Tests/Unit/Controller/DownloadControllerTest.php b/typo3/sysext/extensionmanager/Tests/Unit/Controller/DownloadControllerTest.php index bca9c25cc210ddea99ca33671637ba98fd47b2d5..370a3fea5e08bfb4fb3dee1a97b2dd2e9f259852 100644 --- a/typo3/sysext/extensionmanager/Tests/Unit/Controller/DownloadControllerTest.php +++ b/typo3/sysext/extensionmanager/Tests/Unit/Controller/DownloadControllerTest.php @@ -14,6 +14,8 @@ namespace TYPO3\CMS\Extensionmanager\Tests\Unit\Controller; * The TYPO3 project - inspiring people to share! */ +use PHPUnit\Framework\MockObject\MockObject; + /** * Download from TER controller test */ @@ -31,13 +33,19 @@ class DownloadControllerTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestC $dummyExtension = $this->getMockBuilder(\TYPO3\CMS\Extensionmanager\Domain\Model\Extension::class)->getMock(); $dummyExtension->expects($this->any())->method('getExtensionKey')->will($this->returnValue($dummyExtensionName)); + /** @var \TYPO3\CMS\Extensionmanager\Utility\DownloadUtility|MockObject $downloadUtilityMock */ $downloadUtilityMock = $this->getMockBuilder(\TYPO3\CMS\Extensionmanager\Utility\DownloadUtility::class)->getMock(); $downloadUtilityMock->expects($this->any())->method('setDownloadPath')->willThrowException($dummyException); - $subject = $this->getAccessibleMock(\TYPO3\CMS\Extensionmanager\Controller\DownloadController::class, ['dummy']); - $subject->_set('downloadUtility', $downloadUtilityMock); + /** @var \TYPO3\CMS\Extensionmanager\Controller\DownloadController $subject */ + $subject = new \TYPO3\CMS\Extensionmanager\Controller\DownloadController(); + $subject->injectDownloadUtility($downloadUtilityMock); + + $reflectionClass = new \ReflectionClass($subject); + $reflectionMethod = $reflectionClass->getMethod('installFromTer'); + $reflectionMethod->setAccessible(true); - $result = $subject->_call('installFromTer', $dummyExtension); + $result = $reflectionMethod->invokeArgs($subject, [$dummyExtension]); $expectedResult = [ false, diff --git a/typo3/sysext/extensionmanager/Tests/Unit/Controller/UploadExtensionFileControllerTest.php b/typo3/sysext/extensionmanager/Tests/Unit/Controller/UploadExtensionFileControllerTest.php index eb3174f38dfe234b2b43e11cf4cbf3cc55923c3f..2ad61666eb830c642a633853a78d6cd7f4b5b706 100644 --- a/typo3/sysext/extensionmanager/Tests/Unit/Controller/UploadExtensionFileControllerTest.php +++ b/typo3/sysext/extensionmanager/Tests/Unit/Controller/UploadExtensionFileControllerTest.php @@ -14,6 +14,8 @@ namespace TYPO3\CMS\Extensionmanager\Tests\Unit\Controller; * The TYPO3 project - inspiring people to share! */ +use PHPUnit\Framework\MockObject\MockObject; + /** * Update from TER controller test */ @@ -63,7 +65,7 @@ class UploadExtensionFileControllerTest extends \TYPO3\TestingFramework\Core\Uni */ public function getExtensionFromZipFileExtractsExtensionKey($filename, $expectedKey) { - $fixture = $this->getAccessibleMock(\TYPO3\CMS\Extensionmanager\Controller\UploadExtensionFileController::class, ['dummy']); + /** @var \TYPO3\CMS\Extensionmanager\Service\ExtensionManagementService|MockObject $managementServiceMock */ $managementServiceMock = $this->getMockBuilder(\TYPO3\CMS\Extensionmanager\Service\ExtensionManagementService::class) ->setMethods(['isAvailable']) ->disableOriginalConstructor() @@ -72,12 +74,21 @@ class UploadExtensionFileControllerTest extends \TYPO3\TestingFramework\Core\Uni ->method('isAvailable') ->with($expectedKey) ->will($this->returnValue(false)); - $fixture->_set('managementService', $managementServiceMock); + + /** @var \TYPO3\CMS\Extensionmanager\Utility\FileHandlingUtility|MockObject $fileHandlingUtilityMock */ $fileHandlingUtilityMock = $this->createMock(\TYPO3\CMS\Extensionmanager\Utility\FileHandlingUtility::class); $fileHandlingUtilityMock->expects($this->once())->method('unzipExtensionFromFile'); - $fixture->_set('fileHandlingUtility', $fileHandlingUtilityMock); - $extensionDetails = $fixture->_call('getExtensionFromZipFile', '', $filename); + $fixture = new \TYPO3\CMS\Extensionmanager\Controller\UploadExtensionFileController(); + $fixture->injectManagementService($managementServiceMock); + $fixture->injectFileHandlingUtility($fileHandlingUtilityMock); + + $reflectionClass = new \ReflectionClass($fixture); + $reflectionMethod = $reflectionClass->getMethod('getExtensionFromZipFile'); + $reflectionMethod->setAccessible(true); + + $extensionDetails = $reflectionMethod->invokeArgs($fixture, ['', $filename]); + $this->assertEquals($expectedKey, $extensionDetails['extKey']); } } diff --git a/typo3/sysext/fluid/Tests/Unit/Core/Widget/AbstractWidgetControllerTest.php b/typo3/sysext/fluid/Tests/Unit/Core/Widget/AbstractWidgetControllerTest.php index ebc6b02260ec43027fd9867c7642057119333196..e77524ee1462a32f8a5f411d4b172832fed24c73 100644 --- a/typo3/sysext/fluid/Tests/Unit/Core/Widget/AbstractWidgetControllerTest.php +++ b/typo3/sysext/fluid/Tests/Unit/Core/Widget/AbstractWidgetControllerTest.php @@ -115,13 +115,30 @@ class AbstractWidgetControllerTest extends \TYPO3\TestingFramework\Core\Unit\Uni $view = $this->getAccessibleMock(TemplateView::class, ['getTemplatePaths', 'toArray'], [], '', false); $view->expects($this->exactly(2))->method('getTemplatePaths')->willReturn($templatePaths); - $mock = $this->getAccessibleMock(AbstractWidgetController::class, ['dummy']); - $mock->_set('configurationManager', $configurationManager); - $mock->_set('controllerContext', $controllerContext); - $mock->_set('request', $request); - $method = new \ReflectionMethod(AbstractWidgetController::class, 'setViewConfiguration'); - $method->setAccessible(true); - $method->invokeArgs($mock, [$view]); + $prophecy = $this->prophesize(AbstractWidgetController::class); + + /** @var AbstractWidgetController $controller */ + $controller = $prophecy->reveal(); + + $reflectionClass = new \ReflectionClass($controller); + + $reflectionProperty = $reflectionClass->getProperty('configurationManager'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($controller, $configurationManager); + + $reflectionProperty = $reflectionClass->getProperty('controllerContext'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($controller, $controllerContext); + + $reflectionProperty = $reflectionClass->getProperty('request'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($controller, $request); + + $reflectionMethod = $reflectionClass->getMethod('setViewConfiguration'); + $reflectionMethod->setAccessible(true); + + $reflectionMethod->setAccessible(true); + $reflectionMethod->invokeArgs($controller, [$view]); } /**