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