blob: ba3f0c5d1d9ade4351fdcbbe1c9a341460d60dfa [file] [log] [blame]
Roman Reissf29762f2015-05-19 11:00:061'use strict';
Trevor Norrise92f4872013-06-11 21:30:162var common = require('../common');
3var assert = require('assert');
4// minimum string size to overflow into external string space
5var EXTERN_APEX = 0xFBEE9;
6
7// manually controlled string for checking binary output
8var ucs2_control = 'a\u0000';
9var write_str = 'a';
10
11
12// first do basic checks
13var b = new Buffer(write_str, 'ucs2');
14var c = b.toString('binary');
15assert.equal(b[0], 0x61);
16assert.equal(b[1], 0);
17assert.equal(ucs2_control, c);
18
Ben Noordhuise2fb7332015-03-03 15:07:2619// now create big strings
20var size = 1 + (1 << 20);
21write_str = Array(size).join(write_str);
22ucs2_control = Array(size).join(ucs2_control);
Trevor Norrise92f4872013-06-11 21:30:1623
24// check resultant buffer and output string
25var b = new Buffer(write_str, 'ucs2');
26// check fist Buffer created from write string
27for (var i = 0; i < b.length; i += 2) {
28 assert.equal(b[i], 0x61);
29 assert.equal(b[i + 1], 0);
30}
31// create another string to create an external string
32var b_bin = b.toString('binary');
33var b_ucs = b.toString('ucs2');
34// check control against external binary string
35assert.equal(ucs2_control, b_bin);
36// create buffer copy from external
37var c_bin = new Buffer(b_bin, 'binary');
38var c_ucs = new Buffer(b_ucs, 'ucs2');
39// make sure they're the same length
40assert.equal(c_bin.length, c_ucs.length);
41// make sure Buffers from externals are the same
42for (var i = 0; i < c_bin.length; i++) {
Trevor Norris37ee43e2015-08-17 20:32:5143 assert.equal(c_bin[i], c_ucs[i]);
Trevor Norrise92f4872013-06-11 21:30:1644}
45// check resultant strings
46assert.equal(c_bin.toString('ucs2'), c_ucs.toString('ucs2'));
47assert.equal(c_bin.toString('binary'), ucs2_control);
48assert.equal(c_ucs.toString('binary'), ucs2_control);
Refael Ackermann9b7888e2014-05-09 11:12:3749
50
Refael Ackermann9b7888e2014-05-09 11:12:3751// now let's test BASE64 and HEX ecoding/decoding
52var RADIOS = 2;
53var PRE_HALF_APEX = Math.ceil(EXTERN_APEX / 2) - RADIOS;
54var PRE_3OF4_APEX = Math.ceil((EXTERN_APEX / 4) * 3) - RADIOS;
55
Roman Reissf29762f2015-05-19 11:00:0656(function() {
Refael Ackermann9b7888e2014-05-09 11:12:3757 for (var j = 0; j < RADIOS * 2; j += 1) {
58 var datum = b;
59 var slice = datum.slice(0, PRE_HALF_APEX + j);
60 var slice2 = datum.slice(0, PRE_HALF_APEX + j + 2);
61 var pumped_string = slice.toString('hex');
62 var pumped_string2 = slice2.toString('hex');
63 var decoded = new Buffer(pumped_string, 'hex');
64
Refael Ackermann9b7888e2014-05-09 11:12:3765 // the string are the same?
66 for (var k = 0; k < pumped_string.length; ++k) {
Trevor Norris37ee43e2015-08-17 20:32:5167 assert.equal(pumped_string[k], pumped_string2[k]);
Refael Ackermann9b7888e2014-05-09 11:12:3768 }
69
70 // the recoded buffer is the same?
71 for (var i = 0; i < decoded.length; ++i) {
Trevor Norris37ee43e2015-08-17 20:32:5172 assert.equal(datum[i], decoded[i]);
Refael Ackermann9b7888e2014-05-09 11:12:3773 }
74 }
75})();
76
Roman Reissf29762f2015-05-19 11:00:0677(function() {
Refael Ackermann9b7888e2014-05-09 11:12:3778 for (var j = 0; j < RADIOS * 2; j += 1) {
79 var datum = b;
80 var slice = datum.slice(0, PRE_3OF4_APEX + j);
81 var slice2 = datum.slice(0, PRE_3OF4_APEX + j + 2);
82 var pumped_string = slice.toString('base64');
83 var pumped_string2 = slice2.toString('base64');
84 var decoded = new Buffer(pumped_string, 'base64');
85
Refael Ackermann9b7888e2014-05-09 11:12:3786 // the string are the same?
87 for (var k = 0; k < pumped_string.length - 3; ++k) {
Trevor Norris37ee43e2015-08-17 20:32:5188 assert.equal(pumped_string[k], pumped_string2[k]);
Refael Ackermann9b7888e2014-05-09 11:12:3789 }
90
91 // the recoded buffer is the same?
92 for (var i = 0; i < decoded.length; ++i) {
Trevor Norris37ee43e2015-08-17 20:32:5193 assert.equal(datum[i], decoded[i]);
Refael Ackermann9b7888e2014-05-09 11:12:3794 }
95 }
96})();
Ben Noordhuis1640ded2015-03-03 14:44:5497
cjihriga69ab272015-08-13 16:14:3498// https://github.com/nodejs/node/issues/1024
Ben Noordhuis1640ded2015-03-03 14:44:5499(function() {
100 var a = Array(1 << 20).join('x');
101 var b = Buffer(a, 'ucs2').toString('ucs2');
102 var c = Buffer(b, 'utf8').toString('utf8');
103
104 assert.equal(a.length, b.length);
105 assert.equal(b.length, c.length);
106
107 assert.equal(a, b);
108 assert.equal(b, c);
109})();