11cb0ef41Sopenharmony_ci'use strict'; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_cirequire('../common'); 41cb0ef41Sopenharmony_ciconst assert = require('assert'); 51cb0ef41Sopenharmony_ci 61cb0ef41Sopenharmony_ciconst rangeBuffer = Buffer.from('abc'); 71cb0ef41Sopenharmony_ci 81cb0ef41Sopenharmony_ci// If start >= buffer's length, empty string will be returned 91cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 3), ''); 101cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', +Infinity), ''); 111cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 3.14, 3), ''); 121cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 'Infinity', 3), ''); 131cb0ef41Sopenharmony_ci 141cb0ef41Sopenharmony_ci// If end <= 0, empty string will be returned 151cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 1, 0), ''); 161cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 1, -1.2), ''); 171cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 1, -100), ''); 181cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 1, -Infinity), ''); 191cb0ef41Sopenharmony_ci 201cb0ef41Sopenharmony_ci// If start < 0, start will be taken as zero 211cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', -1, 3), 'abc'); 221cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', -1.99, 3), 'abc'); 231cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', -Infinity, 3), 'abc'); 241cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '-1', 3), 'abc'); 251cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '-1.99', 3), 'abc'); 261cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '-Infinity', 3), 'abc'); 271cb0ef41Sopenharmony_ci 281cb0ef41Sopenharmony_ci// If start is an invalid integer, start will be taken as zero 291cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 'node.js', 3), 'abc'); 301cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', {}, 3), 'abc'); 311cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', [], 3), 'abc'); 321cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', NaN, 3), 'abc'); 331cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', null, 3), 'abc'); 341cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', undefined, 3), 'abc'); 351cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', false, 3), 'abc'); 361cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '', 3), 'abc'); 371cb0ef41Sopenharmony_ci 381cb0ef41Sopenharmony_ci// But, if start is an integer when coerced, then it will be coerced and used. 391cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '-1', 3), 'abc'); 401cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '1', 3), 'bc'); 411cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '-Infinity', 3), 'abc'); 421cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '3', 3), ''); 431cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', Number(3), 3), ''); 441cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '3.14', 3), ''); 451cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '1.99', 3), 'bc'); 461cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', '-1.99', 3), 'abc'); 471cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 1.99, 3), 'bc'); 481cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', true, 3), 'bc'); 491cb0ef41Sopenharmony_ci 501cb0ef41Sopenharmony_ci// If end > buffer's length, end will be taken as buffer's length 511cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, 5), 'abc'); 521cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, 6.99), 'abc'); 531cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, Infinity), 'abc'); 541cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, '5'), 'abc'); 551cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, '6.99'), 'abc'); 561cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, 'Infinity'), 'abc'); 571cb0ef41Sopenharmony_ci 581cb0ef41Sopenharmony_ci// If end is an invalid integer, end will be taken as buffer's length 591cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, 'node.js'), ''); 601cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, {}), ''); 611cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, NaN), ''); 621cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, undefined), 'abc'); 631cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0), 'abc'); 641cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, null), ''); 651cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, []), ''); 661cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, false), ''); 671cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, ''), ''); 681cb0ef41Sopenharmony_ci 691cb0ef41Sopenharmony_ci// But, if end is an integer when coerced, then it will be coerced and used. 701cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, '-1'), ''); 711cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, '1'), 'a'); 721cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, '-Infinity'), ''); 731cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, '3'), 'abc'); 741cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, Number(3)), 'abc'); 751cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, '3.14'), 'abc'); 761cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, '1.99'), 'a'); 771cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, '-1.99'), ''); 781cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, 1.99), 'a'); 791cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString('ascii', 0, true), 'a'); 801cb0ef41Sopenharmony_ci 811cb0ef41Sopenharmony_ci// Try toString() with an object as an encoding 821cb0ef41Sopenharmony_ciassert.strictEqual(rangeBuffer.toString({ toString: function() { 831cb0ef41Sopenharmony_ci return 'ascii'; 841cb0ef41Sopenharmony_ci} }), 'abc'); 851cb0ef41Sopenharmony_ci 861cb0ef41Sopenharmony_ci// Try toString() with 0 and null as the encoding 871cb0ef41Sopenharmony_ciassert.throws(() => { 881cb0ef41Sopenharmony_ci rangeBuffer.toString(0, 1, 2); 891cb0ef41Sopenharmony_ci}, { 901cb0ef41Sopenharmony_ci code: 'ERR_UNKNOWN_ENCODING', 911cb0ef41Sopenharmony_ci name: 'TypeError', 921cb0ef41Sopenharmony_ci message: 'Unknown encoding: 0' 931cb0ef41Sopenharmony_ci}); 941cb0ef41Sopenharmony_ciassert.throws(() => { 951cb0ef41Sopenharmony_ci rangeBuffer.toString(null, 1, 2); 961cb0ef41Sopenharmony_ci}, { 971cb0ef41Sopenharmony_ci code: 'ERR_UNKNOWN_ENCODING', 981cb0ef41Sopenharmony_ci name: 'TypeError', 991cb0ef41Sopenharmony_ci message: 'Unknown encoding: null' 1001cb0ef41Sopenharmony_ci}); 101