var os = require('os') var assert = require('assert') var allocUnsafe = require('buffer-alloc-unsafe') var fill = require('./') var SIZE = 28 var EMPTY = '00000000000000000000000000000000000000000000000000000000' // Check exceptions var buf1 = allocUnsafe(SIZE) assert.throws(function () { fill(buf1, 0, -1) }) assert.throws(function () { fill(buf1, 0, 0, buf1.length + 1) }) assert.throws(function () { fill(buf1, '', -1) }) assert.throws(function () { fill(buf1, '', 0, buf1.length + 1) }) assert.throws(function () { fill(buf1, 'a', 0, buf1.length, 'node rocks!') }) assert.throws(function () { fill(buf1, 'a', 0, 0, NaN) }) assert.throws(function () { fill(buf1, 'a', 0, 0, null) }) assert.throws(function () { fill(buf1, 'a', 0, 0, 'foo') }) assert.throws(function () { fill(buf1, '\u0222', 'hex') }) // Edge cases var buf2 = allocUnsafe(1) assert.equal(fill(buf2, 0)[0], 0x00) assert.equal(fill(buf2, '\u0222')[0], 0xc8) var buf3 = allocUnsafe(1) assert.equal(fill(buf3, '\u0222', 'ucs2')[0], os.endianness() === 'LE' ? 0x22 : 0x02) // Precomputed test cases var testCases = [ // Default encoding ['61626361626361626361626361626361626361626361626361626361', ['abc']], ['c8a26161c8a26161c8a26161c8a26161c8a26161c8a26161c8a26161', ['\u0222aa']], ['61c8b462c8b563c8b661c8b462c8b563c8b661c8b462c8b563c8b661', ['a\u0234b\u0235c\u0236']], ['00000000616263616263616263616263616263616263616263616263', ['abc', 4]], ['00000000006162636162636162636162636162636162636162636162', ['abc', 5]], ['00000000000000000000000000000000000000000000000000000000', ['abc', SIZE]], ['0000c8a26161c8a26161c8a26161c8a26161c8a26161c8a26161c8a2', ['\u0222aa', 2]], ['0000000000000000c8a26161c8a26161c8a26161c8a26161c8a26161', ['\u0222aa', 8]], ['0000000061c8b462c8b563c8b661c8b462c8b563c8b661c8b462c8b5', ['a\u0234b\u0235c\u0236', 4]], ['00000000000000000000000061c8b462c8b563c8b661c8b462c8b563', ['a\u0234b\u0235c\u0236', 12]], ['00000000000000000000000000000000000000000000000000000000', ['abc', 4, -1]], ['00000000000000000000000000000000000000000000000000000000', ['abc', 4, 1]], ['00000000000000000000000000000000000000000000000000000000', ['abc', 5, 1]], ['00000000000000000000000000000000000000000000000000000000', ['\u0222aa', 2, -1]], ['00000000000000000000000000000000000000000000000000000000', ['\u0222aa', 8, 1]], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 4, -1]], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 4, 1]], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 12, 1]], // UTF8 ['61626361626361626361626361626361626361626361626361626361', ['abc', 'utf8']], ['c8a26161c8a26161c8a26161c8a26161c8a26161c8a26161c8a26161', ['\u0222aa', 'utf8']], ['61c8b462c8b563c8b661c8b462c8b563c8b661c8b462c8b563c8b661', ['a\u0234b\u0235c\u0236', 'utf8']], ['00000000616263616263616263616263616263616263616263616263', ['abc', 4, 'utf8']], ['00000000006162636162636162636162636162636162636162636162', ['abc', 5, 'utf8']], ['00000000000000000000000000000000000000000000000000000000', ['abc', SIZE, 'utf8']], ['0000c8a26161c8a26161c8a26161c8a26161c8a26161c8a26161c8a2', ['\u0222aa', 2, 'utf8']], ['0000000000000000c8a26161c8a26161c8a26161c8a26161c8a26161', ['\u0222aa', 8, 'utf8']], ['0000000061c8b462c8b563c8b661c8b462c8b563c8b661c8b462c8b5', ['a\u0234b\u0235c\u0236', 4, 'utf8']], ['00000000000000000000000061c8b462c8b563c8b661c8b462c8b563', ['a\u0234b\u0235c\u0236', 12, 'utf8']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 4, -1, 'utf8']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 4, 1, 'utf8']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 5, 1, 'utf8']], ['00000000000000000000000000000000000000000000000000000000', ['\u0222aa', 2, -1, 'utf8']], ['00000000000000000000000000000000000000000000000000000000', ['\u0222aa', 8, 1, 'utf8']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 4, -1, 'utf8']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 4, 1, 'utf8']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 12, 1, 'utf8']], // BINARY ['61626361626361626361626361626361626361626361626361626361', ['abc', 'binary']], ['22616122616122616122616122616122616122616122616122616122', ['\u0222aa', 'binary']], ['61346235633661346235633661346235633661346235633661346235', ['a\u0234b\u0235c\u0236', 'binary']], ['00000000616263616263616263616263616263616263616263616263', ['abc', 4, 'binary']], ['00000000006162636162636162636162636162636162636162636162', ['abc', 5, 'binary']], ['00000000000000000000000000000000000000000000000000000000', ['abc', SIZE, 'binary']], ['00002261612261612261612261612261612261612261612261612261', ['\u0222aa', 2, 'binary']], ['00000000000000002261612261612261612261612261612261612261', ['\u0222aa', 8, 'binary']], ['00000000613462356336613462356336613462356336613462356336', ['a\u0234b\u0235c\u0236', 4, 'binary']], ['00000000000000000000000061346235633661346235633661346235', ['a\u0234b\u0235c\u0236', 12, 'binary']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 4, -1, 'binary']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 4, 1, 'binary']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 5, 1, 'binary']], ['00000000000000000000000000000000000000000000000000000000', ['\u0222aa', 2, -1, 'binary']], ['00000000000000000000000000000000000000000000000000000000', ['\u0222aa', 8, 1, 'binary']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 4, -1, 'binary']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 4, 1, 'binary']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 12, 1, 'binary']], // LATIN1 ['61626361626361626361626361626361626361626361626361626361', ['abc', 'latin1']], ['22616122616122616122616122616122616122616122616122616122', ['\u0222aa', 'latin1']], ['61346235633661346235633661346235633661346235633661346235', ['a\u0234b\u0235c\u0236', 'latin1']], ['00000000616263616263616263616263616263616263616263616263', ['abc', 4, 'latin1']], ['00000000006162636162636162636162636162636162636162636162', ['abc', 5, 'latin1']], ['00000000000000000000000000000000000000000000000000000000', ['abc', SIZE, 'latin1']], ['00002261612261612261612261612261612261612261612261612261', ['\u0222aa', 2, 'latin1']], ['00000000000000002261612261612261612261612261612261612261', ['\u0222aa', 8, 'latin1']], ['00000000613462356336613462356336613462356336613462356336', ['a\u0234b\u0235c\u0236', 4, 'latin1']], ['00000000000000000000000061346235633661346235633661346235', ['a\u0234b\u0235c\u0236', 12, 'latin1']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 4, -1, 'latin1']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 4, 1, 'latin1']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 5, 1, 'latin1']], ['00000000000000000000000000000000000000000000000000000000', ['\u0222aa', 2, -1, 'latin1']], ['00000000000000000000000000000000000000000000000000000000', ['\u0222aa', 8, 1, 'latin1']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 4, -1, 'latin1']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 4, 1, 'latin1']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 12, 1, 'latin1']], // UCS2 ['61006200630061006200630061006200630061006200630061006200', ['abc', 'ucs2']], ['22026100610022026100610022026100610022026100610022026100', ['\u0222aa', 'ucs2']], ['61003402620035026300360261003402620035026300360261003402', ['a\u0234b\u0235c\u0236', 'ucs2']], ['00000000610062006300610062006300610062006300610062006300', ['abc', 4, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['abc', SIZE, 'ucs2']], ['00002202610061002202610061002202610061002202610061002202', ['\u0222aa', 2, 'ucs2']], ['00000000000000002202610061002202610061002202610061002202', ['\u0222aa', 8, 'ucs2']], ['00000000610034026200350263003602610034026200350263003602', ['a\u0234b\u0235c\u0236', 4, 'ucs2']], ['00000000000000000000000061003402620035026300360261003402', ['a\u0234b\u0235c\u0236', 12, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 4, -1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 4, 1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['abc', 5, 1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['\u0222aa', 2, -1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['\u0222aa', 8, 1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 4, -1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 4, 1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['a\u0234b\u0235c\u0236', 12, 1, 'ucs2']], // HEX ['61626361626361626361626361626361626361626361626361626361', ['616263', 'hex']], ['c8a26161c8a26161c8a26161c8a26161c8a26161c8a26161c8a26161', ['c8a26161', 'hex']], ['61c8b462c8b563c8b661c8b462c8b563c8b661c8b462c8b563c8b661', ['61c8b462c8b563c8b6', 'hex']], ['00000000616263616263616263616263616263616263616263616263', ['616263', 4, 'hex']], ['00000000006162636162636162636162636162636162636162636162', ['616263', 5, 'hex']], ['00000000000000000000000000000000000000000000000000000000', ['616263', SIZE, 'hex']], ['0000c8a26161c8a26161c8a26161c8a26161c8a26161c8a26161c8a2', ['c8a26161', 2, 'hex']], ['0000000000000000c8a26161c8a26161c8a26161c8a26161c8a26161', ['c8a26161', 8, 'hex']], ['0000000061c8b462c8b563c8b661c8b462c8b563c8b661c8b462c8b5', ['61c8b462c8b563c8b6', 4, 'hex']], ['00000000000000000000000061c8b462c8b563c8b661c8b462c8b563', ['61c8b462c8b563c8b6', 12, 'hex']], ['00000000000000000000000000000000000000000000000000000000', ['616263', 4, -1, 'hex']], ['00000000000000000000000000000000000000000000000000000000', ['616263', 4, 1, 'hex']], ['00000000000000000000000000000000000000000000000000000000', ['616263', 5, 1, 'hex']], ['00000000000000000000000000000000000000000000000000000000', ['c8a26161', 2, -1, 'hex']], ['00000000000000000000000000000000000000000000000000000000', ['c8a26161', 8, 1, 'hex']], ['00000000000000000000000000000000000000000000000000000000', ['61c8b462c8b563c8b6', 4, -1, 'hex']], ['00000000000000000000000000000000000000000000000000000000', ['61c8b462c8b563c8b6', 4, 1, 'hex']], ['00000000000000000000000000000000000000000000000000000000', ['61c8b462c8b563c8b6', 12, 1, 'hex']], // BASE64 ['590057004a006a00590057004a006a00590057004a006a0059005700', ['YWJj', 'ucs2']], ['79004b004a006800590051003d003d0079004b004a00680059005100', ['yKJhYQ==', 'ucs2']], ['59006300690030005900730069003100590038006900320059006300', ['Yci0Ysi1Y8i2', 'ucs2']], ['00000000590057004a006a00590057004a006a00590057004a006a00', ['YWJj', 4, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['YWJj', SIZE, 'ucs2']], ['000079004b004a006800590051003d003d0079004b004a0068005900', ['yKJhYQ==', 2, 'ucs2']], ['000000000000000079004b004a006800590051003d003d0079004b00', ['yKJhYQ==', 8, 'ucs2']], ['00000000590063006900300059007300690031005900380069003200', ['Yci0Ysi1Y8i2', 4, 'ucs2']], ['00000000000000000000000059006300690030005900730069003100', ['Yci0Ysi1Y8i2', 12, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['YWJj', 4, -1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['YWJj', 4, 1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['YWJj', 5, 1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['yKJhYQ==', 2, -1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['yKJhYQ==', 8, 1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['Yci0Ysi1Y8i2', 4, -1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['Yci0Ysi1Y8i2', 4, 1, 'ucs2']], ['00000000000000000000000000000000000000000000000000000000', ['Yci0Ysi1Y8i2', 12, 1, 'ucs2']] ] var buf4 = allocUnsafe(SIZE) for (var i = 0; i < testCases.length; i++) { assert.equal(fill(buf4, 0).toString('hex'), EMPTY) assert.equal(fill.apply(null, [buf4].concat(testCases[i][1])).toString('hex'), testCases[i][0]) }