summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorNao Iizuka <iizuka@kyu-mu.net>2013-03-15 16:18:30 -1000
committerNathan Rajlich <nathan@tootallnate.net>2013-03-15 16:18:30 -1000
commit94284e7d2e558cc3f1a985460fb0cc6606133766 (patch)
treef2718fd0c8887ea8efd9e926354148af4fc953b3 /test
parentc0721bcd66829356950b58cc532d6e3d8bbfc641 (diff)
downloadnode-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.js19
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'), []);
});