145 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Test\Integrity\Modular;
 | 
						|
 | 
						|
use Magento\Customer\Model\Context;
 | 
						|
 | 
						|
/**
 | 
						|
 * @magentoAppIsolation enabled
 | 
						|
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 | 
						|
 */
 | 
						|
class TemplateFilesTest extends \Magento\TestFramework\TestCase\AbstractIntegrity
 | 
						|
{
 | 
						|
    public function testAllTemplates()
 | 
						|
    {
 | 
						|
        $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
 | 
						|
        $invoker(
 | 
						|
            function ($module, $template, $class, $area) {
 | 
						|
                \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
 | 
						|
                    \Magento\Framework\View\DesignInterface::class
 | 
						|
                )->setDefaultDesignTheme();
 | 
						|
                // intentionally to make sure the module files will be requested
 | 
						|
                $params = [
 | 
						|
                    'area' => $area,
 | 
						|
                    'themeModel' => \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
 | 
						|
                        \Magento\Framework\View\Design\ThemeInterface::class
 | 
						|
                    ),
 | 
						|
                    'module' => $module,
 | 
						|
                ];
 | 
						|
                $file = \Magento\TestFramework\Helper\Bootstrap::getObjectmanager()->get(
 | 
						|
                    \Magento\Framework\View\FileSystem::class
 | 
						|
                )->getTemplateFileName(
 | 
						|
                    $template,
 | 
						|
                    $params
 | 
						|
                );
 | 
						|
                $this->assertIsString($file, "Block class: {$class} {$template}");
 | 
						|
                $this->assertFileExists($file, "Block class: {$class}");
 | 
						|
            },
 | 
						|
            $this->allTemplatesDataProvider()
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array
 | 
						|
     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
 | 
						|
     */
 | 
						|
    public function allTemplatesDataProvider()
 | 
						|
    {
 | 
						|
        $blockClass = '';
 | 
						|
        try {
 | 
						|
            /** @var $website \Magento\Store\Model\Website */
 | 
						|
            \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
 | 
						|
                \Magento\Store\Model\StoreManagerInterface::class
 | 
						|
            )->getStore()->setWebsiteId(
 | 
						|
                0
 | 
						|
            );
 | 
						|
 | 
						|
            $templates = [];
 | 
						|
            $skippedBlocks = $this->_getBlocksToSkip();
 | 
						|
            foreach (\Magento\Framework\App\Utility\Classes::collectModuleClasses('Block') as $blockClass => $module) {
 | 
						|
                if (!in_array($module, $this->_getEnabledModules()) || in_array($blockClass, $skippedBlocks)) {
 | 
						|
                    continue;
 | 
						|
                }
 | 
						|
                $class = new \ReflectionClass($blockClass);
 | 
						|
                if ($class->isAbstract() || !$class->isSubclassOf(\Magento\Framework\View\Element\Template::class)) {
 | 
						|
                    continue;
 | 
						|
                }
 | 
						|
 | 
						|
                $area = 'frontend';
 | 
						|
                if ($module == 'Magento_Backend' || strpos(
 | 
						|
                    $blockClass,
 | 
						|
                    '\\Adminhtml\\'
 | 
						|
                ) !== false || strpos(
 | 
						|
                    $blockClass,
 | 
						|
                    '\\Backend\\'
 | 
						|
                ) !== false || $class->isSubclassOf(
 | 
						|
                    \Magento\Backend\Block\Template::class
 | 
						|
                )
 | 
						|
                ) {
 | 
						|
                    $area = 'adminhtml';
 | 
						|
                }
 | 
						|
 | 
						|
                \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
 | 
						|
                    \Magento\Framework\App\AreaList::class
 | 
						|
                )->getArea(
 | 
						|
                    $area
 | 
						|
                )->load(
 | 
						|
                    \Magento\Framework\App\Area::PART_CONFIG
 | 
						|
                );
 | 
						|
                \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
 | 
						|
                    \Magento\Framework\Config\ScopeInterface::class
 | 
						|
                )->setCurrentScope(
 | 
						|
                    $area
 | 
						|
                );
 | 
						|
                \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
 | 
						|
                    \Magento\Framework\App\State::class
 | 
						|
                )->setAreaCode(
 | 
						|
                    $area
 | 
						|
                );
 | 
						|
                $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
 | 
						|
                    \Magento\Framework\App\Http\Context::class
 | 
						|
                );
 | 
						|
                $context->setValue(Context::CONTEXT_AUTH, false, false);
 | 
						|
                $context->setValue(
 | 
						|
                    Context::CONTEXT_GROUP,
 | 
						|
                    \Magento\Customer\Model\GroupManagement::NOT_LOGGED_IN_ID,
 | 
						|
                    \Magento\Customer\Model\GroupManagement::NOT_LOGGED_IN_ID
 | 
						|
                );
 | 
						|
                $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create($blockClass);
 | 
						|
                $template = $block->getTemplate();
 | 
						|
                if ($template) {
 | 
						|
                    $templates[$module . ', ' . $template . ', ' . $blockClass . ', ' . $area] = [
 | 
						|
                        $module,
 | 
						|
                        $template,
 | 
						|
                        $blockClass,
 | 
						|
                        $area,
 | 
						|
                    ];
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return $templates;
 | 
						|
        } catch (\Exception $e) {
 | 
						|
            trigger_error(
 | 
						|
                "Corrupted data provider. Last known block instantiation attempt: '{$blockClass}'." .
 | 
						|
                " Exception: {$e}",
 | 
						|
                E_USER_ERROR
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    protected function _getBlocksToSkip()
 | 
						|
    {
 | 
						|
        $result = [];
 | 
						|
        foreach (glob(__DIR__ . '/_files/skip_template_blocks*.php') as $file) {
 | 
						|
            $blocks = include $file;
 | 
						|
            $result = array_merge($result, $blocks);
 | 
						|
        }
 | 
						|
        return array_combine($result, $result);
 | 
						|
    }
 | 
						|
}
 |