| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323 | --TEST--Test V8::executeString() : var_dump--SKIPIF--<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>--INI--date.timezone=UTC--FILE--<?php# Test var_dump of various types$JS = <<< EOTprint("--- JS var_dump of PHP object ----\\n");var_dump(PHP.phptypes);print("--- JS var_dump of JS object ----\\n");var types = {	undefined: undefined,	null: null,	bool: true,	string: "string",	uint: 1,	int: -1,	number: 3.141592654,	// XXX this gets parsed with local timezone,	//     which is bad for test repeatability.	//date: new Date('September 27, 1976 09:00:00 GMT'),	regexp: /regexp/,	array: [1,2,3],	object: { field: "foo" },	function: function id(x) { return x; },	phpobject: PHP.obj};var_dump(types);print("--- PHP var_dump of JS object ----\\n");types;EOT;class Foo {	  var $field = "php";}$v8 = new V8Js();$v8->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\) "\<required\>"    \}  \}  \["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\=\=\=
 |