UnserializeTest.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Unserialize\Test\Unit;
  7. use Magento\Framework\Serialize\Serializer\Serialize;
  8. use Magento\Framework\Unserialize\Unserialize;
  9. class UnserializeTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /**
  12. * @var Serialize|\PHPUnit_Framework_MockObject_MockObject
  13. */
  14. private $serializerMock;
  15. /**
  16. * @var Unserialize
  17. */
  18. private $unserialize;
  19. protected function setUp()
  20. {
  21. $this->serializerMock = $this->getMockBuilder(Serialize::class)
  22. ->setMethods(
  23. ['serialize', 'unserialize']
  24. )
  25. ->getMock();
  26. $this->unserialize = new Unserialize($this->serializerMock);
  27. }
  28. public function testUnserializeArray()
  29. {
  30. $data = ['foo' => 'bar', 1, 4];
  31. $serializedData = 'serialzied data';
  32. $this->serializerMock->expects($this->any())
  33. ->method('unserialize')
  34. ->with($serializedData)
  35. ->willReturn($data);
  36. $this->assertEquals(
  37. $data,
  38. $this->unserialize->unserialize($serializedData)
  39. );
  40. }
  41. /**
  42. * @param string $serialized The string containing serialized object
  43. * @expectedException \Exception
  44. * @expectedExceptionMessage String contains serialized object
  45. * @dataProvider unserializeObjectDataProvider
  46. */
  47. public function testUnserializeObject($serialized)
  48. {
  49. $this->assertFalse($this->unserialize->unserialize($serialized));
  50. }
  51. /**
  52. * @return array
  53. */
  54. public function unserializeObjectDataProvider()
  55. {
  56. return [
  57. // Upper and lower case serialized object indicators, nested in array
  58. ['a:2:{i:0;s:3:"foo";i:1;O:6:"Object":1:{s:11:"Objectvar";i:123;}}'],
  59. ['a:2:{i:0;s:3:"foo";i:1;o:6:"Object":1:{s:11:"Objectvar";i:123;}}'],
  60. ['a:2:{i:0;s:3:"foo";i:1;c:6:"Object":1:{s:11:"Objectvar";i:123;}}'],
  61. ['a:2:{i:0;s:3:"foo";i:1;C:6:"Object":1:{s:11:"Objectvar";i:123;}}'],
  62. // Positive, negative signs on object length, non-nested
  63. ['o:+6:"Object":1:{s:11:"Objectvar";i:123;}'],
  64. ['o:-6:"Object":1:{s:11:"Objectvar";i:123;}']
  65. ];
  66. }
  67. }