@@ -2105,6 +2105,68 @@ def test_ed_search_next_history_with_empty
2105
2105
assert_line ( '' )
2106
2106
end
2107
2107
2108
+ # Unicode emoji test
2109
+ if RELINE_TEST_ENCODING == Encoding ::UTF_8
2110
+ def test_ed_insert_for_include_zwj_emoji
2111
+ # U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 is family: man, woman, girl, boy "👨👩👧👦"
2112
+ input_keys ( "\u{1F468} " ) # U+1F468 is man "👨"
2113
+ assert_line ( "\u{1F468} " )
2114
+ assert_byte_pointer_size ( "\u{1F468} " )
2115
+ assert_cursor ( 2 )
2116
+ assert_cursor_max ( 2 )
2117
+ input_keys ( "\u200D " ) # U+200D is ZERO WIDTH JOINER
2118
+ assert_line ( "\u{1F468 200D} " )
2119
+ assert_byte_pointer_size ( "\u{1F468 200D} " )
2120
+ assert_cursor ( 2 )
2121
+ assert_cursor_max ( 2 )
2122
+ input_keys ( "\u{1F469} " ) # U+1F469 is woman "👩"
2123
+ assert_line ( "\u{1F468 200D 1F469} " )
2124
+ assert_byte_pointer_size ( "\u{1F468 200D 1F469} " )
2125
+ assert_cursor ( 2 )
2126
+ assert_cursor_max ( 2 )
2127
+ input_keys ( "\u200D " ) # U+200D is ZERO WIDTH JOINER
2128
+ assert_line ( "\u{1F468 200D 1F469 200D} " )
2129
+ assert_byte_pointer_size ( "\u{1F468 200D 1F469 200D} " )
2130
+ assert_cursor ( 2 )
2131
+ assert_cursor_max ( 2 )
2132
+ input_keys ( "\u{1F467} " ) # U+1F467 is girl "👧"
2133
+ assert_line ( "\u{1F468 200D 1F469 200D 1F467} " )
2134
+ assert_byte_pointer_size ( "\u{1F468 200D 1F469 200D 1F467} " )
2135
+ assert_cursor ( 2 )
2136
+ assert_cursor_max ( 2 )
2137
+ input_keys ( "\u200D " ) # U+200D is ZERO WIDTH JOINER
2138
+ assert_line ( "\u{1F468 200D 1F469 200D 1F467 200D} " )
2139
+ assert_byte_pointer_size ( "\u{1F468 200D 1F469 200D 1F467 200D} " )
2140
+ assert_cursor ( 2 )
2141
+ assert_cursor_max ( 2 )
2142
+ input_keys ( "\u{1F466} " ) # U+1F466 is boy "👦"
2143
+ assert_line ( "\u{1F468 200D 1F469 200D 1F467 200D 1F466} " )
2144
+ assert_byte_pointer_size ( "\u{1F468 200D 1F469 200D 1F467 200D 1F466} " )
2145
+ assert_cursor ( 2 )
2146
+ assert_cursor_max ( 2 )
2147
+ # U+1F468 U+200D U+1F469 U+200D U+1F467 U+200D U+1F466 is family: man, woman, girl, boy "👨👩👧👦"
2148
+ input_keys ( "\u{1F468 200D 1F469 200D 1F467 200D 1F466} " )
2149
+ assert_line ( "\u{1F468 200D 1F469 200D 1F467 200D 1F466 1F468 200D 1F469 200D 1F467 200D 1F466} " )
2150
+ assert_byte_pointer_size ( "\u{1F468 200D 1F469 200D 1F467 200D 1F466 1F468 200D 1F469 200D 1F467 200D 1F466} " )
2151
+ assert_cursor ( 4 )
2152
+ assert_cursor_max ( 4 )
2153
+ end
2154
+
2155
+ def test_ed_insert_for_include_valiation_selector
2156
+ # U+0030 U+FE00 is DIGIT ZERO + VARIATION SELECTOR-1 "0︀"
2157
+ input_keys ( "\u0030 " ) # U+0030 is DIGIT ZERO
2158
+ assert_line ( "\u0030 " )
2159
+ assert_byte_pointer_size ( "\u0030 " )
2160
+ assert_cursor ( 1 )
2161
+ assert_cursor_max ( 1 )
2162
+ input_keys ( "\uFE00 " ) # U+FE00 is VARIATION SELECTOR-1
2163
+ assert_line ( "\u{0030 FE00} " )
2164
+ assert_byte_pointer_size ( "\u{0030 FE00} " )
2165
+ assert_cursor ( 1 )
2166
+ assert_cursor_max ( 1 )
2167
+ end
2168
+ end
2169
+
2108
2170
=begin # TODO: move KeyStroke instance from Reline to LineEditor
2109
2171
def test_key_delete
2110
2172
input_keys('ab')
0 commit comments