summaryrefslogtreecommitdiff
path: root/test/parallel/test-icu-transcode.js
blob: fc588b220f53664767cadae93cce2b7d6045f427 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
'use strict';

require('../common');
const buffer = require('buffer');
const assert = require('assert');

const orig = Buffer.from('tést €', 'utf8');

// Test Transcoding
const tests = {
  'latin1': [0x74, 0xe9, 0x73, 0x74, 0x20, 0x3f],
  'ascii': [0x74, 0x3f, 0x73, 0x74, 0x20, 0x3f],
  'ucs2': [0x74, 0x00, 0xe9, 0x00, 0x73,
           0x00, 0x74, 0x00, 0x20, 0x00,
           0xac, 0x20]
};

for (const test in tests) {
  const dest = buffer.transcode(orig, 'utf8', test);
  assert.strictEqual(dest.length, tests[test].length);
  for (var n = 0; n < tests[test].length; n++)
    assert.strictEqual(dest[n], tests[test][n]);
}

{
  const dest = buffer.transcode(Buffer.from(tests.ucs2), 'ucs2', 'utf8');
  assert.strictEqual(dest.toString(), orig.toString());
}

{
  const utf8 = Buffer.from('€'.repeat(4000), 'utf8');
  const ucs2 = Buffer.from('€'.repeat(4000), 'ucs2');
  const utf8_to_ucs2 = buffer.transcode(utf8, 'utf8', 'ucs2');
  const ucs2_to_utf8 = buffer.transcode(ucs2, 'ucs2', 'utf8');
  assert.deepStrictEqual(utf8, ucs2_to_utf8);
  assert.deepStrictEqual(ucs2, utf8_to_ucs2);
  assert.strictEqual(ucs2_to_utf8.toString('utf8'),
                     utf8_to_ucs2.toString('ucs2'));
}

assert.throws(
  () => buffer.transcode(null, 'utf8', 'ascii'),
  /^TypeError: "source" argument must be a Buffer or Uint8Array$/
);

assert.throws(
  () => buffer.transcode(Buffer.from('a'), 'b', 'utf8'),
  /^Error: Unable to transcode Buffer \[U_ILLEGAL_ARGUMENT_ERROR\]/
);

assert.throws(
  () => buffer.transcode(Buffer.from('a'), 'uf8', 'b'),
  /^Error: Unable to transcode Buffer \[U_ILLEGAL_ARGUMENT_ERROR\]$/
);

assert.deepStrictEqual(
    buffer.transcode(Buffer.from('hi', 'ascii'), 'ascii', 'utf16le'),
    Buffer.from('hi', 'utf16le'));
assert.deepStrictEqual(
    buffer.transcode(Buffer.from('hi', 'latin1'), 'latin1', 'utf16le'),
    Buffer.from('hi', 'utf16le'));
assert.deepStrictEqual(
    buffer.transcode(Buffer.from('hä', 'latin1'), 'latin1', 'utf16le'),
    Buffer.from('hä', 'utf16le'));

// Test that Uint8Array arguments are okay.
{
  const uint8array = new Uint8Array([...Buffer.from('hä', 'latin1')]);
  assert.deepStrictEqual(
      buffer.transcode(uint8array, 'latin1', 'utf16le'),
      Buffer.from('hä', 'utf16le'));
}