162 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Ui\Config;
 | 
						|
 | 
						|
use Magento\TestFramework\Helper\Bootstrap;
 | 
						|
use Magento\Framework\Config\FileIterator;
 | 
						|
use Magento\Framework\Filesystem\DriverPool;
 | 
						|
use Magento\Framework\Filesystem\File\ReadFactory;
 | 
						|
 | 
						|
class ConverterTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var Converter
 | 
						|
     */
 | 
						|
    private $converter;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    private $fixturePath;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $objectManager = Bootstrap::getObjectManager();
 | 
						|
        $this->converter = $objectManager->create(Converter::class);
 | 
						|
        $this->fixturePath = realpath(__DIR__ . '/../_files/view/ui_component');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param string $componentName
 | 
						|
     * @return void
 | 
						|
     * @dataProvider getComponentNameDataProvider
 | 
						|
     */
 | 
						|
    public function testConvert($componentName)
 | 
						|
    {
 | 
						|
        $expectedResult = $this->getExpectedResult($componentName);
 | 
						|
 | 
						|
        $fixtureFiles = $this->getFixtureFiles($componentName);
 | 
						|
        foreach ($fixtureFiles as $filePath => $fileContent) {
 | 
						|
            $dom = new \DOMDocument();
 | 
						|
            $dom->loadXML($fileContent);
 | 
						|
            $actualResult = $this->converter->convert($dom);
 | 
						|
 | 
						|
            if (isset($actualResult[Converter::DATA_ATTRIBUTES_KEY])) {
 | 
						|
                unset($actualResult[Converter::DATA_ATTRIBUTES_KEY]);
 | 
						|
            }
 | 
						|
 | 
						|
            $this->assertEquals(
 | 
						|
                $expectedResult,
 | 
						|
                $actualResult,
 | 
						|
                "Wrong '{$this->getTypeByPath($filePath)}' configuration for '{$componentName}' Ui Component" . PHP_EOL
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function getComponentNameDataProvider()
 | 
						|
    {
 | 
						|
        return [
 | 
						|
            ['action'],
 | 
						|
            ['actionDelete'],
 | 
						|
            ['actions'],
 | 
						|
            ['actionsColumn'],
 | 
						|
            ['bookmark'],
 | 
						|
            ['boolean'],
 | 
						|
            ['button'],
 | 
						|
            ['checkbox'],
 | 
						|
            ['checkboxset'],
 | 
						|
            ['column'],
 | 
						|
            ['columns'],
 | 
						|
            ['columnsControls'],
 | 
						|
            ['component'],
 | 
						|
            ['dataSource'],
 | 
						|
            ['date'],
 | 
						|
            ['dynamicRows'],
 | 
						|
            ['email'],
 | 
						|
            ['exportButton'],
 | 
						|
            ['field'],
 | 
						|
            ['fieldset'],
 | 
						|
            ['file'],
 | 
						|
            ['fileUploader'],
 | 
						|
            ['filterDate'],
 | 
						|
            ['filterInput'],
 | 
						|
            ['filterRange'],
 | 
						|
            ['filters'],
 | 
						|
            ['form'],
 | 
						|
            ['hidden'],
 | 
						|
            ['htmlContent'],
 | 
						|
            ['imageUploader'],
 | 
						|
            ['input'],
 | 
						|
            ['insertForm'],
 | 
						|
            ['insertListing'],
 | 
						|
            ['listing'],
 | 
						|
            ['listingToolbar'],
 | 
						|
            ['massaction'],
 | 
						|
            ['modal'],
 | 
						|
            ['multiline'],
 | 
						|
            ['multiselect'],
 | 
						|
            ['paging'],
 | 
						|
            ['radioset'],
 | 
						|
            ['range'],
 | 
						|
            ['select'],
 | 
						|
            ['selectionsColumn'],
 | 
						|
            ['tab'],
 | 
						|
            ['text'],
 | 
						|
            ['textarea'],
 | 
						|
            ['wysiwyg'],
 | 
						|
        ];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve fixture files by $componentName
 | 
						|
     *
 | 
						|
     * @param string $componentName
 | 
						|
     * @return FileIterator
 | 
						|
     */
 | 
						|
    private function getFixtureFiles($componentName)
 | 
						|
    {
 | 
						|
        $realPaths = [];
 | 
						|
        foreach (['semantic', 'mixed', 'arbitrary'] as $filePath) {
 | 
						|
            $realPaths[] = $this->fixturePath . '/' . $filePath . '/' . $componentName . '.xml';
 | 
						|
        }
 | 
						|
        return new FileIterator(new ReadFactory(new DriverPool), $realPaths);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve expected result by $componentName
 | 
						|
     *
 | 
						|
     * @param string $componentName
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    private function getExpectedResult($componentName)
 | 
						|
    {
 | 
						|
        $filename = $this->fixturePath . '/expected/' . $componentName . '.php';
 | 
						|
        if (is_file($filename)) {
 | 
						|
            return include($filename);
 | 
						|
        }
 | 
						|
 | 
						|
        return [];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve fixture type by file path
 | 
						|
     *
 | 
						|
     * @param string $path
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    private function getTypeByPath($path)
 | 
						|
    {
 | 
						|
        $result = '';
 | 
						|
        $pos = strpos($path, $this->fixturePath);
 | 
						|
        if ($pos !== false) {
 | 
						|
            $restParts = explode('/', substr($path, strlen($this->fixturePath) + 1));
 | 
						|
            $result = array_shift($restParts);
 | 
						|
        }
 | 
						|
 | 
						|
        return $result;
 | 
						|
    }
 | 
						|
}
 |