7494a5c39a12de4516d33093eb6e368f53308e2a
[WebKit-https.git] / LayoutTests / fast / storage / serialized-script-value.html
1 <html>
2     <head>
3         <script src="../js/resources/js-test-pre.js"></script>
4         <script src="resources/serialized-script-value.js"></script>
5     </head>
6     <body>
7         <script>
8 /*
9     See LayoutTests/platform/chromium/fast/storage/serialized-script-value.js,
10     upon which this test is based, for the corresponding test of the V8
11     serialization format.
12 */
13
14 function testSerialization(obj, values, oldFormat, serializeExceptionValue) {
15     _testSerialization(1, obj, values, oldFormat, serializeExceptionValue);
16 }
17
18 testSerialization({foo: 'zoo', bar: {baz: 'myNewKey'}},
19 [
20     0x04, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00,
21     0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x10,
22     0x03, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x6f, 0x00,
23     0x6f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x00,
24     0x61, 0x00, 0x72, 0x00, 0x02, 0x03, 0x00, 0x00,
25     0x00, 0x62, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x10,
26     0x08, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x79, 0x00,
27     0x4e, 0x00, 0x65, 0x00, 0x77, 0x00, 0x4b, 0x00,
28     0x65, 0x00, 0x79, 0x00, 0xff, 0xff, 0xff, 0xff,
29     0xff, 0xff, 0xff, 0xff
30 ],
31 [
32     0x03, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00,
33     0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x10,
34     0x03, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x6f, 0x00,
35     0x6f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x00,
36     0x61, 0x00, 0x72, 0x00, 0x02, 0x03, 0x00, 0x00,
37     0x00, 0x62, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x10,
38     0x08, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x79, 0x00,
39     0x4e, 0x00, 0x65, 0x00, 0x77, 0x00, 0x4b, 0x00,
40     0x65, 0x00, 0x79, 0x00, 0xff, 0xff, 0xff, 0xff,
41     0xff, 0xff, 0xff, 0xff
42 ]);
43
44 testSerialization({foo: 'zoo', bar: 'myNewKey'},
45 [
46     0x04, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00,
47     0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x10,
48     0x03, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x6f, 0x00,
49     0x6f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x00,
50     0x61, 0x00, 0x72, 0x00, 0x10, 0x08, 0x00, 0x00,
51     0x00, 0x6d, 0x00, 0x79, 0x00, 0x4e, 0x00, 0x65,
52     0x00, 0x77, 0x00, 0x4b, 0x00, 0x65, 0x00, 0x79,
53     0x00, 0xff, 0xff, 0xff, 0xff
54 ],
55 [
56     0x03, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00,
57     0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x10,
58     0x03, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x6f, 0x00,
59     0x6f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x00,
60     0x61, 0x00, 0x72, 0x00, 0x10, 0x08, 0x00, 0x00,
61     0x00, 0x6d, 0x00, 0x79, 0x00, 0x4e, 0x00, 0x65,
62     0x00, 0x77, 0x00, 0x4b, 0x00, 0x65, 0x00, 0x79,
63     0x00, 0xff, 0xff, 0xff, 0xff
64 ]);
65
66 testSerialization([],
67 [
68     0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
69     0x00, 0xff, 0xff, 0xff, 0xff
70 ],
71 [
72     0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
73     0x00, 0xff, 0xff, 0xff, 0xff
74 ]);
75 testSerialization({foo: "zoo"},
76 [
77     0x04, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00,
78     0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x10,
79     0x03, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x6f, 0x00,
80     0x6f, 0x00, 0xff, 0xff, 0xff, 0xff
81 ],
82 [
83     0x03, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00,
84     0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x10,
85     0x03, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x6f, 0x00,
86     0x6f, 0x00, 0xff, 0xff, 0xff, 0xff
87 ]);
88 testSerialization({foo: null},
89 [
90     0x04, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00,
91     0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x04,
92     0xff, 0xff, 0xff, 0xff
93 ],
94 [
95     0x03, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00,
96     0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x04,
97     0xff, 0xff, 0xff, 0xff
98 ]);
99
100 testSerialization({},
101 [
102     0x04, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff,
103     0xff
104 ],
105 [
106     0x03, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff,
107     0xff
108 ]);
109
110 testSerialization(undefined,
111 [
112     0x04, 0x00, 0x00, 0x00, 0x03
113 ],
114 [
115     0x03, 0x00, 0x00, 0x00, 0x03
116 ]);
117 testSerialization(true,
118 [
119     0x04, 0x00, 0x00, 0x00, 0x09
120 ],
121 [
122     0x03, 0x00, 0x00, 0x00, 0x09
123 ]);
124 testSerialization(false,
125 [
126     0x04, 0x00, 0x00, 0x00, 0x08
127 ],
128 [
129     0x03, 0x00, 0x00, 0x00, 0x08
130 ]);
131 testSerialization(new Array(100),
132 [
133     0x04, 0x00, 0x00, 0x00, 0x01, 0x64, 0x00, 0x00,
134     0x00, 0xff, 0xff, 0xff, 0xff
135 ],
136 [
137     0x03, 0x00, 0x00, 0x00, 0x01, 0x64, 0x00, 0x00,
138     0x00, 0xff, 0xff, 0xff, 0xff
139 ]);
140 testSerialization(10,
141 [
142     0x04, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00,
143     0x00
144 ],
145 [
146     0x03, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00,
147     0x00
148 ]);
149 testSerialization(-10,
150 [
151     0x04, 0x00, 0x00, 0x00, 0x05, 0xf6, 0xff, 0xff,
152     0xff
153 ],
154 [
155     0x03, 0x00, 0x00, 0x00, 0x05, 0xf6, 0xff, 0xff,
156     0xff
157 ]);
158 testSerialization(Math.pow(2,30),
159 [
160     0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
161     0x40
162 ],
163 [
164     0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
165     0x40
166 ]);
167 testSerialization(Math.pow(2,55),
168 [
169     0x04, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
170     0x00, 0x00, 0x00, 0x60, 0x43,
171 ],
172 [
173     0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
174     0x00, 0x00, 0x00, 0x60, 0x43,
175 ]);
176 testSerialization(1.23,
177 [
178     0x04, 0x00, 0x00, 0x00, 0x0a, 0xae, 0x47, 0xe1,
179     0x7a, 0x14, 0xae, 0xf3, 0x3f
180 ],
181 [
182     0x03, 0x00, 0x00, 0x00, 0x0a, 0xae, 0x47, 0xe1,
183     0x7a, 0x14, 0xae, 0xf3, 0x3f
184 ]);
185 testSerialization("",
186 [
187     0x04, 0x00, 0x00, 0x00, 0x11
188 ],
189 [
190     0x03, 0x00, 0x00, 0x00, 0x11
191 ]);
192 testSerialization("abc",
193 [
194     0x04, 0x00, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00,
195     0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00
196 ],
197 [
198     0x03, 0x00, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00,
199     0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00
200 ]);
201 testSerialization({integer: 123},
202 [
203     0x04, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00,
204     0x00, 0x69, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65,
205     0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x05,
206     0x7b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
207 ],
208 [
209     0x03, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00,
210     0x00, 0x69, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65,
211     0x00, 0x67, 0x00, 0x65, 0x00, 0x72, 0x00, 0x05,
212     0x7b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
213 ]);
214 testSerialization({string: "str"},
215 [
216     0x04, 0x00, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00,
217     0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69,
218     0x00, 0x6e, 0x00, 0x67, 0x00, 0x10, 0x03, 0x00,
219     0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00,
220     0xff, 0xff, 0xff, 0xff
221 ],
222 [
223     0x03, 0x00, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00,
224     0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69,
225     0x00, 0x6e, 0x00, 0x67, 0x00, 0x10, 0x03, 0x00,
226     0x00, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00,
227     0xff, 0xff, 0xff, 0xff
228 ]);
229 testSerialization({list: [1,2,3]},
230 [
231     0x04, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00,
232     0x00, 0x6c, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74,
233     0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
234     0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x05,
235     0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
236     0x05, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
237     0xff, 0xff, 0xff, 0xff, 0xff
238 ],
239 [
240     0x03, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00,
241     0x00, 0x6c, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74,
242     0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
243     0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x05,
244     0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
245     0x05, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
246     0xff, 0xff, 0xff, 0xff, 0xff
247 ]);
248 testSerialization(null,
249 [
250     0x04, 0x00, 0x00, 0x00, 0x04
251 ],
252 [
253     0x03, 0x00, 0x00, 0x00, 0x04
254 ]);
255 testSerialization(/abc/,
256 [
257     0x04, 0x00, 0x00, 0x00, 0x12, 0x03, 0x00, 0x00,
258     0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x00,
259     0x00, 0x00, 0x00
260 ],
261 [
262     0x03, 0x00, 0x00, 0x00, 0x12, 0x03, 0x00, 0x00,
263     0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x00,
264     0x00, 0x00, 0x00
265 ]);
266
267 var innerObject = {hello: "there"};
268 var outerObject = {inner: innerObject};
269 outerObject['outer'] = innerObject;
270 testSerialization(outerObject,
271 [
272     0x04, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00,
273     0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x65,
274     0x00, 0x72, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00,
275     0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00,
276     0x6f, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00, 0x74,
277     0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x65,
278     0x00, 0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00,
279     0x00, 0x6f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65,
280     0x00, 0x72, 0x00, 0x13, 0x01, 0xff, 0xff, 0xff,
281     0xff
282 ],
283 [
284     0x03, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00,
285     0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x65,
286     0x00, 0x72, 0x00, 0x02, 0x05, 0x00, 0x00, 0x00,
287     0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00,
288     0x6f, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00, 0x74,
289     0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00, 0x65,
290     0x00, 0xff, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00,
291     0x00, 0x6f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65,
292     0x00, 0x72, 0x00, 0x13, 0x01, 0xff, 0xff, 0xff,
293     0xff
294 ]);
295 testSerialization(innerObject,
296 [
297     0x04, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00,
298     0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c,
299     0x00, 0x6f, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00,
300     0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00,
301     0x65, 0x00, 0xff, 0xff, 0xff, 0xff
302 ],
303 [
304     0x03, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00,
305     0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c,
306     0x00, 0x6f, 0x00, 0x10, 0x05, 0x00, 0x00, 0x00,
307     0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x72, 0x00,
308     0x65, 0x00, 0xff, 0xff, 0xff, 0xff
309 ]);
310
311 var unicodeObject = {a: 'a', u: String.fromCharCode(0x03B1,0x03B2), d: 42};
312 testSerialization(unicodeObject,
313 [
314     0x04, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
315     0x00, 0x61, 0x00, 0x10, 0xfe, 0xff, 0xff, 0xff,
316     0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x00, 0x10,
317     0x02, 0x00, 0x00, 0x00, 0xb1, 0x03, 0xb2, 0x03,
318     0x01, 0x00, 0x00, 0x00, 0x64, 0x00, 0x05, 0x2a,
319     0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
320 ],
321 [
322     0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
323     0x00, 0x61, 0x00, 0x10, 0xfe, 0xff, 0xff, 0xff,
324     0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x00, 0x10,
325     0x02, 0x00, 0x00, 0x00, 0xb1, 0x03, 0xb2, 0x03,
326     0x01, 0x00, 0x00, 0x00, 0x64, 0x00, 0x05, 0x2a,
327     0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
328 ]);
329 unicodeObject.a = 'ab';
330 testSerialization(unicodeObject,
331 [
332     0x04, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
333     0x00, 0x61, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00,
334     0x61, 0x00, 0x62, 0x00, 0x01, 0x00, 0x00, 0x00,
335     0x75, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0xb1,
336     0x03, 0xb2, 0x03, 0x01, 0x00, 0x00, 0x00, 0x64,
337     0x00, 0x05, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff,
338     0xff, 0xff
339 ],
340 [
341     0x03, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
342     0x00, 0x61, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00,
343     0x61, 0x00, 0x62, 0x00, 0x01, 0x00, 0x00, 0x00,
344     0x75, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0xb1,
345     0x03, 0xb2, 0x03, 0x01, 0x00, 0x00, 0x00, 0x64,
346     0x00, 0x05, 0x2a, 0x00, 0x00, 0x00, 0xff, 0xff,
347     0xff, 0xff
348 ]);
349
350 var arrayObject = [];
351 arrayObject['a'] = true;
352 arrayObject['b'] = false;
353 arrayObject['foo'] = 123;
354 arrayObject['bar'] = 456;
355 arrayObject[''] = null;
356 testSerialization(arrayObject,
357 [
358     0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
359     0x00, 0xfd, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
360     0x00, 0x61, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00,
361     0x62, 0x00, 0x08, 0x03, 0x00, 0x00, 0x00, 0x66,
362     0x00, 0x6f, 0x00, 0x6f, 0x00, 0x05, 0x7b, 0x00,
363     0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x62, 0x00,
364     0x61, 0x00, 0x72, 0x00, 0x05, 0xc8, 0x01, 0x00,
365     0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff,
366     0xff, 0xff
367 ]);
368
369 arrayObject[0] = 'foo';
370 arrayObject[1] = 'bar';
371 testSerialization(arrayObject,
372 [
373     0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
374     0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x00,
375     0x00, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6f, 0x00,
376     0x01, 0x00, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00,
377     0x00, 0x62, 0x00, 0x61, 0x00, 0x72, 0x00, 0xfd,
378     0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x61,
379     0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x62, 0x00,
380     0x08, 0xfe, 0xff, 0xff, 0xff, 0x00, 0x05, 0x7b,
381     0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x01,
382     0x05, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
383     0x00, 0x04, 0xff, 0xff, 0xff, 0xff
384 ]);
385
386 testSerialization(function(){}, [], null, DOMException.DATA_CLONE_ERR);
387         </script>
388         <script src="../js/resources/js-test-post.js"></script>
389     </body>
390 </html>