4 <script src=
"../../resources/js-test.js"></script>
5 <script src=
"resources/serialized-script-value.js"></script>
9 <div style=
"position: fixed; left: 0; top: 0;">
10 <!-- this shouldn't scroll, because we're dropping a file on it -->
11 <input type=
"file" id=
"fileInput" />
16 function testSerialization(obj
, values
, oldFormat
, serializeExceptionValue
) {
17 _testSerialization(2, obj
, values
, oldFormat
, serializeExceptionValue
);
18 if (typeof oldFormat
=== "undefined" ) {
20 debug("Backwards compatibility with version 3 serialization.");
21 _testSerialization(2, obj
, values
, forVersion(3, values
), serializeExceptionValue
);
25 // We only test a few cases of the "old" serialization format because
26 // that is all that was left around from previous tests. Those values
27 // are only persisted out in the world in IndexedDB stores that were
28 // written with implementations built before mid-2011.
29 testSerialization({foo
: 'zoo', bar
: {baz
: 'myNewKey'}},
30 [ 0x003f, 0x3f6f, 0x5301, 0x6603, 0x6f6f,
31 0x013f, 0x0353, 0x6f7a, 0x3f6f, 0x5301,
32 0x6203, 0x7261, 0x013f, 0x3f6f, 0x5302,
33 0x6203, 0x7a61, 0x023f, 0x0853, 0x796d,
34 0x654e, 0x4b77, 0x7965, 0x017b, 0x027b ]);
36 testSerialization({foo
: 'zoo', bar
: 'myNewKey'},
37 [0x003f, 0x3f6f, 0x5301, 0x6603, 0x6f6f,
38 0x013f, 0x0353, 0x6f7a, 0x3f6f, 0x5301,
39 0x6203, 0x7261, 0x013f, 0x0853, 0x796d,
40 0x654e, 0x4b77, 0x7965, 0x027b]);
42 testSerialization([], [0x003f, 0x0041, 0x0024, 0x0000 ]);
43 testSerialization({foo
: "zoo"},
44 [0x003f, 0x3f6f, 0x5301, 0x6603, 0x6f6f,
45 0x013f, 0x0353, 0x6f7a, 0x7b6f, 0x0001],
46 [0x0353, 0x6f66, 0x536f, 0x7a03, 0x6f6f, 0x017b]);
47 testSerialization({foo
: null},
48 [0x003f, 0x3f6f, 0x5301, 0x6603, 0x6f6f,
49 0x013f, 0x7b30, 0x0001],
50 [0x0353, 0x6f66, 0x306f, 0x017b]);
51 testSerialization({}, [0x003f, 0x7b6f, 0x0000], [0x007b]);
53 testSerialization(undefined, [0x003f, 0x005f]);
54 testSerialization(true, [0x003f, 0x0054]);
55 testSerialization(false, [0x003f, 0x0046]);
56 // Sparse array deserialization is broken.
57 // See: https://bugs.webkit.org/show_bug.cgi?id=96838
58 // testSerialization(new Array(100), [0x003f, 0x6461, 0x0040, 0x0064]);
59 testSerialization(10, [0x003f, 0x1449]);
60 testSerialization(-10, [0x003f, 0x1349]);
61 testSerialization(Math
.pow(2,30), [0x003f, 0x8049, 0x8080, 0x0880]);
62 testSerialization(Math
.pow(2,55), [0x003f, 0x004e, 0x0000, 0x0000,
64 testSerialization(1.23, [0x003f, 0xae4e, 0xe147, 0x147a, 0xf3ae, 0x003f]);
66 // Exercise special cases for Int32/Uint32.
67 testSerialization( 0x7fffffff, [0x003f, 0xfe49, 0xffff, 0x0fff]);
68 testSerialization(-0x80000000, [0x003f, 0xff49, 0xffff, 0x0fff]);
69 testSerialization( 0x80000000, [0x003f, 0x8055, 0x8080, 0x0880]);
70 testSerialization( 0xffffffff, [0x003f, 0xff55, 0xffff, 0x0fff]);
72 testSerialization("", [0x003f, 0x0053]);
73 testSerialization("abc", [0x003f, 0x0353, 0x6261, 0x0063]);
74 testSerialization({integer
: 123}, [0x003f, 0x3f6f, 0x5301, 0x6907, 0x746e,
75 0x6765, 0x7265, 0x013f, 0xf649, 0x7b01,
77 testSerialization({string
: "str"}, [0x003f, 0x3f6f, 0x5301, 0x7306, 0x7274,
78 0x6e69, 0x3f67, 0x5301, 0x7303, 0x7274,
80 testSerialization({list
: [1,2,3]}, [0x003f, 0x3f6f, 0x5301, 0x6c04, 0x7369,
81 0x3f74, 0x4101, 0x3f03, 0x4902, 0x3f02,
82 0x4902, 0x3f04, 0x4902, 0x2406, 0x0300,
84 testSerialization(null, [0x003f, 0x0030]);
85 testSerialization(/abc/, [0x003f, 0x0352, 0x6261, 0x0063]);
87 var innerObject
= {hello
: "there"};
88 var outerObject
= {inner
: innerObject
};
89 outerObject
['outer'] = innerObject
;
90 testSerialization(outerObject
, [0x003f, 0x3f6f, 0x5301, 0x6905, 0x6e6e,
91 0x7265, 0x013f, 0x3f6f, 0x5302, 0x6805,
92 0x6c65, 0x6f6c, 0x023f, 0x0553, 0x6874,
93 0x7265, 0x7b65, 0x3f01, 0x5302, 0x6f05,
94 0x7475, 0x7265, 0x023f, 0x015e, 0x027b]);
95 testSerialization(innerObject
, [0x003f, 0x3f6f, 0x5301, 0x6805, 0x6c65,
96 0x6f6c, 0x013f, 0x0553, 0x6874, 0x7265,
99 var unicodeObject
= {a
: 'a', u
: String
.fromCharCode(0x03B1,0x03B2), d
: 42};
100 testSerialization(unicodeObject
,
101 [0x003f, 0x3f6f, 0x5301, 0x6101, 0x013f,
102 0x0153, 0x3f61, 0x5301, 0x7501, 0x013f,
103 0x0463, 0x03b1, 0x03b2, 0x013f, 0x0153,
104 0x3f64, 0x4901, 0x7b54, 0x0003],
105 [0x01ff, 0x003f, 0x3f6f, 0x5301, 0x6101,
106 0x013f, 0x0153, 0x3f61, 0x5301, 0x7501,
107 0x013f, 0x0453, 0xb1ce, 0xb2ce, 0x013f,
108 0x0153, 0x3f64, 0x4901, 0x7b54, 0x0003]);
109 unicodeObject
.a
= 'ab';
110 testSerialization(unicodeObject
,
111 [0x003f, 0x3f6f, 0x5301, 0x6101, 0x013f,
112 0x0253, 0x6261, 0x013f, 0x0153, 0x3f75,
113 0x0001, 0x0463, 0x03b1, 0x03b2, 0x013f,
114 0x0153, 0x3f64, 0x4901, 0x7b54, 0x0003],
115 [0x01ff, 0x003f, 0x3f6f, 0x5301, 0x6101,
116 0x013f, 0x0253, 0x6261, 0x013f, 0x0153,
117 0x3f75, 0x5301, 0xce04, 0xceb1, 0x3fb2,
118 0x5301, 0x6401, 0x013f, 0x5449, 0x037b]);
120 var arrayObject
= [];
121 arrayObject
['a'] = true;
122 arrayObject
['b'] = false;
123 arrayObject
['foo'] = 123;
124 arrayObject
['bar'] = 456;
125 arrayObject
[''] = null;
126 testSerialization(arrayObject
,
127 [0x003f, 0x0041, 0x013f, 0x0153, 0x3f61,
128 0x5401, 0x013f, 0x0153, 0x3f62, 0x4601,
129 0x013f, 0x0353, 0x6f66, 0x3f6f, 0x4901,
130 0x01f6, 0x013f, 0x0353, 0x6162, 0x3f72,
131 0x4901, 0x0790, 0x013f, 0x0053, 0x013f,
133 [0x02ff, 0x003f, 0x0041, 0x013f, 0x0153, // deserialize from v2
134 0x3f61, 0x5401, 0x013f, 0x0153, 0x3f62,
135 0x4601, 0x013f, 0x0353, 0x6f66, 0x3f6f,
136 0x4901, 0x01f6, 0x013f, 0x0353, 0x6162,
137 0x3f72, 0x4901, 0x0790, 0x013f, 0x0053,
138 0x013f, 0x2430, 0x0005]);
140 arrayObject
[0] = 'foo';
141 arrayObject
[1] = 'bar';
142 testSerialization(arrayObject
,
143 [0x003f, 0x0241, 0x013f, 0x0353, 0x6f66,
144 0x3f6f, 0x5301, 0x6203, 0x7261, 0x013f,
145 0x0153, 0x3f61, 0x5401, 0x013f, 0x0153,
146 0x3f62, 0x4601, 0x013f, 0x0353, 0x6f66,
147 0x3f6f, 0x4901, 0x01f6, 0x013f, 0x0353,
148 0x6162, 0x3f72, 0x4901, 0x0790, 0x013f,
149 0x0053, 0x013f, 0x2430, 0x0205],
150 [0x01ff, 0x003f, 0x0241, 0x013f, 0x0353,
151 0x6f66, 0x3f6f, 0x5301, 0x6203, 0x7261,
152 0x013f, 0x0153, 0x3f61, 0x5401, 0x013f,
153 0x0153, 0x3f62, 0x4601, 0x013f, 0x0353,
154 0x6f66, 0x3f6f, 0x4901, 0x01f6, 0x013f,
155 0x0353, 0x6162, 0x3f72, 0x4901, 0x0790,
156 0x013f, 0x0053, 0x013f, 0x2430, 0x0205]);
158 testSerialization(function(){}, [], null, DOMException
.DATA_CLONE_ERR
);
160 testBlobSerialization();
162 testFileSerialization();