| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | --TEST--Test V8::executeString() : Calling methods of object passed from PHP--SKIPIF--<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>--INI--date.timezone=UTC--FILE--<?php// Test classclass Testing{	public $foo = 'ORIGINAL';	private $my_private = 'arf'; // Should not show in JS side	protected $my_protected = 'argh'; // Should not show in JS side	function mytest($a, $b, $c = NULL)	{		var_dump(func_get_args());	}  function mydatetest(DateTime $date, $b) {    $date->setTimeZone(new DateTimeZone(ini_get('date.timezone')));    echo $date->format(DateTime::RFC1123), "\n";    var_dump($b);  }}$a = new V8Js();$a->myobj = new Testing();$a->executeString("PHP.myobj.mytest('arg1', 'arg2');", "test1.js");$a->executeString("PHP.myobj.mytest(true, false, 1234567890);", "test2.js");$a->executeString("PHP.myobj.mytest(3.14, 42, null);", "test3.js");// Invalid parameterstry {	$a->executeString("PHP.myobj.mytest();", "test4.js");} catch (V8JsScriptException $e) {	echo $e->getMessage(), "\n";}try {	$a->executeString("PHP.myobj.mytest('arg1', 'arg2', 'arg3', 'extra_arg');", "test5.js");} catch (V8JsScriptException $e) {	echo $e->getMessage(), "\n";}try {	echo "\nTEST: Javascript Date -> PHP DateTime\n";	echo "======================================\n";	$a->executeString("date = new Date('September 8, 1975 09:00:00 GMT'); print(date.toUTCString() + '\\n'); PHP.myobj.mydatetest(date, 'foo');", "test6.js");} catch (V8JsScriptException $e) {	echo $e->getMessage(), "\n";}// Array / Objecttry {	$a->executeString("PHP.myobj.mytest(PHP.myobj, new Array(1,2,3), new Array('foo', 'bar', PHP.myobj));", "test7.js");} catch (V8JsScriptException $e) {	var_dump($e);}// Type safety// this is illegal, but shouldn't crash!try {	$a->executeString("PHP.myobj.mytest.call({})", "test8.js");} catch (V8JsScriptException $e) {	echo "exception: ", $e->getMessage(), "\n";}?>===EOF===--EXPECTF--array(2) {  [0]=>  string(4) "arg1"  [1]=>  string(4) "arg2"}array(3) {  [0]=>  bool(true)  [1]=>  bool(false)  [2]=>  int(1234567890)}array(3) {  [0]=>  float(3.14)  [1]=>  int(42)  [2]=>  NULL}test4.js:1: TypeError: Testing::mytest() expects at least 2 parameters, 0 givenarray(4) {  [0]=>  string(4) "arg1"  [1]=>  string(4) "arg2"  [2]=>  string(4) "arg3"  [3]=>  string(9) "extra_arg"}TEST: Javascript Date -> PHP DateTime======================================Mon, 08 Sep 1975 09:00:00 GMTMon, 08 Sep 1975 09:00:00 +0000string(3) "foo"array(3) {  [0]=>  object(Testing)#%d (3) {    ["foo"]=>    string(8) "ORIGINAL"    ["my_private":"Testing":private]=>    string(3) "arf"    ["my_protected":protected]=>    string(4) "argh"  }  [1]=>  array(3) {    [0]=>    int(1)    [1]=>    int(2)    [2]=>    int(3)  }  [2]=>  array(3) {    [0]=>    string(3) "foo"    [1]=>    string(3) "bar"    [2]=>    object(Testing)#%d (3) {      ["foo"]=>      string(8) "ORIGINAL"      ["my_private":"Testing":private]=>      string(3) "arf"      ["my_protected":protected]=>      string(4) "argh"    }  }}exception: test8.js:1: TypeError: Illegal invocation===EOF===
 |