98 lines
3.4 KiB
PHP
Executable File
98 lines
3.4 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Test format of layout files
|
|
*
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Test\Integrity\Layout;
|
|
|
|
class HandlesTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
/**
|
|
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
|
|
*/
|
|
public function testHandleDeclarations()
|
|
{
|
|
$invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
|
|
$invoker(
|
|
/**
|
|
* Test dependencies between handle attributes that is out of coverage by XSD
|
|
*
|
|
* @param string $layoutFile
|
|
*/
|
|
function ($layoutFile) {
|
|
$issues = [];
|
|
$node = simplexml_load_file($layoutFile);
|
|
$label = $node['label'];
|
|
$designAbstraction = $node['design_abstraction'];
|
|
if (!$label) {
|
|
if ($designAbstraction) {
|
|
$issues[] = 'Attribute "design_abstraction" is defined, but "label" is not';
|
|
}
|
|
}
|
|
|
|
if ($issues) {
|
|
$this->fail("Issues found in handle declaration:\n" . implode("\n", $issues) . "\n");
|
|
}
|
|
},
|
|
\Magento\Framework\App\Utility\Files::init()->getLayoutFiles()
|
|
);
|
|
}
|
|
|
|
public function testContainerDeclarations()
|
|
{
|
|
$invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
|
|
$invoker(
|
|
/**
|
|
* Test dependencies between container attributes that is out of coverage by XSD
|
|
*
|
|
* @param string $layoutFile
|
|
*/
|
|
function ($layoutFile) {
|
|
$issues = [];
|
|
$xml = simplexml_load_file($layoutFile);
|
|
$containers = $xml->xpath('/layout//container') ?: [];
|
|
/** @var \SimpleXMLElement $node */
|
|
foreach ($containers as $node) {
|
|
if (!isset($node['htmlTag']) && (isset($node['htmlId']) || isset($node['htmlClass']))) {
|
|
$issues[] = $node->asXML();
|
|
}
|
|
}
|
|
if ($issues) {
|
|
$this->fail(
|
|
'The following containers declare attribute "htmlId" and/or "htmlClass", but not "htmlTag":' .
|
|
"\n" .
|
|
implode(
|
|
"\n",
|
|
$issues
|
|
) . "\n"
|
|
);
|
|
}
|
|
},
|
|
\Magento\Framework\App\Utility\Files::init()->getLayoutFiles()
|
|
);
|
|
}
|
|
|
|
public function testHeadBlockUsage()
|
|
{
|
|
$invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
|
|
$invoker(
|
|
/**
|
|
* Test validate that head block doesn't exist in layout
|
|
*
|
|
* @param string $layoutFile
|
|
*/
|
|
function ($layoutFile) {
|
|
$dom = new \DOMDocument();
|
|
$dom->load($layoutFile);
|
|
$xpath = new \DOMXpath($dom);
|
|
if ($xpath->query("//*[@name='head']")->length) {
|
|
$this->fail('Following file contains deprecated head block. File Path:' . "\n" . $layoutFile);
|
|
}
|
|
},
|
|
\Magento\Framework\App\Utility\Files::init()->getLayoutFiles()
|
|
);
|
|
}
|
|
}
|