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