From 975eecd0d05df699fa59cb3777c86f3512eec4f1 Mon Sep 17 00:00:00 2001 From: Jonas Eckstein Date: Mon, 31 Jan 2022 18:11:46 +0100 Subject: [PATCH 1/3] Fix binary data as input in byte mode --- lib/core/byte-data.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/core/byte-data.js b/lib/core/byte-data.js index 778181c9..289a601f 100644 --- a/lib/core/byte-data.js +++ b/lib/core/byte-data.js @@ -3,7 +3,10 @@ const Mode = require('./mode') function ByteData (data) { this.mode = Mode.BYTE - this.data = new Uint8Array(encodeUtf8(data)) + if (typeof (data) === 'string') { + data = encodeUtf8(data) + } + this.data = new Uint8Array(data) } ByteData.getBitsLength = function getBitsLength (length) { From 702296af9b4fbaed44f2bfee5283dfdf0f7c5977 Mon Sep 17 00:00:00 2001 From: Jonas Eckstein Date: Mon, 31 Jan 2022 18:21:44 +0100 Subject: [PATCH 2/3] Add test for ByteData accepting Uint8ClampedArray --- test/unit/core/byte-data.test.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/test/unit/core/byte-data.test.js b/test/unit/core/byte-data.test.js index bf1d2491..02f71789 100644 --- a/test/unit/core/byte-data.test.js +++ b/test/unit/core/byte-data.test.js @@ -3,7 +3,7 @@ const BitBuffer = require('core/bit-buffer') const ByteData = require('core/byte-data') const Mode = require('core/mode') -test('Byte Data', function (t) { +test('Byte Data: String Input', function (t) { const text = '1234' const textBitLength = 32 const textByte = [49, 50, 51, 52] // 1, 2, 3, 4 @@ -24,3 +24,17 @@ test('Byte Data', function (t) { t.end() }) + +test('Byte Data: Byte Input', function (t) { + const bytes = new Uint8ClampedArray([1, 231, 32, 22]) + + const byteData = new ByteData(bytes) + t.equal(byteData.getLength(), bytes.length, 'Should return correct length') + t.equal(byteData.getBitsLength(), bytes.length * 8, 'Should return correct bit length') + + const bitBuffer = new BitBuffer() + byteData.write(bitBuffer) + t.deepEqual(bitBuffer.buffer, bytes, 'Should write correct data to buffer') + + t.end() +}) From 66a7bef054d0c226b1e9fe2595ebebf44c990686 Mon Sep 17 00:00:00 2001 From: Jonas Eckstein Date: Mon, 31 Jan 2022 18:29:26 +0100 Subject: [PATCH 3/3] Add test for binary data like in README.md --- test/e2e/toString.test.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/e2e/toString.test.js b/test/e2e/toString.test.js index f2b00dcf..2aea4d45 100644 --- a/test/e2e/toString.test.js +++ b/test/e2e/toString.test.js @@ -231,3 +231,31 @@ test('toString terminal', function (t) { t.equal(code + '\n', expectedTerminal, 'should output a valid symbol (promise)') }) }) + +test('toString byte-input', function (t) { + const expectedOutput = [ + ' ', + ' ', + ' █▀▀▀▀▀█ █▄█▀ █▀▀▀▀▀█ ', + ' █ ███ █ ▀█ █▀ █ ███ █ ', + ' █ ▀▀▀ █ ▀ █ █ ▀▀▀ █ ', + ' ▀▀▀▀▀▀▀ █▄▀▄█ ▀▀▀▀▀▀▀ ', + ' ▀██▄██▀▀▀█▀▀ ▀█ ▄▀▄ ', + ' ▀█▀▄█▄▀▄ ██ ▀ ▄ ▀▄ ▀ ', + ' ▀ ▀ ▀▀▀▀█▄ ▄▀▄▀▄▀▄▀▄▀ ', + ' █▀▀▀▀▀█ █ █▄█▀█▄█ ▀ ', + ' █ ███ █ ▀█▀▀ ▀██ ▀█▀ ', + ' █ ▀▀▀ █ ██▀ ▀ ▄ ▀▄▀▄▀ ', + ' ▀▀▀▀▀▀▀ ▀▀▀ ▀ ▀▀▀ ▀▀▀ ', + ' ', + ' ' + ].join('\n') + const byteInput = new Uint8ClampedArray([1, 2, 3, 4, 5]) + + t.plan(2) + + QRCode.toString([{ data: byteInput, mode: 'byte' }], { errorCorrectionLevel: 'L' }, (err, code) => { + t.ok(!err, 'there should be no error') + t.equal(code, expectedOutput, 'should output the correct code') + }) +})