From eb25fe73b0a3f6c57312a74a561fcdf4bc7bb38e Mon Sep 17 00:00:00 2001 From: Tony Gorez Date: Tue, 6 Sep 2022 08:20:16 +0200 Subject: [PATCH] test: add more cases for parse-encoding PR-URL: https://github.com/nodejs/node/pull/44427 Reviewed-By: Darshan Sen Reviewed-By: Luigi Pinca Reviewed-By: Franziska Hinkelmann Reviewed-By: Qingyu Deng --- src/api/encoding.cc | 4 ++++ test/addons/parse-encoding/test.js | 31 +++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/api/encoding.cc b/src/api/encoding.cc index 68278ff7371d80..3ccfd6c84b7865 100644 --- a/src/api/encoding.cc +++ b/src/api/encoding.cc @@ -15,6 +15,10 @@ enum encoding ParseEncoding(const char* encoding, switch (encoding[0]) { case 'u': case 'U': + // Note: the two first conditions are needed for performance reasons + // as "utf8"/"utf-8" is a common case. + // (same for other cases below) + // utf8, utf16le if (encoding[1] == 't' && encoding[2] == 'f') { // Skip `-` diff --git a/test/addons/parse-encoding/test.js b/test/addons/parse-encoding/test.js index da52f2dc4248af..f30e925c36791b 100644 --- a/test/addons/parse-encoding/test.js +++ b/test/addons/parse-encoding/test.js @@ -4,20 +4,45 @@ const common = require('../../common'); const assert = require('assert'); const { parseEncoding } = require(`./build/${common.buildType}/binding`); -assert.strictEqual(parseEncoding(''), 'UNKNOWN'); assert.strictEqual(parseEncoding('ascii'), 'ASCII'); +assert.strictEqual(parseEncoding('ASCII'), 'ASCII'); assert.strictEqual(parseEncoding('base64'), 'BASE64'); +assert.strictEqual(parseEncoding('BASE64'), 'BASE64'); assert.strictEqual(parseEncoding('base64url'), 'BASE64URL'); +assert.strictEqual(parseEncoding('BASE64URL'), 'BASE64URL'); assert.strictEqual(parseEncoding('binary'), 'LATIN1'); +assert.strictEqual(parseEncoding('BINARY'), 'LATIN1'); assert.strictEqual(parseEncoding('buffer'), 'BUFFER'); +assert.strictEqual(parseEncoding('BUFFER'), 'BUFFER'); assert.strictEqual(parseEncoding('hex'), 'HEX'); +assert.strictEqual(parseEncoding('HEX'), 'HEX'); assert.strictEqual(parseEncoding('latin1'), 'LATIN1'); +assert.strictEqual(parseEncoding('LATIN1'), 'LATIN1'); + +// ucs2 variations assert.strictEqual(parseEncoding('ucs2'), 'UCS2'); +assert.strictEqual(parseEncoding('ucs-2'), 'UCS2'); +assert.strictEqual(parseEncoding('UCS2'), 'UCS2'); +assert.strictEqual(parseEncoding('UCS-2'), 'UCS2'); + +// utf8 variations assert.strictEqual(parseEncoding('utf8'), 'UTF8'); -assert.strictEqual(parseEncoding('utf-16LE'), 'UCS2'); +assert.strictEqual(parseEncoding('utf-8'), 'UTF8'); +assert.strictEqual(parseEncoding('UTF8'), 'UTF8'); +assert.strictEqual(parseEncoding('UTF-8'), 'UTF8'); + +// utf16le variations +assert.strictEqual(parseEncoding('utf16le'), 'UCS2'); +assert.strictEqual(parseEncoding('utf-16le'), 'UCS2'); +assert.strictEqual(parseEncoding('UTF16LE'), 'UCS2'); +assert.strictEqual(parseEncoding('UTF-16LE'), 'UCS2'); + +// unknown cases +assert.strictEqual(parseEncoding(''), 'UNKNOWN'); +assert.strictEqual(parseEncoding('asCOO'), 'UNKNOWN'); +assert.strictEqual(parseEncoding('hux'), 'UNKNOWN'); assert.strictEqual(parseEncoding('utf-buffer'), 'UNKNOWN'); assert.strictEqual(parseEncoding('utf-16leNOT'), 'UNKNOWN'); - assert.strictEqual(parseEncoding('linary'), 'UNKNOWN'); assert.strictEqual(parseEncoding('luffer'), 'UNKNOWN');