Skip to content

Commit 6e255c4

Browse files
authored
ENGCOM-8056: Fix Parameter Tokenizer omitting first char of key #29542
2 parents c6bbad2 + 789bed8 commit 6e255c4

File tree

3 files changed

+51
-18
lines changed

3 files changed

+51
-18
lines changed

dev/tests/integration/testsuite/Magento/Framework/Filter/Template/Tokenizer/ParameterTest.php

+45-14
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,33 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Framework\Filter\Template\Tokenizer;
79

8-
class ParameterTest extends \PHPUnit\Framework\TestCase
10+
use Magento\Catalog\Block\Product\Widget\NewWidget;
11+
use Magento\TestFramework\Helper\Bootstrap;
12+
use PHPUnit\Framework\TestCase;
13+
14+
/**
15+
* Test for \Magento\Framework\Filter\Template\Tokenizer\Parameter.
16+
*/
17+
class ParameterTest extends TestCase
918
{
1019
/**
20+
* Test for getValue
21+
*
22+
* @dataProvider getValueDataProvider
23+
*
1124
* @param string $string
1225
* @param array $values
13-
* @dataProvider getValueDataProvider
26+
* @return void
1427
*/
15-
public function testGetValue($string, $values)
28+
public function testGetValue($string, $values): void
1629
{
17-
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
18-
/** @var \Magento\Framework\Filter\Template\Tokenizer\Parameter $parameter */
19-
$parameter = $objectManager->create(\Magento\Framework\Filter\Template\Tokenizer\Parameter::class);
30+
$objectManager = Bootstrap::getObjectManager();
31+
/** @var Parameter $parameter */
32+
$parameter = $objectManager->create(Parameter::class);
2033
$parameter->setString($string);
2134

2235
foreach ($values as $value) {
@@ -25,30 +38,36 @@ public function testGetValue($string, $values)
2538
}
2639

2740
/**
41+
* Test for tokenize
42+
*
2843
* @dataProvider tokenizeDataProvider
44+
*
2945
* @param string $string
3046
* @param array $params
47+
* @return void
3148
*/
32-
public function testTokenize($string, $params)
49+
public function testTokenize(string $string, array $params): void
3350
{
34-
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
35-
/** @var \Magento\Framework\Filter\Template\Tokenizer\Parameter $parameter */
36-
$parameter = $objectManager->create(\Magento\Framework\Filter\Template\Tokenizer\Parameter::class);
51+
$objectManager = Bootstrap::getObjectManager();
52+
$parameter = $objectManager->create(Parameter::class);
3753
$parameter->setString($string);
54+
3855
$this->assertEquals($params, $parameter->tokenize());
3956
}
4057

4158
/**
59+
* DataProvider for testTokenize
60+
*
4261
* @return array
4362
*/
44-
public function tokenizeDataProvider()
63+
public function tokenizeDataProvider(): array
4564
{
4665
return [
4766
[
4867
' type="Magento\\Catalog\\Block\\Product\\Widget\\NewWidget" display_type="all_products"'
4968
. ' products_count="10" template="product/widget/new/content/new_grid.phtml"',
5069
[
51-
'type' => \Magento\Catalog\Block\Product\Widget\NewWidget::class,
70+
'type' => NewWidget::class,
5271
'display_type' => 'all_products',
5372
'products_count' => 10,
5473
'template' => 'product/widget/new/content/new_grid.phtml'
@@ -58,12 +77,24 @@ public function tokenizeDataProvider()
5877
' type="Magento\Catalog\Block\Product\Widget\NewWidget" display_type="all_products"'
5978
. ' products_count="10" template="product/widget/new/content/new_grid.phtml"',
6079
[
61-
'type' => \Magento\Catalog\Block\Product\Widget\NewWidget::class,
80+
'type' => NewWidget::class,
6281
'display_type' => 'all_products',
6382
'products_count' => 10,
6483
'template' => 'product/widget/new/content/new_grid.phtml'
6584
]
66-
]
85+
],
86+
[
87+
sprintf(
88+
'type="%s" display_type="all_products" products_count="1" template="content/new_grid.phtml"',
89+
NewWidget::class
90+
),
91+
[
92+
'type' => NewWidget::class,
93+
'display_type' => 'all_products',
94+
'products_count' => 1,
95+
'template' => 'content/new_grid.phtml'
96+
],
97+
],
6798
];
6899
}
69100

lib/internal/Magento/Framework/Filter/Template/Tokenizer/AbstractTokenizer.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public function reset()
115115
*/
116116
public function isWhiteSpace()
117117
{
118-
return trim($this->char()) != $this->char();
118+
return $this->_string === '' ?: trim($this->char()) !== $this->char();
119119
}
120120

121121
/**

lib/internal/Magento/Framework/Filter/Template/Tokenizer/Parameter.php

+5-3
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@ public function tokenize()
1919
{
2020
$parameters = [];
2121
$parameterName = '';
22-
while ($this->next()) {
22+
do {
2323
if ($this->isWhiteSpace()) {
2424
continue;
25-
} elseif ($this->char() != '=') {
25+
}
26+
27+
if ($this->char() !== '=') {
2628
$parameterName .= $this->char();
2729
} else {
2830
$parameters[$parameterName] = $this->getValue();
2931
$parameterName = '';
3032
}
31-
}
33+
} while ($this->next());
3234
return $parameters;
3335
}
3436

0 commit comments

Comments
 (0)