Roll back array-specific changes through D19607758
[hiphop-php.git] / hphp / test / slow / hack_arr_compat / json-encode.php
blob97e041b0f4830dafa2ff353e7451e255e1156921
1 <?hh
2 // Copyright 2004-present Facebook. All Rights Reserved.
4 function literals() {
5 echo "================== literals ==================\n";
6 json_encode(
7 __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[]),
8 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
9 );
10 json_encode(
11 __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, 2, 3, 4]),
12 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
14 json_encode(
15 vec[],
16 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
18 json_encode(
19 vec[1, 2, 3, 4],
20 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
22 json_encode(
23 dict[],
24 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
26 json_encode(
27 dict['a' => 1, 'b' => 2, 'c' => 3],
28 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
30 json_encode(
31 keyset[],
32 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
34 json_encode(
35 keyset['a', 'b', 'c'],
36 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
39 json_encode(
40 __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[__hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, 2]), __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[3, 4])]),
41 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
43 json_encode(
44 vec[vec[1, 2], vec[3, 4]],
45 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
47 json_encode(
48 dict['a' => dict['c' => 1, 'd' => 2], 'b' => dict['e' => 3, 'f' => 4]],
49 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
52 json_encode(
53 __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, vec[2, 3, 4], __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[5, 6, 7]), keyset[8, 9, 10], dict['a' => 11, 'b' => 12]]),
54 JSON_FB_WARN_DICTS | JSON_FB_WARN_KEYSETS | JSON_FB_WARN_PHP_ARRAYS
58 function test($name, $options) {
59 echo "==================== $name =========================\n";
60 var_dump(json_encode(__hhvm_intrinsics\dummy_cast_to_kindofarray(vec[]), $options));
61 var_dump(json_encode(__hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, 2, 3, 4]), $options));
62 var_dump(json_encode(vec[], $options));
63 var_dump(json_encode(vec[1, 2, 3, 4], $options));
64 var_dump(json_encode(dict[], $options));
65 var_dump(json_encode(dict['a' => 1, 'b' => 2, 'c' => 3], $options));
66 var_dump(json_encode(dict[0 => 'a', 1 => 'b', 2 => 'c'], $options));
67 var_dump(json_encode(darray[], $options));
68 var_dump(json_encode(darray['a' => 1, 'b' => 2, 'c' => 3], $options));
69 var_dump(json_encode(darray[0 => 'a', 1 => 'b', 2 => 'c'], $options));
70 var_dump(json_encode(keyset[], $options));
71 var_dump(json_encode(keyset['a', 'b', 'c'], $options));
73 var_dump(json_encode(__hhvm_intrinsics\dummy_cast_to_kindofarray(vec[__hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, 2]), __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[3, 4])]), $options));
74 var_dump(json_encode(vec[vec[1, 2], vec[3, 4]], $options));
75 var_dump(json_encode(
76 dict['a' => dict['c' => 1, 'd' => 2], 'b' => dict['e' => 3, 'f' => 4]],
77 $options
78 ));
80 var_dump(json_encode(
81 __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, vec[2, 3, 4], __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[5, 6, 7]), keyset[8, 9, 10], dict['a' => 11, 'b' => 12]]),
82 $options
83 ));
85 $obj = new stdclass();
86 $obj->a = __hhvm_intrinsics\dummy_cast_to_kindofarray(vec[1, 2, 3]);
87 $obj->b = vec[1, 2, 3];
88 $obj->c = dict['a' => 1, 'b' => 2];
89 $obj->d = keyset['a', 'b', 'c'];
90 var_dump(json_encode($obj, $options));
91 try {
92 var_dump(json_encode(new LateInitClass(), $options));
93 } catch (Exception $ex) {
94 var_dump($ex->getMessage());
98 class LateInitClass {
99 <<__LateInit>> public string $prop;
102 <<__EntryPoint>>
103 function main_json_encode() {
104 literals();
106 test("normal", 0);
107 test("force PHP", JSON_FB_FORCE_PHP_ARRAYS);
108 test("dict warn", JSON_FB_WARN_DICTS);
109 test("keyset warn", JSON_FB_WARN_KEYSETS);
110 test("PHP warn", JSON_FB_WARN_PHP_ARRAYS);
111 test("empty darrays", JSON_FB_WARN_EMPTY_DARRAYS);
112 test("vec-like darrays", JSON_FB_WARN_VEC_LIKE_DARRAYS);
113 test("dict-like darrays", JSON_FB_WARN_DICT_LIKE_DARRAYS);
114 test("all darrays",
115 JSON_FB_WARN_EMPTY_DARRAYS |
116 JSON_FB_WARN_VEC_LIKE_DARRAYS |
117 JSON_FB_WARN_DICT_LIKE_DARRAYS
119 test("warn both", JSON_FB_WARN_DICTS | JSON_FB_WARN_PHP_ARRAYS);
120 test("force + dict warn", JSON_FB_WARN_DICTS | JSON_FB_FORCE_PHP_ARRAYS);
121 test("force + PHP warn", JSON_FB_WARN_PHP_ARRAYS | JSON_FB_FORCE_PHP_ARRAYS);
122 test(
123 "everything",
124 JSON_FB_WARN_PHP_ARRAYS | JSON_FB_WARN_DICTS | JSON_FB_FORCE_PHP_ARRAYS
126 test("ignore lateinit", JSON_FB_IGNORE_LATEINIT);
127 echo "==================== no repeated warnings =========================\n";
128 var_dump(json_encode(vec[
129 darray[], darray[],
130 darray[0 => 'a'], darray[0 => 'a'],
131 darray[1 => 'a'], darray[1 => 'a'],
132 dict[0 => 'a'], dict[0 => 'a'],
133 ], JSON_FB_WARN_EMPTY_DARRAYS |
134 JSON_FB_WARN_VEC_LIKE_DARRAYS |
135 JSON_FB_WARN_DICT_LIKE_DARRAYS |
136 JSON_FB_WARN_PHP_ARRAYS |
137 JSON_FB_WARN_DICTS |
138 JSON_FB_WARN_KEYSETS