UNPKG

7.53 kBJavaScriptView Raw
1#!/usr/bin/env mocha -R spec
2
3var assert = require("assert");
4
5var msgpackJS = "../index";
6var isBrowser = ("undefined" !== typeof window);
7var msgpack = isBrowser && window.msgpack || require(msgpackJS);
8var TITLE = __filename.replace(/^.*\//, "") + ":";
9
10describe(TITLE, function() {
11
12 // positive fixint -- 0x00 - 0x7f
13 it("00-7f: positive fixint", function() {
14 assert.deepEqual(msgpack.decode(Buffer([0x00])), 0);
15 assert.deepEqual(msgpack.decode(Buffer([0x7F])), 0x7F);
16 });
17
18 // fixmap -- 0x80 - 0x8f
19 it("80-8f: fixmap", function() {
20 assert.deepEqual(msgpack.decode(Buffer([0x80])), {});
21
22 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};
23 var array = [0x8F];
24 Object.keys(map).forEach(function(key) {
25 array.push(0xa1, key.charCodeAt(0), map[key]);
26 });
27 assert.deepEqual(msgpack.decode(Buffer(array)), map);
28 });
29
30 // fixarray -- 0x90 - 0x9f
31 it("90-9f: fixarray", function() {
32 assert.deepEqual(msgpack.decode(Buffer([0x90])), []);
33
34 var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
35 var buf = Buffer.concat([Buffer([0x9F]), Buffer(array)]);
36 assert.deepEqual(msgpack.decode(buf), array);
37 });
38
39 // fixstr -- 0xa0 - 0xbf
40 it("a0-bf: fixstr", function() {
41 assert.deepEqual(msgpack.decode(Buffer([0xa0])), "");
42
43 var str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
44 var buf = Buffer.concat([Buffer([0xBF]), Buffer(str)]);
45 assert.deepEqual(msgpack.decode(buf), str);
46 });
47
48 // nil -- 0xc0
49 it("c0: nil", function() {
50 assert.deepEqual(msgpack.decode(Buffer([0xc0])), null);
51 });
52
53 // false -- 0xc2
54 // true -- 0xc3
55 it("c2-c3: boolean", function() {
56 assert.equal(msgpack.decode(Buffer([0xc2])), false);
57 assert.equal(msgpack.decode(Buffer([0xc3])), true);
58 });
59
60 // bin 8 -- 0xc4
61 // bin 16 -- 0xc5
62 // bin 32 -- 0xc6
63 it("c4-c6: bin 8/16/32", function() {
64 var bin, buf;
65
66 bin = Buffer(1);
67 buf = Buffer.concat([Buffer([0xc4, 1]), bin]);
68 assert.deepEqual(msgpack.decode(buf), bin);
69
70 bin = Buffer(256);
71 buf = Buffer.concat([Buffer([0xc5, 1, 0]), bin]);
72 assert.deepEqual(msgpack.decode(buf), bin);
73
74 bin = Buffer(65536);
75 buf = Buffer.concat([Buffer([0xc6, 0, 1, 0, 0]), bin]);
76 assert.deepEqual(msgpack.decode(buf), bin);
77 });
78
79 // ext 8 -- 0xc7
80 // ext 16 -- 0xc8
81 // ext 32 -- 0xc9
82 it("c7-c9: ext 8/16/32", function() {
83 var ext, buf, act;
84
85 ext = Buffer(1);
86 buf = Buffer.concat([Buffer([0xc7, 1, 0]), ext]);
87 act = msgpack.decode(buf);
88 assert.deepEqual(act.buffer, ext);
89
90 ext = Buffer(256);
91 buf = Buffer.concat([Buffer([0xc8, 1, 0, 0]), ext]);
92 act = msgpack.decode(buf);
93 assert.deepEqual(act.buffer, ext);
94
95 ext = Buffer(65536);
96 buf = Buffer.concat([Buffer([0xc9, 0, 1, 0, 0, 0]), ext]);
97 act = msgpack.decode(buf);
98 assert.deepEqual(act.buffer, ext);
99 });
100
101 // float 32 -- 0xca
102 // float 64 -- 0xcb
103 it("ca-cb: float 32/64", function() {
104 var buf;
105
106 buf = Buffer(5);
107 buf.writeUInt8(0xCA, 0);
108 buf.writeFloatBE(0.5, 1);
109 assert.deepEqual(msgpack.decode(buf), 0.5);
110
111 buf = Buffer(9);
112 buf.writeUInt8(0xCB, 0);
113 buf.writeDoubleBE(0.5, 1);
114 assert.deepEqual(msgpack.decode(buf), 0.5);
115 });
116
117 // uint 8 -- 0xcc
118 // uint 16 -- 0xcd
119 // uint 32 -- 0xce
120 // uint 64 -- 0xcf
121 it("cc-cf: uint 8/16/32/64", function() {
122 assert.deepEqual(msgpack.decode(Buffer([0xcc, 0x01])), 0x01);
123 assert.deepEqual(msgpack.decode(Buffer([0xcc, 0xFF])), 0xFF);
124 assert.deepEqual(msgpack.decode(Buffer([0xcd, 0x00, 0x01])), 0x0001);
125 assert.deepEqual(msgpack.decode(Buffer([0xcd, 0xFF, 0xFF])), 0xFFFF);
126 assert.deepEqual(msgpack.decode(Buffer([0xce, 0x00, 0x00, 0x00, 0x01])), 0x00000001);
127 assert.deepEqual(msgpack.decode(Buffer([0xce, 0x7F, 0xFF, 0xFF, 0xFF])), 0x7FFFFFFF);
128 assert.deepEqual(msgpack.decode(Buffer([0xce, 0xFF, 0xFF, 0xFF, 0xFF])), 0xFFFFFFFF);
129 assert.deepEqual(msgpack.decode(Buffer([0xcf, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF])), 0x00000000FFFFFFFF);
130 assert.deepEqual(msgpack.decode(Buffer([0xcf, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0])), 0x0000FFFFFFFF0000);
131 assert.deepEqual(msgpack.decode(Buffer([0xcf, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0, 0, 0])), 0xFFFFFFFF00000000);
132 });
133
134 // int 8 -- 0xd0
135 // int 16 -- 0xd1
136 // int 32 -- 0xd2
137 // int 64 -- 0xd3
138 it("d0-d3: int 8/16/32/64", function() {
139 assert.deepEqual(msgpack.decode(Buffer([0xd0, 0x7F])), 0x7F);
140 assert.deepEqual(msgpack.decode(Buffer([0xd0, 0x80])), -0x80);
141 assert.deepEqual(msgpack.decode(Buffer([0xd0, 0xFF])), -1);
142 assert.deepEqual(msgpack.decode(Buffer([0xd1, 0x7F, 0xFF])), 0x7FFF);
143 assert.deepEqual(msgpack.decode(Buffer([0xd1, 0x80, 0x00])), -0x8000);
144 assert.deepEqual(msgpack.decode(Buffer([0xd1, 0xFF, 0xFF])), -1);
145 assert.deepEqual(msgpack.decode(Buffer([0xd2, 0x7F, 0xFF, 0xFF, 0xFF])), 0x7FFFFFFF);
146 assert.deepEqual(msgpack.decode(Buffer([0xd2, 0x80, 0x00, 0x00, 0x00])), -0x80000000);
147 assert.deepEqual(msgpack.decode(Buffer([0xd2, 0xFF, 0xFF, 0xFF, 0xFF])), -1);
148 assert.deepEqual(msgpack.decode(Buffer([0xd3, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF])), 0x00000000FFFFFFFF);
149 assert.deepEqual(msgpack.decode(Buffer([0xd3, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0])), 0x0000FFFFFFFF0000);
150 assert.deepEqual(msgpack.decode(Buffer([0xd3, 0x7F, 0xFF, 0xFF, 0xFF, 0, 0, 0, 0])), 0x7FFFFFFF00000000);
151 assert.deepEqual(msgpack.decode(Buffer([0xd3, 0x80, 0, 0, 0, 0, 0, 0, 0])), -0x8000000000000000);
152 assert.deepEqual(msgpack.decode(Buffer([0xd3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF])), -1);
153 });
154
155 // fixext 1 -- 0xd4
156 // fixext 2 -- 0xd5
157 // fixext 4 -- 0xd6
158 // fixext 8 -- 0xd7
159 // fixext 16 -- 0xd8
160 it("d4-d8: fixext 1/2/4/8/16", function() {
161 var ext, buf, act;
162
163 ext = Buffer(1);
164 buf = Buffer.concat([Buffer([0xd4, 0]), ext]);
165 act = msgpack.decode(buf);
166 assert.deepEqual(act.buffer, ext);
167
168 ext = Buffer(2);
169 buf = Buffer.concat([Buffer([0xd5, 0]), ext]);
170 act = msgpack.decode(buf);
171 assert.deepEqual(act.buffer, ext);
172
173 ext = Buffer(4);
174 buf = Buffer.concat([Buffer([0xd6, 0]), ext]);
175 act = msgpack.decode(buf);
176 assert.deepEqual(act.buffer, ext);
177
178 ext = Buffer(8);
179 buf = Buffer.concat([Buffer([0xd7, 0]), ext]);
180 act = msgpack.decode(buf);
181 assert.deepEqual(act.buffer, ext);
182
183 ext = Buffer(16);
184 buf = Buffer.concat([Buffer([0xd8, 0]), ext]);
185 act = msgpack.decode(buf);
186 assert.deepEqual(act.buffer, ext);
187 });
188
189 // str 8 -- 0xd9
190 // str 16 -- 0xda
191 // str 32 -- 0xdb
192 it("d9-db: str 8/16/32", function() {
193 var str, buf, src = "a";
194 for (var i = 0; i < 17; i++) src += src;
195
196 str = src.substr(0, 0xFF);
197 buf = Buffer.concat([Buffer([0xd9, 0xFF]), Buffer(str)]);
198 assert.deepEqual(msgpack.decode(buf), str);
199
200 str = src.substr(0, 0x0100);
201 buf = Buffer.concat([Buffer([0xda, 0x01, 0x00]), Buffer(str)]);
202 assert.deepEqual(msgpack.decode(buf), str);
203
204 str = src.substr(0, 0xFFFF);
205 buf = Buffer.concat([Buffer([0xda, 0xFF, 0xFF]), Buffer(str)]);
206 assert.deepEqual(msgpack.decode(buf), str);
207
208 str = src.substr(0, 0x010000);
209 buf = Buffer.concat([Buffer([0xdb, 0x00, 0x01, 0x00, 0x00]), Buffer(str)]);
210 assert.deepEqual(msgpack.decode(buf), str);
211 });
212
213 // negative fixint -- 0xe0 - 0xff
214 it("e0-ff: negative fixint", function() {
215 assert.deepEqual(msgpack.decode(Buffer([0xFF])), -1);
216 assert.deepEqual(msgpack.decode(Buffer([0xE0])), -32);
217 });
218});