1 | #!/usr/bin/env mocha -R spec
|
2 |
|
3 | var assert = require("assert");
|
4 |
|
5 | var msgpackJS = "../index";
|
6 | var isBrowser = ("undefined" !== typeof window);
|
7 | var msgpack = isBrowser && window.msgpack || require(msgpackJS);
|
8 | var TITLE = __filename.replace(/^.*\//, "") + ":";
|
9 |
|
10 | describe(TITLE, function() {
|
11 |
|
12 |
|
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 |
|
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 |
|
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 |
|
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 |
|
49 | it("c0: nil", function() {
|
50 | assert.deepEqual(msgpack.decode(Buffer([0xc0])), null);
|
51 | });
|
52 |
|
53 |
|
54 |
|
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 |
|
61 |
|
62 |
|
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 |
|
80 |
|
81 |
|
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 |
|
102 |
|
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 |
|
118 |
|
119 |
|
120 |
|
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 |
|
135 |
|
136 |
|
137 |
|
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 |
|
156 |
|
157 |
|
158 |
|
159 |
|
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 |
|
190 |
|
191 |
|
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 |
|
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 | });
|