'use strict';

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

if (!common.hasIntl)
  common.skip('missing Intl');

const buffer = require('buffer');
const assert = require('assert');
const orig = Buffer.from('těst ☕', 'utf8');

// Test Transcoding
const tests = {
  'latin1': [0x74, 0x3f, 0x73, 0x74, 0x20, 0x3f],
  'ascii': [0x74, 0x3f, 0x73, 0x74, 0x20, 0x3f],
  'ucs2': [0x74, 0x00, 0x1b, 0x01, 0x73,
           0x00, 0x74, 0x00, 0x20, 0x00,
           0x15, 0x26]
};

for (const test in tests) {
  const dest = buffer.transcode(orig, 'utf8', test);
  assert.strictEqual(dest.length, tests[test].length, `utf8->${test} length`);
  for (let n = 0; n < tests[test].length; n++)
    assert.strictEqual(dest[n], tests[test][n], `utf8->${test} char ${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'),
  {
    name: 'TypeError',
    code: 'ERR_INVALID_ARG_TYPE',
    message: 'The "source" argument must be an instance of Buffer ' +
             'or Uint8Array. Received null'
  }
);

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'));
}

{
  const dest = buffer.transcode(new Uint8Array(), 'utf8', 'latin1');
  assert.strictEqual(dest.length, 0);
}

// Test that it doesn't crash
{
  buffer.transcode(new buffer.SlowBuffer(1), 'utf16le', 'ucs2');
}
