Skip to content

Commit 730f063

Browse files
authored
MQE-516: Duplicated $data.key$ references are not replaced correctly
- replacement now always appends "" . and . "" to replacement, then strips if unecessary. - edited expected output in verification tests.
1 parent c475f52 commit 730f063

File tree

3 files changed

+8
-27
lines changed

3 files changed

+8
-27
lines changed

dev/tests/verification/Resources/ActionGroupFunctionalCest.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class ActionGroupFunctionalCest
110110
$I->amOnPage("/" . $createPerson->getCreatedDataByName('firstname') . "/" . $createPerson->getCreatedDataByName('lastname') . ".html");
111111
$I->fillField("#foo", $createPerson->getCreatedDataByName('firstname'));
112112
$I->fillField("#bar", $createPerson->getCreatedDataByName('lastname'));
113-
$I->searchAndMultiSelectOption("#foo", [$createPerson->getCreatedDataByName('firstname') . "", "" . $createPerson->getCreatedDataByName('lastname')]);
113+
$I->searchAndMultiSelectOption("#foo", [$createPerson->getCreatedDataByName('firstname'), $createPerson->getCreatedDataByName('lastname')]);
114114
$I->see("#element ." . $createPerson->getCreatedDataByName('firstname'));
115115
}
116116

@@ -124,7 +124,7 @@ class ActionGroupFunctionalCest
124124
$I->amOnPage("/" . $this->createPersonParam->getCreatedDataByName('firstname') . "/" . $this->createPersonParam->getCreatedDataByName('lastname') . ".html");
125125
$I->fillField("#foo", $this->createPersonParam->getCreatedDataByName('firstname'));
126126
$I->fillField("#bar", $this->createPersonParam->getCreatedDataByName('lastname'));
127-
$I->searchAndMultiSelectOption("#foo", [$this->createPersonParam->getCreatedDataByName('firstname') . "", "" . $this->createPersonParam->getCreatedDataByName('lastname')]);
127+
$I->searchAndMultiSelectOption("#foo", [$this->createPersonParam->getCreatedDataByName('firstname'), $this->createPersonParam->getCreatedDataByName('lastname')]);
128128
$I->see("#element ." . $this->createPersonParam->getCreatedDataByName('firstname'));
129129
}
130130

dev/tests/verification/Resources/ParameterArrayCest.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class ParameterArrayCest
3434
$I->searchAndMultiSelectOption("#selector", [msq("simpleParamData")."prename"]);
3535
$I->searchAndMultiSelectOption("#selector", ["postname".msq("simpleParamData")]);
3636
$I->searchAndMultiSelectOption("#selector", [$simpleDataKey->getCreatedDataByName('name')]);
37-
$I->searchAndMultiSelectOption("#selector", ["name", "" . $simpleDataKey->getCreatedDataByName('name')]);
37+
$I->searchAndMultiSelectOption("#selector", ["name", $simpleDataKey->getCreatedDataByName('name')]);
3838
$I->searchAndMultiSelectOption("#selector", ['someKey' => $simpleDataKey->getCreatedDataByName('name')]);
3939
$I->searchAndMultiSelectOption("#selector", ['someKey' => "name"]);
4040
$I->searchAndMultiSelectOption("#selector", ['someKey' => msq("simpleParamData")."prename"]);

src/Magento/FunctionalTestingFramework/Util/TestGenerator.php

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,31 +1001,12 @@ private function replaceMatchesIntoArg($matches, &$outputArg, $delimiter)
10011001
*/
10021002
private function processQuoteBreaks($match, $argument, $replacement)
10031003
{
1004-
$outputArg = $argument;
1005-
$beforeIndex = strpos($outputArg, $match) - 1;
1006-
$afterIndex = $beforeIndex + strlen($match) + 1;
1007-
1008-
$quoteBefore = false;
1009-
// Determine if there is a " before/after the $match, and if there is only one " before/after match.
1010-
if ($beforeIndex == 0
1011-
|| ($argument[$beforeIndex] == '"' && substr_count($argument, '"', 0, $beforeIndex) < 1)) {
1012-
$quoteBefore = true;
1013-
}
1014-
$quoteAfter = $argument[$afterIndex] == '"' && substr_count($argument, '"', $afterIndex+1) < 1;
1004+
$outputArg = str_replace($match, '" . ' . $replacement . ' . "', $argument);
10151005

1016-
//Remove quotes at either end of argument if they aren't necessary. Add double-quote concatenation if needed.
1017-
if ($quoteBefore) {
1018-
$outputArg = substr($outputArg, 0, $beforeIndex) . substr($outputArg, $beforeIndex+1);
1019-
$afterIndex--;
1020-
} else {
1021-
$replacement = '" . ' . $replacement;
1022-
}
1023-
if ($quoteAfter) {
1024-
$outputArg = substr($outputArg, 0, $afterIndex) . substr($outputArg, $afterIndex+1);
1025-
} else {
1026-
$replacement = $replacement . ' . "';
1027-
}
1028-
$outputArg = str_replace($match, $replacement, $outputArg);
1006+
//Sanitize string of any unnecessary '"" .' and '. ""'.
1007+
//Regex means: Search for '"" . ' but not '\"" . ' and ' . ""'.
1008+
//Matches on '"" . ' and ' . ""', but not on '\"" . ' and ' . "\"'.
1009+
$outputArg = preg_replace('/(?(?<![\\\\])"" \. )| \. ""/', "", $outputArg);
10291010
return $outputArg;
10301011
}
10311012

0 commit comments

Comments
 (0)