1--TEST--
2unpack of template converter: multiple class/variable: (array: object)
3--SKIPIF--
4<?php
5if (version_compare(PHP_VERSION, '5.2.0') < 0) {
6    echo "skip tests in PHP 5.2 or newer";
7}
8--FILE--
9<?php
10if(!extension_loaded('msgpack'))
11{
12    dl('msgpack.' . PHP_SHLIB_SUFFIX);
13}
14
15//error_reporting(0);
16
17function test($type, $variable, $object, $result = null)
18{
19    $serialized = msgpack_pack($variable);
20    $unserialized = msgpack_unpack($serialized, $object);
21
22    var_dump($unserialized);
23    if ($result)
24    {
25        echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL;
26    }
27    else
28    {
29        echo 'SKIP', PHP_EOL;
30    }
31}
32
33class MyObj
34{
35    private $data = null;
36    private $priv = "privdata";
37    public  $pdata = null;
38    public $subary = null;
39
40    function __construct()
41    {
42        $this->data = "datadata";
43        $this->subary = array(new SubObj());
44    }
45}
46
47class SubObj
48{
49    private $subdata = null;
50    private $subpriv = "subprivdata";
51    public  $subpdata = null;
52
53    function __construct()
54    {
55        $this->subdata = "subdatadata";
56    }
57}
58
59$obj0 = new MyObj();
60$obj0->pdata = "pubdata0";
61$obj0->subary[0]->subpdata = "subpubdata00";
62$subobj01 = new SubObj();
63$subobj01->subpdata = "subpdata01";
64$obj0->subary[1] = $subobj01;
65$obj1 = new MyObj();
66$obj1->pdata = "pubdata1";
67$obj1->subary[0]->subpdata = "subpubdata1";
68$subobj11 = new SubObj();
69$subobj11->subpdata = "subpdata11";
70$obj1->subary[1] = $subobj11;
71
72$ary = array($obj0, $obj1);
73
74$tpl = array(new MyObj());
75
76test("recursive object list with object list /w instance", $ary, $tpl, $ary);
77
78--EXPECTF--
79array(2) {
80  [0]=>
81  object(MyObj)#%d (4) {
82    [%r"?data"?:("MyObj":)?private"?%r]=>
83    string(8) "datadata"
84    [%r"?priv"?:("MyObj":)?private"?%r]=>
85    string(8) "privdata"
86    ["pdata"]=>
87    string(8) "pubdata0"
88    ["subary"]=>
89    array(2) {
90      [0]=>
91      object(SubObj)#%d (3) {
92        [%r"?subdata"?:("SubObj":)?private"?%r]=>
93        string(11) "subdatadata"
94        [%r"?subpriv"?:("SubObj":)?private"?%r]=>
95        string(11) "subprivdata"
96        ["subpdata"]=>
97        string(12) "subpubdata00"
98      }
99      [1]=>
100      object(SubObj)#%d (3) {
101        [%r"?subdata"?:("SubObj":)?private"?%r]=>
102        string(11) "subdatadata"
103        [%r"?subpriv"?:("SubObj":)?private"?%r]=>
104        string(11) "subprivdata"
105        ["subpdata"]=>
106        string(10) "subpdata01"
107      }
108    }
109  }
110  [1]=>
111  object(MyObj)#%d (4) {
112    [%r"?data"?:("MyObj":)?private"?%r]=>
113    string(8) "datadata"
114    [%r"?priv"?:("MyObj":)?private"?%r]=>
115    string(8) "privdata"
116    ["pdata"]=>
117    string(8) "pubdata1"
118    ["subary"]=>
119    array(2) {
120      [0]=>
121      object(SubObj)#%d (3) {
122        [%r"?subdata"?:("SubObj":)?private"?%r]=>
123        string(11) "subdatadata"
124        [%r"?subpriv"?:("SubObj":)?private"?%r]=>
125        string(11) "subprivdata"
126        ["subpdata"]=>
127        string(11) "subpubdata1"
128      }
129      [1]=>
130      object(SubObj)#%d (3) {
131        [%r"?subdata"?:("SubObj":)?private"?%r]=>
132        string(11) "subdatadata"
133        [%r"?subpriv"?:("SubObj":)?private"?%r]=>
134        string(11) "subprivdata"
135        ["subpdata"]=>
136        string(10) "subpdata11"
137      }
138    }
139  }
140}
141OK
142