1--TEST-- 2unpack of object converter : class unpack (string) 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 15error_reporting(0); 16 17function test($type, $variable, $object, $result = null) 18{ 19 $msgpack = new MessagePack(); 20 21 $serialized = $msgpack->pack($variable); 22 $unserialized = $msgpack->unpack($serialized, $object); 23 24 var_dump($unserialized); 25 if ($result) 26 { 27 echo $unserialized == $result ? 'OK' : 'ERROR', PHP_EOL; 28 } 29 else 30 { 31 echo 'SKIP', PHP_EOL; 32 } 33} 34 35class Obj 36{ 37 public $a; 38 protected $b; 39 private $c; 40 41 public function __construct($a = null, $b = null, $c = null, $d = null) 42 { 43 $this->a = $a; 44 $this->b = $b; 45 $this->c = $c; 46 if (is_array($d)) 47 { 48 foreach ($d as $key => $val) 49 { 50 $this->{$key} = $val; 51 } 52 } 53 } 54} 55 56test('null', null, 'Obj', new Obj(null, null, null)); 57 58test('bool: true', true, 'Obj', new Obj(true, null, null)); 59test('bool: false', false, 'Obj', new Obj(false, null, null)); 60 61test('zero: 0', 0, 'Obj', new Obj(0, null, null)); 62test('small: 1', 1, 'Obj', new Obj(1, null, null)); 63test('small: -1', -1, 'Obj', new Obj(-1, null, null)); 64test('medium: 1000', 1000, 'Obj', new Obj(1000, null, null)); 65test('medium: -1000', -1000, 'Obj', new Obj(-1000, null, null)); 66test('large: 100000', 100000, 'Obj', new Obj(100000, null, null)); 67test('large: -100000', -100000, 'Obj', new Obj(-100000, null, null)); 68 69test('double: 123.456', 123.456, 'Obj', new Obj(123.456, null, null)); 70 71test('empty: ""', "", 'Obj', new Obj("", null, null)); 72test('string: "foobar"', "foobar", 'Obj', new Obj("foobar", null, null)); 73 74test('array: empty', array(), 'Obj', new Obj(null, null, null)); 75test('array(1, 2, 3)', array(1, 2, 3), 'Obj', new Obj(1, 2, 3)); 76test('array(array(1, 2, 3), arr...', array(array(1, 2, 3), array(4, 5, 6), array(7, 8, 9)), 'Obj', new Obj(array(1, 2, 3), array(4, 5, 6), array(7, 8, 9))); 77test('array(1, 2, 3, 4)', array(1, 2, 3, 4), 'Obj'); 78 79test('array("foo", "foobar", "foohoge")', array("foo", "foobar", "hoge"), 'Obj', new Obj("foo", "foobar", "hoge")); 80test('array("a" => 1, "b" => 2))', array("a" => 1, "b" => 2), 'Obj', new Obj(1, 2, null)); 81test('array("one" => 1, "two" => 2))', array("one" => 1, "two" => 2), 'Obj', new Obj(null, null, null, array("one" => 1, "two" => 2))); 82 83test('array("a" => 1, "b" => 2, 3))', array("a" => 1, "b" => 2, 3), 'Obj', new Obj(1, 2, 3)); 84test('array(3, "a" => 1, "b" => 2))', array(3, "a" => 1, "b" => 2), 'Obj', new Obj(1, 2, 3)); 85test('array("a" => 1, 3, "b" => 2))', array("a" => 1, 3, "b" => 2), 'Obj', new Obj(1, 2, 3)); 86 87$a = array('foo'); 88test('array($a, $a)', array($a, $a), 'Obj', new Obj($a, $a, null)); 89 90$a = array( 91 'a' => array( 92 'b' => 'c', 93 'd' => 'e' 94 ), 95 'f' => array( 96 'g' => 'h' 97 ) 98 ); 99test('array', $a, 'Obj', new Obj(null, null, null, $a)); 100 101$o = new Obj(1, 2, 3); 102test('object', $o, 'Obj', new Obj(1, 2, 3)); 103 104class Obj2 { 105 public $A; 106 protected $B; 107 private $C; 108 109 function __construct($a, $b, $c) { 110 $this->A = $a; 111 $this->B = $b; 112 $this->C = $c; 113 } 114} 115 116$o = new Obj2(1, 2, 3); 117test('object', $o, 'Obj', new Obj($o)); 118 119$o1 = new Obj2(1, 2, 3); 120$o2 = new Obj2(4, 5, 6); 121test('object', array($o1, $o2), 'Obj', new Obj($o1, $o2)); 122 123--EXPECTF-- 124object(Obj)#%d (3) { 125 ["a"]=> 126 NULL 127 [%r"?b"?:protected"?%r]=> 128 NULL 129 [%r"?c"?:("Obj":)?private"?%r]=> 130 NULL 131} 132OK 133object(Obj)#%d (3) { 134 ["a"]=> 135 bool(true) 136 [%r"?b"?:protected"?%r]=> 137 NULL 138 [%r"?c"?:("Obj":)?private"?%r]=> 139 NULL 140} 141OK 142object(Obj)#%d (3) { 143 ["a"]=> 144 bool(false) 145 [%r"?b"?:protected"?%r]=> 146 NULL 147 [%r"?c"?:("Obj":)?private"?%r]=> 148 NULL 149} 150OK 151object(Obj)#%d (3) { 152 ["a"]=> 153 int(0) 154 [%r"?b"?:protected"?%r]=> 155 NULL 156 [%r"?c"?:("Obj":)?private"?%r]=> 157 NULL 158} 159OK 160object(Obj)#%d (3) { 161 ["a"]=> 162 int(1) 163 [%r"?b"?:protected"?%r]=> 164 NULL 165 [%r"?c"?:("Obj":)?private"?%r]=> 166 NULL 167} 168OK 169object(Obj)#%d (3) { 170 ["a"]=> 171 int(-1) 172 [%r"?b"?:protected"?%r]=> 173 NULL 174 [%r"?c"?:("Obj":)?private"?%r]=> 175 NULL 176} 177OK 178object(Obj)#%d (3) { 179 ["a"]=> 180 int(1000) 181 [%r"?b"?:protected"?%r]=> 182 NULL 183 [%r"?c"?:("Obj":)?private"?%r]=> 184 NULL 185} 186OK 187object(Obj)#%d (3) { 188 ["a"]=> 189 int(-1000) 190 [%r"?b"?:protected"?%r]=> 191 NULL 192 [%r"?c"?:("Obj":)?private"?%r]=> 193 NULL 194} 195OK 196object(Obj)#%d (3) { 197 ["a"]=> 198 int(100000) 199 [%r"?b"?:protected"?%r]=> 200 NULL 201 [%r"?c"?:("Obj":)?private"?%r]=> 202 NULL 203} 204OK 205object(Obj)#%d (3) { 206 ["a"]=> 207 int(-100000) 208 [%r"?b"?:protected"?%r]=> 209 NULL 210 [%r"?c"?:("Obj":)?private"?%r]=> 211 NULL 212} 213OK 214object(Obj)#%d (3) { 215 ["a"]=> 216 float(123.456) 217 [%r"?b"?:protected"?%r]=> 218 NULL 219 [%r"?c"?:("Obj":)?private"?%r]=> 220 NULL 221} 222OK 223object(Obj)#%d (3) { 224 ["a"]=> 225 string(0) "" 226 [%r"?b"?:protected"?%r]=> 227 NULL 228 [%r"?c"?:("Obj":)?private"?%r]=> 229 NULL 230} 231OK 232object(Obj)#%d (3) { 233 ["a"]=> 234 string(6) "foobar" 235 [%r"?b"?:protected"?%r]=> 236 NULL 237 [%r"?c"?:("Obj":)?private"?%r]=> 238 NULL 239} 240OK 241object(Obj)#%d (3) { 242 ["a"]=> 243 NULL 244 [%r"?b"?:protected"?%r]=> 245 NULL 246 [%r"?c"?:("Obj":)?private"?%r]=> 247 NULL 248} 249OK 250object(Obj)#%d (3) { 251 ["a"]=> 252 int(1) 253 [%r"?b"?:protected"?%r]=> 254 int(2) 255 [%r"?c"?:("Obj":)?private"?%r]=> 256 int(3) 257} 258OK 259object(Obj)#%d (3) { 260 ["a"]=> 261 array(3) { 262 [0]=> 263 int(1) 264 [1]=> 265 int(2) 266 [2]=> 267 int(3) 268 } 269 [%r"?b"?:protected"?%r]=> 270 array(3) { 271 [0]=> 272 int(4) 273 [1]=> 274 int(5) 275 [2]=> 276 int(6) 277 } 278 [%r"?c"?:("Obj":)?private"?%r]=> 279 array(3) { 280 [0]=> 281 int(7) 282 [1]=> 283 int(8) 284 [2]=> 285 int(9) 286 } 287} 288OK 289object(Obj)#%d (4) { 290 ["a"]=> 291 int(1) 292 [%r"?b"?:protected"?%r]=> 293 int(2) 294 [%r"?c"?:("Obj":)?private"?%r]=> 295 int(3) 296 ["3"]=> 297 int(4) 298} 299SKIP 300object(Obj)#%d (3) { 301 ["a"]=> 302 string(3) "foo" 303 [%r"?b"?:protected"?%r]=> 304 string(6) "foobar" 305 [%r"?c"?:("Obj":)?private"?%r]=> 306 string(4) "hoge" 307} 308OK 309object(Obj)#%d (3) { 310 ["a"]=> 311 int(1) 312 [%r"?b"?:protected"?%r]=> 313 int(2) 314 [%r"?c"?:("Obj":)?private"?%r]=> 315 NULL 316} 317OK 318object(Obj)#%d (5) { 319 ["a"]=> 320 NULL 321 [%r"?b"?:protected"?%r]=> 322 NULL 323 [%r"?c"?:("Obj":)?private"?%r]=> 324 NULL 325 ["one"]=> 326 int(1) 327 ["two"]=> 328 int(2) 329} 330OK 331object(Obj)#%d (3) { 332 ["a"]=> 333 int(1) 334 [%r"?b"?:protected"?%r]=> 335 int(2) 336 [%r"?c"?:("Obj":)?private"?%r]=> 337 int(3) 338} 339OK 340object(Obj)#%d (3) { 341 ["a"]=> 342 int(1) 343 [%r"?b"?:protected"?%r]=> 344 int(2) 345 [%r"?c"?:("Obj":)?private"?%r]=> 346 int(3) 347} 348OK 349object(Obj)#%d (3) { 350 ["a"]=> 351 int(1) 352 [%r"?b"?:protected"?%r]=> 353 int(2) 354 [%r"?c"?:("Obj":)?private"?%r]=> 355 int(3) 356} 357OK 358object(Obj)#%d (3) { 359 ["a"]=> 360 array(1) { 361 [0]=> 362 string(3) "foo" 363 } 364 [%r"?b"?:protected"?%r]=> 365 array(1) { 366 [0]=> 367 string(3) "foo" 368 } 369 [%r"?c"?:("Obj":)?private"?%r]=> 370 NULL 371} 372OK 373object(Obj)#%d (4) { 374 ["a"]=> 375 array(2) { 376 ["b"]=> 377 string(1) "c" 378 ["d"]=> 379 string(1) "e" 380 } 381 [%r"?b"?:protected"?%r]=> 382 NULL 383 [%r"?c"?:("Obj":)?private"?%r]=> 384 NULL 385 ["f"]=> 386 array(1) { 387 ["g"]=> 388 string(1) "h" 389 } 390} 391OK 392object(Obj)#%d (3) { 393 ["a"]=> 394 int(1) 395 [%r"?b"?:protected"?%r]=> 396 int(2) 397 [%r"?c"?:("Obj":)?private"?%r]=> 398 int(3) 399} 400OK 401object(Obj)#%d (3) { 402 ["a"]=> 403 object(Obj2)#%d (3) { 404 ["A"]=> 405 int(1) 406 [%r"?B"?:protected"?%r]=> 407 int(2) 408 [%r"?C"?:("Obj2":)?private"?%r]=> 409 int(3) 410 } 411 [%r"?b"?:protected"?%r]=> 412 NULL 413 [%r"?c"?:("Obj":)?private"?%r]=> 414 NULL 415} 416OK 417object(Obj)#%d (3) { 418 ["a"]=> 419 object(Obj2)#%d (3) { 420 ["A"]=> 421 int(1) 422 [%r"?B"?:protected"?%r]=> 423 int(2) 424 [%r"?C"?:("Obj2":)?private"?%r]=> 425 int(3) 426 } 427 [%r"?b"?:protected"?%r]=> 428 object(Obj2)#%d (3) { 429 ["A"]=> 430 int(4) 431 [%r"?B"?:protected"?%r]=> 432 int(5) 433 [%r"?C"?:("Obj2":)?private"?%r]=> 434 int(6) 435 } 436 [%r"?c"?:("Obj":)?private"?%r]=> 437 NULL 438} 439OK 440