/tests/ZendTest/Serializer/Adapter/WddxTest.php

https://github.com/zucchi/zf2 · PHP · 236 lines · 215 code · 4 blank · 17 comment · 1 complexity · 399c7a18d7ee25d782969d1a2c10af14 MD5 · raw file

  1. <?php
  2. /**
  3. * Zend Framework (http://framework.zend.com/)
  4. *
  5. * @link http://github.com/zendframework/zf2 for the canonical source repository
  6. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. * @package Zend_Serializer
  9. */
  10. namespace ZendTest\Serializer\Adapter;
  11. use Zend\Serializer;
  12. use Zend\Serializer\Exception\ExtensionNotLoadedException;
  13. /**
  14. * @category Zend
  15. * @package Zend_Serializer
  16. * @subpackage UnitTests
  17. * @group Zend_Serializer
  18. */
  19. class WddxTest extends \PHPUnit_Framework_TestCase
  20. {
  21. /**
  22. * @var Serializer\Adapter\Wddx
  23. */
  24. private $adapter;
  25. public function setUp()
  26. {
  27. if (!extension_loaded('wddx')) {
  28. try {
  29. new Serializer\Adapter\Wddx();
  30. $this->fail("Zend\\Serializer\\Adapter\\Wddx needs missing ext/wddx but did't throw exception");
  31. } catch (ExtensionNotLoadedException $e) {}
  32. $this->markTestSkipped('Zend\\Serializer\\Adapter\\Wddx needs ext/wddx');
  33. }
  34. $this->adapter = new Serializer\Adapter\Wddx();
  35. }
  36. public function tearDown()
  37. {
  38. $this->adapter = null;
  39. }
  40. public function testSerializeString()
  41. {
  42. $value = 'test';
  43. $expected = '<wddxPacket version=\'1.0\'><header/>'
  44. . '<data><string>test</string></data></wddxPacket>';
  45. $data = $this->adapter->serialize($value);
  46. $this->assertEquals($expected, $data);
  47. }
  48. public function testSerializeStringWithComment()
  49. {
  50. $value = 'test';
  51. $expected = '<wddxPacket version=\'1.0\'><header><comment>a test comment</comment></header>'
  52. . '<data><string>test</string></data></wddxPacket>';
  53. $this->adapter->getOptions()->setComment('a test comment');
  54. $data = $this->adapter->serialize($value);
  55. $this->assertEquals($expected, $data);
  56. }
  57. public function testSerializeFalse()
  58. {
  59. $value = false;
  60. $expected = '<wddxPacket version=\'1.0\'><header/>'
  61. . '<data><boolean value=\'false\'/></data></wddxPacket>';
  62. $data = $this->adapter->serialize($value);
  63. $this->assertEquals($expected, $data);
  64. }
  65. public function testSerializeTrue()
  66. {
  67. $value = true;
  68. $expected = '<wddxPacket version=\'1.0\'><header/>'
  69. . '<data><boolean value=\'true\'/></data></wddxPacket>';
  70. $data = $this->adapter->serialize($value);
  71. $this->assertEquals($expected, $data);
  72. }
  73. public function testSerializeNull()
  74. {
  75. $value = null;
  76. $expected = '<wddxPacket version=\'1.0\'><header/>'
  77. . '<data><null/></data></wddxPacket>';
  78. $data = $this->adapter->serialize($value);
  79. $this->assertEquals($expected, $data);
  80. }
  81. public function testSerializeNumeric()
  82. {
  83. $value = 100;
  84. $expected = '<wddxPacket version=\'1.0\'><header/>'
  85. . '<data><number>100</number></data></wddxPacket>';
  86. $data = $this->adapter->serialize($value);
  87. $this->assertEquals($expected, $data);
  88. }
  89. public function testSerializeObject()
  90. {
  91. $value = new \stdClass();
  92. $value->test = "test";
  93. $expected = '<wddxPacket version=\'1.0\'><header/>'
  94. . '<data><struct>'
  95. . '<var name=\'php_class_name\'><string>stdClass</string></var>'
  96. . '<var name=\'test\'><string>test</string></var>'
  97. . '</struct></data></wddxPacket>';
  98. $data = $this->adapter->serialize($value);
  99. $this->assertEquals($expected, $data);
  100. }
  101. public function testUnserializeString()
  102. {
  103. $value = '<wddxPacket version=\'1.0\'><header/>'
  104. . '<data><string>test</string></data></wddxPacket>';
  105. $expected = 'test';
  106. $data = $this->adapter->unserialize($value);
  107. $this->assertEquals($expected, $data);
  108. }
  109. public function testUnserializeFalse()
  110. {
  111. $value = '<wddxPacket version=\'1.0\'><header/>'
  112. . '<data><boolean value=\'false\'/></data></wddxPacket>';
  113. $expected = false;
  114. $data = $this->adapter->unserialize($value);
  115. $this->assertEquals($expected, $data);
  116. }
  117. public function testUnserializeTrue()
  118. {
  119. $value = '<wddxPacket version=\'1.0\'><header/>'
  120. . '<data><boolean value=\'true\'/></data></wddxPacket>';
  121. $expected = true;
  122. $data = $this->adapter->unserialize($value);
  123. $this->assertEquals($expected, $data);
  124. }
  125. public function testUnserializeNull1()
  126. {
  127. $value = '<wddxPacket version=\'1.0\'><header/>'
  128. . '<data><null/></data></wddxPacket>';
  129. $expected = null;
  130. $data = $this->adapter->unserialize($value);
  131. $this->assertEquals($expected, $data);
  132. }
  133. /**
  134. * test to unserialize a valid null value by an valid wddx
  135. * but with some differenzes to the null cenerated by php
  136. * -> the invalid check have to success for all valid wddx null
  137. */
  138. public function testUnserializeNull2()
  139. {
  140. $value = '<wddxPacket version=\'1.0\'><header/>' . "\n"
  141. . '<data><null/></data></wddxPacket>';
  142. $expected = null;
  143. $data = $this->adapter->unserialize($value);
  144. $this->assertEquals($expected, $data);
  145. }
  146. public function testUnserializeNumeric()
  147. {
  148. $value = '<wddxPacket version=\'1.0\'><header/>'
  149. . '<data><number>100</number></data></wddxPacket>';
  150. $expected = 100;
  151. $data = $this->adapter->unserialize($value);
  152. $this->assertEquals($expected, $data);
  153. }
  154. public function testUnserializeObject()
  155. {
  156. $value = '<wddxPacket version=\'1.0\'><header/>'
  157. . '<data><struct>'
  158. . '<var name=\'php_class_name\'><string>stdClass</string></var>'
  159. . '<var name=\'test\'><string>test</string></var>'
  160. . '</struct></data></wddxPacket>';
  161. $expected = new \stdClass();
  162. $expected->test = 'test';
  163. $data = $this->adapter->unserialize($value);
  164. $this->assertEquals($expected, $data);
  165. }
  166. public function testUnserializeInvalidXml()
  167. {
  168. if (!class_exists('SimpleXMLElement', false)) {
  169. $this->markTestSkipped('Skipped by missing ext/simplexml');
  170. }
  171. $value = 'not a serialized string';
  172. $this->setExpectedException(
  173. 'Zend\Serializer\Exception\RuntimeException',
  174. 'DOMDocument::loadXML(): Start tag expected'
  175. );
  176. $this->adapter->unserialize($value);
  177. }
  178. public function testUnserialzeInvalidWddx()
  179. {
  180. if (!class_exists('SimpleXMLElement', false)) {
  181. $this->markTestSkipped('Skipped by missing ext/simplexml');
  182. }
  183. $value = '<wddxPacket version=\'1.0\'><header /></wddxPacket>';
  184. $this->setExpectedException(
  185. 'Zend\Serializer\Exception\RuntimeException',
  186. 'Invalid wddx packet'
  187. );
  188. $this->adapter->unserialize($value);
  189. }
  190. public function testShouldThrowExceptionIfXmlToUnserializeFromContainsADoctype()
  191. {
  192. $value = '<!DOCTYPE>'
  193. . '<wddxPacket version=\'1.0\'><header/>'
  194. . '<data><string>test</string></data></wddxPacket>';
  195. $this->setExpectedException("Zend\Serializer\Exception\RuntimeException");
  196. $data = $this->adapter->unserialize($value);
  197. }
  198. }