diff options
author | Nao Iizuka <iizuka@kyu-mu.net> | 2013-03-15 16:18:30 -1000 |
---|---|---|
committer | Nathan Rajlich <nathan@tootallnate.net> | 2013-03-15 16:18:30 -1000 |
commit | 94284e7d2e558cc3f1a985460fb0cc6606133766 (patch) | |
tree | f2718fd0c8887ea8efd9e926354148af4fc953b3 /test | |
parent | c0721bcd66829356950b58cc532d6e3d8bbfc641 (diff) | |
download | node-new-94284e7d2e558cc3f1a985460fb0cc6606133766.tar.gz |
readline: handle wide characters properly
Handle wide characters (such as あ, 谢, 고) as two column wide to make
cursor move properly.
Closes #555.
Closes #4994.
Diffstat (limited to 'test')
-rw-r--r-- | test/simple/test-readline-interface.js | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/test/simple/test-readline-interface.js b/test/simple/test-readline-interface.js index fc20d1d212..d0bc494c23 100644 --- a/test/simple/test-readline-interface.js +++ b/test/simple/test-readline-interface.js @@ -173,6 +173,25 @@ FakeInput.prototype.end = function() {}; assert.equal(callCount, 1); rli.close(); + // wide characters should be treated as two columns. + assert.equal(readline.isFullWidthCodePoint('a'.charCodeAt(0)), false); + assert.equal(readline.isFullWidthCodePoint('あ'.charCodeAt(0)), true); + assert.equal(readline.isFullWidthCodePoint('谢'.charCodeAt(0)), true); + assert.equal(readline.isFullWidthCodePoint('고'.charCodeAt(0)), true); + assert.equal(readline.isFullWidthCodePoint(0x1f251), true); // surrogate + assert.equal(readline.codePointAt('ABC', 0), 0x41); + assert.equal(readline.codePointAt('あいう', 1), 0x3044); + assert.equal(readline.codePointAt('\ud800\udc00', 0), // surrogate + 0x10000); + assert.equal(readline.codePointAt('\ud800\udc00A', 2), // surrogate + 0x41); + assert.equal(readline.getStringWidth('abcde'), 5); + assert.equal(readline.getStringWidth('古池や'), 6); + assert.equal(readline.getStringWidth('ノード.js'), 9); + assert.equal(readline.getStringWidth('你好'), 4); + assert.equal(readline.getStringWidth('안녕하세요'), 10); + assert.equal(readline.getStringWidth('A\ud83c\ude00BC'), 5); // surrogate + assert.deepEqual(fi.listeners('end'), []); assert.deepEqual(fi.listeners(terminal ? 'keypress' : 'data'), []); }); |