12
12
use Magento \FunctionalTestingFramework \Config \Dom \NodePathMatcher ;
13
13
use Magento \FunctionalTestingFramework \Util \ModulePathExtractor ;
14
14
use Magento \FunctionalTestingFramework \Util \Validation \DuplicateNodeValidationUtil ;
15
+ use Magento \FunctionalTestingFramework \Util \Validation \SingleNodePerFileValidationUtil ;
15
16
16
17
/**
17
18
* MFTF page.xml configuration XML DOM utility
@@ -36,6 +37,12 @@ class Dom extends \Magento\FunctionalTestingFramework\Config\MftfDom
36
37
*/
37
38
private $ validationUtil ;
38
39
40
+ /** SingleNodePerFileValidationUtil
41
+ *
42
+ * @var SingleNodePerFileValidationUtil
43
+ */
44
+ private $ singleNodePerFileValidationUtil ;
45
+
39
46
/**
40
47
* Page Dom constructor.
41
48
* @param string $xml
@@ -57,6 +64,7 @@ public function __construct(
57
64
) {
58
65
$ this ->modulePathExtractor = new ModulePathExtractor ();
59
66
$ this ->validationUtil = new DuplicateNodeValidationUtil ('name ' , $ exceptionCollector );
67
+ $ this ->singleNodePerFileValidationUtil = new SingleNodePerFileValidationUtil ($ exceptionCollector );
60
68
parent ::__construct (
61
69
$ xml ,
62
70
$ filename ,
@@ -79,31 +87,44 @@ public function initDom($xml, $filename = null)
79
87
{
80
88
$ dom = parent ::initDom ($ xml , $ filename );
81
89
82
- $ pagesNode = $ dom ->getElementsByTagName ('pages ' )->item (0 );
83
- $ this ->validationUtil ->validateChildUniqueness (
84
- $ pagesNode ,
85
- $ filename ,
86
- $ pagesNode ->getAttribute (self ::PAGE_META_NAME_ATTRIBUTE )
87
- );
88
- $ pageNodes = $ dom ->getElementsByTagName ('page ' );
89
- $ currentModule =
90
- $ this ->modulePathExtractor ->getExtensionPath ($ filename )
91
- . '_ '
92
- . $ this ->modulePathExtractor ->extractModuleName ($ filename );
93
- foreach ($ pageNodes as $ pageNode ) {
94
- $ pageModule = $ pageNode ->getAttribute ("module " );
95
- $ pageName = $ pageNode ->getAttribute ("name " );
96
- if ($ pageModule !== $ currentModule ) {
97
- if (MftfApplicationConfig::getConfig ()->verboseEnabled ()) {
98
- print (
99
- "Page Module does not match path Module. " .
100
- "(Page, Module): ( $ pageName, $ pageModule) - Path Module: $ currentModule " .
101
- PHP_EOL
102
- );
90
+ if ($ dom ->getElementsByTagName ('pages ' )->length > 0 ) {
91
+ /** @var \DOMElement $pagesNode */
92
+ $ pagesNode = $ dom ->getElementsByTagName ('pages ' )[0 ];
93
+ $ this ->validationUtil ->validateChildUniqueness (
94
+ $ pagesNode ,
95
+ $ filename ,
96
+ $ pagesNode ->getAttribute (self ::PAGE_META_NAME_ATTRIBUTE )
97
+ );
98
+
99
+ // Validate single page node per file
100
+ $ this ->singleNodePerFileValidationUtil ->validateSingleNodeForTag (
101
+ $ dom ,
102
+ 'page ' ,
103
+ $ filename
104
+ );
105
+
106
+ if ($ dom ->getElementsByTagName ('page ' )->length > 0 ) {
107
+ /** @var \DOMElement $pageNode */
108
+ $ pageNode = $ dom ->getElementsByTagName ('page ' )[0 ];
109
+ $ currentModule =
110
+ $ this ->modulePathExtractor ->getExtensionPath ($ filename )
111
+ . '_ '
112
+ . $ this ->modulePathExtractor ->extractModuleName ($ filename );
113
+ $ pageModule = $ pageNode ->getAttribute ("module " );
114
+ $ pageName = $ pageNode ->getAttribute ("name " );
115
+ if ($ pageModule !== $ currentModule ) {
116
+ if (MftfApplicationConfig::getConfig ()->verboseEnabled ()) {
117
+ print (
118
+ "Page Module does not match path Module. " .
119
+ "(Page, Module): ( $ pageName, $ pageModule) - Path Module: $ currentModule " .
120
+ PHP_EOL
121
+ );
122
+ }
103
123
}
124
+ $ pageNode ->setAttribute (self ::PAGE_META_FILENAME_ATTRIBUTE , $ filename );
104
125
}
105
- $ pageNode ->setAttribute (self ::PAGE_META_FILENAME_ATTRIBUTE , $ filename );
106
126
}
127
+
107
128
return $ dom ;
108
129
}
109
130
}
0 commit comments