Handle this typehints
[hiphop-php.git] / hphp / test / quick / serialize2.php
blobcfd166677015b1adff2a2c49e8dd192da9afbc07
1 <?hh
2 error_reporting(E_ALL);
4 function __autoload($s) { echo "[load $s]"; }
5 interface I {}
6 class A { }
7 class B extends A { }
8 class C implements I { }
9 class D extends C { }
10 class E extends B implements I { }
12 class UnexpectedSerializedClass extends Exception {}
13 function main() {
14 $v = serialize(array(new A, new B, new C, new D, new E));
15 $run = $opts ==> {
16 try {
17 printf("%s (%s)\n",
18 join("", array_map(
19 $x ==> get_class($x)[0],
20 unserialize($v, $opts))),
21 json_encode($opts));
22 } catch (Exception $e) {
23 printf("%s %s %s\n", get_class($e), $e->getMessage(), json_encode($opts));
26 foreach (vec[false, true] as $subclasses) {
27 $check = $xs ==> $run(shape('include_subclasses' => $subclasses,
28 'allowed_classes' => $xs));
29 $check(array());
30 $check(array('A'));
31 $check(array('B'));
32 $check(array('C'));
33 $check(array('D'));
34 $check(array('E'));
35 $check(array('I'));
36 $check(array('A', 'I'));
37 $check(vec['A', 'I']);
38 $run(shape('include_subclasses' => $subclasses,
39 'allowed_classes' => vec['A','B','C','D','E','I'],
40 'throw' => 'UnexpectedSerializedClass'));
41 $run(shape('include_subclasses' => $subclasses,
42 'allowed_classes' => vec['A','I'],
43 'throw' => 'UnexpectedSerializedClass'));
44 $run(shape('include_subclasses' => $subclasses,
45 'allowed_classes' => false,
46 'throw' => false));
47 $run(shape('include_subclasses' => $subclasses,
48 'allowed_classes' => false,
49 'throw' => 'UnexpectedSerializedClass'));
51 unserialize('O:3:"Foo":0:{}',
52 shape('allowed_classes' => vec['I']));
53 unserialize('O:3:"Bar":0:{}',
54 shape('allowed_classes' => vec['Feh'],
55 'include_subclasses' => true));
56 unserialize('O:3:"Baz":0:{}',
57 shape('allowed_classes' => vec['Fiddle'],
58 'include_subclasses' => true,
59 'throw' => 'MadeUp'));
62 main();