FaultTest.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. require_once 'Zend/XmlRpc/Fault.php';
  3. require_once 'PHPUnit/Framework/TestCase.php';
  4. require_once 'PHPUnit/Framework/IncompleteTestError.php';
  5. /**
  6. * Test case for Zend_XmlRpc_Fault
  7. *
  8. * @package Zend_XmlRpc
  9. * @subpackage UnitTests
  10. * @version $Id$
  11. */
  12. class Zend_XmlRpc_FaultTest extends PHPUnit_Framework_TestCase
  13. {
  14. /**
  15. * Zend_XmlRpc_Fault object
  16. * @var Zend_XmlRpc_Fault
  17. */
  18. protected $_fault;
  19. /**
  20. * Setup environment
  21. */
  22. public function setUp()
  23. {
  24. $this->_fault = new Zend_XmlRpc_Fault();
  25. }
  26. /**
  27. * Teardown environment
  28. */
  29. public function tearDown()
  30. {
  31. unset($this->_fault);
  32. }
  33. /**
  34. * __construct() test
  35. */
  36. public function test__construct()
  37. {
  38. $this->assertTrue($this->_fault instanceof Zend_XmlRpc_Fault);
  39. $this->assertEquals(404, $this->_fault->getCode());
  40. $this->assertEquals('Unknown Error', $this->_fault->getMessage());
  41. }
  42. /**
  43. * get/setCode() test
  44. */
  45. public function testCode()
  46. {
  47. $this->_fault->setCode('1000');
  48. $this->assertEquals(1000, $this->_fault->getCode());
  49. }
  50. /**
  51. * get/setMessage() test
  52. */
  53. public function testMessage()
  54. {
  55. $this->_fault->setMessage('Message');
  56. $this->assertEquals('Message', $this->_fault->getMessage());
  57. }
  58. protected function _createXml()
  59. {
  60. $dom = new DOMDocument('1.0', 'UTF-8');
  61. $response = $dom->appendChild($dom->createElement('methodResponse'));
  62. $fault = $response->appendChild($dom->createElement('fault'));
  63. $value = $fault->appendChild($dom->createElement('value'));
  64. $struct = $value->appendChild($dom->createElement('struct'));
  65. $member1 = $struct->appendChild($dom->createElement('member'));
  66. $member1->appendChild($dom->createElement('name', 'faultCode'));
  67. $value1 = $member1->appendChild($dom->createElement('value'));
  68. $value1->appendChild($dom->createElement('int', 1000));
  69. $member2 = $struct->appendChild($dom->createElement('member'));
  70. $member2->appendChild($dom->createElement('name', 'faultString'));
  71. $value2 = $member2->appendChild($dom->createElement('value'));
  72. $value2->appendChild($dom->createElement('string', 'Error string'));
  73. return $dom->saveXML();
  74. }
  75. protected function _createNonStandardXml()
  76. {
  77. $dom = new DOMDocument('1.0', 'UTF-8');
  78. $response = $dom->appendChild($dom->createElement('methodResponse'));
  79. $fault = $response->appendChild($dom->createElement('fault'));
  80. $value = $fault->appendChild($dom->createElement('value'));
  81. $struct = $value->appendChild($dom->createElement('struct'));
  82. $member1 = $struct->appendChild($dom->createElement('member'));
  83. $member1->appendChild($dom->createElement('name', 'faultCode'));
  84. $value1 = $member1->appendChild($dom->createElement('value'));
  85. $value1->appendChild($dom->createElement('int', 1000));
  86. $member2 = $struct->appendChild($dom->createElement('member'));
  87. $member2->appendChild($dom->createElement('name', 'faultString'));
  88. $value2 = $member2->appendChild($dom->createElement('value', 'Error string'));
  89. return $dom->saveXML();
  90. }
  91. /**
  92. * loadXml() test
  93. */
  94. public function testLoadXml()
  95. {
  96. $xml = $this->_createXml();
  97. try {
  98. $parsed = $this->_fault->loadXml($xml);
  99. } catch (Exception $e) {
  100. $this->fail('Failed to parse XML: ' . $e->getMessage());
  101. }
  102. $this->assertTrue($parsed, $xml);
  103. $this->assertEquals(1000, $this->_fault->getCode());
  104. $this->assertEquals('Error string', $this->_fault->getMessage());
  105. try {
  106. $parsed = $this->_fault->loadXml('foo');
  107. $this->fail('Should not parse invalid XML');
  108. } catch (Exception $e) {
  109. // do nothing
  110. }
  111. }
  112. /**
  113. * Zend_XmlRpc_Fault::isFault() test
  114. */
  115. public function testIsFault()
  116. {
  117. $xml = $this->_createXml();
  118. $this->assertTrue(Zend_XmlRpc_Fault::isFault($xml), $xml);
  119. $this->assertFalse(Zend_XmlRpc_Fault::isFault('foo'));
  120. $this->assertFalse(Zend_XmlRpc_Fault::isFault(array('foo')));
  121. }
  122. /**
  123. * helper for saveXML() and __toString() tests
  124. *
  125. * @param string $xml
  126. * @return void
  127. */
  128. protected function _testXmlFault($xml)
  129. {
  130. try {
  131. $sx = new SimpleXMLElement($xml);
  132. } catch (Exception $e) {
  133. $this->fail('Unable to parse generated XML');
  134. }
  135. $this->assertTrue($sx->fault ? true : false, $xml);
  136. $this->assertTrue($sx->fault->value ? true : false, $xml);
  137. $this->assertTrue($sx->fault->value->struct ? true : false, $xml);
  138. $count = 0;
  139. foreach ($sx->fault->value->struct->member as $member) {
  140. $count++;
  141. $this->assertTrue($member->name ? true : false, $xml);
  142. $this->assertTrue($member->value ? true : false, $xml);
  143. if ('faultCode' == (string) $member->name) {
  144. $this->assertTrue($member->value->int ? true : false, $xml);
  145. $this->assertEquals(1000, (int) $member->value->int, $xml);
  146. }
  147. if ('faultString' == (string) $member->name) {
  148. $this->assertTrue($member->value->string ? true : false, $xml);
  149. $this->assertEquals('Fault message', (string) $member->value->string, $xml);
  150. }
  151. }
  152. $this->assertEquals(2, $count, $xml);
  153. }
  154. /**
  155. * saveXML() test
  156. */
  157. public function testSaveXML()
  158. {
  159. $this->_fault->setCode(1000);
  160. $this->_fault->setMessage('Fault message');
  161. $xml = $this->_fault->saveXML();
  162. $this->_testXmlFault($xml);
  163. }
  164. /**
  165. * __toString() test
  166. */
  167. public function test__toString()
  168. {
  169. $this->_fault->setCode(1000);
  170. $this->_fault->setMessage('Fault message');
  171. $xml = $this->_fault->__toString();
  172. $this->_testXmlFault($xml);
  173. }
  174. /**
  175. * Test encoding settings
  176. */
  177. public function testSetGetEncoding()
  178. {
  179. $this->assertEquals('UTF-8', $this->_fault->getEncoding());
  180. $this->_fault->setEncoding('ISO-8859-1');
  181. $this->assertEquals('ISO-8859-1', $this->_fault->getEncoding());
  182. }
  183. public function testFaultStringWithoutStringTypeDeclaration()
  184. {
  185. $xml = $this->_createNonStandardXml();
  186. try {
  187. $parsed = $this->_fault->loadXml($xml);
  188. } catch (Exception $e) {
  189. $this->fail('Failed to parse XML: ' . $e->getMessage());
  190. }
  191. $this->assertTrue($parsed, $xml);
  192. $this->assertEquals('Error string', $this->_fault->getMessage());
  193. }
  194. }