mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			1457 lines
		
	
	
	
		
			38 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			1457 lines
		
	
	
	
		
			38 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
require_relative 'helper'
 | 
						|
 | 
						|
class Reline::KeyActor::ViInsert::Test < Reline::TestCase
 | 
						|
  def setup
 | 
						|
    Reline.send(:test_mode)
 | 
						|
    @prompt = '> '
 | 
						|
    @config = Reline::Config.new
 | 
						|
    @config.read_lines(<<~LINES.split(/(?<=\n)/))
 | 
						|
      set editing-mode vi
 | 
						|
    LINES
 | 
						|
    @encoding = Reline::IOGate.encoding
 | 
						|
    @line_editor = Reline::LineEditor.new(@config, @encoding)
 | 
						|
    @line_editor.reset(@prompt, encoding: @encoding)
 | 
						|
  end
 | 
						|
 | 
						|
  def teardown
 | 
						|
    Reline.test_reset
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_command_mode
 | 
						|
    input_keys("\C-[")
 | 
						|
    assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_command_mode_with_input
 | 
						|
    input_keys("abc\C-[")
 | 
						|
    assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode)
 | 
						|
    assert_line('abc')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_insert
 | 
						|
    assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
 | 
						|
    input_keys('i')
 | 
						|
    assert_line('i')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
 | 
						|
    input_keys("\C-[")
 | 
						|
    assert_line('i')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode)
 | 
						|
    input_keys('i')
 | 
						|
    assert_line('i')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_add
 | 
						|
    assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
 | 
						|
    input_keys('a')
 | 
						|
    assert_line('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
 | 
						|
    input_keys("\C-[")
 | 
						|
    assert_line('a')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode)
 | 
						|
    input_keys('a')
 | 
						|
    assert_line('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_insert_at_bol
 | 
						|
    input_keys('I')
 | 
						|
    assert_line('I')
 | 
						|
    assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
 | 
						|
    input_keys("12345\C-[hh")
 | 
						|
    assert_line('I12345')
 | 
						|
    assert_byte_pointer_size('I12')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode)
 | 
						|
    input_keys('I')
 | 
						|
    assert_line('I12345')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_add_at_eol
 | 
						|
    input_keys('A')
 | 
						|
    assert_line('A')
 | 
						|
    assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
 | 
						|
    input_keys("12345\C-[hh")
 | 
						|
    assert_line('A12345')
 | 
						|
    assert_byte_pointer_size('A12')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    assert_instance_of(Reline::KeyActor::ViCommand, @config.editing_mode)
 | 
						|
    input_keys('A')
 | 
						|
    assert_line('A12345')
 | 
						|
    assert_byte_pointer_size('A12345')
 | 
						|
    assert_cursor(6)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    assert_instance_of(Reline::KeyActor::ViInsert, @config.editing_mode)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_insert_one
 | 
						|
    input_keys('a')
 | 
						|
    assert_line('a')
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(1)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_insert_two
 | 
						|
    input_keys('ab')
 | 
						|
    assert_line('ab')
 | 
						|
    assert_byte_pointer_size('ab')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(2)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_insert_mbchar_one
 | 
						|
    input_keys('か')
 | 
						|
    assert_line('か')
 | 
						|
    assert_byte_pointer_size('か')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(2)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_insert_mbchar_two
 | 
						|
    input_keys('かき')
 | 
						|
    assert_line('かき')
 | 
						|
    assert_byte_pointer_size('かき')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(4)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_insert_for_mbchar_by_plural_code_points
 | 
						|
    input_keys("か\u3099")
 | 
						|
    assert_line("か\u3099")
 | 
						|
    assert_byte_pointer_size("か\u3099")
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(2)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_insert_for_plural_mbchar_by_plural_code_points
 | 
						|
    input_keys("か\u3099き\u3099")
 | 
						|
    assert_line("か\u3099き\u3099")
 | 
						|
    assert_byte_pointer_size("か\u3099き\u3099")
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(4)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_next_char
 | 
						|
    input_keys("abcdef\C-[0")
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('l')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('2l')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('abc')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(6)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_prev_char
 | 
						|
    input_keys("abcdef\C-[")
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('abcde')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('h')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('abcd')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('2h')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('ab')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(6)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_history
 | 
						|
    Reline::HISTORY.concat(%w{abc 123 AAA})
 | 
						|
    input_keys("\C-[")
 | 
						|
    assert_line('')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    input_keys('k')
 | 
						|
    assert_line('AAA')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    input_keys('2k')
 | 
						|
    assert_line('abc')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    input_keys('j')
 | 
						|
    assert_line('123')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    input_keys('2j')
 | 
						|
    assert_line('')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_paste_prev
 | 
						|
    input_keys("abcde\C-[3h")
 | 
						|
    assert_line('abcde')
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(5)
 | 
						|
    input_keys('P')
 | 
						|
    assert_line('abcde')
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(5)
 | 
						|
    input_keys('d$')
 | 
						|
    assert_line('a')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(1)
 | 
						|
    input_keys('P')
 | 
						|
    assert_line('bcdea')
 | 
						|
    assert_byte_pointer_size('bcd')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(5)
 | 
						|
    input_keys('2P')
 | 
						|
    assert_line('bcdbcdbcdeeea')
 | 
						|
    assert_byte_pointer_size('bcdbcdbcd')
 | 
						|
    assert_cursor(9)
 | 
						|
    assert_cursor_max(13)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_paste_next
 | 
						|
    input_keys("abcde\C-[3h")
 | 
						|
    assert_line('abcde')
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(5)
 | 
						|
    input_keys('p')
 | 
						|
    assert_line('abcde')
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(5)
 | 
						|
    input_keys('d$')
 | 
						|
    assert_line('a')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(1)
 | 
						|
    input_keys('p')
 | 
						|
    assert_line('abcde')
 | 
						|
    assert_byte_pointer_size('abcd')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(5)
 | 
						|
    input_keys('2p')
 | 
						|
    assert_line('abcdebcdebcde')
 | 
						|
    assert_byte_pointer_size('abcdebcdebcd')
 | 
						|
    assert_cursor(12)
 | 
						|
    assert_cursor_max(13)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_paste_prev_for_mbchar
 | 
						|
    input_keys("あいうえお\C-[3h")
 | 
						|
    assert_line('あいうえお')
 | 
						|
    assert_byte_pointer_size('あ')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('P')
 | 
						|
    assert_line('あいうえお')
 | 
						|
    assert_byte_pointer_size('あ')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('d$')
 | 
						|
    assert_line('あ')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    input_keys('P')
 | 
						|
    assert_line('いうえおあ')
 | 
						|
    assert_byte_pointer_size('いうえ')
 | 
						|
    assert_cursor(6)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('2P')
 | 
						|
    assert_line('いうえいうえいうえおおおあ')
 | 
						|
    assert_byte_pointer_size('いうえいうえいうえ')
 | 
						|
    assert_cursor(18)
 | 
						|
    assert_cursor_max(26)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_paste_next_for_mbchar
 | 
						|
    input_keys("あいうえお\C-[3h")
 | 
						|
    assert_line('あいうえお')
 | 
						|
    assert_byte_pointer_size('あ')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('p')
 | 
						|
    assert_line('あいうえお')
 | 
						|
    assert_byte_pointer_size('あ')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('d$')
 | 
						|
    assert_line('あ')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    input_keys('p')
 | 
						|
    assert_line('あいうえお')
 | 
						|
    assert_byte_pointer_size('あいうえ')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('2p')
 | 
						|
    assert_line('あいうえおいうえおいうえお')
 | 
						|
    assert_byte_pointer_size('あいうえおいうえおいうえ')
 | 
						|
    assert_cursor(24)
 | 
						|
    assert_cursor_max(26)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_paste_prev_for_mbchar_by_plural_code_points
 | 
						|
    input_keys("か\u3099き\u3099く\u3099け\u3099こ\u3099\C-[3h")
 | 
						|
    assert_line("か\u3099き\u3099く\u3099け\u3099こ\u3099")
 | 
						|
    assert_byte_pointer_size("か\u3099")
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('P')
 | 
						|
    assert_line("か\u3099き\u3099く\u3099け\u3099こ\u3099")
 | 
						|
    assert_byte_pointer_size("か\u3099")
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('d$')
 | 
						|
    assert_line("か\u3099")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    input_keys('P')
 | 
						|
    assert_line("き\u3099く\u3099け\u3099こ\u3099か\u3099")
 | 
						|
    assert_byte_pointer_size("き\u3099く\u3099け\u3099")
 | 
						|
    assert_cursor(6)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('2P')
 | 
						|
    assert_line("き\u3099く\u3099け\u3099き\u3099く\u3099け\u3099き\u3099く\u3099け\u3099こ\u3099こ\u3099こ\u3099か\u3099")
 | 
						|
    assert_byte_pointer_size("き\u3099く\u3099け\u3099き\u3099く\u3099け\u3099き\u3099く\u3099け\u3099")
 | 
						|
    assert_cursor(18)
 | 
						|
    assert_cursor_max(26)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_paste_next_for_mbchar_by_plural_code_points
 | 
						|
    input_keys("か\u3099き\u3099く\u3099け\u3099こ\u3099\C-[3h")
 | 
						|
    assert_line("か\u3099き\u3099く\u3099け\u3099こ\u3099")
 | 
						|
    assert_byte_pointer_size("か\u3099")
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('p')
 | 
						|
    assert_line("か\u3099き\u3099く\u3099け\u3099こ\u3099")
 | 
						|
    assert_byte_pointer_size("か\u3099")
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('d$')
 | 
						|
    assert_line("か\u3099")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    input_keys('p')
 | 
						|
    assert_line("か\u3099き\u3099く\u3099け\u3099こ\u3099")
 | 
						|
    assert_byte_pointer_size("か\u3099き\u3099く\u3099け\u3099")
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('2p')
 | 
						|
    assert_line("か\u3099き\u3099く\u3099け\u3099こ\u3099き\u3099く\u3099け\u3099こ\u3099き\u3099く\u3099け\u3099こ\u3099")
 | 
						|
    assert_byte_pointer_size("か\u3099き\u3099く\u3099け\u3099こ\u3099き\u3099く\u3099け\u3099こ\u3099き\u3099く\u3099け\u3099")
 | 
						|
    assert_cursor(24)
 | 
						|
    assert_cursor_max(26)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_prev_next_word
 | 
						|
    input_keys("aaa b{b}b ccc\C-[0")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('w')
 | 
						|
    assert_byte_pointer_size('aaa ')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('w')
 | 
						|
    assert_byte_pointer_size('aaa b')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('w')
 | 
						|
    assert_byte_pointer_size('aaa b{')
 | 
						|
    assert_cursor(6)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('w')
 | 
						|
    assert_byte_pointer_size('aaa b{b')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('w')
 | 
						|
    assert_byte_pointer_size('aaa b{b}')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('w')
 | 
						|
    assert_byte_pointer_size('aaa b{b}b ')
 | 
						|
    assert_cursor(10)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('w')
 | 
						|
    assert_byte_pointer_size('aaa b{b}b cc')
 | 
						|
    assert_cursor(12)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('b')
 | 
						|
    assert_byte_pointer_size('aaa b{b}b ')
 | 
						|
    assert_cursor(10)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('b')
 | 
						|
    assert_byte_pointer_size('aaa b{b}')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('b')
 | 
						|
    assert_byte_pointer_size('aaa b{b')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('b')
 | 
						|
    assert_byte_pointer_size('aaa b{')
 | 
						|
    assert_cursor(6)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('b')
 | 
						|
    assert_byte_pointer_size('aaa b')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('b')
 | 
						|
    assert_byte_pointer_size('aaa ')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('b')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('3w')
 | 
						|
    assert_byte_pointer_size('aaa b{')
 | 
						|
    assert_cursor(6)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('3w')
 | 
						|
    assert_byte_pointer_size('aaa b{b}b ')
 | 
						|
    assert_cursor(10)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('3w')
 | 
						|
    assert_byte_pointer_size('aaa b{b}b cc')
 | 
						|
    assert_cursor(12)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('3b')
 | 
						|
    assert_byte_pointer_size('aaa b{b')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('3b')
 | 
						|
    assert_byte_pointer_size('aaa ')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('3b')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(13)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_end_word
 | 
						|
    input_keys("aaa   b{b}}}b   ccc\C-[0")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('e')
 | 
						|
    assert_byte_pointer_size('aa')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('e')
 | 
						|
    assert_byte_pointer_size('aaa   ')
 | 
						|
    assert_cursor(6)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('e')
 | 
						|
    assert_byte_pointer_size('aaa   b')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('e')
 | 
						|
    assert_byte_pointer_size('aaa   b{')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('e')
 | 
						|
    assert_byte_pointer_size('aaa   b{b}}')
 | 
						|
    assert_cursor(11)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('e')
 | 
						|
    assert_byte_pointer_size('aaa   b{b}}}')
 | 
						|
    assert_cursor(12)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('e')
 | 
						|
    assert_byte_pointer_size('aaa   b{b}}}b   cc')
 | 
						|
    assert_cursor(18)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('e')
 | 
						|
    assert_byte_pointer_size('aaa   b{b}}}b   cc')
 | 
						|
    assert_cursor(18)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('03e')
 | 
						|
    assert_byte_pointer_size('aaa   b')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('3e')
 | 
						|
    assert_byte_pointer_size('aaa   b{b}}}')
 | 
						|
    assert_cursor(12)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('3e')
 | 
						|
    assert_byte_pointer_size('aaa   b{b}}}b   cc')
 | 
						|
    assert_cursor(18)
 | 
						|
    assert_cursor_max(19)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_prev_next_big_word
 | 
						|
    input_keys("aaa b{b}b ccc\C-[0")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('W')
 | 
						|
    assert_byte_pointer_size('aaa ')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('W')
 | 
						|
    assert_byte_pointer_size('aaa b{b}b ')
 | 
						|
    assert_cursor(10)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('W')
 | 
						|
    assert_byte_pointer_size('aaa b{b}b cc')
 | 
						|
    assert_cursor(12)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('B')
 | 
						|
    assert_byte_pointer_size('aaa b{b}b ')
 | 
						|
    assert_cursor(10)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('B')
 | 
						|
    assert_byte_pointer_size('aaa ')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('B')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('2W')
 | 
						|
    assert_byte_pointer_size('aaa b{b}b ')
 | 
						|
    assert_cursor(10)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('2W')
 | 
						|
    assert_byte_pointer_size('aaa b{b}b cc')
 | 
						|
    assert_cursor(12)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('2B')
 | 
						|
    assert_byte_pointer_size('aaa ')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('2B')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(13)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_end_big_word
 | 
						|
    input_keys("aaa   b{b}}}b   ccc\C-[0")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('E')
 | 
						|
    assert_byte_pointer_size('aa')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('E')
 | 
						|
    assert_byte_pointer_size('aaa   b{b}}}')
 | 
						|
    assert_cursor(12)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('E')
 | 
						|
    assert_byte_pointer_size('aaa   b{b}}}b   cc')
 | 
						|
    assert_cursor(18)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    input_keys('E')
 | 
						|
    assert_byte_pointer_size('aaa   b{b}}}b   cc')
 | 
						|
    assert_cursor(18)
 | 
						|
    assert_cursor_max(19)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_quoted_insert
 | 
						|
    input_keys("ab\C-v\C-acd")
 | 
						|
    assert_line("ab\C-acd")
 | 
						|
    assert_byte_pointer_size("ab\C-acd")
 | 
						|
    assert_cursor(6)
 | 
						|
    assert_cursor_max(6)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_quoted_insert_with_vi_arg
 | 
						|
    input_keys("ab\C-[3\C-v\C-aacd")
 | 
						|
    assert_line("a\C-a\C-a\C-abcd")
 | 
						|
    assert_byte_pointer_size("a\C-a\C-a\C-abcd")
 | 
						|
    assert_cursor(10)
 | 
						|
    assert_cursor_max(10)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_replace_char
 | 
						|
    input_keys("abcdef\C-[03l")
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('abc')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('rz')
 | 
						|
    assert_line('abczef')
 | 
						|
    assert_byte_pointer_size('abc')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('2rx')
 | 
						|
    assert_line('abcxxf')
 | 
						|
    assert_byte_pointer_size('abcxx')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(6)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_replace_char_with_mbchar
 | 
						|
    input_keys("あいうえお\C-[0l")
 | 
						|
    assert_line('あいうえお')
 | 
						|
    assert_byte_pointer_size('あ')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('rx')
 | 
						|
    assert_line('あxうえお')
 | 
						|
    assert_byte_pointer_size('あ')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(9)
 | 
						|
    input_keys('l2ry')
 | 
						|
    assert_line('あxyyお')
 | 
						|
    assert_byte_pointer_size('あxyy')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(7)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_next_char
 | 
						|
    input_keys("abcdef\C-[0")
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('fz')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('fe')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('abcd')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(6)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_to_next_char
 | 
						|
    input_keys("abcdef\C-[0")
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('tz')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('te')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('abc')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(6)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_prev_char
 | 
						|
    input_keys("abcdef\C-[")
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('abcde')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('Fz')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('abcde')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('Fa')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(6)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_to_prev_char
 | 
						|
    input_keys("abcdef\C-[")
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('abcde')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('Tz')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('abcde')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys('Ta')
 | 
						|
    assert_line('abcdef')
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(6)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_delete_next_char
 | 
						|
    input_keys("abc\C-[h")
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('abc')
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    assert_line('ac')
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(1)
 | 
						|
    assert_line('a')
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_delete_next_char_for_mbchar
 | 
						|
    input_keys("あいう\C-[h")
 | 
						|
    assert_byte_pointer_size('あ')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    assert_line('あいう')
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('あ')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(4)
 | 
						|
    assert_line('あう')
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    assert_line('あ')
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_delete_next_char_for_mbchar_by_plural_code_points
 | 
						|
    input_keys("か\u3099き\u3099く\u3099\C-[h")
 | 
						|
    assert_byte_pointer_size("か\u3099")
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    assert_line("か\u3099き\u3099く\u3099")
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size("か\u3099")
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(4)
 | 
						|
    assert_line("か\u3099く\u3099")
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    assert_line("か\u3099")
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
    input_keys('x')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_delete_prev_char
 | 
						|
    input_keys('ab')
 | 
						|
    assert_byte_pointer_size('ab')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    input_keys("\C-h")
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(1)
 | 
						|
    assert_line('a')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_delete_prev_char_for_mbchar
 | 
						|
    input_keys('かき')
 | 
						|
    assert_byte_pointer_size('かき')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(4)
 | 
						|
    input_keys("\C-h")
 | 
						|
    assert_byte_pointer_size('か')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    assert_line('か')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_delete_prev_char_for_mbchar_by_plural_code_points
 | 
						|
    input_keys("か\u3099き\u3099")
 | 
						|
    assert_byte_pointer_size("か\u3099き\u3099")
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(4)
 | 
						|
    input_keys("\C-h")
 | 
						|
    assert_byte_pointer_size("か\u3099")
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    assert_line("か\u3099")
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_delete_prev_char
 | 
						|
    input_keys("abcdefg\C-[h")
 | 
						|
    assert_byte_pointer_size('abcde')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    assert_line('abcdefg')
 | 
						|
    input_keys('X')
 | 
						|
    assert_byte_pointer_size('abcd')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    assert_line('abcdfg')
 | 
						|
    input_keys('3X')
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('afg')
 | 
						|
    input_keys('p')
 | 
						|
    assert_byte_pointer_size('abcd')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    assert_line('afbcdg')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_delete_prev_word
 | 
						|
    input_keys('abc def{bbb}ccc')
 | 
						|
    assert_byte_pointer_size('abc def{bbb}ccc')
 | 
						|
    assert_cursor(15)
 | 
						|
    assert_cursor_max(15)
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size('abc def{bbb}')
 | 
						|
    assert_cursor(12)
 | 
						|
    assert_cursor_max(12)
 | 
						|
    assert_line('abc def{bbb}')
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size('abc def{')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(8)
 | 
						|
    assert_line('abc def{')
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size('abc ')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(4)
 | 
						|
    assert_line('abc ')
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_delete_prev_word_for_mbchar
 | 
						|
    input_keys('あいう かきく{さしす}たちつ')
 | 
						|
    assert_byte_pointer_size('あいう かきく{さしす}たちつ')
 | 
						|
    assert_cursor(27)
 | 
						|
    assert_cursor_max(27)
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size('あいう かきく{さしす}')
 | 
						|
    assert_cursor(21)
 | 
						|
    assert_cursor_max(21)
 | 
						|
    assert_line('あいう かきく{さしす}')
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size('あいう かきく{')
 | 
						|
    assert_cursor(14)
 | 
						|
    assert_cursor_max(14)
 | 
						|
    assert_line('あいう かきく{')
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size('あいう ')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    assert_line('あいう ')
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_delete_prev_word_for_mbchar_by_plural_code_points
 | 
						|
    input_keys("あいう か\u3099き\u3099く\u3099{さしす}たちつ")
 | 
						|
    assert_byte_pointer_size("あいう か\u3099き\u3099く\u3099{さしす}たちつ")
 | 
						|
    assert_cursor(27)
 | 
						|
    assert_cursor_max(27)
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size("あいう か\u3099き\u3099く\u3099{さしす}")
 | 
						|
    assert_cursor(21)
 | 
						|
    assert_cursor_max(21)
 | 
						|
    assert_line("あいう か\u3099き\u3099く\u3099{さしす}")
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size("あいう か\u3099き\u3099く\u3099{")
 | 
						|
    assert_cursor(14)
 | 
						|
    assert_cursor_max(14)
 | 
						|
    assert_line("あいう か\u3099き\u3099く\u3099{")
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size('あいう ')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    assert_line('あいう ')
 | 
						|
    input_keys("\C-w")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_newline_with_cr
 | 
						|
    input_keys('ab')
 | 
						|
    assert_byte_pointer_size('ab')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    refute(@line_editor.finished?)
 | 
						|
    input_keys("\C-m")
 | 
						|
    assert_line('ab')
 | 
						|
    assert(@line_editor.finished?)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_newline_with_lf
 | 
						|
    input_keys('ab')
 | 
						|
    assert_byte_pointer_size('ab')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    refute(@line_editor.finished?)
 | 
						|
    input_keys("\C-j")
 | 
						|
    assert_line('ab')
 | 
						|
    assert(@line_editor.finished?)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_list_or_eof
 | 
						|
    input_keys("\C-d") # quit from inputing
 | 
						|
    assert_line(nil)
 | 
						|
    assert(@line_editor.finished?)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_list_or_eof_with_non_empty_line
 | 
						|
    input_keys('ab')
 | 
						|
    assert_byte_pointer_size('ab')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(2)
 | 
						|
    refute(@line_editor.finished?)
 | 
						|
    input_keys("\C-d")
 | 
						|
    assert_line('ab')
 | 
						|
    assert(@line_editor.finished?)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_completion_journey
 | 
						|
    @line_editor.completion_proc = proc { |word|
 | 
						|
      %w{
 | 
						|
        foo_bar
 | 
						|
        foo_bar_baz
 | 
						|
      }.map { |i|
 | 
						|
        i.encode(@encoding)
 | 
						|
      }
 | 
						|
    }
 | 
						|
    input_keys('foo')
 | 
						|
    assert_byte_pointer_size('foo')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('foo')
 | 
						|
    input_keys("\C-n")
 | 
						|
    assert_byte_pointer_size('foo_bar')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    assert_line('foo_bar')
 | 
						|
    input_keys("\C-n")
 | 
						|
    assert_byte_pointer_size('foo_bar_baz')
 | 
						|
    assert_cursor(11)
 | 
						|
    assert_cursor_max(11)
 | 
						|
    assert_line('foo_bar_baz')
 | 
						|
    input_keys("\C-n")
 | 
						|
    assert_byte_pointer_size('foo')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('foo')
 | 
						|
    input_keys("\C-n")
 | 
						|
    assert_byte_pointer_size('foo_bar')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    assert_line('foo_bar')
 | 
						|
    input_keys("_\C-n")
 | 
						|
    assert_byte_pointer_size('foo_bar_baz')
 | 
						|
    assert_cursor(11)
 | 
						|
    assert_cursor_max(11)
 | 
						|
    assert_line('foo_bar_baz')
 | 
						|
    input_keys("\C-n")
 | 
						|
    assert_byte_pointer_size('foo_bar_')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(8)
 | 
						|
    assert_line('foo_bar_')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_completion_journey_reverse
 | 
						|
    @line_editor.completion_proc = proc { |word|
 | 
						|
      %w{
 | 
						|
        foo_bar
 | 
						|
        foo_bar_baz
 | 
						|
      }.map { |i|
 | 
						|
        i.encode(@encoding)
 | 
						|
      }
 | 
						|
    }
 | 
						|
    input_keys('foo')
 | 
						|
    assert_byte_pointer_size('foo')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('foo')
 | 
						|
    input_keys("\C-p")
 | 
						|
    assert_byte_pointer_size('foo_bar_baz')
 | 
						|
    assert_cursor(11)
 | 
						|
    assert_cursor_max(11)
 | 
						|
    assert_line('foo_bar_baz')
 | 
						|
    input_keys("\C-p")
 | 
						|
    assert_byte_pointer_size('foo_bar')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    assert_line('foo_bar')
 | 
						|
    input_keys("\C-p")
 | 
						|
    assert_byte_pointer_size('foo')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('foo')
 | 
						|
    input_keys("\C-p")
 | 
						|
    assert_byte_pointer_size('foo_bar_baz')
 | 
						|
    assert_cursor(11)
 | 
						|
    assert_cursor_max(11)
 | 
						|
    assert_line('foo_bar_baz')
 | 
						|
    input_keys("\C-h\C-p")
 | 
						|
    assert_byte_pointer_size('foo_bar_baz')
 | 
						|
    assert_cursor(11)
 | 
						|
    assert_cursor_max(11)
 | 
						|
    assert_line('foo_bar_baz')
 | 
						|
    input_keys("\C-p")
 | 
						|
    assert_byte_pointer_size('foo_bar_ba')
 | 
						|
    assert_cursor(10)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    assert_line('foo_bar_ba')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_completion_journey_in_middle_of_line
 | 
						|
    @line_editor.completion_proc = proc { |word|
 | 
						|
      %w{
 | 
						|
        foo_bar
 | 
						|
        foo_bar_baz
 | 
						|
      }.map { |i|
 | 
						|
        i.encode(@encoding)
 | 
						|
      }
 | 
						|
    }
 | 
						|
    input_keys('abcde fo ABCDE')
 | 
						|
    assert_line('abcde fo ABCDE')
 | 
						|
    input_keys("\C-[" + 'h' * 5 + "i\C-n")
 | 
						|
    assert_byte_pointer_size('abcde foo_bar')
 | 
						|
    assert_cursor(13)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    assert_line('abcde foo_bar ABCDE')
 | 
						|
    input_keys("\C-n")
 | 
						|
    assert_byte_pointer_size('abcde foo_bar_baz')
 | 
						|
    assert_cursor(17)
 | 
						|
    assert_cursor_max(23)
 | 
						|
    assert_line('abcde foo_bar_baz ABCDE')
 | 
						|
    input_keys("\C-n")
 | 
						|
    assert_byte_pointer_size('abcde fo')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(14)
 | 
						|
    assert_line('abcde fo ABCDE')
 | 
						|
    input_keys("\C-n")
 | 
						|
    assert_byte_pointer_size('abcde foo_bar')
 | 
						|
    assert_cursor(13)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    assert_line('abcde foo_bar ABCDE')
 | 
						|
    input_keys("_\C-n")
 | 
						|
    assert_byte_pointer_size('abcde foo_bar_baz')
 | 
						|
    assert_cursor(17)
 | 
						|
    assert_cursor_max(23)
 | 
						|
    assert_line('abcde foo_bar_baz ABCDE')
 | 
						|
    input_keys("\C-n")
 | 
						|
    assert_byte_pointer_size('abcde foo_bar_')
 | 
						|
    assert_cursor(14)
 | 
						|
    assert_cursor_max(20)
 | 
						|
    assert_line('abcde foo_bar_ ABCDE')
 | 
						|
    input_keys("\C-n")
 | 
						|
    assert_byte_pointer_size('abcde foo_bar_baz')
 | 
						|
    assert_cursor(17)
 | 
						|
    assert_cursor_max(23)
 | 
						|
    assert_line('abcde foo_bar_baz ABCDE')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_completion
 | 
						|
    @line_editor.completion_proc = proc { |word|
 | 
						|
      %w{
 | 
						|
        foo_bar
 | 
						|
        foo_bar_baz
 | 
						|
      }.map { |i|
 | 
						|
        i.encode(@encoding)
 | 
						|
      }
 | 
						|
    }
 | 
						|
    input_keys('foo')
 | 
						|
    assert_byte_pointer_size('foo')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('foo')
 | 
						|
    input_keys("\C-i")
 | 
						|
    assert_byte_pointer_size('foo_bar')
 | 
						|
    assert_cursor(7)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    assert_line('foo_bar')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_completion_with_disable_completion
 | 
						|
    @config.disable_completion = true
 | 
						|
    @line_editor.completion_proc = proc { |word|
 | 
						|
      %w{
 | 
						|
        foo_bar
 | 
						|
        foo_bar_baz
 | 
						|
      }.map { |i|
 | 
						|
        i.encode(@encoding)
 | 
						|
      }
 | 
						|
    }
 | 
						|
    input_keys('foo')
 | 
						|
    assert_byte_pointer_size('foo')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('foo')
 | 
						|
    input_keys("\C-i")
 | 
						|
    assert_byte_pointer_size('foo')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('foo')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_first_print
 | 
						|
    input_keys("abcde\C-[^")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(5)
 | 
						|
    input_keys("0\C-ki")
 | 
						|
    input_keys(" abcde\C-[^")
 | 
						|
    assert_byte_pointer_size(' ')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys("0\C-ki")
 | 
						|
    input_keys("   abcde  ABCDE  \C-[^")
 | 
						|
    assert_byte_pointer_size('   ')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(17)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_move_to_beg
 | 
						|
    input_keys("abcde\C-[0")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(5)
 | 
						|
    input_keys("0\C-ki")
 | 
						|
    input_keys(" abcde\C-[0")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(6)
 | 
						|
    input_keys("0\C-ki")
 | 
						|
    input_keys("   abcde  ABCDE  \C-[0")
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(17)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_delete_meta
 | 
						|
    input_keys("aaa bbb ccc ddd eee\C-[02w")
 | 
						|
    assert_byte_pointer_size('aaa bbb ')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    assert_line('aaa bbb ccc ddd eee')
 | 
						|
    input_keys('dw')
 | 
						|
    assert_byte_pointer_size('aaa bbb ')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(15)
 | 
						|
    assert_line('aaa bbb ddd eee')
 | 
						|
    input_keys('db')
 | 
						|
    assert_byte_pointer_size('aaa ')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(11)
 | 
						|
    assert_line('aaa ddd eee')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_delete_meta_with_vi_next_word_at_eol
 | 
						|
    input_keys("foo bar\C-[0w")
 | 
						|
    assert_byte_pointer_size('foo ')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    assert_line('foo bar')
 | 
						|
    input_keys('w')
 | 
						|
    assert_byte_pointer_size('foo ba')
 | 
						|
    assert_cursor(6)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    assert_line('foo bar')
 | 
						|
    input_keys('0dw')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('bar')
 | 
						|
    input_keys('dw')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_delete_meta_with_vi_next_char
 | 
						|
    input_keys("aaa bbb ccc ___ ddd\C-[02w")
 | 
						|
    assert_byte_pointer_size('aaa bbb ')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    assert_line('aaa bbb ccc ___ ddd')
 | 
						|
    input_keys('df_')
 | 
						|
    assert_byte_pointer_size('aaa bbb ')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(14)
 | 
						|
    assert_line('aaa bbb __ ddd')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_delete_meta_with_arg
 | 
						|
    input_keys("aaa bbb ccc\C-[02w")
 | 
						|
    assert_byte_pointer_size('aaa bbb ')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(11)
 | 
						|
    assert_line('aaa bbb ccc')
 | 
						|
    input_keys('2dl')
 | 
						|
    assert_byte_pointer_size('aaa bbb ')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(9)
 | 
						|
    assert_line('aaa bbb c')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_change_meta
 | 
						|
    input_keys("aaa bbb ccc ddd eee\C-[02w")
 | 
						|
    assert_byte_pointer_size('aaa bbb ')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(19)
 | 
						|
    assert_line('aaa bbb ccc ddd eee')
 | 
						|
    input_keys('cwaiueo')
 | 
						|
    assert_byte_pointer_size('aaa bbb aiueo')
 | 
						|
    assert_cursor(13)
 | 
						|
    assert_cursor_max(21)
 | 
						|
    assert_line('aaa bbb aiueo ddd eee')
 | 
						|
    input_keys("\C-[")
 | 
						|
    assert_byte_pointer_size('aaa bbb aiue')
 | 
						|
    assert_cursor(12)
 | 
						|
    assert_cursor_max(21)
 | 
						|
    assert_line('aaa bbb aiueo ddd eee')
 | 
						|
    input_keys('cb')
 | 
						|
    assert_byte_pointer_size('aaa bbb ')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(17)
 | 
						|
    assert_line('aaa bbb o ddd eee')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_change_meta_with_vi_next_word
 | 
						|
    input_keys("foo  bar  baz\C-[0w")
 | 
						|
    assert_byte_pointer_size('foo  ')
 | 
						|
    assert_cursor(5)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    assert_line('foo  bar  baz')
 | 
						|
    input_keys('cwhoge')
 | 
						|
    assert_byte_pointer_size('foo  hoge')
 | 
						|
    assert_cursor(9)
 | 
						|
    assert_cursor_max(14)
 | 
						|
    assert_line('foo  hoge  baz')
 | 
						|
    input_keys("\C-[")
 | 
						|
    assert_byte_pointer_size('foo  hog')
 | 
						|
    assert_cursor(8)
 | 
						|
    assert_cursor_max(14)
 | 
						|
    assert_line('foo  hoge  baz')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_unimplemented_vi_command_should_be_no_op
 | 
						|
    input_keys("abc\C-[h")
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('abc')
 | 
						|
    input_keys('@')
 | 
						|
    assert_byte_pointer_size('a')
 | 
						|
    assert_cursor(1)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    assert_line('abc')
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_yank
 | 
						|
    input_keys("foo bar\C-[0")
 | 
						|
    assert_line('foo bar')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    input_keys('y3l')
 | 
						|
    assert_line('foo bar')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    input_keys('P')
 | 
						|
    assert_line('foofoo bar')
 | 
						|
    assert_byte_pointer_size('fo')
 | 
						|
    assert_cursor(2)
 | 
						|
    assert_cursor_max(10)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_end_word_with_operator
 | 
						|
    input_keys("foo bar\C-[0")
 | 
						|
    assert_line('foo bar')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    input_keys('de')
 | 
						|
    assert_line(' bar')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(4)
 | 
						|
    input_keys('de')
 | 
						|
    assert_line('')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    input_keys('de')
 | 
						|
    assert_line('')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_end_big_word_with_operator
 | 
						|
    input_keys("aaa   b{b}}}b\C-[0")
 | 
						|
    assert_line('aaa   b{b}}}b')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(13)
 | 
						|
    input_keys('dE')
 | 
						|
    assert_line('   b{b}}}b')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(10)
 | 
						|
    input_keys('dE')
 | 
						|
    assert_line('')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    input_keys('dE')
 | 
						|
    assert_line('')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_next_char_with_operator
 | 
						|
    input_keys("foo bar\C-[0")
 | 
						|
    assert_line('foo bar')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(7)
 | 
						|
    input_keys('df ')
 | 
						|
    assert_line('bar')
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(3)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_pasting
 | 
						|
    start_pasting
 | 
						|
    input_keys('ab')
 | 
						|
    finish_pasting
 | 
						|
    input_keys('c')
 | 
						|
    assert_line('abc')
 | 
						|
    assert_byte_pointer_size('abc')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(3)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_pasting_fullwidth
 | 
						|
    start_pasting
 | 
						|
    input_keys('あ')
 | 
						|
    finish_pasting
 | 
						|
    input_keys('い')
 | 
						|
    assert_line('あい')
 | 
						|
    assert_byte_pointer_size('あい')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(4)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_ed_delete_next_char_at_eol
 | 
						|
    input_keys('"あ"')
 | 
						|
    assert_line('"あ"')
 | 
						|
    assert_byte_pointer_size('"あ"')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(4)
 | 
						|
    input_keys("\C-[")
 | 
						|
    assert_line('"あ"')
 | 
						|
    assert_byte_pointer_size('"あ')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(4)
 | 
						|
    input_keys('xa"')
 | 
						|
    assert_line('"あ"')
 | 
						|
    assert_byte_pointer_size('"あ"')
 | 
						|
    assert_cursor(4)
 | 
						|
    assert_cursor_max(4)
 | 
						|
  end
 | 
						|
 | 
						|
  def test_vi_kill_line_prev
 | 
						|
    input_keys("\C-u", false)
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
    input_keys('abc')
 | 
						|
    assert_byte_pointer_size('abc')
 | 
						|
    assert_cursor(3)
 | 
						|
    assert_cursor_max(3)
 | 
						|
    input_keys("\C-u", false)
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(0)
 | 
						|
    assert_line('')
 | 
						|
    input_keys('abc')
 | 
						|
    input_keys("\C-[\C-u", false)
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(1)
 | 
						|
    assert_line('c')
 | 
						|
    input_keys("\C-u", false)
 | 
						|
    assert_byte_pointer_size('')
 | 
						|
    assert_cursor(0)
 | 
						|
    assert_cursor_max(1)
 | 
						|
    assert_line('c')
 | 
						|
  end
 | 
						|
end
 |