Skip to content

Commit 9991160

Browse files
committed
MQE-1963: Update XSD Schema to verify that file has only single entity
1 parent 378cb3f commit 9991160

File tree

7 files changed

+61
-27
lines changed

7 files changed

+61
-27
lines changed

etc/di.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
<item name="/pages/page" xsi:type="string">name</item>
8989
<item name="/pages/page/section" xsi:type="string">name</item>
9090
</argument>
91-
<argument name="fileName" xsi:type="string">/[\p{L}\p{N}_\-]+Page.xml$/</argument>
91+
<argument name="fileName" xsi:type="string">/Page\.xml$/</argument>
9292
<argument name="defaultScope" xsi:type="string">Page</argument>
9393
</arguments>
9494
</virtualType>
@@ -102,7 +102,7 @@
102102
<item name="/sections/section" xsi:type="string">name</item>
103103
<item name="/sections/section/element" xsi:type="string">name</item>
104104
</argument>
105-
<argument name="fileName" xsi:type="string">/[\p{L}\p{N}_\-]+Section.xml$/</argument>
105+
<argument name="fileName" xsi:type="string">/Section\.xml$/</argument>
106106
<argument name="defaultScope" xsi:type="string">Section</argument>
107107
</arguments>
108108
</virtualType>
@@ -163,7 +163,7 @@
163163
<item name="/entities/entity/requiredEntity" xsi:type="string"/>
164164
<item name="/entities/entity/array" xsi:type="string"/>
165165
</argument>
166-
<argument name="fileName" xsi:type="string">/[\p{L}\p{N}_\-]+Data.xml$/</argument>
166+
<argument name="fileName" xsi:type="string">/Data\.xml$/</argument>
167167
<argument name="defaultScope" xsi:type="string">Data</argument>
168168
</arguments>
169169
</virtualType>
@@ -198,7 +198,7 @@
198198
<argument name="mergeablePaths" xsi:type="array">
199199
<item name="/operations/operation/object" xsi:type="string"/>
200200
</argument>
201-
<argument name="fileName" xsi:type="string">/[\p{L}\p{N}_\-]+Meta.xml$/</argument>
201+
<argument name="fileName" xsi:type="string">/Meta\.xml$/</argument>
202202
<argument name="defaultScope" xsi:type="string">Metadata</argument>
203203
</arguments>
204204
</virtualType>
@@ -229,7 +229,7 @@
229229
<item name="/tests/test/(before|after)/(createData|updateData|getData)/field" xsi:type="string">key</item>
230230
<item name="/tests/test/annotations(/group)+" xsi:type="string">value</item>
231231
</argument>
232-
<argument name="fileName" xsi:type="string">/[\p{L}\p{N}_\-]+.xml$/</argument>
232+
<argument name="fileName" xsi:type="string">/\.xml$/</argument>
233233
<argument name="defaultScope" xsi:type="string">Test</argument>
234234
</arguments>
235235
</virtualType>
@@ -304,7 +304,7 @@
304304
<item name="/actionGroups/actionGroup/(createData|updateData|getData)/field" xsi:type="string">key</item>
305305
<item name="/actionGroups/actionGroup/remove" xsi:type="string">keyForRemoval</item>
306306
</argument>
307-
<argument name="fileName" xsi:type="string">/[\p{L}\p{N}_\-]+ActionGroup.xml$/</argument>
307+
<argument name="fileName" xsi:type="string">/ActionGroup\.xml$/</argument>
308308
<argument name="defaultScope" xsi:type="string">ActionGroup</argument>
309309
</arguments>
310310
</virtualType>
@@ -372,7 +372,7 @@
372372
<item name="/suites/suite/include/(group|test|module)" xsi:type="string">name</item>
373373
<item name="/suites/suite/exclude/(group|test|module)" xsi:type="string">name</item>
374374
</argument>
375-
<argument name="fileName" xsi:type="string">/[\p{L}\p{N}_\-]+.xml$/</argument>
375+
<argument name="fileName" xsi:type="string">/\.xml$/</argument>
376376
<argument name="defaultScope" xsi:type="string">Suite</argument>
377377
</arguments>
378378
</virtualType>

src/Magento/FunctionalTestingFramework/Console/GenerateTestsCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ protected function configure()
7777
*/
7878
protected function execute(InputInterface $input, OutputInterface $output)
7979
{
80-
$this->setOutputStyle($input, $output);
80+
$this->setIOStyle($input, $output);
8181
$tests = $input->getArgument('name');
8282
$config = $input->getOption('config');
8383
$json = $input->getOption('tests'); // for backward compatibility

src/Magento/FunctionalTestingFramework/Suite/Util/SuiteObjectExtractor.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ private function getTestsByModuleName($moduleName)
248248
/** @var TestObject $testObject */
249249
$filename = $testObject->getFilename();
250250
if ($pathExtractor->extractModuleName($filename) === $moduleName) {
251-
$testObjects[] = $testObject;
251+
$testObjects[$testName] = $testObject;
252252
}
253253
}
254254
return $testObjects;

src/Magento/FunctionalTestingFramework/Upgrade/RemoveModuleFileInSuiteFiles.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ function ($matches) use ($file) {
102102
if (!$this->printNotice) {
103103
$this->ioStyle->note(
104104
'`file` is not a valid attribute for <module> in Suite XML schema.' . PHP_EOL
105-
. 'The `file`references in the following xml files are commented out. Consider using <test> instead.'
105+
. 'The `file`references in the following xml files are commented out. '
106+
. 'Consider using <test> instead.'
106107
);
107108
$this->printNotice = true;
108109
}

src/Magento/FunctionalTestingFramework/Upgrade/RenameMetadataFiles.php

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66

77
namespace Magento\FunctionalTestingFramework\Upgrade;
88

9+
use Magento\FunctionalTestingFramework\Util\Script\ScriptUtil;
910
use Symfony\Component\Console\Input\InputInterface;
11+
use Symfony\Component\Console\Output\OutputInterface;
1012
use Symfony\Component\Finder\Finder;
1113

1214
/**
@@ -18,22 +20,29 @@ class RenameMetadataFiles implements UpgradeInterface
1820
/**
1921
* Upgrades all test xml files
2022
*
21-
* @param InputInterface $input
23+
* @param InputInterface $input
24+
* @param OutputInterface $output
2225
* @return string
2326
*/
24-
public function execute(InputInterface $input)
27+
public function execute(InputInterface $input, OutputInterface $output)
2528
{
26-
$path = $input->getArgument("path");
27-
$finder = new Finder();
28-
$finder->files()->in($path)->name("*-meta.xml");
29+
$testPaths[] = $input->getArgument('path');
30+
if (empty($testPaths[0])) {
31+
$testPaths = ScriptUtil::getAllModulePaths();
32+
}
33+
34+
foreach ($testPaths as $testsPath) {
35+
$finder = new Finder();
36+
$finder->files()->in($testsPath)->name("*-meta.xml");
2937

30-
foreach ($finder->files() as $file) {
31-
$oldFileName = $file->getFileName();
32-
$newFileName = $this->convertFileName($oldFileName);
33-
$oldPath = $file->getPathname();
34-
$newPath = $file->getPath() . "/" . $newFileName;
35-
print("Renaming " . $oldPath . " => " . $newPath . "\n");
36-
rename($oldPath, $newPath);
38+
foreach ($finder->files() as $file) {
39+
$oldFileName = $file->getFileName();
40+
$newFileName = $this->convertFileName($oldFileName);
41+
$oldPath = $file->getPathname();
42+
$newPath = $file->getPath() . "/" . $newFileName;
43+
print("Renaming " . $oldPath . " => " . $newPath . "\n");
44+
rename($oldPath, $newPath);
45+
}
3746
}
3847

3948
return "Finished renaming -meta.xml files.";

src/Magento/FunctionalTestingFramework/Upgrade/SplitMultipleEntitiesFiles.php

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ public function execute(InputInterface $input, OutputInterface $output)
9696
private function processXmlFiles($xmlFiles, $type, $urn)
9797
{
9898
foreach ($xmlFiles as $file) {
99+
100+
$filename = $file->getRealPath();
101+
$this->output->writeln('Looping on file:' . $filename);
102+
99103
$contents = $file->getContents();
100104
$entityContents = $this->getEntityContents($contents, $type);
101105
if (count($entityContents) > 1) {
@@ -137,15 +141,35 @@ private function processXmlFiles($xmlFiles, $type, $urn)
137141
*/
138142
private function getEntityContents($contents, $type)
139143
{
140-
$pattern = '/[\S\s]+\n(?<entity>[\s]*<' . lcfirst($type)
144+
$nonEmptyTag = '/[\S\s]+\n(?<entity>[\s]*<' . lcfirst($type)
141145
. '[^\<\>]+name[\s]*=[\s]*"(?<name>[^\"\'\<\>\&]+)"[^\<\>]*>[\S\s]+<\/'
142146
. lcfirst($type) . '[\s]*>)+[\S\s]+/';
147+
$entityContents = $this->scanForPattern($contents, $type, $nonEmptyTag);
148+
149+
$emptyTag = '/[\S\s]+\n(?<entity>[\s]*<' . lcfirst($type)
150+
. '[^\<\>]+name[\s]*=[\s]*"(?<name>[^\"\'\<\>\&]+)"[^\<\>]*\/>)/';
151+
$entityContents = array_merge($entityContents, $this->scanForPattern($contents, $type, $emptyTag));
152+
153+
return $entityContents;
154+
}
155+
156+
/**
157+
* Scan contents to match given pattern
158+
*
159+
* @param string $contents
160+
* @param string $type
161+
* @param string $pattern
162+
* @return array
163+
*/
164+
private function scanForPattern($contents, $type, $pattern)
165+
{
143166
preg_match($pattern, $contents, $matches);
144167
if (isset($matches['entity']) && isset($matches['name'])) {
145168
$contents = str_replace($matches['entity'], '', $contents);
146169
$entityContents[trim($matches['name'])] = $matches['entity'];
147-
if (!empty($this->getEntityContents($contents, $type))) {
148-
$entityContents = array_merge($entityContents, $this->getEntityContents($contents, $type));
170+
$restEntityContents = $this->scanForPattern($contents, $type, $pattern);
171+
if (!empty($restEntityContents)) {
172+
$entityContents = array_merge($entityContents, $restEntityContents);
149173
}
150174
return $entityContents;
151175
} else {

src/Magento/FunctionalTestingFramework/Util/Validation/SingleNodePerFileValidationUtil.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ public function __construct($exceptionCollector)
4242
public function validateSingleNodeForTag($dom, $tag, $filename = '')
4343
{
4444
$tagNodes = $dom->getElementsByTagName($tag);
45-
$count = $tagNodes->count();
46-
if ( $count == 1) {
45+
$count = $tagNodes->length;
46+
if ($count == 1) {
4747
return;
4848
}
4949

0 commit comments

Comments
 (0)