1--TEST--
2unpack of template converter: multiple class/variable: (array)
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$arySubObj = array(
60  "subdata"  => "subdatadata",
61  "subpriv"  => "subprivdata",
62  "subpdata" => null,
63);
64
65$aryMyObj = array(
66  "data"   => "datadata",
67  "priv"   => "privdata",
68  "pdata"  => null,
69  "subary" => array($arySubObj),
70);
71
72$obj0 = new MyObj();
73$obj0->pdata = "pubdata0";
74$obj0->subary[0]->subpdata = "subpubdata00";
75$subobj01 = new SubObj();
76$subobj01->subpdata = "subpdata01";
77$obj0->subary[1] = $subobj01;
78$obj1 = new MyObj();
79$obj1->pdata = "pubdata1";
80$obj1->subary[0]->subpdata = "subpubdata1";
81$subobj11 = new SubObj();
82$subobj11->subpdata = "subpdata11";
83$obj1->subary[1] = $subobj11;
84
85$ary = array($obj0, $obj1);
86
87$tpl = array($aryMyObj);
88$resary = array($aryMyObj, $aryMyObj);
89$resary[0]["pdata"] = "pubdata0";
90$resary[0]["subary"][] = $arySubObj;
91$resary[0]["subary"][0]["subpdata"] = "subpubdata00";
92$resary[0]["subary"][1]["subpdata"] = "subpdata01";
93$resary[1]["subary"][] = $arySubObj;
94$resary[1]["pdata"] = "pubdata1";
95$resary[1]["subary"][0]["subpdata"] = "subpubdata1";
96$resary[1]["subary"][1]["subpdata"] = "subpdata11";
97
98test("recursive object list to associative array list", $ary, $tpl, $resary);
99
100--EXPECTF--
101array(2) {
102  [0]=>
103  array(4) {
104    ["data"]=>
105    string(8) "datadata"
106    ["priv"]=>
107    string(8) "privdata"
108    ["pdata"]=>
109    string(8) "pubdata0"
110    ["subary"]=>
111    array(2) {
112      [0]=>
113      array(3) {
114        ["subdata"]=>
115        string(11) "subdatadata"
116        ["subpriv"]=>
117        string(11) "subprivdata"
118        ["subpdata"]=>
119        string(12) "subpubdata00"
120      }
121      [1]=>
122      array(3) {
123        ["subdata"]=>
124        string(11) "subdatadata"
125        ["subpriv"]=>
126        string(11) "subprivdata"
127        ["subpdata"]=>
128        string(10) "subpdata01"
129      }
130    }
131  }
132  [1]=>
133  array(4) {
134    ["data"]=>
135    string(8) "datadata"
136    ["priv"]=>
137    string(8) "privdata"
138    ["pdata"]=>
139    string(8) "pubdata1"
140    ["subary"]=>
141    array(2) {
142      [0]=>
143      array(3) {
144        ["subdata"]=>
145        string(11) "subdatadata"
146        ["subpriv"]=>
147        string(11) "subprivdata"
148        ["subpdata"]=>
149        string(11) "subpubdata1"
150      }
151      [1]=>
152      array(3) {
153        ["subdata"]=>
154        string(11) "subdatadata"
155        ["subpriv"]=>
156        string(11) "subprivdata"
157        ["subpdata"]=>
158        string(10) "subpdata11"
159      }
160    }
161  }
162}
163OK
164