1--TEST-- 2disabled php only for class unpacker (ini_set) 3--SKIPIF-- 4--FILE-- 5<?php 6if(!extension_loaded('msgpack')) { 7 dl('msgpack.' . PHP_SHLIB_SUFFIX); 8} 9 10ini_set('msgpack.php_only', 0); 11 12function test($type, $variable, $test = null) 13{ 14 $msgpack = new MessagePack(); 15 16 $serialized = $msgpack->pack($variable); 17 18 $unpacker = new MessagePackUnpacker(); 19 20 $length = strlen($serialized); 21 22 if (rand(0, 1)) 23 { 24 for ($i = 0; $i < $length;) 25 { 26 $len = rand(1, 10); 27 $str = substr($serialized, $i, $len); 28 29 $unpacker->feed($str); 30 if ($unpacker->execute()) 31 { 32 $unserialized = $unpacker->data(); 33 var_dump($unserialized); 34 $unpacker->reset(); 35 } 36 37 $i += $len; 38 } 39 } 40 else 41 { 42 $str = ""; 43 $offset = 0; 44 45 for ($i = 0; $i < $length;) 46 { 47 $len = rand(1, 10); 48 $str .= substr($serialized, $i, $len); 49 50 if ($unpacker->execute($str, $offset)) 51 { 52 $unserialized = $unpacker->data(); 53 var_dump($unserialized); 54 55 $unpacker->reset(); 56 $str = ""; 57 $offset = 0; 58 } 59 60 $i += $len; 61 } 62 } 63 64 if (!is_bool($test)) 65 { 66 echo $unserialized === $variable ? 'OK' : 'ERROR', PHP_EOL; 67 } 68 else 69 { 70 echo $test || $unserialized == $variable ? 'OK' : 'ERROR', PHP_EOL; 71 } 72} 73 74test('null', null); 75 76test('bool: true', true); 77test('bool: false', false); 78 79test('zero: 0', 0); 80test('small: 1', 1); 81test('small: -1', -1); 82test('medium: 1000', 1000); 83test('medium: -1000', -1000); 84test('large: 100000', 100000); 85test('large: -100000', -100000); 86 87test('double: 123.456', 123.456); 88 89test('empty: ""', ""); 90test('string: "foobar"', "foobar"); 91 92test('array: empty', array(), false); 93test('array(1, 2, 3)', array(1, 2, 3), false); 94test('array(array(1, 2, 3), arr...', array(array(1, 2, 3), array(4, 5, 6), array(7, 8, 9)), false); 95 96test('array("foo", "foo", "foo")', array("foo", "foo", "foo"), false); 97test('array("one" => 1, "two" => 2))', array("one" => 1, "two" => 2), false); 98test('array("kek" => "lol", "lol" => "kek")', array("kek" => "lol", "lol" => "kek"), false); 99test('array("" => "empty")', array("" => "empty"), false); 100 101$a = array('foo'); 102test('array($a, $a)', array($a, $a), false); 103test('array(&$a, &$a)', array(&$a, &$a), false); 104 105$a = array(null); 106$b = array(&$a); 107$a[0] = &$b; 108 109test('cyclic', $a, true); 110 111$a = array( 112 'a' => array( 113 'b' => 'c', 114 'd' => 'e' 115 ), 116 'f' => array( 117 'g' => 'h' 118 ) 119 ); 120 121test('array', $a, false); 122 123class Obj { 124 public $a; 125 protected $b; 126 private $c; 127 128 function __construct($a, $b, $c) { 129 $this->a = $a; 130 $this->b = $b; 131 $this->c = $c; 132 } 133} 134 135test('object', new Obj(1, 2, 3), true); 136 137test('object', array(new Obj(1, 2, 3), new Obj(4, 5, 6)), true); 138 139$o = new Obj(1, 2, 3); 140 141test('object', array(&$o, &$o), true); 142--EXPECTF-- 143NULL 144OK 145bool(true) 146OK 147bool(false) 148OK 149int(0) 150OK 151int(1) 152OK 153int(-1) 154OK 155int(1000) 156OK 157int(-1000) 158OK 159int(100000) 160OK 161int(-100000) 162OK 163float(123.456) 164OK 165string(0) "" 166OK 167string(6) "foobar" 168OK 169array(0) { 170} 171OK 172array(3) { 173 [0]=> 174 int(1) 175 [1]=> 176 int(2) 177 [2]=> 178 int(3) 179} 180OK 181array(3) { 182 [0]=> 183 array(3) { 184 [0]=> 185 int(1) 186 [1]=> 187 int(2) 188 [2]=> 189 int(3) 190 } 191 [1]=> 192 array(3) { 193 [0]=> 194 int(4) 195 [1]=> 196 int(5) 197 [2]=> 198 int(6) 199 } 200 [2]=> 201 array(3) { 202 [0]=> 203 int(7) 204 [1]=> 205 int(8) 206 [2]=> 207 int(9) 208 } 209} 210OK 211array(3) { 212 [0]=> 213 string(3) "foo" 214 [1]=> 215 string(3) "foo" 216 [2]=> 217 string(3) "foo" 218} 219OK 220array(2) { 221 ["one"]=> 222 int(1) 223 ["two"]=> 224 int(2) 225} 226OK 227array(2) { 228 ["kek"]=> 229 string(3) "lol" 230 ["lol"]=> 231 string(3) "kek" 232} 233OK 234array(1) { 235 [""]=> 236 string(5) "empty" 237} 238OK 239array(2) { 240 [0]=> 241 array(1) { 242 [0]=> 243 string(3) "foo" 244 } 245 [1]=> 246 array(1) { 247 [0]=> 248 string(3) "foo" 249 } 250} 251OK 252array(2) { 253 [0]=> 254 array(1) { 255 [0]=> 256 string(3) "foo" 257 } 258 [1]=> 259 array(1) { 260 [0]=> 261 string(3) "foo" 262 } 263} 264OK 265array(1) { 266 [0]=> 267 array(1) { 268 [0]=> 269 array(1) { 270 [0]=> 271 NULL 272 } 273 } 274} 275OK 276array(2) { 277 ["a"]=> 278 array(2) { 279 ["b"]=> 280 string(1) "c" 281 ["d"]=> 282 string(1) "e" 283 } 284 ["f"]=> 285 array(1) { 286 ["g"]=> 287 string(1) "h" 288 } 289} 290OK 291array(3) { 292 [0]=> 293 int(1) 294 [1]=> 295 int(2) 296 [2]=> 297 int(3) 298} 299OK 300array(2) { 301 [0]=> 302 array(3) { 303 [0]=> 304 int(1) 305 [1]=> 306 int(2) 307 [2]=> 308 int(3) 309 } 310 [1]=> 311 array(3) { 312 [0]=> 313 int(4) 314 [1]=> 315 int(5) 316 [2]=> 317 int(6) 318 } 319} 320OK 321array(2) { 322 [0]=> 323 array(3) { 324 [0]=> 325 int(1) 326 [1]=> 327 int(2) 328 [2]=> 329 int(3) 330 } 331 [1]=> 332 array(3) { 333 [0]=> 334 int(1) 335 [1]=> 336 int(2) 337 [2]=> 338 int(3) 339 } 340} 341OK 342