diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index fbc0a4ee2d6b6e..72be2889a09b5a 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -2054,9 +2054,11 @@ if (internalBinding('config').hasIntl) { const isZeroWidthCodePoint = (code) => { return code <= 0x1F || // C0 control codes - (code > 0x7F && code <= 0x9F) || // C1 control codes + (code >= 0x7F && code <= 0x9F) || // C1 control codes (code >= 0x300 && code <= 0x36F) || // Combining Diacritical Marks (code >= 0x200B && code <= 0x200F) || // Modifying Invisible Characters + // Combining Diacritical Marks for Symbols + (code >= 0x20D0 && code <= 0x20FF) || (code >= 0xFE00 && code <= 0xFE0F) || // Variation Selectors (code >= 0xFE20 && code <= 0xFE2F) || // Combining Half Marks (code >= 0xE0100 && code <= 0xE01EF); // Variation Selectors diff --git a/test/parallel/test-icu-stringwidth.js b/test/parallel/test-icu-stringwidth.js index 4e8389961d0d6d..66142a8d6811c0 100644 --- a/test/parallel/test-icu-stringwidth.js +++ b/test/parallel/test-icu-stringwidth.js @@ -2,9 +2,6 @@ 'use strict'; const common = require('../common'); -if (!common.hasIntl) - common.skip('missing Intl'); - const assert = require('assert'); const { getStringWidth } = require('internal/util/inspect'); @@ -88,7 +85,7 @@ for (let i = 0; i < 256; i++) { } } -{ +if (common.hasIntl) { const a = '한글'.normalize('NFD'); // 한글 const b = '한글'.normalize('NFC'); // 한글 assert.strictEqual(a.length, 6); diff --git a/test/parallel/test-readline-position.js b/test/parallel/test-readline-position.js index f01786eaf19d3c..3603a42ecedc68 100644 --- a/test/parallel/test-readline-position.js +++ b/test/parallel/test-readline-position.js @@ -1,7 +1,6 @@ // Flags: --expose-internals 'use strict'; const common = require('../common'); -const { internalBinding } = require('internal/test/binding'); const { PassThrough } = require('stream'); const readline = require('readline'); const assert = require('assert'); @@ -21,22 +20,14 @@ common.skipIfDumbTerminal(); const tests = [ [1, 'a'], [2, 'ab'], - [2, '丁'] + [2, '丁'], + [0, '\u0301'], // COMBINING ACUTE ACCENT + [1, 'a\u0301'], // á + [0, '\u20DD'], // COMBINING ENCLOSING CIRCLE + [2, 'a\u20DDb'], // a⃝b + [0, '\u200E'], // LEFT-TO-RIGHT MARK ]; - // The non-ICU JS implementation of character width calculation is only aware - // of the wide/narrow distinction. Only test these more advanced cases when - // ICU is available. - if (internalBinding('config').hasIntl) { - tests.push( - [0, '\u0301'], // COMBINING ACUTE ACCENT - [1, 'a\u0301'], // á - [0, '\u20DD'], // COMBINING ENCLOSING CIRCLE - [2, 'a\u20DDb'], // a⃝b - [0, '\u200E'] // LEFT-TO-RIGHT MARK - ); - } - for (const [cursor, string] of tests) { rl.write(string); assert.strictEqual(rl.getCursorPos().cols, cursor);