msgpack-lite 0.1.20 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/.npmignore +1 -0
  2. package/.travis.yml +1 -0
  3. package/.zuul.yml +1 -1
  4. package/Makefile +2 -2
  5. package/README.md +27 -7
  6. package/dist/msgpack.min.js +2 -2
  7. package/lib/buffer-global.js +11 -0
  8. package/lib/buffer-lite.js +88 -60
  9. package/lib/bufferish-array.js +41 -0
  10. package/lib/bufferish-buffer.js +46 -0
  11. package/lib/bufferish-proto.js +86 -0
  12. package/lib/bufferish-uint8array.js +51 -0
  13. package/lib/bufferish.js +108 -0
  14. package/lib/codec-base.js +67 -0
  15. package/lib/codec.js +8 -1
  16. package/lib/decode-buffer.js +6 -50
  17. package/lib/encode-buffer.js +6 -79
  18. package/lib/ext-buffer.js +3 -1
  19. package/lib/ext-packer.js +78 -0
  20. package/lib/ext-unpacker.js +81 -0
  21. package/lib/ext.js +4 -77
  22. package/lib/flex-buffer.js +194 -0
  23. package/lib/read-core.js +36 -2
  24. package/lib/read-format.js +83 -56
  25. package/lib/read-token.js +1 -1
  26. package/lib/write-core.js +55 -2
  27. package/lib/write-token.js +54 -26
  28. package/lib/write-type.js +81 -73
  29. package/lib/write-uint8.js +2 -2
  30. package/package.json +23 -13
  31. package/test/10.encode.js +50 -30
  32. package/test/11.decode.js +2 -0
  33. package/test/14.codec.js +8 -1
  34. package/test/16.binarraybuffer.js +91 -0
  35. package/test/17.uint8array.js +43 -0
  36. package/test/18.utf8.js +59 -0
  37. package/test/20.roundtrip.js +53 -33
  38. package/test/23.extbuffer.js +44 -2
  39. package/test/27.usemap.js +66 -0
  40. package/test/61.encode-only.js +26 -0
  41. package/test/62.decode-only.js +23 -0
  42. package/test/63.module-deps.js +77 -0
  43. package/lib/buffer-shortage.js +0 -8
  44. package/lib/ext-preset.js +0 -188
  45. package/test/60.buffer-lite.js +0 -98
package/test/10.encode.js CHANGED
@@ -6,12 +6,32 @@ var isBrowser = ("undefined" !== typeof window);
6
6
  var msgpack = isBrowser && window.msgpack || require(msgpackJS);
7
7
  var TITLE = __filename.replace(/^.*\//, "");
8
8
 
9
+ var HAS_UINT8ARRAY = ("undefined" !== typeof Uint8Array);
10
+
9
11
  describe(TITLE, function() {
12
+ describe("Buffer", function() {
13
+ run_tests();
14
+ });
15
+
16
+ var describe_Uint8Array = HAS_UINT8ARRAY ? describe : describe.skip;
17
+ describe_Uint8Array("Uint8Array", function() {
18
+ run_tests({uint8array: true});
19
+ });
20
+ });
21
+
22
+ function run_tests(codecopt) {
23
+ var options;
24
+
25
+ if (codecopt) it(JSON.stringify(codecopt), function() {
26
+ var codec = msgpack.createCodec(codecopt);
27
+ assert.ok(codec);
28
+ options = {codec: codec};
29
+ });
10
30
 
11
31
  // positive fixint -- 0x00 - 0x7f
12
32
  it("00-7f: positive fixint", function() {
13
33
  for (var i = 0; i <= 0x7F; i++) {
14
- assert.deepEqual(toArray(msgpack.encode(i)), [i]);
34
+ assert.deepEqual(toArray(msgpack.encode(i, options)), [i]);
15
35
  }
16
36
  });
17
37
 
@@ -21,7 +41,7 @@ describe(TITLE, function() {
21
41
  var src = {};
22
42
  var exp = [0x80];
23
43
  Object.keys(map).forEach(function(key) {
24
- assert.deepEqual(toArray(msgpack.encode(src)), exp);
44
+ assert.deepEqual(toArray(msgpack.encode(src, options)), exp);
25
45
  src[key] = map[key];
26
46
  exp[0]++;
27
47
  exp.push(0xa1);
@@ -36,7 +56,7 @@ describe(TITLE, function() {
36
56
  var src = [];
37
57
  var exp = [0x90];
38
58
  for (var i = 0; i < 16; i++) {
39
- assert.deepEqual(toArray(msgpack.encode(src)), exp);
59
+ assert.deepEqual(toArray(msgpack.encode(src, options)), exp);
40
60
  src.push(array[i]);
41
61
  exp[0]++;
42
62
  exp.push(array[i]);
@@ -45,13 +65,13 @@ describe(TITLE, function() {
45
65
 
46
66
  // fixstr -- 0xa0 - 0xbf
47
67
  it("a0-bf: fixstr", function() {
48
- assert.deepEqual(toArray(msgpack.encode("")), [0xa0]);
68
+ assert.deepEqual(toArray(msgpack.encode("", options)), [0xa0]);
49
69
 
50
70
  var str = "0123456789abcdefghijklmnopqrstu";
51
71
  var exp = [0xa0];
52
72
  for (var i = 0; i < 32; i++) {
53
73
  var src = str.substr(0, i);
54
- assert.deepEqual(toArray(msgpack.encode(src)), exp);
74
+ assert.deepEqual(toArray(msgpack.encode(src, options)), exp);
55
75
  exp[0]++;
56
76
  exp.push(str.charCodeAt(i));
57
77
  }
@@ -59,20 +79,20 @@ describe(TITLE, function() {
59
79
 
60
80
  // nil -- 0xc0
61
81
  it("c0: nil (null)", function() {
62
- assert.deepEqual(toArray(msgpack.encode(null)), [0xc0]);
82
+ assert.deepEqual(toArray(msgpack.encode(null, options)), [0xc0]);
63
83
  });
64
84
  it("c0: nil (undefined)", function() {
65
- assert.deepEqual(toArray(msgpack.encode(undefined)), [0xc0]);
85
+ assert.deepEqual(toArray(msgpack.encode(undefined, options)), [0xc0]);
66
86
  });
67
87
  it("c0: nil (Function)", function() {
68
- assert.deepEqual(toArray(msgpack.encode(NOP)), [0xc0]);
88
+ assert.deepEqual(toArray(msgpack.encode(NOP, options)), [0xc0]);
69
89
  });
70
90
 
71
91
  // false -- 0xc2
72
92
  // true -- 0xc3
73
93
  it("c2-c3: boolean", function() {
74
- assert.deepEqual(toArray(msgpack.encode(false)), [0xc2]);
75
- assert.deepEqual(toArray(msgpack.encode(true)), [0xc3]);
94
+ assert.deepEqual(toArray(msgpack.encode(false, options)), [0xc2]);
95
+ assert.deepEqual(toArray(msgpack.encode(true, options)), [0xc3]);
76
96
  });
77
97
 
78
98
  // bin 8 -- 0xc4
@@ -83,21 +103,21 @@ describe(TITLE, function() {
83
103
  var bin;
84
104
  bin = Buffer(1);
85
105
  bin.fill(0);
86
- assert.deepEqual(toArray(msgpack.encode(bin)), concat([0xc4, 1], bin));
106
+ assert.deepEqual(toArray(msgpack.encode(bin, options)), concat([0xc4, 1], bin));
87
107
 
88
108
  bin = Buffer(256);
89
109
  bin.fill(0);
90
- assert.deepEqual(toArray(msgpack.encode(bin)), concat([0xc5, 1, 0], bin));
110
+ assert.deepEqual(toArray(msgpack.encode(bin, options)), concat([0xc5, 1, 0], bin));
91
111
 
92
112
  bin = Buffer(65536);
93
113
  bin.fill(0);
94
- assert.deepEqual(toArray(msgpack.encode(bin)), concat([0xc6, 0, 1, 0, 0], bin));
114
+ assert.deepEqual(toArray(msgpack.encode(bin, options)), concat([0xc6, 0, 1, 0, 0], bin));
95
115
  });
96
116
 
97
117
  // float 32 -- 0xca -- NOT SUPPORTED
98
118
  // float 64 -- 0xcb
99
119
  it("ca-cb: float 32/64", function() {
100
- assert.deepEqual(toArray(msgpack.encode(0.5)), [0xcb, 63, 224, 0, 0, 0, 0, 0, 0]);
120
+ assert.deepEqual(toArray(msgpack.encode(0.5, options)), [0xcb, 63, 224, 0, 0, 0, 0, 0, 0]);
101
121
  });
102
122
 
103
123
  // uint 8 -- 0xcc
@@ -105,9 +125,9 @@ describe(TITLE, function() {
105
125
  // uint 32 -- 0xce
106
126
  // uint 64 -- 0xcf -- NOT SUPPORTED
107
127
  it("cc-cf: uint 8/16/32/64", function() {
108
- assert.deepEqual(toArray(msgpack.encode(0xFF)), [0xcc, 0xFF]);
109
- assert.deepEqual(toArray(msgpack.encode(0xFFFF)), [0xcd, 0xFF, 0xFF]);
110
- assert.deepEqual(toArray(msgpack.encode(0x7FFFFFFF)), [0xce, 0x7F, 0xFF, 0xFF, 0xFF]);
128
+ assert.deepEqual(toArray(msgpack.encode(0xFF, options)), [0xcc, 0xFF]);
129
+ assert.deepEqual(toArray(msgpack.encode(0xFFFF, options)), [0xcd, 0xFF, 0xFF]);
130
+ assert.deepEqual(toArray(msgpack.encode(0x7FFFFFFF, options)), [0xce, 0x7F, 0xFF, 0xFF, 0xFF]);
111
131
  });
112
132
 
113
133
  // int 8 -- 0xd0
@@ -115,9 +135,9 @@ describe(TITLE, function() {
115
135
  // int 32 -- 0xd2
116
136
  // int 64 -- 0xd3 -- NOT SUPPORTED
117
137
  it("d0-d3: int 8/16/32/64", function() {
118
- assert.deepEqual(toArray(msgpack.encode(-0x80)), [0xd0, 0x80]);
119
- assert.deepEqual(toArray(msgpack.encode(-0x8000)), [0xd1, 0x80, 0x00]);
120
- assert.deepEqual(toArray(msgpack.encode(-0x80000000)), [0xd2, 0x80, 0x00, 0x00, 0x00]);
138
+ assert.deepEqual(toArray(msgpack.encode(-0x80, options)), [0xd0, 0x80]);
139
+ assert.deepEqual(toArray(msgpack.encode(-0x8000, options)), [0xd1, 0x80, 0x00]);
140
+ assert.deepEqual(toArray(msgpack.encode(-0x80000000, options)), [0xd2, 0x80, 0x00, 0x00, 0x00]);
121
141
  });
122
142
 
123
143
  // str 8 -- 0xd9
@@ -129,16 +149,16 @@ describe(TITLE, function() {
129
149
  for (var i = 0; i < 17; i++) src += src;
130
150
 
131
151
  str = src.substr(0, 0xFF);
132
- assert.deepEqual(toArray(msgpack.encode(str)), concat([0xd9, 0xFF], Buffer(str)));
152
+ assert.deepEqual(toArray(msgpack.encode(str, options)), concat([0xd9, 0xFF], Buffer(str)));
133
153
 
134
154
  str = src.substr(0, 0x0100);
135
- assert.deepEqual(toArray(msgpack.encode(str)), concat([0xda, 0x01, 0x00], Buffer(str)));
155
+ assert.deepEqual(toArray(msgpack.encode(str, options)), concat([0xda, 0x01, 0x00], Buffer(str)));
136
156
 
137
157
  str = src.substr(0, 0xFFFF);
138
- assert.deepEqual(toArray(msgpack.encode(str)), concat([0xda, 0xFF, 0xFF], Buffer(str)));
158
+ assert.deepEqual(toArray(msgpack.encode(str, options)), concat([0xda, 0xFF, 0xFF], Buffer(str)));
139
159
 
140
160
  str = src.substr(0, 0x010000);
141
- assert.deepEqual(toArray(msgpack.encode(str)), concat([0xdb, 0x00, 0x01, 0x00, 0x00], Buffer(str)));
161
+ assert.deepEqual(toArray(msgpack.encode(str, options)), concat([0xdb, 0x00, 0x01, 0x00, 0x00], Buffer(str)));
142
162
  });
143
163
 
144
164
  // array 16 -- 0xdc
@@ -149,11 +169,11 @@ describe(TITLE, function() {
149
169
  var src = new Array(256);
150
170
  for (i = 0; i < 256; i++) src[i] = i & 0x7F;
151
171
  exp = [0xdc, 0x01, 0x00].concat(src);
152
- assert.deepEqual(toArray(msgpack.encode(src)), exp);
172
+ assert.deepEqual(toArray(msgpack.encode(src, options)), exp);
153
173
 
154
174
  for (i = 0; i < 8; i++) src = src.concat(src);
155
175
  exp = [0xdd, 0x00, 0x01, 0x00, 0x00].concat(src);
156
- assert.deepEqual(toArray(msgpack.encode(src)), exp);
176
+ assert.deepEqual(toArray(msgpack.encode(src, options)), exp);
157
177
  });
158
178
 
159
179
  // map 16 -- 0xde
@@ -163,14 +183,14 @@ describe(TITLE, function() {
163
183
  var i, actual;
164
184
  var map = {};
165
185
  for (i = 0; i < 256; i++) map[i] = i;
166
- actual = msgpack.encode(map);
186
+ actual = msgpack.encode(map, options);
167
187
  // check only headers because order may vary
168
188
  assert.equal(actual[0], 0xde);
169
189
  assert.equal(actual[1], 1);
170
190
  assert.equal(actual[2], 0);
171
191
 
172
192
  for (i = 256; i < 65536; i++) map[i] = i;
173
- actual = msgpack.encode(map);
193
+ actual = msgpack.encode(map, options);
174
194
  assert.equal(actual[0], 0xdf);
175
195
  assert.equal(actual[1], 0);
176
196
  assert.equal(actual[2], 1);
@@ -181,10 +201,10 @@ describe(TITLE, function() {
181
201
  // negative fixint -- 0xe0 - 0xff
182
202
  it("e0-ff: negative fixint", function() {
183
203
  for (var i = -32; i <= -1; i++) {
184
- assert.deepEqual(toArray(msgpack.encode(i)), [i & 0xFF]);
204
+ assert.deepEqual(toArray(msgpack.encode(i, options)), [i & 0xFF]);
185
205
  }
186
206
  });
187
- });
207
+ }
188
208
 
189
209
  function toArray(buffer) {
190
210
  return Array.prototype.slice.call(buffer);
package/test/11.decode.js CHANGED
@@ -176,6 +176,7 @@ function run_tests(BUFFER) {
176
176
  assert.deepEqual(msgpack.decode(BUFFER([0xce, 0x00, 0x00, 0x00, 0x01])), 0x00000001);
177
177
  assert.deepEqual(msgpack.decode(BUFFER([0xce, 0x7F, 0xFF, 0xFF, 0xFF])), 0x7FFFFFFF);
178
178
  assert.deepEqual(msgpack.decode(BUFFER([0xce, 0xFF, 0xFF, 0xFF, 0xFF])), 0xFFFFFFFF);
179
+ assert.deepEqual(msgpack.decode(BUFFER([0xce, 0x12, 0x34, 0x56, 0x78])), 0x12345678);
179
180
  assert.deepEqual(msgpack.decode(BUFFER([0xcf, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF])), 0x00000000FFFFFFFF);
180
181
  assert.deepEqual(msgpack.decode(BUFFER([0xcf, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0])), 0x0000FFFFFFFF0000);
181
182
  assert.deepEqual(msgpack.decode(BUFFER([0xcf, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0, 0, 0])), 0xFFFFFFFF00000000);
@@ -195,6 +196,7 @@ function run_tests(BUFFER) {
195
196
  assert.deepEqual(msgpack.decode(BUFFER([0xd2, 0x7F, 0xFF, 0xFF, 0xFF])), 0x7FFFFFFF);
196
197
  assert.deepEqual(msgpack.decode(BUFFER([0xd2, 0x80, 0x00, 0x00, 0x00])), -0x80000000);
197
198
  assert.deepEqual(msgpack.decode(BUFFER([0xd2, 0xFF, 0xFF, 0xFF, 0xFF])), -1);
199
+ assert.deepEqual(msgpack.decode(BUFFER([0xd2, 0x12, 0x34, 0x56, 0x78])), 0x12345678);
198
200
  assert.deepEqual(msgpack.decode(BUFFER([0xd3, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF])), 0x00000000FFFFFFFF);
199
201
  assert.deepEqual(msgpack.decode(BUFFER([0xd3, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0])), 0x0000FFFFFFFF0000);
200
202
  assert.deepEqual(msgpack.decode(BUFFER([0xd3, 0x7F, 0xFF, 0xFF, 0xFF, 0, 0, 0, 0])), 0x7FFFFFFF00000000);
package/test/14.codec.js CHANGED
@@ -6,6 +6,8 @@ var isBrowser = ("undefined" !== typeof window);
6
6
  var msgpack = isBrowser && window.msgpack || require(msgpackJS);
7
7
  var TITLE = __filename.replace(/^.*\//, "");
8
8
 
9
+ var HAS_UINT8ARRAY = ("undefined" !== typeof Uint8Array);
10
+
9
11
  describe(TITLE, function() {
10
12
  it("createCodec()", function() {
11
13
  var codec = msgpack.createCodec();
@@ -24,7 +26,7 @@ describe(TITLE, function() {
24
26
  assert.equal(decoded.type, type);
25
27
  assert.equal(decoded.buffer.length, 1);
26
28
  var encoded = msgpack.encode(decoded, options);
27
- assert.deepEqual(encoded, source);
29
+ assert.deepEqual(toArray(encoded), toArray(source));
28
30
  }
29
31
  });
30
32
 
@@ -86,3 +88,8 @@ function myClassPacker(obj) {
86
88
  function myClassUnpacker(buffer) {
87
89
  return new MyClass(buffer[0]);
88
90
  }
91
+
92
+ function toArray(array) {
93
+ if (HAS_UINT8ARRAY && array instanceof ArrayBuffer) array = new Uint8Array(array);
94
+ return Array.prototype.slice.call(array);
95
+ }
@@ -0,0 +1,91 @@
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
+ var HAS_UINT8ARRAY = ("undefined" !== typeof Uint8Array);
9
+
10
+ var TESTS = [0, 1, 31, 32, 255, 256, 65535, 65536];
11
+
12
+ function toArray(array) {
13
+ if (array instanceof ArrayBuffer) array = new Uint8Array(array);
14
+ return Array.prototype.slice.call(array);
15
+ }
16
+
17
+ // run this test when Uint8Array is available
18
+ var describeSkip = HAS_UINT8ARRAY ? describe : describe.skip;
19
+
20
+ describeSkip(TITLE, function() {
21
+ var options;
22
+
23
+ it("binarraybuffer (decode)", function() {
24
+ var decoded;
25
+ options = {codec: msgpack.createCodec({binarraybuffer: true, preset: true})};
26
+
27
+ // bin (Buffer)
28
+ decoded = msgpack.decode(new Buffer([0xc4, 2, 65, 66]), options);
29
+ assert.ok(decoded instanceof ArrayBuffer);
30
+ assert.ok(!Buffer.isBuffer(decoded));
31
+ assert.deepEqual(toArray(decoded), [65, 66]);
32
+
33
+ // bin (Uint8Array)
34
+ decoded = msgpack.decode(new Uint8Array([0xc4, 2, 97, 98]), options);
35
+ assert.ok(decoded instanceof ArrayBuffer);
36
+ assert.ok(!Buffer.isBuffer(decoded));
37
+ assert.deepEqual(toArray(decoded), [97, 98]);
38
+
39
+ // bin (Array)
40
+ decoded = msgpack.decode([0xc4, 2, 65, 66], options);
41
+ assert.ok(decoded instanceof ArrayBuffer);
42
+ assert.ok(!Buffer.isBuffer(decoded));
43
+ assert.deepEqual(toArray(decoded), [65, 66]);
44
+ });
45
+
46
+ it("binarraybuffer (encode)", function() {
47
+ // bin (ArrayBuffer)
48
+ var encoded = msgpack.encode(new Uint8Array([65, 66]).buffer, options);
49
+ assert.deepEqual(toArray(encoded), [0xc4, 2, 65, 66]);
50
+ });
51
+
52
+ it("binarraybuffer (large)", function() {
53
+ TESTS.forEach(test);
54
+
55
+ function test(length) {
56
+ var source = new Uint8Array(length);
57
+ for (var i = 0; i < length; i++) {
58
+ source[i] = 65; // "A"
59
+ }
60
+
61
+ var encoded = msgpack.encode(source.buffer, options);
62
+ assert.ok(encoded.length);
63
+
64
+ var decoded = msgpack.decode(encoded, options);
65
+ assert.ok(decoded instanceof ArrayBuffer);
66
+ assert.ok(!Buffer.isBuffer(decoded));
67
+ decoded = new Uint8Array(decoded);
68
+ assert.equal(decoded.length, length);
69
+ if (length) assert.equal(decoded[0], 65);
70
+ }
71
+ });
72
+
73
+ // addExtPacker() and getExtPacker() methods need a valid constructor name.
74
+ // IE10 and iOS7 Safari may give another constructor name than Buffer.
75
+ // At those cases, below will be encoded as Uint8Array: [0xd5, 0x12, 97, 98]
76
+ var b = new Buffer(1);
77
+ var c = b.constructor;
78
+ var d = (c && c.name === "Buffer") ? it : it.skip;
79
+ d("encode Buffer ext format 0x1B", function() {
80
+ // fixext 2 (Buffer)
81
+ var encoded = msgpack.encode(new Buffer([97, 98]), options);
82
+ assert.deepEqual(toArray(encoded), [0xd5, 0x1b, 97, 98]);
83
+ });
84
+
85
+ it("decode Buffer ext format 0x1B", function() {
86
+ // fixext 2 (Buffer)
87
+ var decoded = msgpack.decode([0xd5, 0x1b, 65, 66], options);
88
+ assert.ok(Buffer.isBuffer(decoded));
89
+ assert.deepEqual(toArray(decoded), [65, 66]);
90
+ });
91
+ });
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env mocha -R spec
2
+
3
+ var assert = require("assert");
4
+ var Bufferish = require("../lib/bufferish");
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
+ var HAS_UINT8ARRAY = ("undefined" !== typeof Uint8Array);
11
+
12
+ describe(TITLE, function() {
13
+ it("{}", function() {
14
+ var encoded = msgpack.encode(1);
15
+ assert.ok(Buffer.isBuffer(encoded));
16
+ // assert.ok(!ArrayBuffer.isView(encoded));
17
+ });
18
+
19
+ var it_Uint8Array = HAS_UINT8ARRAY ? it : it.skip;
20
+ var codecopt = {uint8array: true};
21
+
22
+ it_Uint8Array(JSON.stringify(codecopt), function() {
23
+ var codec = msgpack.createCodec(codecopt);
24
+ assert.ok(codec);
25
+ var options = {codec: codec};
26
+
27
+ // small data
28
+ var encoded = msgpack.encode(1, options);
29
+ if (ArrayBuffer.isView) assert.ok(ArrayBuffer.isView(encoded));
30
+ assert.ok(Bufferish.isView(encoded));
31
+ assert.ok(!Buffer.isBuffer(encoded));
32
+
33
+ // bigger data
34
+ var big = new Buffer(8192); // 8KB
35
+ big[big.length - 1] = 99;
36
+ var source = [big, big, big, big, big, big, big, big]; // 64KB
37
+ encoded = msgpack.encode(source, options);
38
+ if (ArrayBuffer.isView) assert.ok(ArrayBuffer.isView(encoded));
39
+ assert.ok(Bufferish.isView(encoded));
40
+ assert.ok(!Buffer.isBuffer(encoded));
41
+ assert.equal(encoded[encoded.length - 1], 99); // last byte
42
+ });
43
+ });
@@ -0,0 +1,59 @@
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
+ var OPTIONS = [{}, {safe: true}];
10
+
11
+ describe(TITLE, function() {
12
+ OPTIONS.forEach(function(options) {
13
+ var suffix = " " + JSON.stringify(options);
14
+ it("string (ASCII)" + suffix, function() {
15
+ var string = "a";
16
+ var array = [0xa1, 0x61];
17
+ var encoded = msgpack.encode(string, options);
18
+ var decoded = msgpack.decode(array, options);
19
+ assert.deepEqual(toArray(encoded), array);
20
+ assert.equal(decoded, string);
21
+ });
22
+
23
+ it("string (Greek)" + suffix, function() {
24
+ var string = "α";
25
+ var array = [0xa2, 0xce, 0xb1];
26
+ var encoded = msgpack.encode(string, options);
27
+ var decoded = msgpack.decode(array, options);
28
+ assert.deepEqual(toArray(encoded), array);
29
+ assert.equal(decoded, string);
30
+ });
31
+
32
+ it("string (Asian)" + suffix, function() {
33
+ var string = "亜";
34
+ var array = [0xa3, 0xe4, 0xba, 0x9c];
35
+ var encoded = msgpack.encode(string, options);
36
+ var decoded = msgpack.decode(array, options);
37
+ assert.deepEqual(toArray(encoded), array);
38
+ assert.equal(decoded, string);
39
+ });
40
+
41
+ // U+1F426 "🐦" bird
42
+ // http://unicode.org/emoji/charts/full-emoji-list.html#1f426
43
+ it("string (Emoji)" + suffix, function() {
44
+ var string = "\uD83D\uDC26"; // surrogate pair
45
+ var array_utf8 = [0xa4, 0xf0, 0x9f, 0x90, 0xa6]; // UTF-8
46
+ var array_cesu8 = [0xa6, 0xed, 0xa0, 0xbd, 0xed, 0xb0, 0xa6]; // CESU-8
47
+ var encoded = msgpack.encode(string, options);
48
+ var decoded_utf8 = msgpack.decode(array_utf8, options);
49
+ var decoded_cesu8 = msgpack.decode(array_cesu8, options);
50
+ assert.deepEqual(toArray(encoded), array_utf8);
51
+ assert.equal(decoded_utf8, string);
52
+ assert.equal(decoded_cesu8, string);
53
+ });
54
+ });
55
+ });
56
+
57
+ function toArray(buffer) {
58
+ return Array.prototype.slice.call(buffer);
59
+ }
@@ -33,20 +33,40 @@ function pattern(min, max, offset) {
33
33
  return array;
34
34
  }
35
35
 
36
+ var HAS_UINT8ARRAY = ("undefined" !== typeof Uint8Array);
37
+
36
38
  describe(TITLE, function() {
39
+ describe("Buffer", function() {
40
+ run_tests();
41
+ });
42
+
43
+ var describe_Uint8Array = HAS_UINT8ARRAY ? describe : describe.skip;
44
+ describe_Uint8Array("Uint8Array", function() {
45
+ run_tests({uint8array: true});
46
+ });
47
+ });
48
+
49
+ function run_tests(codecopt) {
50
+ var options;
51
+
52
+ if (codecopt) it(JSON.stringify(codecopt), function() {
53
+ var codec = msgpack.createCodec(codecopt);
54
+ assert.ok(codec);
55
+ options = {codec: codec};
56
+ });
37
57
 
38
58
  it("null", function() {
39
59
  [null, undefined].forEach(function(value) {
40
- var encoded = msgpack.encode(value);
41
- var decoded = msgpack.decode(encoded);
60
+ var encoded = msgpack.encode(value, options);
61
+ var decoded = msgpack.decode(encoded, options);
42
62
  assert.equal(decoded, value);
43
63
  });
44
64
  });
45
65
 
46
66
  it("boolean", function() {
47
67
  [true, false].forEach(function(value) {
48
- var encoded = msgpack.encode(value);
49
- var decoded = msgpack.decode(encoded);
68
+ var encoded = msgpack.encode(value, options);
69
+ var decoded = msgpack.decode(encoded, options);
50
70
  assert.equal(decoded, value);
51
71
  });
52
72
  });
@@ -54,16 +74,16 @@ describe(TITLE, function() {
54
74
  it("positive int (small)", function() {
55
75
  pattern(0, 0x40000000).forEach(function(value) {
56
76
  value = value | 0; // integer
57
- var encoded = msgpack.encode(value);
58
- var decoded = msgpack.decode(encoded);
77
+ var encoded = msgpack.encode(value, options);
78
+ var decoded = msgpack.decode(encoded, options);
59
79
  assert.equal(decoded, value);
60
80
  });
61
81
  });
62
82
 
63
83
  it("positive int (large)", function() {
64
84
  pattern(0x40000000, 0xFFFFFFFF).forEach(function(value) {
65
- var encoded = msgpack.encode(value);
66
- var decoded = msgpack.decode(encoded);
85
+ var encoded = msgpack.encode(value, options);
86
+ var decoded = msgpack.decode(encoded, options);
67
87
  assert.equal(decoded, value);
68
88
  });
69
89
  });
@@ -71,8 +91,8 @@ describe(TITLE, function() {
71
91
  it("negative int (small)", function() {
72
92
  pattern(0, 0x40000000).forEach(function(value) {
73
93
  value = -value | 0; // integer
74
- var encoded = msgpack.encode(value);
75
- var decoded = msgpack.decode(encoded);
94
+ var encoded = msgpack.encode(value, options);
95
+ var decoded = msgpack.decode(encoded, options);
76
96
  assert.equal(decoded, value);
77
97
  });
78
98
  });
@@ -80,16 +100,16 @@ describe(TITLE, function() {
80
100
  it("negative int (large)", function() {
81
101
  pattern(0x40000000, 0xFFFFFFFF).forEach(function(value) {
82
102
  value = -value;
83
- var encoded = msgpack.encode(value);
84
- var decoded = msgpack.decode(encoded);
103
+ var encoded = msgpack.encode(value, options);
104
+ var decoded = msgpack.decode(encoded, options);
85
105
  assert.equal(decoded, value);
86
106
  });
87
107
  });
88
108
 
89
109
  it("float", function() {
90
110
  [1.1, 10.01, 100.001, 1000.0001, 10000.00001, 100000.000001, 1000000.0000001].forEach(function(value) {
91
- var encoded = msgpack.encode(value);
92
- var decoded = msgpack.decode(encoded);
111
+ var encoded = msgpack.encode(value, options);
112
+ var decoded = msgpack.decode(encoded, options);
93
113
  assert.equal(decoded, value);
94
114
  });
95
115
  });
@@ -98,8 +118,8 @@ describe(TITLE, function() {
98
118
  this.timeout(30000);
99
119
  pattern(0, 65537).forEach(function(length) {
100
120
  var value = STRING_ASCII.substr(0, length);
101
- var encoded = msgpack.encode(value);
102
- var decoded = msgpack.decode(encoded);
121
+ var encoded = msgpack.encode(value, options);
122
+ var decoded = msgpack.decode(encoded, options);
103
123
  assert.equal(decoded, value);
104
124
  });
105
125
  });
@@ -108,8 +128,8 @@ describe(TITLE, function() {
108
128
  this.timeout(30000);
109
129
  pattern(0, 65537).forEach(function(length) {
110
130
  var value = STRING_GREEK.substr(0, length);
111
- var encoded = msgpack.encode(value);
112
- var decoded = msgpack.decode(encoded);
131
+ var encoded = msgpack.encode(value, options);
132
+ var decoded = msgpack.decode(encoded, options);
113
133
  assert.equal(decoded, value);
114
134
  });
115
135
  });
@@ -118,8 +138,8 @@ describe(TITLE, function() {
118
138
  this.timeout(30000);
119
139
  pattern(0, 65537).forEach(function(length) {
120
140
  var value = STRING_ASIAN.substr(0, length);
121
- var encoded = msgpack.encode(value);
122
- var decoded = msgpack.decode(encoded);
141
+ var encoded = msgpack.encode(value, options);
142
+ var decoded = msgpack.decode(encoded, options);
123
143
  assert.equal(decoded, value);
124
144
  });
125
145
  });
@@ -131,8 +151,8 @@ describe(TITLE, function() {
131
151
  value[i] = String.fromCharCode(i);
132
152
  }
133
153
  assert.equal(value.length, length);
134
- var encoded = msgpack.encode(value);
135
- var decoded = msgpack.decode(encoded);
154
+ var encoded = msgpack.encode(value, options);
155
+ var decoded = msgpack.decode(encoded, options);
136
156
  assert.equal(decoded.length, length);
137
157
  assert.equal(decoded[0], value[0]);
138
158
  assert.equal(decoded[length - 1], value[length - 1]);
@@ -144,15 +164,15 @@ describe(TITLE, function() {
144
164
  pattern(0, 65537).forEach(function(length) {
145
165
  var value = new Array(length);
146
166
  assert.equal(value.length, length);
147
- var encoded = msgpack.encode(value);
148
- var decoded = msgpack.decode(encoded);
167
+ var encoded = msgpack.encode(value, options);
168
+ var decoded = msgpack.decode(encoded, options);
149
169
  assert.equal(decoded.length, length);
150
170
  assert.equal(decoded[0], value[0]);
151
171
  assert.equal(decoded[length - 1], value[length - 1]);
152
172
  });
153
173
  });
154
174
 
155
- it("map (small)", function() {
175
+ it("object map (small)", function() {
156
176
  pattern(0, 257).forEach(function(length) {
157
177
  var value = {};
158
178
  for (var i = 0; i < length; i++) {
@@ -160,15 +180,15 @@ describe(TITLE, function() {
160
180
  value[key] = length;
161
181
  }
162
182
  assert.equal(Object.keys(value).length, length);
163
- var encoded = msgpack.encode(value);
164
- var decoded = msgpack.decode(encoded);
183
+ var encoded = msgpack.encode(value, options);
184
+ var decoded = msgpack.decode(encoded, options);
165
185
  assert.equal(Object.keys(decoded).length, length);
166
186
  assert.equal(decoded[0], value[0]);
167
187
  assert.equal(decoded[length - 1], value[length - 1]);
168
188
  });
169
189
  });
170
190
 
171
- it("map (large)", function() {
191
+ it("object map (large)", function() {
172
192
  this.timeout(30000);
173
193
  pattern(65536, 65537).forEach(function(length) {
174
194
  var value = {};
@@ -176,8 +196,8 @@ describe(TITLE, function() {
176
196
  value[i] = length;
177
197
  }
178
198
  assert.equal(Object.keys(value).length, length);
179
- var encoded = msgpack.encode(value);
180
- var decoded = msgpack.decode(encoded);
199
+ var encoded = msgpack.encode(value, options);
200
+ var decoded = msgpack.decode(encoded, options);
181
201
  assert.equal(Object.keys(decoded).length, length);
182
202
  assert.equal(decoded[0], value[0]);
183
203
  assert.equal(decoded[length - 1], value[length - 1]);
@@ -190,11 +210,11 @@ describe(TITLE, function() {
190
210
  var value = new Buffer(length);
191
211
  value.fill(idx);
192
212
  assert.equal(value.length, length);
193
- var encoded = msgpack.encode(value);
194
- var decoded = msgpack.decode(encoded);
213
+ var encoded = msgpack.encode(value, options);
214
+ var decoded = msgpack.decode(encoded, options);
195
215
  assert.equal(decoded.length, length);
196
216
  assert.equal(decoded[0], value[0]);
197
217
  assert.equal(decoded[length - 1], value[length - 1]);
198
218
  });
199
219
  });
200
- });
220
+ }