summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/reline/test_unicode.rb137
1 files changed, 126 insertions, 11 deletions
diff --git a/test/reline/test_unicode.rb b/test/reline/test_unicode.rb
index 98ffdcfa26..a0ed7eed7b 100644
--- a/test/reline/test_unicode.rb
+++ b/test/reline/test_unicode.rb
@@ -30,17 +30,22 @@ class Reline::Unicode::Test < Reline::TestCase
end
def test_split_by_width
- assert_equal [['abc', nil, 'de'], 2], Reline::Unicode.split_by_width('abcde', 3)
- assert_equal [['abc', nil, 'def', nil, ''], 3], Reline::Unicode.split_by_width('abcdef', 3)
- assert_equal [['ab', nil, 'あd', nil, 'ef'], 3], Reline::Unicode.split_by_width('abあdef', 3)
- assert_equal [['ab[zero]c', nil, 'def', nil, ''], 3], Reline::Unicode.split_by_width("ab\1[zero]\2cdef", 3)
- assert_equal [["\e[31mabc", nil, "\e[31md\e[42mef", nil, "\e[31m\e[42mg"], 3], Reline::Unicode.split_by_width("\e[31mabcd\e[42mefg", 3)
- assert_equal [["ab\e]0;1\ac", nil, "\e]0;1\ad"], 2], Reline::Unicode.split_by_width("ab\e]0;1\acd", 3)
+ # IRB uses this method.
+ assert_equal [['abc', 'de'], 2], Reline::Unicode.split_by_width('abcde', 3)
end
- def test_split_by_width_csi_reset_sgr_optimization
- assert_equal [["\e[1ma\e[mb\e[2mc", nil, "\e[2md\e[0me\e[3mf", nil, "\e[3mg"], 3], Reline::Unicode.split_by_width("\e[1ma\e[mb\e[2mcd\e[0me\e[3mfg", 3)
- assert_equal [["\e[1ma\e[mzero\e[0m\e[2mb", nil, "\e[1m\e[2mc"], 2], Reline::Unicode.split_by_width("\e[1ma\1\e[mzero\e[0m\2\e[2mbc", 2)
+ def test_split_line_by_width
+ assert_equal ['abc', 'de'], Reline::Unicode.split_line_by_width('abcde', 3)
+ assert_equal ['abc', 'def', ''], Reline::Unicode.split_line_by_width('abcdef', 3)
+ assert_equal ['ab', 'あd', 'ef'], Reline::Unicode.split_line_by_width('abあdef', 3)
+ assert_equal ['ab[zero]c', 'def', ''], Reline::Unicode.split_line_by_width("ab\1[zero]\2cdef", 3)
+ assert_equal ["\e[31mabc", "\e[31md\e[42mef", "\e[31m\e[42mg"], Reline::Unicode.split_line_by_width("\e[31mabcd\e[42mefg", 3)
+ assert_equal ["ab\e]0;1\ac", "\e]0;1\ad"], Reline::Unicode.split_line_by_width("ab\e]0;1\acd", 3)
+ end
+
+ def test_split_line_by_width_csi_reset_sgr_optimization
+ assert_equal ["\e[1ma\e[mb\e[2mc", "\e[2md\e[0me\e[3mf", "\e[3mg"], Reline::Unicode.split_line_by_width("\e[1ma\e[mb\e[2mcd\e[0me\e[3mfg", 3)
+ assert_equal ["\e[1ma\e[mzero\e[0m\e[2mb", "\e[1m\e[2mc"], Reline::Unicode.split_line_by_width("\e[1ma\1\e[mzero\e[0m\2\e[2mbc", 2)
end
def test_take_range
@@ -56,9 +61,9 @@ class Reline::Unicode::Test < Reline::TestCase
def test_nonprinting_start_end
# \1 and \2 should be removed
assert_equal 'ab[zero]cd', Reline::Unicode.take_range("ab\1[zero]\2cdef", 0, 4)
- assert_equal [['ab[zero]cd', nil, 'ef'], 2], Reline::Unicode.split_by_width("ab\1[zero]\2cdef", 4)
+ assert_equal ['ab[zero]cd', 'ef'], Reline::Unicode.split_line_by_width("ab\1[zero]\2cdef", 4)
# CSI between \1 and \2 does not need to be applied to the sebsequent line
- assert_equal [["\e[31mab\e[32mcd", nil, "\e[31mef"], 2], Reline::Unicode.split_by_width("\e[31mab\1\e[32m\2cdef", 4)
+ assert_equal ["\e[31mab\e[32mcd", "\e[31mef"], Reline::Unicode.split_line_by_width("\e[31mab\1\e[32m\2cdef", 4)
end
def test_strip_non_printing_start_end
@@ -129,4 +134,114 @@ class Reline::Unicode::Test < Reline::TestCase
assert_equal(sjis_texts, texts.map { |s| Reline::Unicode.safe_encode(s, 'sjis') })
assert_equal(sjis_texts, texts.map { |s| Reline::Unicode.safe_encode(s, Encoding::Windows_31J) })
end
+
+ def test_em_forward_word
+ assert_equal(12, Reline::Unicode.em_forward_word('abc---fooあbar-baz', 3))
+ assert_equal(3, Reline::Unicode.em_forward_word('abcfoo', 3))
+ assert_equal(3, Reline::Unicode.em_forward_word('abc---', 3))
+ assert_equal(0, Reline::Unicode.em_forward_word('abc', 3))
+ end
+
+ def test_em_forward_word_with_capitalization
+ assert_equal([12, '---Fooあbar'], Reline::Unicode.em_forward_word_with_capitalization('abc---foOあBar-baz', 3))
+ assert_equal([3, 'Foo'], Reline::Unicode.em_forward_word_with_capitalization('abcfOo', 3))
+ assert_equal([3, '---'], Reline::Unicode.em_forward_word_with_capitalization('abc---', 3))
+ assert_equal([0, ''], Reline::Unicode.em_forward_word_with_capitalization('abc', 3))
+ assert_equal([6, 'Ii̇i̇'], Reline::Unicode.em_forward_word_with_capitalization('ıİİ', 0))
+ end
+
+ def test_em_backward_word
+ assert_equal(12, Reline::Unicode.em_backward_word('abc foo-barあbaz--- xyz', 20))
+ assert_equal(2, Reline::Unicode.em_backward_word(' ', 2))
+ assert_equal(2, Reline::Unicode.em_backward_word('ab', 2))
+ assert_equal(0, Reline::Unicode.em_backward_word('ab', 0))
+ end
+
+ def test_em_big_backward_word
+ assert_equal(16, Reline::Unicode.em_big_backward_word('abc foo-barあbaz--- xyz', 20))
+ assert_equal(2, Reline::Unicode.em_big_backward_word(' ', 2))
+ assert_equal(2, Reline::Unicode.em_big_backward_word('ab', 2))
+ assert_equal(0, Reline::Unicode.em_big_backward_word('ab', 0))
+ end
+
+ def test_ed_transpose_words
+ # any value that does not trigger transpose
+ assert_equal([0, 0, 0, 2], Reline::Unicode.ed_transpose_words('aa bb cc ', 1))
+
+ assert_equal([0, 2, 3, 5], Reline::Unicode.ed_transpose_words('aa bb cc ', 2))
+ assert_equal([0, 2, 3, 5], Reline::Unicode.ed_transpose_words('aa bb cc ', 4))
+ assert_equal([3, 5, 6, 8], Reline::Unicode.ed_transpose_words('aa bb cc ', 5))
+ assert_equal([3, 5, 6, 8], Reline::Unicode.ed_transpose_words('aa bb cc ', 7))
+ assert_equal([3, 5, 6, 10], Reline::Unicode.ed_transpose_words('aa bb cc ', 8))
+ assert_equal([3, 5, 6, 10], Reline::Unicode.ed_transpose_words('aa bb cc ', 9))
+ word1 = 'fooあ'
+ word2 = 'barあbaz'
+ left = 'aaa -'
+ middle = '- -'
+ right = '- bbb'
+ expected = [left.bytesize, (left + word1).bytesize, (left + word1 + middle).bytesize, (left + word1 + middle + word2).bytesize]
+ assert_equal(expected, Reline::Unicode.ed_transpose_words(left + word1 + middle + word2 + right, left.bytesize + word1.bytesize))
+ assert_equal(expected, Reline::Unicode.ed_transpose_words(left + word1 + middle + word2 + right, left.bytesize + word1.bytesize + middle.bytesize))
+ assert_equal(expected, Reline::Unicode.ed_transpose_words(left + word1 + middle + word2 + right, left.bytesize + word1.bytesize + middle.bytesize + word2.bytesize - 1))
+ end
+
+ def test_vi_big_forward_word
+ assert_equal(18, Reline::Unicode.vi_big_forward_word('abc---fooあbar-baz xyz', 3))
+ assert_equal(8, Reline::Unicode.vi_big_forward_word('abcfooあ --', 3))
+ assert_equal(6, Reline::Unicode.vi_big_forward_word('abcfooあ', 3))
+ assert_equal(2, Reline::Unicode.vi_big_forward_word('abc- ', 3)) # maybe inconsistent
+ assert_equal(0, Reline::Unicode.vi_big_forward_word('abc', 3))
+ end
+
+ def test_vi_big_forward_end_word
+ assert_equal(4, Reline::Unicode.vi_big_forward_end_word('a bb c', 0))
+ assert_equal(4, Reline::Unicode.vi_big_forward_end_word('- bb c', 0))
+ assert_equal(1, Reline::Unicode.vi_big_forward_end_word('-a b', 0))
+ assert_equal(1, Reline::Unicode.vi_big_forward_end_word('a- b', 0))
+ assert_equal(1, Reline::Unicode.vi_big_forward_end_word('aa b', 0))
+ assert_equal(3, Reline::Unicode.vi_big_forward_end_word(' aa b', 0))
+ assert_equal(15, Reline::Unicode.vi_big_forward_end_word('abc---fooあbar-baz xyz', 3))
+ assert_equal(3, Reline::Unicode.vi_big_forward_end_word('abcfooあ --', 3))
+ assert_equal(3, Reline::Unicode.vi_big_forward_end_word('abcfooあ', 3))
+ assert_equal(2, Reline::Unicode.vi_big_forward_end_word('abc- ', 3))
+ assert_equal(0, Reline::Unicode.vi_big_forward_end_word('abc', 3))
+ end
+
+ def test_vi_big_backward_word
+ assert_equal(16, Reline::Unicode.vi_big_backward_word('abc foo-barあbaz--- xyz', 20))
+ assert_equal(2, Reline::Unicode.vi_big_backward_word(' ', 2))
+ assert_equal(2, Reline::Unicode.vi_big_backward_word('ab', 2))
+ assert_equal(0, Reline::Unicode.vi_big_backward_word('ab', 0))
+ end
+
+ def test_vi_forward_word
+ assert_equal(3, Reline::Unicode.vi_forward_word('abc---fooあbar-baz', 3))
+ assert_equal(3, Reline::Unicode.vi_forward_word('abc---fooあbar-baz', 6)) # maybe bug
+ assert_equal(3, Reline::Unicode.vi_forward_word('abcfooあ', 3)) # maybe bug
+ assert_equal(3, Reline::Unicode.vi_forward_word('abc---', 3))
+ assert_equal(0, Reline::Unicode.vi_forward_word('abc', 3))
+ end
+
+ def test_vi_forward_end_word
+ assert_equal(2, Reline::Unicode.vi_forward_end_word('abc---fooあbar-baz', 3))
+ assert_equal(2, Reline::Unicode.vi_forward_end_word('abc---fooあbar-baz', 6)) # maybe bug
+ assert_equal(2, Reline::Unicode.vi_forward_end_word('abcfooあ', 3)) # maybe bug
+ assert_equal(2, Reline::Unicode.vi_forward_end_word('abc---', 3))
+ assert_equal(0, Reline::Unicode.vi_forward_end_word('abc', 3))
+ end
+
+ def test_vi_backward_word
+ assert_equal(3, Reline::Unicode.vi_backward_word('abc foo-barあbaz--- xyz', 20))
+ assert_equal(3, Reline::Unicode.vi_backward_word('abc foo-barあbaz--- xyz', 17)) # maybe bug
+ assert_equal(2, Reline::Unicode.vi_backward_word(' ', 2))
+ assert_equal(2, Reline::Unicode.vi_backward_word('ab', 2))
+ assert_equal(0, Reline::Unicode.vi_backward_word('ab', 0))
+ end
+
+ def test_vi_first_print
+ assert_equal(3, Reline::Unicode.vi_first_print(' abcdefg'))
+ assert_equal(2, Reline::Unicode.vi_first_print(' ')) # maybe inconsistent
+ assert_equal(0, Reline::Unicode.vi_first_print('abc'))
+ assert_equal(0, Reline::Unicode.vi_first_print(''))
+ end
end