1 | #!/usr/bin/env mocha -R spec
|
2 |
|
3 | var assert = require("assert");
|
4 | var msgpackJS = "../index";
|
5 | var isBrowser = ("undefined" !== typeof window);
|
6 | var msgpack = isBrowser && window.msgpack || require(msgpackJS);
|
7 | var TITLE = __filename.replace(/^.*\//, "");
|
8 |
|
9 | describe(TITLE, function() {
|
10 |
|
11 |
|
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 |
|
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 |
|
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 |
|
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 |
|
59 | it("c0: nil", function() {
|
60 | assert.deepEqual(msgpack.decode(Buffer([0xc0])), null);
|
61 | });
|
62 |
|
63 |
|
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 |
|
74 |
|
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 |
|
81 |
|
82 |
|
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 |
|
101 |
|
102 |
|
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 |
|
124 |
|
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 |
|
140 |
|
141 |
|
142 |
|
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 |
|
157 |
|
158 |
|
159 |
|
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 |
|
178 |
|
179 |
|
180 |
|
181 |
|
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 |
|
212 |
|
213 |
|
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 |
|
237 |
|
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 |
|
252 |
|
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 |
|
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 | });
|