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 = <<< EOT
- print("--- 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\=\=\=
|