Skip to content

Commit 5842fea

Browse files
committed
MAGETWO-66686: Use Json serializer class instead of direct call
1 parent d0b35ba commit 5842fea

File tree

10 files changed

+165
-18
lines changed

10 files changed

+165
-18
lines changed

lib/internal/Magento/Framework/App/Http/Context.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* See COPYING.txt for license details.
55
*/
66
namespace Magento\Framework\App\Http;
7+
use Magento\Framework\App\ObjectManager;
8+
use Magento\Framework\Serialize\Serializer\Json;
79

810
/**
911
* Context data for requests
@@ -27,14 +29,21 @@ class Context
2729
*/
2830
protected $default = [];
2931

32+
/**
33+
* @var Json
34+
*/
35+
private $serializer;
36+
3037
/**
3138
* @param array $data
3239
* @param array $default
40+
* @param Json|null $serializer
3341
*/
34-
public function __construct(array $data = [], array $default = [])
42+
public function __construct(array $data = [], array $default = [], Json $serializer = null)
3543
{
3644
$this->data = $data;
3745
$this->default = $default;
46+
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(Json::class);
3847
}
3948

4049
/**
@@ -105,7 +114,7 @@ public function getVaryString()
105114
$data = $this->getData();
106115
if (!empty($data)) {
107116
ksort($data);
108-
return sha1(json_encode($data));
117+
return sha1($this->serializer->serialize($data));
109118
}
110119
return null;
111120
}

lib/internal/Magento/Framework/App/PageCache/Identifier.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* See COPYING.txt for license details.
55
*/
66
namespace Magento\Framework\App\PageCache;
7+
use Magento\Framework\App\ObjectManager;
8+
use Magento\Framework\Serialize\Serializer\Json;
79

810
/**
911
* Page unique identifier
@@ -20,16 +22,24 @@ class Identifier
2022
*/
2123
protected $context;
2224

25+
/**
26+
* @var Json
27+
*/
28+
private $serializer;
29+
2330
/**
2431
* @param \Magento\Framework\App\Request\Http $request
2532
* @param \Magento\Framework\App\Http\Context $context
33+
* @param Json|null $serializer
2634
*/
2735
public function __construct(
2836
\Magento\Framework\App\Request\Http $request,
29-
\Magento\Framework\App\Http\Context $context
37+
\Magento\Framework\App\Http\Context $context,
38+
Json $serializer = null
3039
) {
3140
$this->request = $request;
3241
$this->context = $context;
42+
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(Json::class);
3343
}
3444

3545
/**
@@ -45,6 +55,6 @@ public function getValue()
4555
$this->request->get(\Magento\Framework\App\Response\Http::COOKIE_VARY_STRING)
4656
?: $this->context->getVaryString()
4757
];
48-
return sha1(json_encode($data));
58+
return sha1($this->serializer->serialize($data));
4959
}
5060
}

lib/internal/Magento/Framework/App/Test/Unit/Http/ContextTest.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
namespace Magento\Framework\App\Test\Unit\Http;
88

99
use \Magento\Framework\App\Http\Context;
10+
use Magento\Framework\Serialize\Serializer\Json;
1011

1112
class ContextTest extends \PHPUnit_Framework_TestCase
1213
{
@@ -20,10 +21,33 @@ class ContextTest extends \PHPUnit_Framework_TestCase
2021
*/
2122
protected $object;
2223

24+
/**
25+
* @var Json|\PHPUnit_Framework_MockObject_MockObject
26+
*/
27+
private $serializerMock;
28+
2329
protected function setUp()
2430
{
2531
$this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
26-
$this->object = $this->objectManager->getObject(\Magento\Framework\App\Http\Context::class);
32+
$this->serializerMock = $this->getMockBuilder(Json::class)
33+
->setMethods(['serialize'])
34+
->disableOriginalConstructor()
35+
->getMock();
36+
$this->serializerMock->expects($this->any())
37+
->method('serialize')
38+
->will(
39+
$this->returnCallback(
40+
function ($value) {
41+
return json_encode($value);
42+
}
43+
)
44+
);
45+
$this->object = $this->objectManager->getObject(
46+
\Magento\Framework\App\Http\Context::class,
47+
[
48+
'serializer' => $this->serializerMock
49+
]
50+
);
2751
}
2852

2953
public function testGetValue()
@@ -67,7 +91,7 @@ public function testGetVaryString()
6791

6892
public function testToArray()
6993
{
70-
$newObject = new \Magento\Framework\App\Http\Context(['key' => 'value']);
94+
$newObject = new \Magento\Framework\App\Http\Context(['key' => 'value'], [], $this->serializerMock);
7195

7296
$newObject->setValue('key1', 'value1', 'default1');
7397
$newObject->setValue('key2', 'value2', 'default2');

lib/internal/Magento/Framework/App/Test/Unit/PageCache/IdentifierTest.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Magento\Framework\App\PageCache\Identifier;
1010
use Magento\Framework\App\Response\Http;
1111
use Magento\Framework\App\Request\Http as HttpRequest;
12+
use Magento\Framework\Serialize\Serializer\Json;
1213
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
1314

1415
class IdentifierTest extends \PHPUnit_Framework_TestCase
@@ -38,6 +39,11 @@ class IdentifierTest extends \PHPUnit_Framework_TestCase
3839
*/
3940
private $model;
4041

42+
/**
43+
* @var Json|\PHPUnit_Framework_MockObject_MockObject
44+
*/
45+
private $serializerMock;
46+
4147
/**
4248
* @return \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
4349
*/
@@ -51,11 +57,27 @@ protected function setUp()
5157
$this->requestMock = $this->getMockBuilder(HttpRequest::class)
5258
->disableOriginalConstructor()
5359
->getMock();
60+
61+
$this->serializerMock = $this->getMockBuilder(Json::class)
62+
->setMethods(['serialize'])
63+
->disableOriginalConstructor()
64+
->getMock();
65+
$this->serializerMock->expects($this->any())
66+
->method('serialize')
67+
->will(
68+
$this->returnCallback(
69+
function ($value) {
70+
return json_encode($value);
71+
}
72+
)
73+
);
74+
5475
$this->model = $this->objectManager->getObject(
5576
Identifier::class,
5677
[
57-
'request' => $this->requestMock,
58-
'context' => $this->contextMock,
78+
'request' => $this->requestMock,
79+
'context' => $this->contextMock,
80+
'serializer' => $this->serializerMock,
5981
]
6082
);
6183
return parent::setUp();

lib/internal/Magento/Framework/App/Test/Unit/Utility/FilesTest.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
use Magento\Framework\App\Utility\Files;
99
use Magento\Framework\Component\ComponentRegistrar;
10+
use Magento\Framework\Serialize\Serializer\Json;
1011

1112
class FilesTest extends \PHPUnit_Framework_TestCase
1213
{
@@ -20,18 +21,45 @@ class FilesTest extends \PHPUnit_Framework_TestCase
2021
*/
2122
private $componentRegistrar;
2223

24+
/**
25+
* @var Json|\PHPUnit_Framework_MockObject_MockObject
26+
*/
27+
private $serializerMock;
28+
2329
protected function setUp()
2430
{
2531
$this->componentRegistrar = new ComponentRegistrar();
2632
$this->dirSearch = $this->getMock(\Magento\Framework\Component\DirSearch::class, [], [], '', false);
33+
34+
$this->serializerMock = $this->getMockBuilder(Json::class)
35+
->setMethods(['serialize'])
36+
->disableOriginalConstructor()
37+
->getMock();
38+
$this->serializerMock->expects($this->any())
39+
->method('serialize')
40+
->will(
41+
$this->returnCallback(
42+
function ($value) {
43+
return json_encode($value);
44+
}
45+
)
46+
);
47+
2748
$themePackageList = $this->getMock(
2849
\Magento\Framework\View\Design\Theme\ThemePackageList::class,
2950
[],
3051
[],
3152
'',
3253
false
3354
);
34-
Files::setInstance(new Files($this->componentRegistrar, $this->dirSearch, $themePackageList));
55+
Files::setInstance(
56+
new Files(
57+
$this->componentRegistrar,
58+
$this->dirSearch,
59+
$themePackageList,
60+
$this->serializerMock
61+
)
62+
);
3563
}
3664

3765
protected function tearDown()

lib/internal/Magento/Framework/App/Utility/Files.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66

77
namespace Magento\Framework\App\Utility;
88

9+
use Magento\Framework\App\ObjectManager;
910
use Magento\Framework\Component\ComponentRegistrar;
1011
use Magento\Framework\Component\DirSearch;
12+
use Magento\Framework\Serialize\Serializer\Json;
1113
use Magento\Framework\View\Design\Theme\ThemePackageList;
1214
use Magento\Framework\Filesystem\Glob;
1315

@@ -69,6 +71,11 @@ class Files
6971
*/
7072
private $themePackageList;
7173

74+
/**
75+
* @var Json
76+
*/
77+
private $serializer;
78+
7279
/**
7380
* Setter for an instance of self
7481
*
@@ -117,15 +124,18 @@ public static function composeDataSets(array $files)
117124
* @param ComponentRegistrar $componentRegistrar
118125
* @param DirSearch $dirSearch
119126
* @param ThemePackageList $themePackageList
127+
* @param Json|null $serializer
120128
*/
121129
public function __construct(
122130
ComponentRegistrar $componentRegistrar,
123131
DirSearch $dirSearch,
124-
ThemePackageList $themePackageList
132+
ThemePackageList $themePackageList,
133+
Json $serializer = null
125134
) {
126135
$this->componentRegistrar = $componentRegistrar;
127136
$this->dirSearch = $dirSearch;
128137
$this->themePackageList = $themePackageList;
138+
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(Json::class);
129139
}
130140

131141
/**
@@ -375,7 +385,7 @@ public function getConfigFiles(
375385
$excludedFileNames = ['wsdl.xml', 'wsdl2.xml', 'wsi.xml'],
376386
$asDataSet = true
377387
) {
378-
$cacheKey = __METHOD__ . '|' . json_encode([$fileNamePattern, $excludedFileNames, $asDataSet]);
388+
$cacheKey = __METHOD__ . '|' . $this->serializer->serialize([$fileNamePattern, $excludedFileNames, $asDataSet]);
379389
if (!isset(self::$_cache[$cacheKey])) {
380390
$files = $this->dirSearch->collectFiles(ComponentRegistrar::MODULE, "/etc/{$fileNamePattern}");
381391
$files = array_filter(
@@ -407,7 +417,7 @@ public function getXmlCatalogFiles(
407417
$excludedFileNames = [],
408418
$asDataSet = true
409419
) {
410-
$cacheKey = __METHOD__ . '|' . json_encode([$fileNamePattern, $excludedFileNames, $asDataSet]);
420+
$cacheKey = __METHOD__ . '|' . $this->serializer->serialize([$fileNamePattern, $excludedFileNames, $asDataSet]);
411421
if (!isset(self::$_cache[$cacheKey])) {
412422
$files = $this->getFilesSubset(
413423
$this->componentRegistrar->getPaths(ComponentRegistrar::MODULE),

lib/internal/Magento/Framework/Test/Unit/UrlTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,9 @@ public function testGetUrlIdempotentSetRoutePath()
290290
->method('getScope')
291291
->will($this->returnValue($this->scopeMock));
292292

293+
$this->urlModifier->expects($this->exactly(1))->method('execute');
294+
295+
$this->assertEquals('catalog/product/view', $model->getUrl('catalog/product/view'));
293296
$this->assertEquals('catalog/product/view', $model->getUrl('catalog/product/view'));
294297
}
295298

lib/internal/Magento/Framework/Url.php

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
namespace Magento\Framework;
1010

11+
use Magento\Framework\App\ObjectManager;
12+
use Magento\Framework\Serialize\Serializer\Json;
1113
use Magento\Framework\Url\HostChecker;
1214

1315
/**
@@ -185,6 +187,11 @@ class Url extends \Magento\Framework\DataObject implements \Magento\Framework\Ur
185187
*/
186188
private $hostChecker;
187189

190+
/**
191+
* @var Json
192+
*/
193+
private $serializer;
194+
188195
/**
189196
* @param \Magento\Framework\App\Route\ConfigInterface $routeConfig
190197
* @param \Magento\Framework\App\RequestInterface $request
@@ -199,6 +206,7 @@ class Url extends \Magento\Framework\DataObject implements \Magento\Framework\Ur
199206
* @param string $scopeType
200207
* @param array $data
201208
* @param HostChecker|null $hostChecker
209+
* @param Json|null $serializer
202210
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
203211
*/
204212
public function __construct(
@@ -214,7 +222,8 @@ public function __construct(
214222
\Magento\Framework\Url\RouteParamsPreprocessorInterface $routeParamsPreprocessor,
215223
$scopeType,
216224
array $data = [],
217-
HostChecker $hostChecker = null
225+
HostChecker $hostChecker = null,
226+
Json $serializer = null
218227
) {
219228
$this->_request = $request;
220229
$this->_routeConfig = $routeConfig;
@@ -229,6 +238,7 @@ public function __construct(
229238
$this->_scopeType = $scopeType;
230239
$this->hostChecker = $hostChecker ?: \Magento\Framework\App\ObjectManager::getInstance()
231240
->get(HostChecker::class);
241+
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(Json::class);
232242
parent::__construct($data);
233243
}
234244

@@ -856,7 +866,7 @@ function ($item) use (&$isCached) {
856866
ksort($cachedParams);
857867
}
858868

859-
$cacheKey = sha1($routePath . json_encode($cachedParams));
869+
$cacheKey = sha1($routePath . $this->serializer->serialize($cachedParams));
860870
if (!isset($this->cacheUrl[$cacheKey])) {
861871
$this->cacheUrl[$cacheKey] = $this->getUrlModifier()->execute(
862872
$this->createUrl($routePath, $routeParams)

0 commit comments

Comments
 (0)