RequestTest.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. <?php
  2. require_once 'Zend/XmlRpc/Request.php';
  3. require_once 'PHPUnit/Framework/TestCase.php';
  4. require_once 'PHPUnit/Framework/IncompleteTestError.php';
  5. /**
  6. * Test case for Zend_XmlRpc_Request
  7. *
  8. * @package Zend_XmlRpc
  9. * @subpackage UnitTests
  10. * @version $Id$
  11. */
  12. class Zend_XmlRpc_RequestTest extends PHPUnit_Framework_TestCase
  13. {
  14. /**
  15. * Zend_XmlRpc_Request object
  16. * @var Zend_XmlRpc_Request
  17. */
  18. protected $_request;
  19. /**
  20. * Setup environment
  21. */
  22. public function setUp()
  23. {
  24. $this->_request = new Zend_XmlRpc_Request();
  25. }
  26. /**
  27. * Teardown environment
  28. */
  29. public function tearDown()
  30. {
  31. unset($this->_request);
  32. }
  33. /**
  34. * get/setMethod() test
  35. */
  36. public function testMethod()
  37. {
  38. $this->assertTrue($this->_request->setMethod('testMethod'));
  39. $this->assertTrue($this->_request->setMethod('testMethod9'));
  40. $this->assertTrue($this->_request->setMethod('test.Method'));
  41. $this->assertTrue($this->_request->setMethod('test_method'));
  42. $this->assertTrue($this->_request->setMethod('test:method'));
  43. $this->assertTrue($this->_request->setMethod('test/method'));
  44. $this->assertFalse($this->_request->setMethod('testMethod-bogus'));
  45. $this->assertEquals('test/method', $this->_request->getMethod());
  46. }
  47. /**
  48. * __construct() test
  49. */
  50. public function testConstructorOptionallySetsMethodAndParams()
  51. {
  52. $r = new Zend_XmlRpc_Request();
  53. $this->assertEquals('', $r->getMethod());
  54. $this->assertEquals(array(), $r->getParams());
  55. $method = 'foo.bar';
  56. $params = array('baz', 1, array('foo' => 'bar'));
  57. $r = new Zend_XmlRpc_Request($method, $params);
  58. $this->assertEquals($method, $r->getMethod());
  59. $this->assertEquals($params, $r->getParams());
  60. }
  61. /**
  62. * addParam()/getParams() test
  63. */
  64. public function testAddParam()
  65. {
  66. $this->_request->addParam('string1');
  67. $params = $this->_request->getParams();
  68. $this->assertEquals(1, count($params));
  69. $this->assertEquals('string1', $params[0]);
  70. $this->_request->addParam('string2');
  71. $params = $this->_request->getParams();
  72. $this->assertEquals(2, count($params));
  73. $this->assertEquals('string1', $params[0]);
  74. $this->assertEquals('string2', $params[1]);
  75. }
  76. public function testAddDateParamGeneratesCorrectXml()
  77. {
  78. $time = time();
  79. $this->_request->addParam($time, Zend_XmlRpc_Value::XMLRPC_TYPE_DATETIME);
  80. $this->_request->setMethod('foo.bar');
  81. $xml = $this->_request->saveXML();
  82. $sxl = new SimpleXMLElement($xml);
  83. $param = $sxl->params->param->value;
  84. $type = 'dateTime.iso8601';
  85. $this->assertTrue(isset($param->{$type}), var_export($param, 1));
  86. $this->assertEquals($time, strtotime((string) $param->{$type}));
  87. }
  88. /**
  89. * setParams()/getParams() test
  90. */
  91. public function testSetParams()
  92. {
  93. $params = array(
  94. 'string1',
  95. true,
  96. array('one', 'two')
  97. );
  98. $this->_request->setParams($params);
  99. $returned = $this->_request->getParams();
  100. $this->assertSame($params, $returned);
  101. $params = array(
  102. 'string2',
  103. array('two', 'one')
  104. );
  105. $this->_request->setParams($params);
  106. $returned = $this->_request->getParams();
  107. $this->assertSame($params, $returned);
  108. }
  109. /**
  110. * loadXml() test
  111. */
  112. public function testLoadXml()
  113. {
  114. $dom = new DOMDocument('1.0', 'UTF-8');
  115. $mCall = $dom->appendChild($dom->createElement('methodCall'));
  116. $mName = $mCall->appendChild($dom->createElement('methodName', 'do.Something'));
  117. $params = $mCall->appendChild($dom->createElement('params'));
  118. $param1 = $params->appendChild($dom->createElement('param'));
  119. $value1 = $param1->appendChild($dom->createElement('value'));
  120. $value1->appendChild($dom->createElement('string', 'string1'));
  121. $param2 = $params->appendChild($dom->createElement('param'));
  122. $value2 = $param2->appendChild($dom->createElement('value'));
  123. $value2->appendChild($dom->createElement('boolean', 1));
  124. $xml = $dom->saveXML();
  125. try {
  126. $parsed = $this->_request->loadXml($xml);
  127. } catch (Exception $e) {
  128. $this->fail('Failed to parse XML: ' . $e->getMessage());
  129. }
  130. $this->assertTrue($parsed, $xml);
  131. $this->assertEquals('do.Something', $this->_request->getMethod());
  132. $test = array('string1', true);
  133. $params = $this->_request->getParams();
  134. $this->assertSame($test, $params);
  135. try {
  136. $parsed = $this->_request->loadXml('foo');
  137. } catch (Exception $e) {
  138. $this->fail('Failed to parse XML: ' . $e->getMessage());
  139. }
  140. $this->assertFalse($parsed, 'Parsed non-XML string?');
  141. }
  142. /**
  143. * isFault() test
  144. */
  145. public function testIsFault()
  146. {
  147. $this->assertFalse($this->_request->isFault());
  148. $this->_request->loadXml('foo');
  149. $this->assertTrue($this->_request->isFault());
  150. }
  151. /**
  152. * getFault() test
  153. */
  154. public function testGetFault()
  155. {
  156. $fault = $this->_request->getFault();
  157. $this->assertTrue(null === $fault);
  158. $this->_request->loadXml('foo');
  159. $fault = $this->_request->getFault();
  160. $this->assertTrue($fault instanceof Zend_XmlRpc_Fault);
  161. }
  162. /**
  163. * helper for saveXML() and __toString() tests
  164. *
  165. * @param string $xml
  166. * @return void
  167. */
  168. protected function _testXmlRequest($xml, $argv)
  169. {
  170. try {
  171. $sx = new SimpleXMLElement($xml);
  172. } catch (Exception $e) {
  173. $this->fail('Invalid XML returned');
  174. }
  175. $result = $sx->xpath('//methodName');
  176. $count = 0;
  177. while (list( , $node) = each($result)) {
  178. ++$count;
  179. }
  180. $this->assertEquals(1, $count, $xml);
  181. $result = $sx->xpath('//params');
  182. $count = 0;
  183. while (list( , $node) = each($result)) {
  184. ++$count;
  185. }
  186. $this->assertEquals(1, $count, $xml);
  187. try {
  188. $methodName = (string) $sx->methodName;
  189. $params = array(
  190. (string) $sx->params->param[0]->value->string,
  191. (bool) $sx->params->param[1]->value->boolean
  192. );
  193. } catch (Exception $e) {
  194. $this->fail('One or more inconsistencies parsing generated XML: ' . $e->getMessage());
  195. }
  196. $this->assertEquals('do.Something', $methodName);
  197. $this->assertSame($argv, $params, $xml);
  198. }
  199. /**
  200. * testSaveXML() test
  201. */
  202. public function testSaveXML()
  203. {
  204. $argv = array('string', true);
  205. $this->_request->setMethod('do.Something');
  206. $this->_request->setParams($argv);
  207. $xml = $this->_request->saveXML();
  208. $this->_testXmlRequest($xml, $argv);
  209. }
  210. /**
  211. * __toString() test
  212. */
  213. public function test__toString()
  214. {
  215. $argv = array('string', true);
  216. $this->_request->setMethod('do.Something');
  217. $this->_request->setParams($argv);
  218. $xml = $this->_request->__toString();
  219. $this->_testXmlRequest($xml, $argv);
  220. }
  221. /**
  222. * Test encoding settings
  223. */
  224. public function testSetGetEncoding()
  225. {
  226. $this->assertEquals('UTF-8', $this->_request->getEncoding());
  227. $this->_request->setEncoding('ISO-8859-1');
  228. $this->assertEquals('ISO-8859-1', $this->_request->getEncoding());
  229. }
  230. }