FaultTest.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_XmlRpc
  17. * @subpackage UnitTests
  18. * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. * @version $Id$
  21. */
  22. // Call Zend_XmlRpc_Server_FaultTest::main() if this source file is executed directly.
  23. if (!defined("PHPUnit_MAIN_METHOD")) {
  24. require_once dirname(__FILE__) . '/../../../TestHelper.php';
  25. define("PHPUnit_MAIN_METHOD", "Zend_XmlRpc_Server_FaultTest::main");
  26. }
  27. require_once "PHPUnit/Framework/TestCase.php";
  28. require_once "PHPUnit/Framework/TestSuite.php";
  29. require_once 'Zend/XmlRpc/Server.php';
  30. require_once 'Zend/XmlRpc/Server/Fault.php';
  31. /**
  32. * Test case for Zend_XmlRpc_Server_Fault
  33. *
  34. * @category Zend
  35. * @package Zend_XmlRpc
  36. * @subpackage UnitTests
  37. * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
  38. * @license http://framework.zend.com/license/new-bsd New BSD License
  39. * @group Zend_XmlRpc
  40. */
  41. class Zend_XmlRpc_Server_FaultTest extends PHPUnit_Framework_TestCase
  42. {
  43. /**
  44. * Runs the test methods of this class.
  45. *
  46. * @access public
  47. * @static
  48. */
  49. public static function main()
  50. {
  51. require_once "PHPUnit/TextUI/TestRunner.php";
  52. $suite = new PHPUnit_Framework_TestSuite("Zend_XmlRpc_Server_FaultTest");
  53. $result = PHPUnit_TextUI_TestRunner::run($suite);
  54. }
  55. /**
  56. * Zend_XmlRpc_Server_Fault::getInstance() test
  57. */
  58. public function testGetInstance()
  59. {
  60. $e = new Zend_XmlRpc_Server_Exception('Testing fault', 411);
  61. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  62. $this->assertTrue($fault instanceof Zend_XmlRpc_Server_Fault);
  63. }
  64. /**
  65. * Zend_XmlRpc_Server_Fault::attachFaultException() test
  66. */
  67. public function testAttachFaultException()
  68. {
  69. Zend_XmlRpc_Server_Fault::attachFaultException('zxrs_fault_test_exception');
  70. $e = new zxrs_fault_test_exception('test exception', 411);
  71. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  72. $this->assertEquals('test exception', $fault->getMessage());
  73. $this->assertEquals(411, $fault->getCode());
  74. Zend_XmlRpc_Server_Fault::detachFaultException('zxrs_fault_test_exception');
  75. $exceptions = array(
  76. 'zxrs_fault_test_exception',
  77. 'zxrs_fault_test_exception2',
  78. 'zxrs_fault_test_exception3'
  79. );
  80. Zend_XmlRpc_Server_Fault::attachFaultException($exceptions);
  81. foreach ($exceptions as $class) {
  82. $e = new $class('test exception', 411);
  83. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  84. $this->assertEquals('test exception', $fault->getMessage());
  85. $this->assertEquals(411, $fault->getCode());
  86. }
  87. Zend_XmlRpc_Server_Fault::detachFaultException($exceptions);
  88. }
  89. /**
  90. * Tests ZF-1825
  91. * @return void
  92. */
  93. public function testAttachFaultExceptionAllowsForDerivativeExceptionClasses()
  94. {
  95. Zend_XmlRpc_Server_Fault::attachFaultException('zxrs_fault_test_exception');
  96. $e = new zxrs_fault_test_exception4('test exception', 411);
  97. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  98. $this->assertEquals('test exception', $fault->getMessage());
  99. $this->assertEquals(411, $fault->getCode());
  100. Zend_XmlRpc_Server_Fault::detachFaultException('zxrs_fault_test_exception');
  101. }
  102. /**
  103. * Zend_XmlRpc_Server_Fault::detachFaultException() test
  104. */
  105. public function testDetachFaultException()
  106. {
  107. Zend_XmlRpc_Server_Fault::attachFaultException('zxrs_fault_test_exception');
  108. $e = new zxrs_fault_test_exception('test exception', 411);
  109. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  110. $this->assertEquals('test exception', $fault->getMessage());
  111. $this->assertEquals(411, $fault->getCode());
  112. Zend_XmlRpc_Server_Fault::detachFaultException('zxrs_fault_test_exception');
  113. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  114. $this->assertEquals('Unknown error', $fault->getMessage());
  115. $this->assertEquals(404, $fault->getCode());
  116. $exceptions = array(
  117. 'zxrs_fault_test_exception',
  118. 'zxrs_fault_test_exception2',
  119. 'zxrs_fault_test_exception3'
  120. );
  121. Zend_XmlRpc_Server_Fault::attachFaultException($exceptions);
  122. foreach ($exceptions as $class) {
  123. $e = new $class('test exception', 411);
  124. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  125. $this->assertEquals('test exception', $fault->getMessage());
  126. $this->assertEquals(411, $fault->getCode());
  127. }
  128. Zend_XmlRpc_Server_Fault::detachFaultException($exceptions);
  129. foreach ($exceptions as $class) {
  130. $e = new $class('test exception', 411);
  131. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  132. $this->assertEquals('Unknown error', $fault->getMessage());
  133. $this->assertEquals(404, $fault->getCode());
  134. }
  135. }
  136. /**
  137. * Zend_XmlRpc_Server_Fault::attachObserver() test
  138. */
  139. public function testAttachObserver()
  140. {
  141. Zend_XmlRpc_Server_Fault::attachObserver('zxrs_fault_observer');
  142. $e = new Zend_XmlRpc_Server_Exception('Checking observers', 411);
  143. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  144. $observed = zxrs_fault_observer::getObserved();
  145. zxrs_fault_observer::clearObserved();
  146. Zend_XmlRpc_Server_Fault::detachObserver('zxrs_fault_observer');
  147. $this->assertTrue(!empty($observed));
  148. $f = array_shift($observed);
  149. $this->assertTrue($f instanceof Zend_XmlRpc_Server_Fault);
  150. $this->assertEquals('Checking observers', $f->getMessage());
  151. $this->assertEquals(411, $f->getCode());
  152. $this->assertFalse(Zend_XmlRpc_Server_Fault::attachObserver('foo'));
  153. }
  154. /**
  155. * Zend_XmlRpc_Server_Fault::detachObserver() test
  156. */
  157. public function testDetachObserver()
  158. {
  159. Zend_XmlRpc_Server_Fault::attachObserver('zxrs_fault_observer');
  160. $e = new Zend_XmlRpc_Server_Exception('Checking observers', 411);
  161. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  162. zxrs_fault_observer::clearObserved();
  163. Zend_XmlRpc_Server_Fault::detachObserver('zxrs_fault_observer');
  164. $e = new Zend_XmlRpc_Server_Exception('Checking observers', 411);
  165. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  166. $observed = zxrs_fault_observer::getObserved();
  167. $this->assertTrue(empty($observed));
  168. $this->assertFalse(Zend_XmlRpc_Server_Fault::detachObserver('foo'));
  169. }
  170. /**
  171. * getCode() test
  172. */
  173. public function testGetCode()
  174. {
  175. $e = new Zend_XmlRpc_Server_Exception('Testing fault', 411);
  176. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  177. $this->assertEquals(411, $fault->getCode());
  178. }
  179. /**
  180. * getException() test
  181. */
  182. public function testGetException()
  183. {
  184. $e = new Zend_XmlRpc_Server_Exception('Testing fault', 411);
  185. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  186. $this->assertSame($e, $fault->getException());
  187. }
  188. /**
  189. * getMessage() test
  190. */
  191. public function testGetMessage()
  192. {
  193. $e = new Zend_XmlRpc_Server_Exception('Testing fault', 411);
  194. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  195. $this->assertEquals('Testing fault', $fault->getMessage());
  196. }
  197. /**
  198. * __toString() test
  199. */
  200. public function test__toString()
  201. {
  202. $dom = new DOMDocument('1.0', 'UTF-8');
  203. $r = $dom->appendChild($dom->createElement('methodResponse'));
  204. $f = $r->appendChild($dom->createElement('fault'));
  205. $v = $f->appendChild($dom->createElement('value'));
  206. $s = $v->appendChild($dom->createElement('struct'));
  207. $m1 = $s->appendChild($dom->createElement('member'));
  208. $m1->appendChild($dom->createElement('name', 'faultCode'));
  209. $cv = $m1->appendChild($dom->createElement('value'));
  210. $cv->appendChild($dom->createElement('int', 411));
  211. $m2 = $s->appendChild($dom->createElement('member'));
  212. $m2->appendChild($dom->createElement('name', 'faultString'));
  213. $sv = $m2->appendChild($dom->createElement('value'));
  214. $sv->appendChild($dom->createElement('string', 'Testing fault'));
  215. $xml = $dom->saveXML();
  216. $e = new Zend_XmlRpc_Server_Exception('Testing fault', 411);
  217. $fault = Zend_XmlRpc_Server_Fault::getInstance($e);
  218. $this->assertEquals($xml, $fault->__toString());
  219. }
  220. }
  221. class zxrs_fault_test_exception extends Exception {}
  222. class zxrs_fault_test_exception2 extends Exception {}
  223. class zxrs_fault_test_exception3 extends Exception {}
  224. class zxrs_fault_test_exception4 extends zxrs_fault_test_exception {}
  225. class zxrs_fault_observer
  226. {
  227. private static $_instance = false;
  228. public $observed = array();
  229. private function __construct()
  230. {
  231. }
  232. public static function getInstance()
  233. {
  234. if (!self::$_instance) {
  235. self::$_instance = new self();
  236. }
  237. return self::$_instance;
  238. }
  239. public static function observe(Zend_XmlRpc_Server_Fault $fault)
  240. {
  241. self::getInstance()->observed[] = $fault;
  242. }
  243. public static function clearObserved()
  244. {
  245. self::getInstance()->observed = array();
  246. }
  247. public static function getObserved()
  248. {
  249. return self::getInstance()->observed;
  250. }
  251. }
  252. // Call Zend_XmlRpc_Server_FaultTest::main() if this source file is executed directly.
  253. if (PHPUnit_MAIN_METHOD == "Zend_XmlRpc_Server_FaultTest::main") {
  254. Zend_XmlRpc_Server_FaultTest::main();
  255. }