--TEST--
Test V8::executeString() : PHP Exception handling (throwed inside magic method)
--SKIPIF--
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
--FILE--
<?php
class SomeClass {
    function someMethod($someVariable) {
        return $someVariable;
    }

    public function triggerException() {
        throw new Exception("Some exception");
    }

    public function __get($key) {
        $this->triggerException();
    }
}

function execute($code, $flags = V8Js::FLAG_NONE) {
    $js = new V8Js();
    $js->output = new stdClass();
    $js->SomeClassInstance = new SomeClass();
    try {
        $js->executeString("
                try {
                    $code
                } catch(e) {
                    PHP.output.result = 'Caught exception at javascript level : ' + e.getMessage();
                }
            ", '', $flags);
        print($js->output->result.PHP_EOL);
    } catch (Exception $e) {
        print( "Caught exception at php level : ".$e->getMessage().PHP_EOL);
    }
}

execute("PHP.SomeClassInstance.triggerException();");
execute("PHP.SomeClassInstance.someMethod(PHP.SomeClassInstance.TriggerMagicMethod);");
execute("PHP.SomeClassInstance.TriggerMagicMethod;");
execute("PHP.SomeClassInstance.triggerException();", V8Js::FLAG_PROPAGATE_PHP_EXCEPTIONS);
execute("PHP.SomeClassInstance.someMethod(PHP.SomeClassInstance.TriggerMagicMethod);", V8Js::FLAG_PROPAGATE_PHP_EXCEPTIONS);
execute("PHP.SomeClassInstance.TriggerMagicMethod;", V8Js::FLAG_PROPAGATE_PHP_EXCEPTIONS);
?>
===EOF===
--EXPECTF--
Caught exception at php level : Some exception
Caught exception at php level : Some exception
Caught exception at php level : Some exception
Caught exception at javascript level : Some exception
Caught exception at javascript level : Some exception
Caught exception at javascript level : Some exception
===EOF===