UNPKG

9.06 kBJavaScriptView Raw
1#!/usr/bin/env mocha -R spec
2
3var assert = require("assert");
4var msgpackJS = "../index";
5var isBrowser = ("undefined" !== typeof window);
6var msgpack = isBrowser && window.msgpack || require(msgpackJS);
7var TITLE = __filename.replace(/^.*\//, "");
8
9describe(TITLE, function() {
10
11 // positive fixint -- 0x00 - 0x7f
12 it("00-7f: positive fixint", function() {
13 for (var i = 0; i <= 0x7F; i++) {
14 assert.deepEqual(msgpack.decode(Buffer([i])), i);
15 }
16 });
17
18 // fixmap -- 0x80 - 0x8f
19 it("80-8f: fixmap", function() {
20 var map = {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10, k: 11, l: 12, m: 13, n: 14, o: 15, p: 16};
21 var src = [0x80];
22 var exp = {};
23 Object.keys(map).forEach(function(key) {
24 assert.deepEqual(msgpack.decode(Buffer(src)), exp);
25 src[0]++;
26 src.push(0xa1);
27 src.push(key.charCodeAt(0));
28 src.push(map[key]);
29 exp[key] = map[key];
30 });
31 });
32
33 // fixarray -- 0x90 - 0x9f
34 it("90-9f: fixarray", function() {
35 var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
36 var src = [0x90];
37 var exp = [];
38 for (var i = 0; i < 16; i++) {
39 assert.deepEqual(msgpack.decode(Buffer(src)), exp);
40 src[0]++;
41 src.push(array[i]);
42 exp.push(array[i]);
43 }
44 });
45
46 // fixstr -- 0xa0 - 0xbf
47 it("a0-bf: fixstr", function() {
48 var str = "0123456789abcdefghijklmnopqrstu";
49 var src = [0xa0];
50 for (var i = 0; i < 32; i++) {
51 var exp = str.substr(0, i);
52 assert.deepEqual(msgpack.decode(Buffer(src)), exp);
53 src[0]++;
54 src.push(str.charCodeAt(i));
55 }
56 });
57
58 // nil -- 0xc0
59 it("c0: nil", function() {
60 assert.deepEqual(msgpack.decode(Buffer([0xc0])), null);
61 });
62
63 // (never used) -- 0xc1
64 it("c1: (never used)", function(done) {
65 try {
66 msgpack.decode(Buffer([0xc1]));
67 done("should throw");
68 } catch (e) {
69 done();
70 }
71 });
72
73 // false -- 0xc2
74 // true -- 0xc3
75 it("c2-c3: boolean", function() {
76 assert.equal(msgpack.decode(Buffer([0xc2])), false);
77 assert.equal(msgpack.decode(Buffer([0xc3])), true);
78 });
79
80 // bin 8 -- 0xc4
81 // bin 16 -- 0xc5
82 // bin 32 -- 0xc6
83 it("c4-c6: bin 8/16/32", function() {
84 this.timeout(30000);
85 var bin, buf;
86
87 bin = Buffer(1);
88 buf = Buffer.concat([Buffer([0xc4, 1]), bin]);
89 assert.deepEqual(msgpack.decode(buf), bin);
90
91 bin = Buffer(256);
92 buf = Buffer.concat([Buffer([0xc5, 1, 0]), bin]);
93 assert.deepEqual(msgpack.decode(buf), bin);
94
95 bin = Buffer(65536);
96 buf = Buffer.concat([Buffer([0xc6, 0, 1, 0, 0]), bin]);
97 assert.deepEqual(msgpack.decode(buf), bin);
98 });
99
100 // ext 8 -- 0xc7
101 // ext 16 -- 0xc8
102 // ext 32 -- 0xc9
103 it("c7-c9: ext 8/16/32", function() {
104 this.timeout(30000);
105 var ext, buf, act;
106
107 ext = Buffer(1);
108 buf = Buffer.concat([Buffer([0xc7, 1, 0]), ext]);
109 act = msgpack.decode(buf);
110 assert.deepEqual(act.buffer, ext);
111
112 ext = Buffer(256);
113 buf = Buffer.concat([Buffer([0xc8, 1, 0, 0]), ext]);
114 act = msgpack.decode(buf);
115 assert.deepEqual(act.buffer, ext);
116
117 ext = Buffer(65536);
118 buf = Buffer.concat([Buffer([0xc9, 0, 1, 0, 0, 0]), ext]);
119 act = msgpack.decode(buf);
120 assert.deepEqual(act.buffer, ext);
121 });
122
123 // float 32 -- 0xca
124 // float 64 -- 0xcb
125 it("ca-cb: float 32/64", function() {
126 var buf;
127
128 buf = Buffer(5);
129 buf.writeUInt8(0xCA, 0);
130 buf.writeFloatBE(0.5, 1);
131 assert.deepEqual(msgpack.decode(buf), 0.5);
132
133 buf = Buffer(9);
134 buf.writeUInt8(0xCB, 0);
135 buf.writeDoubleBE(0.5, 1);
136 assert.deepEqual(msgpack.decode(buf), 0.5);
137 });
138
139 // uint 8 -- 0xcc
140 // uint 16 -- 0xcd
141 // uint 32 -- 0xce
142 // uint 64 -- 0xcf
143 it("cc-cf: uint 8/16/32/64", function() {
144 assert.deepEqual(msgpack.decode(Buffer([0xcc, 0x01])), 0x01);
145 assert.deepEqual(msgpack.decode(Buffer([0xcc, 0xFF])), 0xFF);
146 assert.deepEqual(msgpack.decode(Buffer([0xcd, 0x00, 0x01])), 0x0001);
147 assert.deepEqual(msgpack.decode(Buffer([0xcd, 0xFF, 0xFF])), 0xFFFF);
148 assert.deepEqual(msgpack.decode(Buffer([0xce, 0x00, 0x00, 0x00, 0x01])), 0x00000001);
149 assert.deepEqual(msgpack.decode(Buffer([0xce, 0x7F, 0xFF, 0xFF, 0xFF])), 0x7FFFFFFF);
150 assert.deepEqual(msgpack.decode(Buffer([0xce, 0xFF, 0xFF, 0xFF, 0xFF])), 0xFFFFFFFF);
151 assert.deepEqual(msgpack.decode(Buffer([0xcf, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF])), 0x00000000FFFFFFFF);
152 assert.deepEqual(msgpack.decode(Buffer([0xcf, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0])), 0x0000FFFFFFFF0000);
153 assert.deepEqual(msgpack.decode(Buffer([0xcf, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0, 0, 0])), 0xFFFFFFFF00000000);
154 });
155
156 // int 8 -- 0xd0
157 // int 16 -- 0xd1
158 // int 32 -- 0xd2
159 // int 64 -- 0xd3
160 it("d0-d3: int 8/16/32/64", function() {
161 assert.deepEqual(msgpack.decode(Buffer([0xd0, 0x7F])), 0x7F);
162 assert.deepEqual(msgpack.decode(Buffer([0xd0, 0x80])), -0x80);
163 assert.deepEqual(msgpack.decode(Buffer([0xd0, 0xFF])), -1);
164 assert.deepEqual(msgpack.decode(Buffer([0xd1, 0x7F, 0xFF])), 0x7FFF);
165 assert.deepEqual(msgpack.decode(Buffer([0xd1, 0x80, 0x00])), -0x8000);
166 assert.deepEqual(msgpack.decode(Buffer([0xd1, 0xFF, 0xFF])), -1);
167 assert.deepEqual(msgpack.decode(Buffer([0xd2, 0x7F, 0xFF, 0xFF, 0xFF])), 0x7FFFFFFF);
168 assert.deepEqual(msgpack.decode(Buffer([0xd2, 0x80, 0x00, 0x00, 0x00])), -0x80000000);
169 assert.deepEqual(msgpack.decode(Buffer([0xd2, 0xFF, 0xFF, 0xFF, 0xFF])), -1);
170 assert.deepEqual(msgpack.decode(Buffer([0xd3, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF])), 0x00000000FFFFFFFF);
171 assert.deepEqual(msgpack.decode(Buffer([0xd3, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0])), 0x0000FFFFFFFF0000);
172 assert.deepEqual(msgpack.decode(Buffer([0xd3, 0x7F, 0xFF, 0xFF, 0xFF, 0, 0, 0, 0])), 0x7FFFFFFF00000000);
173 assert.deepEqual(msgpack.decode(Buffer([0xd3, 0x80, 0, 0, 0, 0, 0, 0, 0])), -0x8000000000000000);
174 assert.deepEqual(msgpack.decode(Buffer([0xd3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])), -1);
175 });
176
177 // fixext 1 -- 0xd4
178 // fixext 2 -- 0xd5
179 // fixext 4 -- 0xd6
180 // fixext 8 -- 0xd7
181 // fixext 16 -- 0xd8
182 it("d4-d8: fixext 1/2/4/8/16", function() {
183 var ext, buf, act;
184
185 ext = Buffer(1);
186 buf = Buffer.concat([Buffer([0xd4, 0]), ext]);
187 act = msgpack.decode(buf);
188 assert.deepEqual(act.buffer, ext);
189
190 ext = Buffer(2);
191 buf = Buffer.concat([Buffer([0xd5, 0]), ext]);
192 act = msgpack.decode(buf);
193 assert.deepEqual(act.buffer, ext);
194
195 ext = Buffer(4);
196 buf = Buffer.concat([Buffer([0xd6, 0]), ext]);
197 act = msgpack.decode(buf);
198 assert.deepEqual(act.buffer, ext);
199
200 ext = Buffer(8);
201 buf = Buffer.concat([Buffer([0xd7, 0]), ext]);
202 act = msgpack.decode(buf);
203 assert.deepEqual(act.buffer, ext);
204
205 ext = Buffer(16);
206 buf = Buffer.concat([Buffer([0xd8, 0]), ext]);
207 act = msgpack.decode(buf);
208 assert.deepEqual(act.buffer, ext);
209 });
210
211 // str 8 -- 0xd9
212 // str 16 -- 0xda
213 // str 32 -- 0xdb
214 it("d9-db: str 8/16/32", function() {
215 this.timeout(30000);
216 var str, buf, src = "a";
217 for (var i = 0; i < 17; i++) src += src;
218
219 str = src.substr(0, 0xFF);
220 buf = Buffer.concat([Buffer([0xd9, 0xFF]), Buffer(str)]);
221 assert.deepEqual(msgpack.decode(buf), str);
222
223 str = src.substr(0, 0x0100);
224 buf = Buffer.concat([Buffer([0xda, 0x01, 0x00]), Buffer(str)]);
225 assert.deepEqual(msgpack.decode(buf), str);
226
227 str = src.substr(0, 0xFFFF);
228 buf = Buffer.concat([Buffer([0xda, 0xFF, 0xFF]), Buffer(str)]);
229 assert.deepEqual(msgpack.decode(buf), str);
230
231 str = src.substr(0, 0x010000);
232 buf = Buffer.concat([Buffer([0xdb, 0x00, 0x01, 0x00, 0x00]), Buffer(str)]);
233 assert.deepEqual(msgpack.decode(buf), str);
234 });
235
236 // array 16 -- 0xdc
237 // array 32 -- 0xdd
238 it("dc-dd: array 16/32", function() {
239 this.timeout(30000);
240 var i, src;
241 var array = new Array(256);
242 for (i = 0; i < 256; i++) array[i] = i & 0x7F;
243 src = [0xdc, 0x01, 0x00].concat(array);
244 assert.deepEqual(msgpack.decode(Buffer(src)), array);
245
246 for (i = 0; i < 8; i++) array = array.concat(array);
247 src = [0xdd, 0x00, 0x01, 0x00, 0x00].concat(array);
248 assert.deepEqual(msgpack.decode(Buffer(src)), array);
249 });
250
251 // map 16 -- 0xde
252 // map 32 -- 0xdf
253 it("de-df: map 16/32", function() {
254 this.timeout(30000);
255 var i, src, key;
256 var map = {};
257 var array = [];
258 for (i = 0; i < 256; i++) {
259 key = i.toString(16);
260 if (i < 16) key = "0" + key;
261 map[key] = i & 0x7F;
262 array.push(0xa2);
263 array.push(key.charCodeAt(0));
264 array.push(key.charCodeAt(1));
265 array.push(i & 0x7F);
266 }
267 src = [0xde, 0x01, 0x00].concat(array);
268 assert.deepEqual(msgpack.decode(Buffer(src)), map);
269
270 for (i = 0; i < 8; i++) array = array.concat(array);
271 src = [0xdf, 0x00, 0x01, 0x00, 0x00].concat(array);
272 assert.deepEqual(msgpack.decode(Buffer(src)), map);
273 });
274
275 // negative fixint -- 0xe0 - 0xff
276 it("e0-ff: negative fixint", function() {
277 for (var i = -32; i <= -1; i++) {
278 assert.deepEqual(msgpack.decode(Buffer([i & 0xFF])), i);
279 }
280 });
281});