11cb0ef41Sopenharmony_ci// Copyright Joyent, Inc. and other Node contributors. 21cb0ef41Sopenharmony_ci// 31cb0ef41Sopenharmony_ci// Permission is hereby granted, free of charge, to any person obtaining a 41cb0ef41Sopenharmony_ci// copy of this software and associated documentation files (the 51cb0ef41Sopenharmony_ci// "Software"), to deal in the Software without restriction, including 61cb0ef41Sopenharmony_ci// without limitation the rights to use, copy, modify, merge, publish, 71cb0ef41Sopenharmony_ci// distribute, sublicense, and/or sell copies of the Software, and to permit 81cb0ef41Sopenharmony_ci// persons to whom the Software is furnished to do so, subject to the 91cb0ef41Sopenharmony_ci// following conditions: 101cb0ef41Sopenharmony_ci// 111cb0ef41Sopenharmony_ci// The above copyright notice and this permission notice shall be included 121cb0ef41Sopenharmony_ci// in all copies or substantial portions of the Software. 131cb0ef41Sopenharmony_ci// 141cb0ef41Sopenharmony_ci// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 151cb0ef41Sopenharmony_ci// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 161cb0ef41Sopenharmony_ci// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 171cb0ef41Sopenharmony_ci// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 181cb0ef41Sopenharmony_ci// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 191cb0ef41Sopenharmony_ci// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 201cb0ef41Sopenharmony_ci// USE OR OTHER DEALINGS IN THE SOFTWARE. 211cb0ef41Sopenharmony_ci 221cb0ef41Sopenharmony_ci'use strict'; 231cb0ef41Sopenharmony_ciconst common = require('../common'); 241cb0ef41Sopenharmony_ciconst assert = require('assert'); 251cb0ef41Sopenharmony_ci 261cb0ef41Sopenharmony_ciconst zero = []; 271cb0ef41Sopenharmony_ciconst one = [ Buffer.from('asdf') ]; 281cb0ef41Sopenharmony_ciconst long = []; 291cb0ef41Sopenharmony_cifor (let i = 0; i < 10; i++) long.push(Buffer.from('asdf')); 301cb0ef41Sopenharmony_ci 311cb0ef41Sopenharmony_ciconst flatZero = Buffer.concat(zero); 321cb0ef41Sopenharmony_ciconst flatOne = Buffer.concat(one); 331cb0ef41Sopenharmony_ciconst flatLong = Buffer.concat(long); 341cb0ef41Sopenharmony_ciconst flatLongLen = Buffer.concat(long, 40); 351cb0ef41Sopenharmony_ci 361cb0ef41Sopenharmony_ciassert.strictEqual(flatZero.length, 0); 371cb0ef41Sopenharmony_ciassert.strictEqual(flatOne.toString(), 'asdf'); 381cb0ef41Sopenharmony_ci 391cb0ef41Sopenharmony_ciconst check = 'asdf'.repeat(10); 401cb0ef41Sopenharmony_ci 411cb0ef41Sopenharmony_ci// A special case where concat used to return the first item, 421cb0ef41Sopenharmony_ci// if the length is one. This check is to make sure that we don't do that. 431cb0ef41Sopenharmony_ciassert.notStrictEqual(flatOne, one[0]); 441cb0ef41Sopenharmony_ciassert.strictEqual(flatLong.toString(), check); 451cb0ef41Sopenharmony_ciassert.strictEqual(flatLongLen.toString(), check); 461cb0ef41Sopenharmony_ci 471cb0ef41Sopenharmony_ci[undefined, null, Buffer.from('hello')].forEach((value) => { 481cb0ef41Sopenharmony_ci assert.throws(() => { 491cb0ef41Sopenharmony_ci Buffer.concat(value); 501cb0ef41Sopenharmony_ci }, { 511cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE', 521cb0ef41Sopenharmony_ci message: 'The "list" argument must be an instance of Array.' + 531cb0ef41Sopenharmony_ci `${common.invalidArgTypeHelper(value)}` 541cb0ef41Sopenharmony_ci }); 551cb0ef41Sopenharmony_ci}); 561cb0ef41Sopenharmony_ci 571cb0ef41Sopenharmony_ci[[42], ['hello', Buffer.from('world')]].forEach((value) => { 581cb0ef41Sopenharmony_ci assert.throws(() => { 591cb0ef41Sopenharmony_ci Buffer.concat(value); 601cb0ef41Sopenharmony_ci }, { 611cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE', 621cb0ef41Sopenharmony_ci message: 'The "list[0]" argument must be an instance of Buffer ' + 631cb0ef41Sopenharmony_ci `or Uint8Array.${common.invalidArgTypeHelper(value[0])}` 641cb0ef41Sopenharmony_ci }); 651cb0ef41Sopenharmony_ci}); 661cb0ef41Sopenharmony_ci 671cb0ef41Sopenharmony_ciassert.throws(() => { 681cb0ef41Sopenharmony_ci Buffer.concat([Buffer.from('hello'), 3]); 691cb0ef41Sopenharmony_ci}, { 701cb0ef41Sopenharmony_ci code: 'ERR_INVALID_ARG_TYPE', 711cb0ef41Sopenharmony_ci message: 'The "list[1]" argument must be an instance of Buffer ' + 721cb0ef41Sopenharmony_ci 'or Uint8Array. Received type number (3)' 731cb0ef41Sopenharmony_ci}); 741cb0ef41Sopenharmony_ci 751cb0ef41Sopenharmony_ci// eslint-disable-next-line node-core/crypto-check 761cb0ef41Sopenharmony_ciconst random10 = common.hasCrypto ? 771cb0ef41Sopenharmony_ci require('crypto').randomBytes(10) : 781cb0ef41Sopenharmony_ci Buffer.alloc(10, 1); 791cb0ef41Sopenharmony_ciconst empty = Buffer.alloc(0); 801cb0ef41Sopenharmony_ci 811cb0ef41Sopenharmony_ciassert.notDeepStrictEqual(random10, empty); 821cb0ef41Sopenharmony_ciassert.notDeepStrictEqual(random10, Buffer.alloc(10)); 831cb0ef41Sopenharmony_ci 841cb0ef41Sopenharmony_ciassert.deepStrictEqual(Buffer.concat([], 100), empty); 851cb0ef41Sopenharmony_ciassert.deepStrictEqual(Buffer.concat([random10], 0), empty); 861cb0ef41Sopenharmony_ciassert.deepStrictEqual(Buffer.concat([random10], 10), random10); 871cb0ef41Sopenharmony_ciassert.deepStrictEqual(Buffer.concat([random10, random10], 10), random10); 881cb0ef41Sopenharmony_ciassert.deepStrictEqual(Buffer.concat([empty, random10]), random10); 891cb0ef41Sopenharmony_ciassert.deepStrictEqual(Buffer.concat([random10, empty, empty]), random10); 901cb0ef41Sopenharmony_ci 911cb0ef41Sopenharmony_ci// The tail should be zero-filled 921cb0ef41Sopenharmony_ciassert.deepStrictEqual(Buffer.concat([empty], 100), Buffer.alloc(100)); 931cb0ef41Sopenharmony_ciassert.deepStrictEqual(Buffer.concat([empty], 4096), Buffer.alloc(4096)); 941cb0ef41Sopenharmony_ciassert.deepStrictEqual( 951cb0ef41Sopenharmony_ci Buffer.concat([random10], 40), 961cb0ef41Sopenharmony_ci Buffer.concat([random10, Buffer.alloc(30)])); 971cb0ef41Sopenharmony_ci 981cb0ef41Sopenharmony_ciassert.deepStrictEqual(Buffer.concat([new Uint8Array([0x41, 0x42]), 991cb0ef41Sopenharmony_ci new Uint8Array([0x43, 0x44])]), 1001cb0ef41Sopenharmony_ci Buffer.from('ABCD')); 101