php_exceptions_007.phpt 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. --TEST--
  2. Test V8::executeString() : PHP Exception handling (throwed inside magic method)
  3. --SKIPIF--
  4. <?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
  5. --FILE--
  6. <?php
  7. class SomeClass {
  8. function someMethod($someVariable) {
  9. return $someVariable;
  10. }
  11. public function triggerException() {
  12. throw new Exception("Some exception");
  13. }
  14. public function __get($key) {
  15. $this->triggerException();
  16. }
  17. }
  18. function execute($code, $flags = V8Js::FLAG_NONE) {
  19. $js = new V8Js();
  20. $js->output = new stdClass();
  21. $js->SomeClassInstance = new SomeClass();
  22. try {
  23. $js->executeString("
  24. try {
  25. $code
  26. } catch(e) {
  27. PHP.output.result = 'Caught exception at javascript level : ' + e.getMessage();
  28. }
  29. ", '', $flags);
  30. print($js->output->result.PHP_EOL);
  31. } catch (Exception $e) {
  32. print( "Caught exception at php level : ".$e->getMessage().PHP_EOL);
  33. }
  34. }
  35. execute("PHP.SomeClassInstance.triggerException();");
  36. execute("PHP.SomeClassInstance.someMethod(PHP.SomeClassInstance.TriggerMagicMethod);");
  37. execute("PHP.SomeClassInstance.TriggerMagicMethod;");
  38. execute("PHP.SomeClassInstance.triggerException();", V8Js::FLAG_PROPAGATE_PHP_EXCEPTIONS);
  39. execute("PHP.SomeClassInstance.someMethod(PHP.SomeClassInstance.TriggerMagicMethod);", V8Js::FLAG_PROPAGATE_PHP_EXCEPTIONS);
  40. execute("PHP.SomeClassInstance.TriggerMagicMethod;", V8Js::FLAG_PROPAGATE_PHP_EXCEPTIONS);
  41. ?>
  42. ===EOF===
  43. --EXPECTF--
  44. Caught exception at php level : Some exception
  45. Caught exception at php level : Some exception
  46. Caught exception at php level : Some exception
  47. Caught exception at javascript level : Some exception
  48. Caught exception at javascript level : Some exception
  49. Caught exception at javascript level : Some exception
  50. ===EOF===