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