diff --git a/tests/var_dump.phpt b/tests/var_dump.phpt index cc0654cb..9097ca9e 100644 --- a/tests/var_dump.phpt +++ b/tests/var_dump.phpt @@ -1,7 +1,10 @@ --TEST-- Test V8::executeString() : var_dump --SKIPIF-- - += 8.4'); +?> --INI-- date.timezone=UTC --FILE-- @@ -70,254 +73,266 @@ try { } ?> ===EOF=== ---EXPECTREGEX-- -\-\-\-\- PHP var_dump of PHP object \-\-\-\- -array\(11\) \{ - \["null"\]\=\> +--EXPECTF-- +---- PHP var_dump of PHP object ---- +array(11) { + ["null"]=> NULL - \["bool"\]\=\> - bool\(true\) - \["string"\]\=\> - string\(6\) "string" - \["uint"\]\=\> - int\(1\) - \["int"\]\=\> - int\(\-1\) - \["number"\]\=\> - float\(3\.141592654\) - \["date"\]\=\> - object\(DateTime\)\#\d+ \(3\) \{ - \["date"\]\=\> - string\(\d+\) "1976\-09\-27 09\:00\:00((\.0+)?)" - \["timezone_type"\]\=\> - int\(3\) - \["timezone"\]\=\> - string\(3\) "UTC" - \} - \["array"\]\=\> - array\(3\) \{ - \[0\]\=\> - int\(1\) - \[1\]\=\> - int\(2\) - \[2\]\=\> - int\(3\) - \} - \["object"\]\=\> - array\(1\) \{ - \["field"\]\=\> - string\(3\) "foo" - \} - \["function"\]\=\> - object\(Closure\)\#\d+ \(1\) \{ - \["parameter"\]\=\> - array\(1\) \{ - \["\$x"\]\=\> - string\(10\) "\" - \} - \} - \["phpobject"\]\=\> - object\(Foo\)\#\d+ \(1\) \{ - \["field"\]\=\> - string\(3\) "php" - \} -\} -\-\-\- JS var_dump of PHP object \-\-\-\- -array \(11\) \{ - \["null"\] \=\> + ["bool"]=> + bool(true) + ["string"]=> + string(6) "string" + ["uint"]=> + int(1) + ["int"]=> + int(-1) + ["number"]=> + float(3.141592654) + ["date"]=> + object(DateTime)#3 (3) { + ["date"]=> + string(26) "1976-09-27 09:00:00.000000" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(3) "UTC" + } + ["array"]=> + array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) + } + ["object"]=> + array(1) { + ["field"]=> + string(3) "foo" + } + ["function"]=> + object(Closure)#4 (4) { + ["name"]=> + string(45) "{closure:/tmp/php-v8js/tests/var_dump.php:51}" + ["file"]=> + string(32) "/tmp/php-v8js/tests/var_dump.php" + ["line"]=> + int(51) + ["parameter"]=> + array(1) { + ["$x"]=> + string(10) "" + } + } + ["phpobject"]=> + object(Foo)#5 (1) { + ["field"]=> + string(3) "php" + } +} +--- JS var_dump of PHP object ---- +array (11) { + ["null"] => NULL - \["bool"\] \=\> - bool\(true\) - \["string"\] \=\> - string\(6\) "string" - \["uint"\] \=\> - int\(1\) - \["int"\] \=\> - int\(\-1\) - \["number"\] \=\> - float\(3\.141593\) - \["date"\] \=\> - object\(DateTime\)\#\d+ \(\d+\) \{(?: - \["createFromImmutable"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \})?(?: - \["createFromInterface"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \})? - \["createFromFormat"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["getLastErrors"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["format"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["modify"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["add"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["sub"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["getTimezone"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["setTimezone"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["getOffset"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["setTime"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["setDate"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["setISODate"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["setTimestamp"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["getTimestamp"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \} - \["diff"\] \=\> - object\(Closure\)\#\d+ \{ - function \(\) \{ \[native code\] \} - \}(?:(?:the following block is missing from PHP 7.4 on){0} - \["\$date"\] \=\> - string\(\d+\) "1976\-09\-27 09\:00\:00((\.0+)?)" - \["\$timezone_type"\] \=\> - int\(3\) - \["\$timezone"\] \=\> - string\(3\) "UTC" - )?\s*\} - \["array"\] \=\> - array\(3\) \{ - \[0\] \=\> - int\(1\) - \[1\] \=\> - int\(2\) - \[2\] \=\> - int\(3\) - \} - \["object"\] \=\> - array \(1\) \{ - \["field"\] \=\> - string\(3\) "foo" - \} - \["function"\] \=\> - object\(Closure\)\#\d+ \(0\) \{ - \} - \["phpobject"\] \=\> - object\(Foo\)\#\d+ \(1\) \{ - \["\$field"\] \=\> - string\(3\) "php" - \} -\} -\-\-\- JS var_dump of JS object \-\-\-\- -object\(Object\)\#\d+ \(12\) \{ - \["undefined"\] \=\> + ["bool"] => + bool(true) + ["string"] => + string(6) "string" + ["uint"] => + int(1) + ["int"] => + int(-1) + ["number"] => + float(3.141593) + ["date"] => + object(DateTime)#%d (20) { + ["createFromImmutable"] => + object(Closure)#%d { + function () { [native code] } + } + ["createFromInterface"] => + object(Closure)#%d { + function () { [native code] } + } + ["createFromFormat"] => + object(Closure)#%d { + function () { [native code] } + } + ["createFromTimestamp"] => + object(Closure)#%d { + function () { [native code] } + } + ["getLastErrors"] => + object(Closure)#%d { + function () { [native code] } + } + ["format"] => + object(Closure)#%d { + function () { [native code] } + } + ["modify"] => + object(Closure)#%d { + function () { [native code] } + } + ["add"] => + object(Closure)#%d { + function () { [native code] } + } + ["sub"] => + object(Closure)#%d { + function () { [native code] } + } + ["getTimezone"] => + object(Closure)#%d { + function () { [native code] } + } + ["setTimezone"] => + object(Closure)#%d { + function () { [native code] } + } + ["getOffset"] => + object(Closure)#%d { + function () { [native code] } + } + ["getMicrosecond"] => + object(Closure)#%d { + function () { [native code] } + } + ["setTime"] => + object(Closure)#%d { + function () { [native code] } + } + ["setDate"] => + object(Closure)#%d { + function () { [native code] } + } + ["setISODate"] => + object(Closure)#%d { + function () { [native code] } + } + ["setTimestamp"] => + object(Closure)#%d { + function () { [native code] } + } + ["setMicrosecond"] => + object(Closure)#%d { + function () { [native code] } + } + ["getTimestamp"] => + object(Closure)#%d { + function () { [native code] } + } + ["diff"] => + object(Closure)#%d { + function () { [native code] } + } + } + ["array"] => + array(3) { + [0] => + int(1) + [1] => + int(2) + [2] => + int(3) + } + ["object"] => + array (1) { + ["field"] => + string(3) "foo" + } + ["function"] => + object(Closure)#%d (0) { + } + ["phpobject"] => + object(Foo)#%d (1) { + ["$field"] => + string(3) "php" + } +} +--- JS var_dump of JS object ---- +object(Object)#%d (12) { + ["undefined"] => NULL - \["null"\] \=\> + ["null"] => NULL - \["bool"\] \=\> - bool\(true\) - \["string"\] \=\> - string\(6\) "string" - \["uint"\] \=\> - int\(1\) - \["int"\] \=\> - int\(\-1\) - \["number"\] \=\> - float\(3\.141593\) - \["regexp"\] \=\> - regexp\(\/regexp\/\) - \["array"\] \=\> - array\(3\) \{ - \[0\] \=\> - int\(1\) - \[1\] \=\> - int\(2\) - \[2\] \=\> - int\(3\) - \} - \["object"\] \=\> - object\(Object\)\#\d+ \(1\) \{ - \["field"\] \=\> - string\(3\) "foo" - \} - \["function"\] \=\> - object\(Closure\)\#\d+ \{ - function id\(x\) \{ return x; \} - \} - \["phpobject"\] \=\> - object\(Foo\)\#\d+ \(1\) \{ - \["\$field"\] \=\> - string\(3\) "php" - \} -\} -\-\-\- PHP var_dump of JS object \-\-\-\- -object\(V8Object\)\#\d+ \(12\) \{ - \["undefined"\]\=\> + ["bool"] => + bool(true) + ["string"] => + string(6) "string" + ["uint"] => + int(1) + ["int"] => + int(-1) + ["number"] => + float(3.141593) + ["regexp"] => + regexp(/regexp/) + ["array"] => + array(3) { + [0] => + int(1) + [1] => + int(2) + [2] => + int(3) + } + ["object"] => + object(Object)#%d (1) { + ["field"] => + string(3) "foo" + } + ["function"] => + object(Closure)#%d { + function id(x) { return x; } + } + ["phpobject"] => + object(Foo)#%d (1) { + ["$field"] => + string(3) "php" + } +} +--- PHP var_dump of JS object ---- +object(V8Object)#6 (12) { + ["undefined"]=> NULL - \["null"\]\=\> + ["null"]=> NULL - \["bool"\]\=\> - bool\(true\) - \["string"\]\=\> - string\(6\) "string" - \["uint"\]\=\> - int\(1\) - \["int"\]\=\> - int\(\-1\) - \["number"\]\=\> - float\(3\.141592654\) - \["regexp"\]\=\> - object\(V8Object\)\#\d+ \(0\) \{ - \} - \["array"\]\=\> - array\(3\) \{ - \[0\]\=\> - int\(1\) - \[1\]\=\> - int\(2\) - \[2\]\=\> - int\(3\) - \} - \["object"\]\=\> - object\(V8Object\)\#\d+ \(1\) \{ - \["field"\]\=\> - string\(3\) "foo" - \} - \["function"\]\=\> - object\(V8Function\)\#\d+ \(0\) \{ - \} - \["phpobject"\]\=\> - object\(Foo\)\#\d+ \(1\) \{ - \["field"\]\=\> - string\(3\) "php" - \} -\} -\=\=\=EOF\=\=\= + ["bool"]=> + bool(true) + ["string"]=> + string(6) "string" + ["uint"]=> + int(1) + ["int"]=> + int(-1) + ["number"]=> + float(3.141592654) + ["regexp"]=> + object(V8Object)#7 (0) { + } + ["array"]=> + array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) + } + ["object"]=> + object(V8Object)#8 (1) { + ["field"]=> + string(3) "foo" + } + ["function"]=> + object(V8Function)#9 (0) { + } + ["phpobject"]=> + object(Foo)#2 (1) { + ["field"]=> + string(3) "php" + } +} +===EOF=== diff --git a/tests/var_dump_php83.phpt b/tests/var_dump_php83.phpt new file mode 100644 index 00000000..e78c5fd5 --- /dev/null +++ b/tests/var_dump_php83.phpt @@ -0,0 +1,326 @@ +--TEST-- +Test V8::executeString() : var_dump +--SKIPIF-- += 80400) die('skip Only for php version < 8.4'); +?> +--INI-- +date.timezone=UTC +--FILE-- +obj = new Foo; + +$phptypes = $v8->phptypes = array( + "null" => NULL, + "bool" => true, + "string" => "string", + "uint" => 1, + "int" => -1, + "number" => 3.141592654, + "date" => new DateTime('September 27, 1976 09:00:00 UTC', new DateTimeZone('UTC')), + //"regexp" => new Regexp('/regexp/'), /* no native PHP regex type */ + "array" => array(1,2,3), + "object" => array( "field" => "foo" ), + "function" => (function ($x) { return $x; }), + "phpobject" => new Foo +); + +echo "---- PHP var_dump of PHP object ----\n"; +var_dump($phptypes); + +try { + var_dump($v8->executeString($JS, 'var_dump.js')); +} catch (V8JsScriptException $e) { + echo "Error!\n"; + var_dump($e); +} +?> +===EOF=== +--EXPECTREGEX-- +\-\-\-\- PHP var_dump of PHP object \-\-\-\- +array\(11\) \{ + \["null"\]\=\> + NULL + \["bool"\]\=\> + bool\(true\) + \["string"\]\=\> + string\(6\) "string" + \["uint"\]\=\> + int\(1\) + \["int"\]\=\> + int\(\-1\) + \["number"\]\=\> + float\(3\.141592654\) + \["date"\]\=\> + object\(DateTime\)\#\d+ \(3\) \{ + \["date"\]\=\> + string\(\d+\) "1976\-09\-27 09\:00\:00((\.0+)?)" + \["timezone_type"\]\=\> + int\(3\) + \["timezone"\]\=\> + string\(3\) "UTC" + \} + \["array"\]\=\> + array\(3\) \{ + \[0\]\=\> + int\(1\) + \[1\]\=\> + int\(2\) + \[2\]\=\> + int\(3\) + \} + \["object"\]\=\> + array\(1\) \{ + \["field"\]\=\> + string\(3\) "foo" + \} + \["function"\]\=\> + object\(Closure\)\#\d+ \(1\) \{ + \["parameter"\]\=\> + array\(1\) \{ + \["\$x"\]\=\> + string\(10\) "\" + \} + \} + \["phpobject"\]\=\> + object\(Foo\)\#\d+ \(1\) \{ + \["field"\]\=\> + string\(3\) "php" + \} +\} +\-\-\- JS var_dump of PHP object \-\-\-\- +array \(11\) \{ + \["null"\] \=\> + NULL + \["bool"\] \=\> + bool\(true\) + \["string"\] \=\> + string\(6\) "string" + \["uint"\] \=\> + int\(1\) + \["int"\] \=\> + int\(\-1\) + \["number"\] \=\> + float\(3\.141593\) + \["date"\] \=\> + object\(DateTime\)\#\d+ \(\d+\) \{(?: + \["createFromImmutable"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \})?(?: + \["createFromInterface"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \})? + \["createFromFormat"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["getLastErrors"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["format"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["modify"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["add"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["sub"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["getTimezone"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["setTimezone"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["getOffset"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["setTime"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["setDate"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["setISODate"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["setTimestamp"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["getTimestamp"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \} + \["diff"\] \=\> + object\(Closure\)\#\d+ \{ + function \(\) \{ \[native code\] \} + \}(?:(?:the following block is missing from PHP 7.4 on){0} + \["\$date"\] \=\> + string\(\d+\) "1976\-09\-27 09\:00\:00((\.0+)?)" + \["\$timezone_type"\] \=\> + int\(3\) + \["\$timezone"\] \=\> + string\(3\) "UTC" + )?\s*\} + \["array"\] \=\> + array\(3\) \{ + \[0\] \=\> + int\(1\) + \[1\] \=\> + int\(2\) + \[2\] \=\> + int\(3\) + \} + \["object"\] \=\> + array \(1\) \{ + \["field"\] \=\> + string\(3\) "foo" + \} + \["function"\] \=\> + object\(Closure\)\#\d+ \(0\) \{ + \} + \["phpobject"\] \=\> + object\(Foo\)\#\d+ \(1\) \{ + \["\$field"\] \=\> + string\(3\) "php" + \} +\} +\-\-\- JS var_dump of JS object \-\-\-\- +object\(Object\)\#\d+ \(12\) \{ + \["undefined"\] \=\> + NULL + \["null"\] \=\> + NULL + \["bool"\] \=\> + bool\(true\) + \["string"\] \=\> + string\(6\) "string" + \["uint"\] \=\> + int\(1\) + \["int"\] \=\> + int\(\-1\) + \["number"\] \=\> + float\(3\.141593\) + \["regexp"\] \=\> + regexp\(\/regexp\/\) + \["array"\] \=\> + array\(3\) \{ + \[0\] \=\> + int\(1\) + \[1\] \=\> + int\(2\) + \[2\] \=\> + int\(3\) + \} + \["object"\] \=\> + object\(Object\)\#\d+ \(1\) \{ + \["field"\] \=\> + string\(3\) "foo" + \} + \["function"\] \=\> + object\(Closure\)\#\d+ \{ + function id\(x\) \{ return x; \} + \} + \["phpobject"\] \=\> + object\(Foo\)\#\d+ \(1\) \{ + \["\$field"\] \=\> + string\(3\) "php" + \} +\} +\-\-\- PHP var_dump of JS object \-\-\-\- +object\(V8Object\)\#\d+ \(12\) \{ + \["undefined"\]\=\> + NULL + \["null"\]\=\> + NULL + \["bool"\]\=\> + bool\(true\) + \["string"\]\=\> + string\(6\) "string" + \["uint"\]\=\> + int\(1\) + \["int"\]\=\> + int\(\-1\) + \["number"\]\=\> + float\(3\.141592654\) + \["regexp"\]\=\> + object\(V8Object\)\#\d+ \(0\) \{ + \} + \["array"\]\=\> + array\(3\) \{ + \[0\]\=\> + int\(1\) + \[1\]\=\> + int\(2\) + \[2\]\=\> + int\(3\) + \} + \["object"\]\=\> + object\(V8Object\)\#\d+ \(1\) \{ + \["field"\]\=\> + string\(3\) "foo" + \} + \["function"\]\=\> + object\(V8Function\)\#\d+ \(0\) \{ + \} + \["phpobject"\]\=\> + object\(Foo\)\#\d+ \(1\) \{ + \["field"\]\=\> + string\(3\) "php" + \} +\} +\=\=\=EOF\=\=\=