/dev/tests/static/testsuite/Magento/Test/Legacy/ClassesTest.php
https://gitlab.com/axeltizon/magento-demopoweraccess · PHP · 128 lines · 94 code · 9 blank · 25 comment · 5 complexity · 80ac5a853b29f604ede50bcbbccfd5b3 MD5 · raw file
- <?php
- /**
- * Copyright © 2016 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * Scans source code for references to classes and see if they indeed exist
- */
- namespace Magento\Test\Legacy;
- use Magento\Framework\App\Utility\Files;
- class ClassesTest extends \PHPUnit_Framework_TestCase
- {
- public function testPhpCode()
- {
- $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
- $invoker(
- /**
- * @param string $file
- */
- function ($file) {
- $classes = \Magento\Framework\App\Utility\Classes::collectPhpCodeClasses(file_get_contents($file));
- $this->_assertNonFactoryName($classes, $file);
- },
- Files::init()->getPhpFiles(
- Files::INCLUDE_APP_CODE
- | Files::INCLUDE_PUB_CODE
- | Files::INCLUDE_LIBS
- | Files::INCLUDE_TEMPLATES
- | Files::AS_DATA_SET
- | Files::INCLUDE_NON_CLASSES
- )
- );
- }
- public function testConfiguration()
- {
- $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
- $invoker(
- /**
- * @param string $path
- */
- function ($path) {
- $xml = simplexml_load_file($path);
- $classes = \Magento\Framework\App\Utility\Classes::collectClassesInConfig($xml);
- $this->_assertNonFactoryName($classes, $path);
- $modules = \Magento\Framework\App\Utility\Classes::getXmlAttributeValues($xml, '//@module', 'module');
- $this->_assertNonFactoryName(array_unique($modules), $path, false, true);
- },
- Files::init()->getConfigFiles()
- );
- }
- public function testLayouts()
- {
- $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
- $invoker(
- /**
- * @param string $path
- */
- function ($path) {
- $xml = simplexml_load_file($path);
- $classes = \Magento\Framework\App\Utility\Classes::collectLayoutClasses($xml);
- foreach (\Magento\Framework\App\Utility\Classes::getXmlAttributeValues(
- $xml,
- '/layout//@helper',
- 'helper'
- ) as $class) {
- $classes[] = \Magento\Framework\App\Utility\Classes::getCallbackClass($class);
- }
- $classes = array_merge(
- $classes,
- \Magento\Framework\App\Utility\Classes::getXmlAttributeValues($xml, '/layout//@module', 'module')
- );
- $this->_assertNonFactoryName(array_unique($classes), $path);
- $tabs = \Magento\Framework\App\Utility\Classes::getXmlNodeValues(
- $xml,
- '/layout//action[@method="addTab"]/block'
- );
- $this->_assertNonFactoryName(array_unique($tabs), $path, true);
- },
- Files::init()->getLayoutFiles()
- );
- }
- /**
- * Check whether specified classes or module names correspond to a file according PSR-1 Standard.
- *
- * Suppressing "unused variable" because of the "catch" block
- *
- * @param array $names
- * @param bool $softComparison
- * @SuppressWarnings(PHPMD.UnusedLocalVariable)
- */
- protected function _assertNonFactoryName($names, $file, $softComparison = false, $moduleBlock = false)
- {
- if (!$names) {
- return;
- }
- $factoryNames = [];
- foreach ($names as $name) {
- try {
- if ($softComparison) {
- $this->assertNotRegExp('/\//', $name);
- } elseif ($moduleBlock) {
- $this->assertFalse(false === strpos($name, '_'));
- $this->assertRegExp('/^([A-Z][A-Za-z\d_]+)+$/', $name);
- } else {
- if (strpos($name, 'Magento') === false) {
- continue;
- }
- $this->assertFalse(false === strpos($name, '\\'));
- $this->assertRegExp('/^([A-Z\\\\][A-Za-z\d\\\\]+)+$/', $name);
- }
- } catch (\PHPUnit_Framework_AssertionFailedError $e) {
- $factoryNames[] = $name;
- }
- }
- if ($factoryNames) {
- $this->fail("Obsolete factory name(s) detected in {$file}:" . "\n" . implode("\n", $factoryNames));
- }
- }
- }