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