home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_2361 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  68.7 KB  |  2,185 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import sys
  5. import unittest
  6. import pdb
  7. sys.path.append('../..')
  8. from pyreadline.modes.vi import *
  9. from pyreadline import keysyms
  10. from pyreadline.lineeditor import lineobj
  11. from pyreadline.logger import log_sock
  12. import pyreadline.logger as logger
  13. from common import *
  14. from common import *
  15.  
  16. class ViModeTest(ViMode):
  17.     tested_commands = { }
  18.     
  19.     def __init__(self):
  20.         ViMode.__init__(self, MockReadline())
  21.         self.mock_console = MockConsole()
  22.         self.init_editing_mode(None)
  23.         self.vi_set_insert_mode(True)
  24.         self.lst_completions = []
  25.         self.completer = self.mock_completer
  26.         self.completer_delims = ' '
  27.         self.tabstop = 4
  28.  
  29.     
  30.     def get_mock_console(self):
  31.         return self.mock_console
  32.  
  33.     console = property(get_mock_console)
  34.     
  35.     def _set_line(self, text):
  36.         self.l_buffer.set_line(text)
  37.  
  38.     
  39.     def get_line(self):
  40.         return self.l_buffer.get_line_text()
  41.  
  42.     line = property(get_line)
  43.     
  44.     def get_line_cursor(self):
  45.         return self.l_buffer.point
  46.  
  47.     line_cursor = property(get_line_cursor)
  48.     
  49.     def input(self, keytext):
  50.         for key in lst_key:
  51.             (keyinfo, event) = keytext_to_keyinfo_and_event(key)
  52.             dispatch_func = self.key_dispatch.get(keyinfo.tuple(), self.vi_key)
  53.             self.tested_commands[dispatch_func.__name__] = dispatch_func
  54.             dispatch_func(event)
  55.         
  56.  
  57.     
  58.     def vi_accept_line(self, e):
  59.         if ViMode.vi_accept_line(self, e):
  60.             self.l_buffer.reset_line()
  61.         
  62.  
  63.     
  64.     def mock_completer(self, text, state):
  65.         return self.lst_completions[state]
  66.  
  67.  
  68.  
  69. class ViExternalEditorTest(ViExternalEditor):
  70.     
  71.     def __init__(self, line):
  72.         import StringIO
  73.         self.sio_write = StringIO.StringIO()
  74.         self.sio_read = StringIO.StringIO('qwerty after')
  75.         ViExternalEditor.__init__(self, line)
  76.  
  77.     
  78.     def get_tempfile(self):
  79.         return 'temp.py'
  80.  
  81.     
  82.     def get_editor(self):
  83.         return 'vim.exe'
  84.  
  85.     
  86.     def file_open(self, filename, mode):
  87.         if mode == 'w':
  88.             return self.sio_write
  89.         return self.sio_read
  90.  
  91.     
  92.     def file_remove(self, filename):
  93.         self.remove = filename
  94.  
  95.     
  96.     def run_command(self, command):
  97.         self.command = command
  98.  
  99.  
  100.  
  101. class Tests(unittest.TestCase):
  102.     
  103.     def test_keyinfo(self):
  104.         (keyinfo, event) = keytext_to_keyinfo_and_event('"d"')
  105.         self.assertEqual('d', event.char)
  106.         (keyinfo, event) = keytext_to_keyinfo_and_event('"D"')
  107.         self.assertEqual('D', event.char)
  108.         (keyinfo, event) = keytext_to_keyinfo_and_event('"$"')
  109.         self.assertEqual('$', event.char)
  110.         (keyinfo, event) = keytext_to_keyinfo_and_event('Escape')
  111.         self.assertEqual('\x1b', event.char)
  112.  
  113.     
  114.     def test_simple(self):
  115.         r = ViModeTest()
  116.         r._set_line('abc')
  117.         self.assert_(r.vi_is_insert_mode)
  118.         r.input('"d"')
  119.         self.assert_(r.vi_is_insert_mode)
  120.         self.assertEqual('abcd', r.line)
  121.         r.input('Escape')
  122.         self.assert_(not (r.vi_is_insert_mode))
  123.         self.assertEqual('abcd', r.line)
  124.         r.input('"i"')
  125.         self.assert_(r.vi_is_insert_mode)
  126.         self.assertEqual('abcd', r.line)
  127.         r.input('"x"')
  128.         self.assertEqual('abcxd', r.line)
  129.         r.input('"y"')
  130.         self.assertEqual('abcxyd', r.line)
  131.  
  132.     
  133.     def test_begin_and_end(self):
  134.         r = ViModeTest()
  135.         r._set_line('abc')
  136.         self.assertEqual(3, r.line_cursor)
  137.         r.input('Escape')
  138.         self.assertEqual(2, r.line_cursor)
  139.         r.input('"0"')
  140.         self.assertEqual(0, r.line_cursor)
  141.         r.input('"$"')
  142.         self.assertEqual(2, r.line_cursor)
  143.         r.input('"^"')
  144.         self.assertEqual(0, r.line_cursor)
  145.  
  146.     
  147.     def test_history_alpha(self):
  148.         r = ViModeTest()
  149.         r.add_history('abc')
  150.         r.add_history('def')
  151.         r._set_line('ghi')
  152.         r.input('Escape')
  153.         r.input('"k"')
  154.         self.assertEqual(0, r.line_cursor)
  155.         self.assertEqual('def', r.line)
  156.         r.input('"k"')
  157.         self.assertEqual('abc', r.line)
  158.         self.assertEqual(0, r.console.bell_count)
  159.         r.input('"k"')
  160.         self.assertEqual('abc', r.line)
  161.         r.input('"j"')
  162.         self.assertEqual('def', r.line)
  163.         self.assertEqual(0, r.line_cursor)
  164.         r.input('"j"')
  165.         self.assertEqual('ghi', r.line)
  166.         r.input('"j"')
  167.         self.assertEqual('ghi', r.line)
  168.         self.assertEqual(2, r.line_cursor)
  169.  
  170.     
  171.     def test_history_arrow(self):
  172.         r = ViModeTest()
  173.         r.add_history('abc')
  174.         r.add_history('def')
  175.         r.input('"ghi"')
  176.         self.assertEqual(3, r.line_cursor)
  177.         r.input('Up')
  178.         self.assertEqual(3, r.line_cursor)
  179.         self.assertEqual('def', r.line)
  180.         r.input('Up')
  181.         self.assertEqual(3, r.line_cursor)
  182.         self.assertEqual('abc', r.line)
  183.         self.assertEqual(0, r.console.bell_count)
  184.         r.input('Up')
  185.         self.assertEqual('abc', r.line)
  186.         r.input('Down')
  187.         self.assertEqual('def', r.line)
  188.         self.assertEqual(3, r.line_cursor)
  189.         r.input('Down')
  190.         self.assertEqual('ghi', r.line)
  191.         self.assertEqual(3, r.line_cursor)
  192.         r.input('Down')
  193.         self.assertEqual('ghi', r.line)
  194.         self.assertEqual(3, r.line_cursor)
  195.  
  196.     
  197.     def test_history_arrow_after_undo(self):
  198.         r = ViModeTest()
  199.         r.input('"aaa"')
  200.         r.input('Return')
  201.         r.input('"bbb ccc"')
  202.         r.input('Escape')
  203.         r.input('"F D"')
  204.         self.assertEqual(r.line, 'bbb')
  205.         r.input('"u"')
  206.         self.assertEqual(r.line, 'bbb ccc')
  207.         r.input('Return')
  208.         self.assertEqual(r.console.bell_count, 0)
  209.         r.input('"ddd"')
  210.         r.input('Down')
  211.         self.assertEqual(r.line, 'ddd')
  212.  
  213.     
  214.     def test_vi_is_word(self):
  215.         self.assert_(vi_is_word('a'))
  216.         self.assert_(not vi_is_word(' '))
  217.  
  218.     
  219.     def test_pos_word_short(self):
  220.         self.assertEqual(0, vi_pos_word_short(''))
  221.         self.assertEqual(4, vi_pos_word_short('abc def '))
  222.         self.assertEqual(4, vi_pos_word_short('abc def ', 2))
  223.         self.assertEqual(4, vi_pos_word_short('abc def ', 3))
  224.         self.assertEqual(8, vi_pos_word_short('abc def ', 4))
  225.         self.assertEqual(3, vi_pos_word_short('abc.def '))
  226.         self.assertEqual(5, vi_pos_word_short('abc..def ', 3))
  227.         self.assertEqual(8, vi_pos_word_short('ab  cd  ef  gh', count = 2))
  228.         self.assertEqual(8, vi_pos_word_short('ab  cd  ef  gh', 1, 2))
  229.         self.assertEqual(8, vi_pos_word_short('ab  cd  ef  gh', 3, 2))
  230.         self.assertEqual(14, vi_pos_word_short('ab  cd  ef  gh', count = 10))
  231.  
  232.     
  233.     def test_pos_word_long(self):
  234.         self.assertEqual(0, vi_pos_word_long(''))
  235.         self.assertEqual(4, vi_pos_word_long('abc def '))
  236.         self.assertEqual(4, vi_pos_word_long('abc def ', 2))
  237.         self.assertEqual(4, vi_pos_word_long('abc def ', 3))
  238.         self.assertEqual(8, vi_pos_word_long('abc def ', 4))
  239.         self.assertEqual(8, vi_pos_word_long('abc.def '))
  240.         self.assertEqual(9, vi_pos_word_long('abc..def ', 3))
  241.         self.assertEqual(10, vi_pos_word_long('a.b  c.d  e.f  g.h', count = 2))
  242.         self.assertEqual(10, vi_pos_word_long('a.b  c.d  e.f  g.h', 2, 2))
  243.         self.assertEqual(10, vi_pos_word_long('a.b  c.d  e.f  g.h', 4, 2))
  244.  
  245.     
  246.     def test_pos_end_short(self):
  247.         self.assertEqual(0, vi_pos_end_short(''))
  248.         self.assertEqual(2, vi_pos_end_short('abc def '))
  249.         self.assertEqual(6, vi_pos_end_short('abc def ', 2))
  250.         self.assertEqual(6, vi_pos_end_short('abc def ', 3))
  251.         self.assertEqual(6, vi_pos_end_short('abc def ', 4))
  252.         self.assertEqual(2, vi_pos_end_short('abc.def '))
  253.         self.assertEqual(7, vi_pos_end_short('abc  ...  def ', 3))
  254.         self.assertEqual(7, vi_pos_end_short('abc  ...  def ', 5))
  255.         self.assertEqual(12, vi_pos_end_short('abc  ...  def ', 8))
  256.         self.assertEqual(5, vi_pos_end_short('ab  cd  ef  gh', count = 2))
  257.         self.assertEqual(9, vi_pos_end_short('ab  cd  ef  gh', 1, 2))
  258.         self.assertEqual(9, vi_pos_end_short('ab  cd  ef  gh', 3, 2))
  259.  
  260.     
  261.     def test_pos_end_long(self):
  262.         self.assertEqual(0, vi_pos_end_long(''))
  263.         self.assertEqual(2, vi_pos_end_long('abc def '))
  264.         self.assertEqual(6, vi_pos_end_long('abc def ', 2))
  265.         self.assertEqual(6, vi_pos_end_long('abc def ', 3))
  266.         self.assertEqual(6, vi_pos_end_long('abc def ', 4))
  267.         self.assertEqual(6, vi_pos_end_long('abc.def '))
  268.         self.assertEqual(10, vi_pos_end_long('  abc...def '))
  269.         self.assertEqual(10, vi_pos_end_long('abc  ...def ', 5))
  270.         self.assertEqual(7, vi_pos_end_long('a.b  c.d  e.f  g.h', count = 2))
  271.         self.assertEqual(12, vi_pos_end_long('a.b  c.d  e.f  g.h', 2, 2))
  272.         self.assertEqual(12, vi_pos_end_long('a.b  c.d  e.f  g.h', 4, 2))
  273.  
  274.     
  275.     def test_pos_back_short(self):
  276.         self.assertEqual(0, vi_pos_back_short(''))
  277.         self.assertEqual(4, vi_pos_back_short('abc def', 6))
  278.         self.assertEqual(4, vi_pos_back_short('abc def', 5))
  279.         self.assertEqual(0, vi_pos_back_short('abc def', 4))
  280.         self.assertEqual(0, vi_pos_back_short('abc def', 3))
  281.         self.assertEqual(8, vi_pos_back_short('abc  ...def ', 11))
  282.         self.assertEqual(5, vi_pos_back_short('abc  ...def ', 8))
  283.         self.assertEqual(0, vi_pos_back_short('abc  ...def ', 5))
  284.         self.assertEqual(0, vi_pos_back_short('abc  ...def '))
  285.         self.assertEqual(8, vi_pos_back_short('abc  def... ', 11))
  286.         self.assertEqual(5, vi_pos_back_short('abc  def... ', 8))
  287.         self.assertEqual(0, vi_pos_back_short('abc  def... ', 5))
  288.         self.assertEqual(11, vi_pos_back_short('abc def... ghi...', 16, count = 2))
  289.         self.assertEqual(0, vi_pos_back_short('abc def... ghi...', 11, count = 3))
  290.  
  291.     
  292.     def test_pos_back_long(self):
  293.         self.assertEqual(0, vi_pos_back_long(''))
  294.         self.assertEqual(4, vi_pos_back_long('abc def', 6))
  295.         self.assertEqual(4, vi_pos_back_long('abc def', 5))
  296.         self.assertEqual(0, vi_pos_back_long('abc def', 4))
  297.         self.assertEqual(0, vi_pos_back_long('abc def', 3))
  298.         self.assertEqual(5, vi_pos_back_long('abc  ...def ', 11))
  299.         self.assertEqual(0, vi_pos_back_long('abc  ...def ', 5))
  300.         self.assertEqual(0, vi_pos_back_long('abc  ...def '))
  301.         self.assertEqual(5, vi_pos_back_long('abc  def... ', 11))
  302.         self.assertEqual(0, vi_pos_back_long('abc  def... ', 5))
  303.         self.assertEqual(4, vi_pos_back_long('abc def... ghi...', 16, count = 2))
  304.  
  305.     
  306.     def test_pos_find_char_forward(self):
  307.         self.assertEqual(-1, vi_pos_find_char_forward('', 'x'))
  308.         self.assertEqual(-1, vi_pos_find_char_forward('abc def', 'x'))
  309.         self.assertEqual(4, vi_pos_find_char_forward('abc def', 'd'))
  310.         self.assertEqual(4, vi_pos_find_char_forward('abc def', 'd', 3))
  311.         self.assertEqual(-1, vi_pos_find_char_forward('abc def', 'd', 4))
  312.         self.assertEqual(-1, vi_pos_find_char_forward('abc def', 'd', count = 2))
  313.         self.assertEqual(12, vi_pos_find_char_forward('abc def abc def', 'd', count = 2))
  314.  
  315.     
  316.     def test_pos_find_char_backward(self):
  317.         self.assertEqual(-1, vi_pos_find_char_backward('', 'x'))
  318.         self.assertEqual(-1, vi_pos_find_char_backward('abc def', 'x', 6))
  319.         self.assertEqual(4, vi_pos_find_char_backward('abc def', 'd', 6))
  320.         self.assertEqual(4, vi_pos_find_char_backward('abc def', 'd', 5))
  321.         self.assertEqual(-1, vi_pos_find_char_backward('abc def', 'd', 4))
  322.         self.assertEqual(-1, vi_pos_find_char_backward('abc def', 'd', 6, count = 2))
  323.         self.assertEqual(4, vi_pos_find_char_backward('abc def abc def', 'd', 14, count = 2))
  324.  
  325.     
  326.     def test_pos_to_char_forward(self):
  327.         self.assertEqual(-1, vi_pos_to_char_forward('', 'x'))
  328.         self.assertEqual(-1, vi_pos_to_char_forward('abc def', 'x'))
  329.         self.assertEqual(3, vi_pos_to_char_forward('abc def', 'd'))
  330.         self.assertEqual(3, vi_pos_to_char_forward('abc def', 'd', 2))
  331.         self.assertEqual(-1, vi_pos_to_char_forward('abc def', 'd', 4))
  332.         self.assertEqual(-1, vi_pos_to_char_forward('abc def', 'd', count = 2))
  333.         self.assertEqual(11, vi_pos_to_char_forward('abc def abc def', 'd', count = 2))
  334.  
  335.     
  336.     def test_pos_to_char_backward(self):
  337.         self.assertEqual(-1, vi_pos_to_char_backward('', 'x'))
  338.         self.assertEqual(-1, vi_pos_to_char_backward('abc def', 'x', 6))
  339.         self.assertEqual(5, vi_pos_to_char_backward('abc def', 'd', 6))
  340.         self.assertEqual(5, vi_pos_to_char_backward('abc def', 'd', 5))
  341.         self.assertEqual(-1, vi_pos_to_char_backward('abc def', 'd', 4))
  342.         self.assertEqual(-1, vi_pos_to_char_backward('abc def', 'd', 6, count = 2))
  343.         self.assertEqual(5, vi_pos_to_char_backward('abc def abc def', 'd', 14, count = 2))
  344.  
  345.     
  346.     def test_motion_word(self):
  347.         r = ViModeTest()
  348.         r._set_line('abc_123  def--456.789  x')
  349.         r.input('Escape')
  350.         r.input('"0"')
  351.         r.input('"w"')
  352.         self.assertEqual(9, r.line_cursor)
  353.         r.input('"w"')
  354.         self.assertEqual(12, r.line_cursor)
  355.         r.input('"w"')
  356.         self.assertEqual(14, r.line_cursor)
  357.         r.input('"W"')
  358.         self.assertEqual(23, r.line_cursor)
  359.  
  360.     
  361.     def test_motion_word_multiplier(self):
  362.         r = ViModeTest()
  363.         r._set_line('a b c d e f g h i j k l m n o p q r s t u v w x y z')
  364.         r.input('Escape')
  365.         r.input('"0"')
  366.         r.input('"2"')
  367.         self.assertEqual(0, r.line_cursor)
  368.         r.input('"w"')
  369.         self.assertEqual(4, r.line_cursor)
  370.         r.input('"2"')
  371.         r.input('"0"')
  372.         r.input('"w"')
  373.         self.assertEqual(44, r.line_cursor)
  374.         r.input('"2"')
  375.         r.input('"W"')
  376.         self.assertEqual(48, r.line_cursor)
  377.  
  378.     
  379.     def test_motion_end(self):
  380.         r = ViModeTest()
  381.         r._set_line('  abc_123  --def--456.789  x')
  382.         r.input('Escape')
  383.         r.input('"0"')
  384.         r.input('"e"')
  385.         self.assertEqual(8, r.line_cursor)
  386.         r.input('"e"')
  387.         self.assertEqual(12, r.line_cursor)
  388.         r.input('"e"')
  389.         self.assertEqual(15, r.line_cursor)
  390.         r.input('"E"')
  391.         self.assertEqual(24, r.line_cursor)
  392.  
  393.     
  394.     def test_motion_end_multiplier(self):
  395.         r = ViModeTest()
  396.         r._set_line('ab cd ef gh ij kl mn op qr st uv wx yz')
  397.         r.input('Escape')
  398.         r.input('"0"')
  399.         r.input('"3"')
  400.         r.input('"e"')
  401.         self.assertEqual(7, r.line_cursor)
  402.         r.input('"4"')
  403.         r.input('"E"')
  404.         self.assertEqual(19, r.line_cursor)
  405.  
  406.     
  407.     def test_motion_backward(self):
  408.         r = ViModeTest()
  409.         r._set_line('abc_123  def--456.789  x')
  410.         r.input('Escape')
  411.         r.input('"$"')
  412.         self.assertEqual(23, r.line_cursor)
  413.         r.input('"b"')
  414.         self.assertEqual(18, r.line_cursor)
  415.         r.input('"b"')
  416.         self.assertEqual(17, r.line_cursor)
  417.         r.input('"B"')
  418.         self.assertEqual(9, r.line_cursor)
  419.         r.input('"B"')
  420.         self.assertEqual(0, r.line_cursor)
  421.  
  422.     
  423.     def test_motion_backward_multiplier(self):
  424.         r = ViModeTest()
  425.         r._set_line('ab cd ef gh ij kl mn op qr st uv wx yz')
  426.         r.input('Escape')
  427.         r.input('"$"')
  428.         self.assertEqual(37, r.line_cursor)
  429.         r.input('"3"')
  430.         r.input('"b"')
  431.         self.assertEqual(30, r.line_cursor)
  432.         r.input('"5"')
  433.         r.input('"b"')
  434.         self.assertEqual(15, r.line_cursor)
  435.  
  436.     
  437.     def test_motion_find_char_forward(self):
  438.         r = ViModeTest()
  439.         r._set_line('abc_123  def--456.789  x')
  440.         r.input('Escape')
  441.         r.input('"0"')
  442.         r.input('"f"')
  443.         self.assertEqual(0, r.line_cursor)
  444.         r.input('"c"')
  445.         self.assertEqual(2, r.line_cursor)
  446.  
  447.     
  448.     def test_motion_find_char_backward(self):
  449.         r = ViModeTest()
  450.         r._set_line('abc_123  def--456.789  x')
  451.         r.input('Escape')
  452.         r.input('"$"')
  453.         self.assertEqual(23, r.line_cursor)
  454.         r.input('"F"')
  455.         self.assertEqual(23, r.line_cursor)
  456.         r.input('"c"')
  457.         self.assertEqual(2, r.line_cursor)
  458.  
  459.     
  460.     def test_motion_find_char_forward_multiplier(self):
  461.         r = ViModeTest()
  462.         r._set_line('ab cd ef 01 23 45 ab cd ef 01 23 45 ab cd ef 01 23 45')
  463.         r.input('Escape')
  464.         r.input('"0"')
  465.         r.input('"2"')
  466.         r.input('"f"')
  467.         r.input('"0"')
  468.         self.assertEqual(27, r.line_cursor)
  469.  
  470.     
  471.     def test_motion_find_char_backward_multiplier(self):
  472.         r = ViModeTest()
  473.         r._set_line('ab cd ef 01 23 45 ab cd ef 01 23 45 ab cd ef 01 23 45')
  474.         r.input('Escape')
  475.         r.input('"$"')
  476.         self.assertEqual(52, r.line_cursor)
  477.         r.input('"2"')
  478.         r.input('"F"')
  479.         r.input('"0"')
  480.         self.assertEqual(27, r.line_cursor)
  481.  
  482.     
  483.     def test_motion_find_char_again(self):
  484.         r = ViModeTest()
  485.         r._set_line('1234512345123451234512345')
  486.         r.input('Escape')
  487.         r.input('"0"')
  488.         r.input('"2"')
  489.         r.input('"f"')
  490.         r.input('"3"')
  491.         self.assertEqual(7, r.line_cursor)
  492.         r.input('";"')
  493.         self.assertEqual(12, r.line_cursor)
  494.         r.input('"2"')
  495.         r.input('";"')
  496.         self.assertEqual(22, r.line_cursor)
  497.         r.input('","')
  498.         self.assertEqual(17, r.line_cursor)
  499.         r.input('"2"')
  500.         r.input('","')
  501.         self.assertEqual(7, r.line_cursor)
  502.  
  503.     
  504.     def test_motion_find_char_opposite(self):
  505.         r = ViModeTest()
  506.         r._set_line('1234512345123451234512345')
  507.         r.input('Escape')
  508.         r.input('"$"')
  509.         r.input('"2"')
  510.         r.input('"F"')
  511.         r.input('"3"')
  512.         self.assertEqual(17, r.line_cursor)
  513.         r.input('";"')
  514.         self.assertEqual(12, r.line_cursor)
  515.         r.input('"2"')
  516.         r.input('";"')
  517.         self.assertEqual(2, r.line_cursor)
  518.         r.input('","')
  519.         self.assertEqual(7, r.line_cursor)
  520.         r.input('"2"')
  521.         r.input('","')
  522.         self.assertEqual(17, r.line_cursor)
  523.         r.input('"2"')
  524.         r.input('","')
  525.         self.assertEqual(17, r.line_cursor)
  526.  
  527.     
  528.     def test_motion_to_char_forward(self):
  529.         r = ViModeTest()
  530.         r._set_line('abc_123  def--456.789  x')
  531.         r.input('Escape')
  532.         r.input('"0"')
  533.         r.input('"t"')
  534.         self.assertEqual(0, r.line_cursor)
  535.         r.input('"c"')
  536.         self.assertEqual(1, r.line_cursor)
  537.  
  538.     
  539.     def test_motion_to_char_backward(self):
  540.         r = ViModeTest()
  541.         r._set_line('abc_123  def--456.789  x')
  542.         r.input('Escape')
  543.         r.input('"$"')
  544.         self.assertEqual(23, r.line_cursor)
  545.         r.input('"T"')
  546.         self.assertEqual(23, r.line_cursor)
  547.         r.input('"c"')
  548.         self.assertEqual(3, r.line_cursor)
  549.  
  550.     
  551.     def test_motion_to_char_forward_multiplier(self):
  552.         r = ViModeTest()
  553.         r._set_line('ab cd ef 01 23 45 ab cd ef 01 23 45 ab cd ef 01 23 45')
  554.         r.input('Escape')
  555.         r.input('"0"')
  556.         r.input('"2"')
  557.         r.input('"t"')
  558.         r.input('"0"')
  559.         self.assertEqual(26, r.line_cursor)
  560.  
  561.     
  562.     def test_motion_to_char_backward_multiplier(self):
  563.         r = ViModeTest()
  564.         r._set_line('ab cd ef 01 23 45 ab cd ef 01 23 45 ab cd ef 01 23 45')
  565.         r.input('Escape')
  566.         r.input('"$"')
  567.         self.assertEqual(52, r.line_cursor)
  568.         r.input('"2"')
  569.         r.input('"T"')
  570.         r.input('"0"')
  571.         self.assertEqual(28, r.line_cursor)
  572.  
  573.     
  574.     def test_delete_word(self):
  575.         r = ViModeTest()
  576.         r._set_line('abc de fghi jkl mnopq rst')
  577.         r.input('Escape')
  578.         r.input('"0"')
  579.         r.input('"d"')
  580.         r.input('"w"')
  581.         self.assertEqual(0, r.line_cursor)
  582.         self.assertEqual(r.line, 'de fghi jkl mnopq rst')
  583.         r.input('"d"')
  584.         r.input('"2"')
  585.         r.input('"w"')
  586.         self.assertEqual(0, r.line_cursor)
  587.         self.assertEqual(r.line, 'jkl mnopq rst')
  588.         r.input('"2"')
  589.         r.input('"d"')
  590.         r.input('"w"')
  591.         self.assertEqual(0, r.line_cursor)
  592.         self.assertEqual(r.line, 'rst')
  593.  
  594.     
  595.     def test_delete_word_two_multipliers(self):
  596.         r = ViModeTest()
  597.         r._set_line('abc de fghi jkl mnopq rst uv wx yz')
  598.         r.input('Escape')
  599.         r.input('"0w"')
  600.         r.input('"2d3w"')
  601.         self.assertEqual(4, r.line_cursor)
  602.         self.assertEqual(r.line, 'abc wx yz')
  603.  
  604.     
  605.     def test_delete_find_char_forward_two_multipliers(self):
  606.         r = ViModeTest()
  607.         r._set_line('0123456789012345678901234567890123456789012345678901234567890123456789')
  608.         r.input('Escape')
  609.         r.input('"0"')
  610.         r.input('"2d3f4"')
  611.         self.assertEqual(r.line, '567890123456789')
  612.  
  613.     
  614.     def test_delete_end_of_line(self):
  615.         r = ViModeTest()
  616.         r._set_line('abc de fghi jkl mnopq rst uv wx yz')
  617.         r.input('Escape')
  618.         r.input('"0w"')
  619.         r.input('"D"')
  620.         self.assertEqual(r.line, 'abc ')
  621.  
  622.     
  623.     def test_two_lines(self):
  624.         r = ViModeTest()
  625.         r.input('"abcdef"')
  626.         self.assertEqual(r.line, 'abcdef')
  627.         r.input('Escape')
  628.         r.input('"0iqq"')
  629.         self.assertEqual(r.line, 'qqabcdef')
  630.         r.input('Return')
  631.         self.assertEqual(r.line, '')
  632.         r.input('"xyz"')
  633.         self.assertEqual(r.line, 'xyz')
  634.  
  635.     
  636.     def test_delete_word_short_to_end_of_line(self):
  637.         r = ViModeTest()
  638.         r._set_line('abc def ghi')
  639.         r.input('Escape')
  640.         r.input('"03dw"')
  641.         self.assertEqual('', r.line)
  642.         r._set_line('abc def ghi  ')
  643.         r.input('Escape')
  644.         r.input('"03dw"')
  645.         self.assertEqual('', r.line)
  646.  
  647.     
  648.     def test_delete_word_long_to_end_of_line(self):
  649.         r = ViModeTest()
  650.         r._set_line('a.c d.f g.i')
  651.         r.input('Escape')
  652.         r.input('"03dW"')
  653.         self.assertEqual('', r.line)
  654.         r._set_line('a.c d.f g.i  ')
  655.         r.input('Escape')
  656.         r.input('"03dW"')
  657.         self.assertEqual('', r.line)
  658.  
  659.     
  660.     def test_delete_end_short_to_end_of_line(self):
  661.         r = ViModeTest()
  662.         r._set_line('abc def ghi')
  663.         r.input('Escape')
  664.         r.input('"03de"')
  665.         self.assertEqual('', r.line)
  666.         r._set_line('abc def ghi  ')
  667.         r.input('Escape')
  668.         r.input('"03de"')
  669.         self.assertEqual('  ', r.line)
  670.  
  671.     
  672.     def test_delete_end_long_to_end_of_line(self):
  673.         r = ViModeTest()
  674.         r._set_line('a.c d.f g.i')
  675.         r.input('Escape')
  676.         r.input('"03dE"')
  677.         self.assertEqual('', r.line)
  678.         r._set_line('a.c d.f g.i  ')
  679.         r.input('Escape')
  680.         r.input('"03dE"')
  681.         self.assertEqual('  ', r.line)
  682.  
  683.     
  684.     def test_delete_back_short_to_begining_of_line(self):
  685.         r = ViModeTest()
  686.         r._set_line('abc def ghi')
  687.         r.input('Escape')
  688.         r.input('"$3db"')
  689.         self.assertEqual('i', r.line)
  690.         r._set_line('abc def ghi  ')
  691.         r.input('Escape')
  692.         r.input('"$3db"')
  693.         self.assertEqual(' ', r.line)
  694.  
  695.     
  696.     def test_delete_back_long_to_begining_of_line(self):
  697.         r = ViModeTest()
  698.         r._set_line('a.c d.f g.i')
  699.         r.input('Escape')
  700.         r.input('"$3dB"')
  701.         self.assertEqual('i', r.line)
  702.         r._set_line('a.c d.f g.i  ')
  703.         r.input('Escape')
  704.         r.input('"$3dB"')
  705.         self.assertEqual(' ', r.line)
  706.  
  707.     
  708.     def test_delete_dollar(self):
  709.         r = ViModeTest()
  710.         r._set_line('abc def')
  711.         r.input('Escape')
  712.         r.input('"0ld$"')
  713.         self.assertEqual(r.line, 'a')
  714.         self.assertEqual(r.line_cursor, 0)
  715.  
  716.     
  717.     def test_motion_left(self):
  718.         r = ViModeTest()
  719.         r._set_line('abc def ghi')
  720.         r.input('Escape')
  721.         r.input('"$"')
  722.         self.assertEqual(10, r.line_cursor)
  723.         r.input('"h"')
  724.         self.assertEqual(9, r.line_cursor)
  725.         r.input('"2h"')
  726.         self.assertEqual(7, r.line_cursor)
  727.         r.input('"2d3h"')
  728.         self.assertEqual(1, r.line_cursor)
  729.         self.assertEqual('a ghi', r.line)
  730.         r.input('"4dh"')
  731.         self.assertEqual(0, r.line_cursor)
  732.         self.assertEqual(' ghi', r.line)
  733.  
  734.     
  735.     def test_motion_right(self):
  736.         r = ViModeTest()
  737.         r.input('Escape')
  738.         self.assertEqual(r.line, '')
  739.         self.assertEqual(r.line_cursor, 0)
  740.         r.input('"a"')
  741.         self.assertEqual(r.line, '')
  742.         self.assertEqual(r.line_cursor, 0)
  743.         r.input('"abc"')
  744.         self.assertEqual(r.line, 'abc')
  745.         self.assertEqual(r.line_cursor, 3)
  746.         r.input('Escape')
  747.         self.assertEqual(r.line, 'abc')
  748.         self.assertEqual(r.line_cursor, 2)
  749.         r.input('"l"')
  750.         self.assertEqual(r.line, 'abc')
  751.         self.assertEqual(r.line_cursor, 2)
  752.         r.input('Left')
  753.         self.assertEqual(r.line, 'abc')
  754.         self.assertEqual(r.line_cursor, 1)
  755.         r.input('"l"')
  756.         self.assertEqual(r.line, 'abc')
  757.         self.assertEqual(r.line_cursor, 2)
  758.         r.input('"l"')
  759.         self.assertEqual(r.line, 'abc')
  760.         self.assertEqual(r.line_cursor, 2)
  761.  
  762.     
  763.     def test_motion_right_delete(self):
  764.         r = ViModeTest()
  765.         r._set_line('abc def ghi')
  766.         r.input('Escape')
  767.         r.input('"0"')
  768.         self.assertEqual(0, r.line_cursor)
  769.         r.input('"l"')
  770.         self.assertEqual(1, r.line_cursor)
  771.         r.input('"2l"')
  772.         self.assertEqual(3, r.line_cursor)
  773.         r.input('"2d3l"')
  774.         self.assertEqual(3, r.line_cursor)
  775.         self.assertEqual('abchi', r.line)
  776.         r.input('"4dl"')
  777.         self.assertEqual(2, r.line_cursor)
  778.         self.assertEqual('abc', r.line)
  779.  
  780.     
  781.     def test_backspace_motion(self):
  782.         r = ViModeTest()
  783.         r._set_line('abc def ghi')
  784.         r.input('Escape')
  785.         r.input('"$"')
  786.         self.assertEqual(10, r.line_cursor)
  787.         r.input('BackSpace')
  788.         self.assertEqual(9, r.line_cursor)
  789.         r.input('"2"')
  790.         r.input('BackSpace')
  791.         self.assertEqual(7, r.line_cursor)
  792.         r.input('"2d3"')
  793.         r.input('BackSpace')
  794.         self.assertEqual(1, r.line_cursor)
  795.         self.assertEqual('a ghi', r.line)
  796.         r.input('"4d"')
  797.         r.input('BackSpace')
  798.         self.assertEqual(0, r.line_cursor)
  799.         self.assertEqual(' ghi', r.line)
  800.  
  801.     
  802.     def test_backspace_insert(self):
  803.         r = ViModeTest()
  804.         r._set_line('abc def ghi')
  805.         r.input('Escape')
  806.         r.input('"$"')
  807.         self.assertEqual(10, r.line_cursor)
  808.         r.input('"i"')
  809.         self.assertEqual(10, r.line_cursor)
  810.         r.input('BackSpace')
  811.         self.assertEqual(9, r.line_cursor)
  812.         self.assertEqual('abc def gi', r.line)
  813.  
  814.     
  815.     def test_insert_lower_i(self):
  816.         r = ViModeTest()
  817.         r._set_line('abc def ghi')
  818.         r.input('Escape')
  819.         r.input('"0w"')
  820.         r.input('"i"')
  821.         r.input('"zz"')
  822.         self.assert_(r.vi_is_insert_mode)
  823.         self.assertEqual(r.line, 'abc zzdef ghi')
  824.         r.input('Escape')
  825.         r.input('"w"')
  826.         r.input('"2iyy"')
  827.         r.input('Escape')
  828.         self.assertEqual(r.line, 'abc zzdef yyyyghi')
  829.  
  830.     
  831.     def test_insert_upper_i(self):
  832.         r = ViModeTest()
  833.         r._set_line('abc def ghi')
  834.         r.input('Escape')
  835.         r.input('"0w"')
  836.         r.input('"I"')
  837.         r.input('"zz"')
  838.         self.assert_(r.vi_is_insert_mode)
  839.         self.assertEqual(r.line, 'zzabc def ghi')
  840.         r.input('Escape')
  841.         r.input('"w"')
  842.         r.input('"2Iyy"')
  843.         r.input('Escape')
  844.         self.assertEqual(r.line, 'yyyyzzabc def ghi')
  845.  
  846.     
  847.     def test_append_lower_a(self):
  848.         r = ViModeTest()
  849.         r._set_line('abc def ghi')
  850.         r.input('Escape')
  851.         r.input('"0"')
  852.         r.input('"a"')
  853.         r.input('"zz"')
  854.         self.assertEqual(r.line, 'azzbc def ghi')
  855.         self.assert_(r.vi_is_insert_mode)
  856.         r.input('Escape')
  857.         r.input('"w"')
  858.         r.input('"2ayy"')
  859.         r.input('Escape')
  860.         self.assertEqual(r.line, 'azzbc dyyyyef ghi')
  861.  
  862.     
  863.     def test_append_upper_a_simple(self):
  864.         r = ViModeTest()
  865.         r._set_line('')
  866.         r.input('Escape')
  867.         r.input('"2A"')
  868.         r.input('"jj"')
  869.         r.input('Escape')
  870.         self.assertEqual(r.line, 'jjjj')
  871.         self.assert_(not (r.vi_is_insert_mode))
  872.  
  873.     
  874.     def test_append_upper_a(self):
  875.         r = ViModeTest()
  876.         r._set_line('abc def ghi')
  877.         r.input('Escape')
  878.         r.input('"0"')
  879.         r.input('"A"')
  880.         r.input('"zz"')
  881.         self.assertEqual(r.line, 'abc def ghizz')
  882.         self.assert_(r.vi_is_insert_mode)
  883.         r.input('Escape')
  884.         r.input('"0w"')
  885.         r.input('"2Ayy"')
  886.         r.input('Escape')
  887.         self.assertEqual(r.line, 'abc def ghizzyyyy')
  888.  
  889.     
  890.     def test_delete_lower_x(self):
  891.         r = ViModeTest()
  892.         r._set_line('abc def')
  893.         r.input('Escape')
  894.         r.input('"0w"')
  895.         r.input('"x"')
  896.         self.assertEqual(r.line, 'abc ef')
  897.         r.input('"4x"')
  898.         self.assertEqual(r.line, 'abc ')
  899.         self.assertEqual(r.line_cursor, 3)
  900.         r.input('"x"')
  901.         self.assertEqual(r.line, 'abc')
  902.         self.assertEqual(r.line_cursor, 2)
  903.         r.input('"x"')
  904.         self.assertEqual(r.line, 'ab')
  905.         self.assertEqual(r.line_cursor, 1)
  906.         r.input('"x"')
  907.         self.assertEqual(r.line, 'a')
  908.         self.assertEqual(r.line_cursor, 0)
  909.         r.input('"x"')
  910.         self.assertEqual(r.line, '')
  911.         self.assertEqual(r.line_cursor, 0)
  912.         r.input('"x"')
  913.         self.assertEqual(r.line, '')
  914.         self.assertEqual(r.line_cursor, 0)
  915.  
  916.     
  917.     def test_delete_upper_x(self):
  918.         r = ViModeTest()
  919.         r._set_line('abc def')
  920.         self.assertEqual(r.line_cursor, 7)
  921.         r.input('Escape')
  922.         self.assertEqual(r.line_cursor, 6)
  923.         r.input('"$"')
  924.         self.assertEqual(r.line_cursor, 6)
  925.         r.input('"X"')
  926.         self.assertEqual(r.line, 'abc df')
  927.         self.assertEqual(r.line_cursor, 5)
  928.         r.input('"4X"')
  929.         self.assertEqual(r.line, 'af')
  930.         self.assertEqual(r.line_cursor, 1)
  931.         r.input('"2X"')
  932.         self.assertEqual(r.line, 'f')
  933.         self.assertEqual(r.line_cursor, 0)
  934.         r.input('"X"')
  935.         self.assertEqual(r.line, 'f')
  936.         self.assertEqual(r.line_cursor, 0)
  937.  
  938.     
  939.     def test_substitute_lower_s(self):
  940.         r = ViModeTest()
  941.         r._set_line('abc def')
  942.         r.input('Escape')
  943.         r.input('"0"')
  944.         r.input('"s"')
  945.         r.input('"qq"')
  946.         r.input('Escape')
  947.         self.assertEqual(r.line, 'qqbc def')
  948.         self.assertEqual(r.line_cursor, 1)
  949.         r.input('"3s"')
  950.         r.input('"yyy"')
  951.         r.input('Escape')
  952.         self.assertEqual(r.line, 'qyyy def')
  953.         self.assertEqual(r.line_cursor, 3)
  954.         r.input('"w"')
  955.         r.input('"5"')
  956.         r.input('"s"')
  957.         r.input('"zz"')
  958.         r.input('Escape')
  959.         self.assertEqual(r.line, 'qyyy zz')
  960.         self.assertEqual(r.line_cursor, 6)
  961.  
  962.     
  963.     def test_change_to_end_of_line(self):
  964.         r = ViModeTest()
  965.         r._set_line('abc def ghi')
  966.         r.input('Escape')
  967.         r.input('"0w"')
  968.         r.input('"C"')
  969.         self.assert_(r.vi_is_insert_mode)
  970.         r.input('"123"')
  971.         self.assertEqual(r.line, 'abc 123')
  972.         r.input('Escape')
  973.         self.assert_(not (r.vi_is_insert_mode))
  974.  
  975.     
  976.     def test_change_whole_line(self):
  977.         r = ViModeTest()
  978.         r._set_line('abc def ghi')
  979.         r.input('Escape')
  980.         r.input('"0w"')
  981.         r.input('"S"')
  982.         self.assert_(r.vi_is_insert_mode)
  983.         self.assertEqual(r.line, '')
  984.         r.input('"123"')
  985.         self.assertEqual(r.line, '123')
  986.         r.input('Escape')
  987.         self.assert_(not (r.vi_is_insert_mode))
  988.  
  989.     
  990.     def test_change_word_short(self):
  991.         r = ViModeTest()
  992.         r._set_line('abc def ghi')
  993.         r.input('Escape')
  994.         r.input('"0cwzzz"')
  995.         self.assert_(r.vi_is_insert_mode)
  996.         self.assertEqual(r.line, 'zzz def ghi')
  997.         self.assertEqual(r.line_cursor, 3)
  998.         r.input('Escape')
  999.         self.assert_(not (r.vi_is_insert_mode))
  1000.         self.assertEqual(r.line_cursor, 2)
  1001.         r.input('"w"')
  1002.         self.assertEqual(r.line_cursor, 4)
  1003.         r.input('"2cwyyy"')
  1004.         self.assertEqual(r.line, 'zzz yyy')
  1005.         r.input('Escape')
  1006.         self.assertEqual(r.line, 'zzz yyy')
  1007.  
  1008.     
  1009.     def test_change_word_long(self):
  1010.         r = ViModeTest()
  1011.         r._set_line('abc.def ghi.jkl mno.pqr')
  1012.         r.input('Escape')
  1013.         r.input('"0cWss"')
  1014.         self.assertEqual(r.line, 'ss ghi.jkl mno.pqr')
  1015.         self.assert_(r.vi_is_insert_mode)
  1016.         self.assertEqual(r.line_cursor, 2)
  1017.         r.input('Escape')
  1018.         self.assert_(not (r.vi_is_insert_mode))
  1019.         self.assertEqual(r.line_cursor, 1)
  1020.         r.input('"w2."')
  1021.         self.assertEqual(r.line, 'ss ss')
  1022.         self.assert_(not (r.vi_is_insert_mode))
  1023.         self.assertEqual(r.line_cursor, 4)
  1024.  
  1025.     
  1026.     def test_change_end_short(self):
  1027.         r = ViModeTest()
  1028.         r._set_line('abc def ghi')
  1029.         r.input('Escape')
  1030.         r.input('"0cezzz"')
  1031.         self.assert_(r.vi_is_insert_mode)
  1032.         self.assertEqual(r.line, 'zzz def ghi')
  1033.         self.assertEqual(r.line_cursor, 3)
  1034.         r.input('Escape')
  1035.         self.assert_(not (r.vi_is_insert_mode))
  1036.         self.assertEqual(r.line_cursor, 2)
  1037.         r.input('"w2."')
  1038.         self.assertEqual(r.line, 'zzz zzz')
  1039.  
  1040.     
  1041.     def test_change_end_long(self):
  1042.         r = ViModeTest()
  1043.         r._set_line('abc.def ghi jkl.mno pqr stu.vwx')
  1044.         r.input('Escape')
  1045.         r.input('"02cEzz"')
  1046.         self.assert_(r.vi_is_insert_mode)
  1047.         self.assertEqual(r.line, 'zz jkl.mno pqr stu.vwx')
  1048.         self.assertEqual(r.line_cursor, 2)
  1049.         r.input('Escape')
  1050.         self.assert_(not (r.vi_is_insert_mode))
  1051.         self.assertEqual(r.line_cursor, 1)
  1052.         r.input('"w2."')
  1053.         self.assertEqual(r.line, 'zz zz stu.vwx')
  1054.         self.assertEqual(r.line_cursor, 5)
  1055.  
  1056.     
  1057.     def test_change_back_short(self):
  1058.         r = ViModeTest()
  1059.         r._set_line('abc def ghi')
  1060.         r.input('Escape')
  1061.         r.input('"$cbzz"')
  1062.         self.assert_(r.vi_is_insert_mode)
  1063.         self.assertEqual(r.line, 'abc def zzi')
  1064.         self.assertEqual(r.line_cursor, 10)
  1065.         r.input('Escape')
  1066.         self.assert_(not (r.vi_is_insert_mode))
  1067.         self.assertEqual(r.line_cursor, 9)
  1068.         r.input('"b2."')
  1069.         self.assertEqual(r.line, 'zzzzi')
  1070.         self.assertEqual(r.line_cursor, 2)
  1071.  
  1072.     
  1073.     def test_change_back_long(self):
  1074.         r = ViModeTest()
  1075.         r._set_line('abc.def ghi jkl.mno pqr stu.vwx')
  1076.         r.input('Escape')
  1077.         r.input('"$2cBzz"')
  1078.         self.assert_(r.vi_is_insert_mode)
  1079.         self.assertEqual(r.line, 'abc.def ghi jkl.mno zzx')
  1080.         self.assertEqual(r.line_cursor, 22)
  1081.         r.input('Escape')
  1082.         self.assert_(not (r.vi_is_insert_mode))
  1083.         self.assertEqual(r.line_cursor, 21)
  1084.         r.input('"5."')
  1085.         self.assertEqual(r.line, 'zzzx')
  1086.         self.assertEqual(r.line_cursor, 2)
  1087.         self.assert_(not (r.vi_is_insert_mode))
  1088.  
  1089.     
  1090.     def test_change_find_lower(self):
  1091.         r = ViModeTest()
  1092.         r._set_line('aa bb cc dd ee aa bb cc dd ee')
  1093.         r.input('Escape')
  1094.         r.input('"0cfbzz"')
  1095.         self.assert_(r.vi_is_insert_mode)
  1096.         self.assertEqual(r.line, 'zzb cc dd ee aa bb cc dd ee')
  1097.         self.assertEqual(r.line_cursor, 2)
  1098.         r.input('Escape')
  1099.         self.assert_(not (r.vi_is_insert_mode))
  1100.         self.assertEqual(r.line_cursor, 1)
  1101.         r.input('"c2fcyy"')
  1102.         self.assertEqual(r.line, 'zyy dd ee aa bb cc dd ee')
  1103.         r.input('Escape')
  1104.         r.input('"."')
  1105.         self.assertEqual(r.line, 'zyyy dd ee')
  1106.  
  1107.     
  1108.     def test_change_find_upper(self):
  1109.         r = ViModeTest()
  1110.         r._set_line('aa bb cc aa bb cc')
  1111.         r.input('Escape')
  1112.         r.input('"$2c2Fazz"')
  1113.         self.assert_(r.vi_is_insert_mode)
  1114.         self.assertEqual(r.line, 'zzc')
  1115.         self.assertEqual(r.line_cursor, 2)
  1116.         r.input('Escape')
  1117.         self.assert_(not (r.vi_is_insert_mode))
  1118.         self.assertEqual(r.line_cursor, 1)
  1119.         r.input('"."')
  1120.         self.assertEqual(r.line, 'zzc')
  1121.  
  1122.     
  1123.     def test_change_to_lower(self):
  1124.         r = ViModeTest()
  1125.         r._set_line('aa bb cc aa bb cc aa bb cc')
  1126.         r.input('Escape')
  1127.         r.input('"02c2ta"')
  1128.         self.assert_(r.vi_is_insert_mode)
  1129.         self.assertEqual(r.line, 'aa bb cc')
  1130.         self.assertEqual(r.line_cursor, 0)
  1131.         r.input('"zz "')
  1132.         self.assertEqual(r.line, 'zz aa bb cc')
  1133.         self.assertEqual(r.line_cursor, 3)
  1134.         r.input('Escape')
  1135.         self.assert_(not (r.vi_is_insert_mode))
  1136.         self.assertEqual(r.line_cursor, 2)
  1137.  
  1138.     
  1139.     def test_change_to_upper(self):
  1140.         r = ViModeTest()
  1141.         r._set_line('aa bb cc aa bb cc aa bb cc')
  1142.         r.input('Escape')
  1143.         r.input('"$2c2Ta"')
  1144.         self.assert_(r.vi_is_insert_mode)
  1145.         self.assertEqual(r.line, 'aa bb cc ac')
  1146.         self.assertEqual(r.line_cursor, 10)
  1147.         r.input('"zz"')
  1148.         self.assertEqual(r.line, 'aa bb cc azzc')
  1149.         self.assertEqual(r.line_cursor, 12)
  1150.         r.input('Escape')
  1151.         self.assert_(not (r.vi_is_insert_mode))
  1152.         self.assertEqual(r.line_cursor, 11)
  1153.         r.input('"3."')
  1154.         self.assertEqual(r.line, 'azzzc')
  1155.         self.assert_(not (r.vi_is_insert_mode))
  1156.  
  1157.     
  1158.     def test_pos_matching(self):
  1159.         self.assertEqual(6, vi_pos_matching('aa (bb)'))
  1160.         self.assertEqual(6, vi_pos_matching('aa (bb)', 3))
  1161.         self.assertEqual(3, vi_pos_matching('aa (bb)', 6))
  1162.         self.assertEqual(11, vi_pos_matching('aa (bb (cc))'))
  1163.         self.assertEqual(3, vi_pos_matching('aa (bb (cc))', 11))
  1164.         self.assertEqual(10, vi_pos_matching('aa (bb (cc))', 4))
  1165.         self.assertEqual(7, vi_pos_matching('aa (bb (cc))', 10))
  1166.         self.assertEqual(7, vi_pos_matching('aa (bb (cc))', 8))
  1167.         self.assertEqual(3, vi_pos_matching('aa (bb (cc) dd)', 12))
  1168.         self.assertEqual(3, vi_pos_matching('aa (bb (cc) dd)', 14))
  1169.         self.assertEqual(-1, vi_pos_matching('aa ((bb (cc) dd)', 3))
  1170.         self.assertEqual(-1, vi_pos_matching('aa (bb (cc) dd) ee)', 16))
  1171.         self.assertEqual(-1, vi_pos_matching('aa (bb (cc) dd) ee)', 18))
  1172.         self.assertEqual(6, vi_pos_matching('aa <bb>'))
  1173.         self.assertEqual(11, vi_pos_matching('aa <bb <cc>>'))
  1174.         self.assertEqual(10, vi_pos_matching('aa <bb <cc>>', 4))
  1175.         self.assertEqual(6, vi_pos_matching('aa {bb}'))
  1176.         self.assertEqual(11, vi_pos_matching('aa {bb {cc}}'))
  1177.         self.assertEqual(10, vi_pos_matching('aa {bb {cc}}', 4))
  1178.         self.assertEqual(6, vi_pos_matching('aa [bb]'))
  1179.         self.assertEqual(11, vi_pos_matching('aa [bb [cc]]'))
  1180.         self.assertEqual(10, vi_pos_matching('aa [bb [cc]]', 4))
  1181.  
  1182.     
  1183.     def test_matching_paren_forward(self):
  1184.         r = ViModeTest()
  1185.         r._set_line('abc (def (ghi)) jkl')
  1186.         r.input('Escape')
  1187.         r.input('"0w"')
  1188.         r.input('"d"')
  1189.         r.input('"%"')
  1190.         self.assertEqual(r.line, 'abc  jkl')
  1191.         self.assertEqual(r.line_cursor, 4)
  1192.  
  1193.     
  1194.     def test_matching_paren_backward(self):
  1195.         r = ViModeTest()
  1196.         r._set_line('abc (def (ghi)) jkl')
  1197.         r.input('Escape')
  1198.         r.input('"0w"')
  1199.         r.input('"%"')
  1200.         self.assertEqual(r.line_cursor, 14)
  1201.         r.input('"d"')
  1202.         r.input('"%"')
  1203.         self.assertEqual(r.line, 'abc  jkl')
  1204.         self.assertEqual(r.line_cursor, 4)
  1205.  
  1206.     
  1207.     def test_yank_and_put(self):
  1208.         r = ViModeTest()
  1209.         r._set_line('abc def')
  1210.         r.input('Escape')
  1211.         r.input('"0"')
  1212.         self.assert_(not (r.vi_is_insert_mode))
  1213.         r.input('"yw"')
  1214.         self.assert_(not (r.vi_is_insert_mode))
  1215.         self.assertEqual(r.line, 'abc def')
  1216.         self.assertEqual(r.line_cursor, 0)
  1217.         r.input('"P"')
  1218.         self.assertEqual(r.line, 'abc abc def')
  1219.         self.assertEqual(r.line_cursor, 3)
  1220.         r.input('"p"')
  1221.         self.assertEqual(r.line, 'abc abc abc def')
  1222.         self.assertEqual(r.line_cursor, 7)
  1223.  
  1224.     
  1225.     def test_put_multiple(self):
  1226.         r = ViModeTest()
  1227.         r._set_line('001122')
  1228.         r.input('Escape')
  1229.         r.input('"0"')
  1230.         r.input('"y3l"')
  1231.         self.assert_(not (r.vi_is_insert_mode))
  1232.         self.assertEqual(r.line_cursor, 0)
  1233.         r.input('"2P"')
  1234.         self.assertEqual(r.line, '001001001122')
  1235.         self.assertEqual(r.line_cursor, 5)
  1236.         r.input('"f2"')
  1237.         r.input('"3p"')
  1238.         self.assertEqual(r.line, '001001001120010010012')
  1239.         self.assertEqual(r.line_cursor, 19)
  1240.  
  1241.     
  1242.     def test_put_undo(self):
  1243.         r = ViModeTest()
  1244.         r._set_line('aaa b ccc')
  1245.         r.input('Escape')
  1246.         r.input('"0ywwp"')
  1247.         self.assertEqual(r.line, 'aaa baaa  ccc')
  1248.         r.input('"u"')
  1249.         self.assertEqual(r.line, 'aaa b ccc')
  1250.         r.input('"P"')
  1251.         self.assertEqual(r.line, 'aaa aaa b ccc')
  1252.         r.input('"u"')
  1253.         self.assertEqual(r.line, 'aaa b ccc')
  1254.  
  1255.     
  1256.     def test_x_and_p(self):
  1257.         r = ViModeTest()
  1258.         r._set_line('abc')
  1259.         r.input('Escape')
  1260.         r.input('"0xp"')
  1261.         self.assertEqual(r.line, 'bac')
  1262.  
  1263.     
  1264.     def test_delete_and_put(self):
  1265.         r = ViModeTest()
  1266.         r._set_line('abc def')
  1267.         r.input('Escape')
  1268.         r.input('"0dwep"')
  1269.         self.assertEqual(r.line, 'defabc ')
  1270.         r.input('"0xp"')
  1271.         self.assertEqual(r.line, 'edfabc ')
  1272.         r.input('"p"')
  1273.         self.assertEqual(r.line, 'eddfabc ')
  1274.  
  1275.     
  1276.     def test_dot_simple(self):
  1277.         r = ViModeTest()
  1278.         r._set_line('abc def')
  1279.         r.input('Escape')
  1280.         r.input('"0x"')
  1281.         self.assertEqual(r.line, 'bc def')
  1282.         r.input('"."')
  1283.         self.assertEqual(r.line, 'c def')
  1284.         r.input('"3."')
  1285.         self.assertEqual(r.line, 'ef')
  1286.  
  1287.     
  1288.     def test_dot_movement_not_repeated_one(self):
  1289.         r = ViModeTest()
  1290.         r._set_line('abc def')
  1291.         r.input('Escape')
  1292.         r.input('"0x"')
  1293.         self.assertEqual(r.line, 'bc def')
  1294.         r.input('"$."')
  1295.         self.assertEqual(r.line, 'bc de')
  1296.         r.input('"0."')
  1297.         self.assertEqual(r.line, 'c de')
  1298.         r.input('"$."')
  1299.         self.assertEqual(r.line, 'c d')
  1300.         r.input('"^."')
  1301.         self.assertEqual(r.line, ' d')
  1302.  
  1303.     
  1304.     def test_dot_movement_not_repeated_two(self):
  1305.         r = ViModeTest()
  1306.         r._set_line('abc def ghi jkl mno pqr')
  1307.         r.input('Escape')
  1308.         r.input('"0x"')
  1309.         self.assertEqual(r.line, 'bc def ghi jkl mno pqr')
  1310.         r.input('"w."')
  1311.         self.assertEqual(r.line, 'bc ef ghi jkl mno pqr')
  1312.         r.input('"fg."')
  1313.         self.assertEqual(r.line, 'bc ef hi jkl mno pqr')
  1314.         r.input('"2b."')
  1315.         self.assertEqual(r.line, 'c ef hi jkl mno pqr')
  1316.         r.input('"3e."')
  1317.         self.assertEqual(r.line, 'c ef hi jk mno pqr')
  1318.         r.input('"Fh."')
  1319.         self.assertEqual(r.line, 'c ef i jk mno pqr')
  1320.         r.input('"tn."')
  1321.         self.assertEqual(r.line, 'c ef i jk no pqr')
  1322.         r.input('"3h."')
  1323.         self.assertEqual(r.line, 'c ef i k no pqr')
  1324.         r.input('"5l."')
  1325.         self.assertEqual(r.line, 'c ef i k no qr')
  1326.  
  1327.     
  1328.     def test_dot_insert(self):
  1329.         r = ViModeTest()
  1330.         r._set_line('abc def')
  1331.         r.input('Escape')
  1332.         r.input('"0"')
  1333.         r.input('"2izz "')
  1334.         r.input('Escape')
  1335.         self.assertEqual(r.line, 'zz zz abc def')
  1336.         r.input('"2w."')
  1337.         self.assertEqual(r.line, 'zz zz abc zz zz def')
  1338.  
  1339.     
  1340.     def test_dot_delete_word(self):
  1341.         r = ViModeTest()
  1342.         r._set_line('0 1 2 3 4 5 6 7 8 9')
  1343.         r.input('Escape')
  1344.         r.input('"02dw"')
  1345.         self.assertEqual(r.line, '2 3 4 5 6 7 8 9')
  1346.         r.input('"."')
  1347.         self.assertEqual(r.line, '4 5 6 7 8 9')
  1348.         r.input('"1."')
  1349.         self.assertEqual(r.line, '5 6 7 8 9')
  1350.  
  1351.     
  1352.     def test_dot_override_multiplier(self):
  1353.         r = ViModeTest()
  1354.         r._set_line('ab ab ab ab  ab ab ab ab  ab ab ab ab  ab ab ab ab')
  1355.         r.input('Escape')
  1356.         r.input('"02d2fb"')
  1357.         self.assertEqual(r.line, '  ab ab ab ab  ab ab ab ab  ab ab ab ab')
  1358.         r.input('"."')
  1359.         self.assertEqual(r.line, '  ab ab ab ab  ab ab ab ab')
  1360.         r.input('"3."')
  1361.         self.assertEqual(r.line, ' ab  ab ab ab ab')
  1362.         r.input('"."')
  1363.         self.assertEqual(r.line, ' ab ab')
  1364.  
  1365.     
  1366.     def test_dot_yank_and_put(self):
  1367.         r = ViModeTest()
  1368.         r._set_line('abc def')
  1369.         r.input('Escape')
  1370.         r.input('"0ywP"')
  1371.         self.assertEqual(r.line, 'abc abc def')
  1372.         r.input('"."')
  1373.         self.assertEqual(r.line, 'abcabc  abc def')
  1374.         r.input('"p"')
  1375.         self.assertEqual(r.line, 'abcabc abc  abc def')
  1376.         r.input('"2."')
  1377.         self.assertEqual(r.line, 'abcabc abc abc abc  abc def')
  1378.  
  1379.     
  1380.     def test_dot_insert_begin(self):
  1381.         r = ViModeTest()
  1382.         r._set_line('abc def')
  1383.         r.input('Escape')
  1384.         r.input('"Izz "')
  1385.         r.input('Escape')
  1386.         self.assertEqual(r.line, 'zz abc def')
  1387.         r.input('"."')
  1388.         self.assertEqual(r.line, 'zz zz abc def')
  1389.         r.input('"2."')
  1390.         self.assertEqual(r.line, 'zz zz zz zz abc def')
  1391.  
  1392.     
  1393.     def test_dot_append_end(self):
  1394.         r = ViModeTest()
  1395.         r._set_line('abc def')
  1396.         r.input('Escape')
  1397.         r.input('"A yy"')
  1398.         r.input('Escape')
  1399.         self.assertEqual(r.line, 'abc def yy')
  1400.         r.input('"."')
  1401.         self.assertEqual(r.line, 'abc def yy yy')
  1402.         r.input('"2."')
  1403.         self.assertEqual(r.line, 'abc def yy yy yy yy')
  1404.  
  1405.     
  1406.     def test_dot_insert_lower(self):
  1407.         r = ViModeTest()
  1408.         r._set_line('abc def')
  1409.         r.input('Escape')
  1410.         r.input('"b2izz "')
  1411.         r.input('Escape')
  1412.         self.assertEqual(r.line, 'abc zz zz def')
  1413.         r.input('"3."')
  1414.         self.assertEqual(r.line, 'abc zz zzzz zz zz  def')
  1415.  
  1416.     
  1417.     def test_dot_append_lower(self):
  1418.         r = ViModeTest()
  1419.         r._set_line('abc def')
  1420.         r.input('Escape')
  1421.         r.input('"0e2a zz"')
  1422.         r.input('Escape')
  1423.         self.assertEqual(r.line, 'abc zz zz def')
  1424.         r.input('"1."')
  1425.         self.assertEqual(r.line, 'abc zz zz zz def')
  1426.  
  1427.     
  1428.     def test_dot_substitute_lower(self):
  1429.         r = ViModeTest()
  1430.         r._set_line('abc def')
  1431.         r.input('Escape')
  1432.         r.input('"03sqq"')
  1433.         r.input('Escape')
  1434.         self.assertEqual(r.line, 'qq def')
  1435.         r.input('"2."')
  1436.         self.assertEqual(r.line, 'qqqdef')
  1437.  
  1438.     
  1439.     def test_undo(self):
  1440.         r = ViModeTest()
  1441.         r._set_line('abc def ghi')
  1442.         r.input('Escape')
  1443.         r.input('"0wdw"')
  1444.         self.assertEqual(r.line, 'abc ghi')
  1445.         self.assertEqual(r.line_cursor, 4)
  1446.         r.input('"u"')
  1447.         self.assertEqual(r.line, 'abc def ghi')
  1448.         self.assertEqual(r.line_cursor, 4)
  1449.  
  1450.     
  1451.     def test_undo_line(self):
  1452.         r = ViModeTest()
  1453.         r._set_line('')
  1454.         r.input('"abc def ghi"')
  1455.         r.input('Escape')
  1456.         r.input('"0dwdw"')
  1457.         self.assertEqual(r.line, 'ghi')
  1458.         r.input('"U"')
  1459.         self.assertEqual(r.line, '')
  1460.  
  1461.     
  1462.     def test_undo_line_with_history(self):
  1463.         r = ViModeTest()
  1464.         r.add_history('abc 123')
  1465.         r._set_line('')
  1466.         r.input('"abc def ghi"')
  1467.         r.input('Escape')
  1468.         r.input('"0dwdw"')
  1469.         self.assertEqual(r.line, 'ghi')
  1470.         r.input('"U"')
  1471.         self.assertEqual(r.line, '')
  1472.  
  1473.     
  1474.     def test_history_no_match(self):
  1475.         r = ViModeTest()
  1476.         r.add_history('abc 123')
  1477.         r.add_history('def 456')
  1478.         r.add_history('ghi 789')
  1479.         r._set_line('abc def ghi')
  1480.         r.input('Escape')
  1481.         r.input('"/"')
  1482.         self.assertEqual(r.line, '/')
  1483.         self.assertEqual(r.line_cursor, 1)
  1484.         r.input('"zz"')
  1485.         self.assertEqual(r.line, '/zz')
  1486.         self.assertEqual(r.line_cursor, 3)
  1487.         self.assertEqual(r.console.bell_count, 0)
  1488.         r.input('Return')
  1489.         self.assertEqual(r.line, 'abc def ghi')
  1490.         self.assertEqual(r.line_cursor, 10)
  1491.  
  1492.     
  1493.     def test_history_found_match(self):
  1494.         r = ViModeTest()
  1495.         r.add_history('abc 123')
  1496.         r.add_history('def 456')
  1497.         r.add_history('ghi 789')
  1498.         r._set_line('abc def ghi')
  1499.         r.input('Escape')
  1500.         r.input('"/"')
  1501.         self.assertEqual(r.line, '/')
  1502.         self.assertEqual(r.line_cursor, 1)
  1503.         r.input('"de"')
  1504.         self.assertEqual(r.line, '/de')
  1505.         self.assertEqual(r.line_cursor, 3)
  1506.         r.input('Return')
  1507.         self.assertEqual(r.line, 'def 456')
  1508.         self.assertEqual(r.line_cursor, 0)
  1509.  
  1510.     
  1511.     def test_history_multi_match(self):
  1512.         r = ViModeTest()
  1513.         r.add_history('xyz 123')
  1514.         r.add_history('xyz 456')
  1515.         r.add_history('xyz 789')
  1516.         r._set_line('abc def')
  1517.         r.input('Escape')
  1518.         r.input('"/xyz"')
  1519.         r.input('Return')
  1520.         self.assertEqual(r.line, 'xyz 789')
  1521.         r.input('"n"')
  1522.         self.assertEqual(r.line, 'xyz 456')
  1523.         r.input('"n"')
  1524.         self.assertEqual(r.line, 'xyz 123')
  1525.         self.assertEqual(r.console.bell_count, 0)
  1526.         r.input('"n"')
  1527.         self.assertEqual(r.line, 'xyz 123')
  1528.         r.input('"N"')
  1529.         self.assertEqual(r.line, 'xyz 456')
  1530.         r.input('"N"')
  1531.         self.assertEqual(r.line, 'xyz 789')
  1532.         r.input('"N"')
  1533.         self.assertEqual(r.line, 'xyz 789')
  1534.  
  1535.     
  1536.     def test_history_search_empty_string(self):
  1537.         r = ViModeTest()
  1538.         r.add_history('xyz 123')
  1539.         r.add_history('xyz 456')
  1540.         r.add_history('xyz 789')
  1541.         r.input('Escape')
  1542.         r.input('"/"')
  1543.         r.input('Return')
  1544.         self.assertEqual(r.line, '')
  1545.         r.input('"/"')
  1546.         r.input('Return')
  1547.         self.assertEqual(r.line, '')
  1548.         r.input('"/x"')
  1549.         r.input('Return')
  1550.         self.assertEqual(r.line, 'xyz 789')
  1551.         r.input('"/"')
  1552.         r.input('Return')
  1553.         self.assertEqual(r.line, 'xyz 456')
  1554.  
  1555.     
  1556.     def test_history_search_again_after_return(self):
  1557.         r = ViModeTest()
  1558.         r.add_history('xyz 123')
  1559.         r.add_history('xyz 456')
  1560.         r.add_history('xyz 789')
  1561.         r._set_line('abc def')
  1562.         r.input('Escape')
  1563.         r.input('"/xyz"')
  1564.         r.input('Return')
  1565.         self.assertEqual(r.line, 'xyz 789')
  1566.         r.input('"n"')
  1567.         self.assertEqual(r.line, 'xyz 456')
  1568.         r.input('Return')
  1569.         self.assertEqual(r.line, '')
  1570.         r.input('Escape')
  1571.         r.input('"n"')
  1572.         self.assertEqual(r.line, 'xyz 123')
  1573.         r.input('Return')
  1574.         r.input('Escape')
  1575.         r.input('"N"')
  1576.         self.assertEqual(r.line, 'xyz 456')
  1577.  
  1578.     
  1579.     def test_history_search_again_after_search_failed(self):
  1580.         r = ViModeTest()
  1581.         r.add_history('xyz 123')
  1582.         r.add_history('xyz 456')
  1583.         r.add_history('xyz 789')
  1584.         r._set_line('abc def')
  1585.         r.input('Escape')
  1586.         r.input('"/xyz"')
  1587.         r.input('Return')
  1588.         self.assertEqual(r.line, 'xyz 789')
  1589.         r.input('"C"')
  1590.         self.assertEqual(r.line, '')
  1591.         r.input('Escape')
  1592.         self.assertEqual(r.console.bell_count, 0)
  1593.         r.input('"/abc"')
  1594.         r.input('Return')
  1595.         self.assertEqual(r.line, '')
  1596.         r.input('Escape')
  1597.         r.input('"n"')
  1598.         self.assertEqual(r.line, '')
  1599.  
  1600.     
  1601.     def test_history_search_and_backspace(self):
  1602.         r = ViModeTest()
  1603.         r.add_history('aaa')
  1604.         r.add_history('bbb')
  1605.         r._set_line('')
  1606.         r.input('Escape')
  1607.         r.input('"/aaz"')
  1608.         self.assertEqual(r.line, '/aaz')
  1609.         r.input('BackSpace')
  1610.         self.assertEqual(r.line, '/aa')
  1611.         r.input('Return')
  1612.         self.assertEqual(r.line, 'aaa')
  1613.         r.input('Escape')
  1614.         r.input('"/z"')
  1615.         r.input('BackSpace')
  1616.         r.input('BackSpace')
  1617.         self.assertEqual(r.line, '')
  1618.         r.input('"j"')
  1619.         self.assertEqual(r.line, 'bbb')
  1620.         r.input('"k"')
  1621.         self.assertEqual(r.line, 'aaa')
  1622.  
  1623.     
  1624.     def test_history_insert_mode(self):
  1625.         r = ViModeTest()
  1626.         r.add_history('aaa')
  1627.         r.add_history('bbb')
  1628.         r.add_history('ccc')
  1629.         r.input('Up')
  1630.         self.assertEqual(r.line, 'ccc')
  1631.         self.assert_(r.vi_is_insert_mode)
  1632.         r.input('"z"')
  1633.         self.assertEqual(r.line, 'cccz')
  1634.         r.input('Escape')
  1635.         self.assert_(not (r.vi_is_insert_mode))
  1636.         r.input('Up')
  1637.         self.assertEqual(r.line, 'bbb')
  1638.         self.assert_(r.vi_is_insert_mode)
  1639.         r.input('"z"')
  1640.         self.assertEqual(r.line, 'bbbz')
  1641.         r.input('Escape')
  1642.         r.input('"k"')
  1643.         self.assertEqual(r.line, 'aaa')
  1644.         self.assert_(not (r.vi_is_insert_mode))
  1645.         r.input('"iz"')
  1646.         self.assertEqual(r.line, 'zaaa')
  1647.         r.input('Down')
  1648.         self.assertEqual(r.line, 'bbb')
  1649.         self.assert_(r.vi_is_insert_mode)
  1650.         r.input('"y"')
  1651.         self.assertEqual(r.line, 'bbby')
  1652.         r.input('Escape')
  1653.         r.input('"j"')
  1654.         self.assertEqual(r.line, 'ccc')
  1655.         self.assert_(not (r.vi_is_insert_mode))
  1656.         r.input('"iy"')
  1657.         self.assertEqual(r.line, 'yccc')
  1658.         self.assert_(r.vi_is_insert_mode)
  1659.  
  1660.     
  1661.     def test_history_cursor_arrow(self):
  1662.         r = ViModeTest()
  1663.         self.assertEqual(r._history.history_cursor, 0)
  1664.         r.add_history('aaa')
  1665.         self.assertEqual(r._history.history_cursor, 1)
  1666.         r.add_history('bbb')
  1667.         self.assertEqual(r._history.history_cursor, 2)
  1668.         self.assertEqual(r.line, '')
  1669.         r.input('Up')
  1670.         self.assertEqual(r._history.history_cursor, 1)
  1671.         self.assertEqual(r.line, 'bbb')
  1672.         r.input('Up')
  1673.         self.assertEqual(r._history.history_cursor, 0)
  1674.         self.assertEqual(r.line, 'aaa')
  1675.         r.input('Down')
  1676.         self.assertEqual(r._history.history_cursor, 1)
  1677.         self.assertEqual(r.line, 'bbb')
  1678.         r.input('Down')
  1679.         self.assertEqual(r._history.history_cursor, 2)
  1680.         self.assertEqual(r.line, '')
  1681.         r.input('Up')
  1682.         self.assertEqual(r._history.history_cursor, 1)
  1683.         self.assertEqual(r.line, 'bbb')
  1684.  
  1685.     
  1686.     def test_history_control_n_and_p(self):
  1687.         r = ViModeTest()
  1688.         r.add_history('aa')
  1689.         r.add_history('bbb')
  1690.         self.assertEqual(r.line, '')
  1691.         r.input('Control-p')
  1692.         self.assertEqual(r.line, 'bbb')
  1693.         self.assertEqual(r.line_cursor, 3)
  1694.         self.assert_(r.vi_is_insert_mode)
  1695.         r.input('Control-p')
  1696.         self.assertEqual(r.line, 'aa')
  1697.         self.assertEqual(r.line_cursor, 2)
  1698.         self.assert_(r.vi_is_insert_mode)
  1699.         r.input('Control-n')
  1700.         self.assertEqual(r.line, 'bbb')
  1701.         self.assertEqual(r.line_cursor, 3)
  1702.         self.assert_(r.vi_is_insert_mode)
  1703.         r.input('Control-n')
  1704.         self.assertEqual(r.line, '')
  1705.         self.assertEqual(r.line_cursor, 0)
  1706.         self.assert_(r.vi_is_insert_mode)
  1707.         r.input('Control-p')
  1708.         self.assertEqual(r.line, 'bbb')
  1709.         self.assertEqual(r.line_cursor, 3)
  1710.         self.assert_(r.vi_is_insert_mode)
  1711.         r.input('Escape')
  1712.         self.assertEqual(r.line, 'bbb')
  1713.         self.assertEqual(r.line_cursor, 2)
  1714.         self.assert_(not (r.vi_is_insert_mode))
  1715.         r.input('Control-p')
  1716.         self.assertEqual(r.line, 'aa')
  1717.         self.assertEqual(r.line_cursor, 0)
  1718.         self.assert_(not (r.vi_is_insert_mode))
  1719.         r.input('Control-n')
  1720.         self.assertEqual(r.line, 'bbb')
  1721.         self.assertEqual(r.line_cursor, 0)
  1722.         self.assert_(not (r.vi_is_insert_mode))
  1723.         r.input('Control-n')
  1724.         self.assertEqual(r.line, '')
  1725.         self.assertEqual(r.line_cursor, 0)
  1726.         self.assert_(not (r.vi_is_insert_mode))
  1727.         r.input('"/a"')
  1728.         r.input('Return')
  1729.         self.assertEqual(r.line, 'aa')
  1730.         self.assertEqual(r.line_cursor, 0)
  1731.         self.assert_(not (r.vi_is_insert_mode))
  1732.         r.input('Control-n')
  1733.         self.assertEqual(r.line, 'bbb')
  1734.         self.assertEqual(r.line_cursor, 0)
  1735.         self.assert_(not (r.vi_is_insert_mode))
  1736.  
  1737.     
  1738.     def test_history_cursor_j_and_k(self):
  1739.         r = ViModeTest()
  1740.         r.add_history('aaa')
  1741.         r.input('Escape')
  1742.         r.input('"kiz"')
  1743.         self.assertEqual(r.line, 'zaaa')
  1744.         r.input('Escape')
  1745.         r.input('"j"')
  1746.         self.assertEqual(r.line, '')
  1747.  
  1748.     
  1749.     def test_history_input_j_and_k(self):
  1750.         r = ViModeTest()
  1751.         r.add_history('aaa')
  1752.         r.input('Escape')
  1753.         r.input('"kAjk"')
  1754.         self.assertEqual(r.line, 'aaajk')
  1755.  
  1756.     
  1757.     def test_history_cursor_search(self):
  1758.         r = ViModeTest()
  1759.         r.add_history('aaa')
  1760.         r.input('Escape')
  1761.         r.input('"/a"')
  1762.         r.input('Return')
  1763.         self.assertEqual(r.line, 'aaa')
  1764.         r.input('"iz"')
  1765.         self.assertEqual(r.line, 'zaaa')
  1766.         self.assertEqual(r.console.bell_count, 0)
  1767.         r.input('Escape')
  1768.         r.input('"j"')
  1769.         self.assertEqual(r.line, 'zaaa')
  1770.  
  1771.     
  1772.     def test_history_undo(self):
  1773.         r = ViModeTest()
  1774.         r.add_history('aaa')
  1775.         r.input('Escape')
  1776.         r.input('"k"')
  1777.         r.input('"A b"')
  1778.         r.input('Escape')
  1779.         r.input('"A c"')
  1780.         r.input('Escape')
  1781.         self.assertEqual(r.line, 'aaa b c')
  1782.         r.input('"U"')
  1783.         self.assertEqual(r.line, 'aaa')
  1784.  
  1785.     
  1786.     def test_history_arrow_undo(self):
  1787.         r = ViModeTest()
  1788.         r.add_history('aaa')
  1789.         r.input('Up')
  1790.         r.input('" zz"')
  1791.         self.assertEqual(r.line, 'aaa zz')
  1792.         r.input('Escape')
  1793.         r.input('"u"')
  1794.         self.assertEqual(r.line, 'aaa')
  1795.  
  1796.     
  1797.     def test_editor(self):
  1798.         vee = ViExternalEditorTest('qwerty before')
  1799.         self.assert_(vee.sio_write.closed)
  1800.         self.assertEqual(vee.command, 'vim.exe temp.py')
  1801.         self.assert_(vee.sio_read.closed)
  1802.         self.assertEqual(vee.remove, 'temp.py')
  1803.         self.assertEqual(vee.result, 'qwerty after')
  1804.  
  1805.     
  1806.     def test_completer(self):
  1807.         r = ViModeTest()
  1808.         r.lst_completions = [
  1809.             'aab',
  1810.             'aac',
  1811.             'aad']
  1812.         r.input('"aa"')
  1813.         r.input('Tab')
  1814.         self.assertEqual(r.line, 'aa')
  1815.         self.assertEqual(r.console.text, '\naab \naac \naad \n')
  1816.  
  1817.     
  1818.     def test_completer_star(self):
  1819.         r = ViModeTest()
  1820.         r.lst_completions = [
  1821.             'bbc',
  1822.             'bbd',
  1823.             'bbe']
  1824.         r.input('"aa bb"')
  1825.         r.input('Escape')
  1826.         self.assert_(not (r.vi_is_insert_mode))
  1827.         r.input('"*"')
  1828.         self.assertEqual(r.line, 'aa bbc bbd bbe ')
  1829.         self.assertEqual(r.line_cursor, 15)
  1830.         self.assert_(r.vi_is_insert_mode)
  1831.         self.assertEqual(r.console.text, '')
  1832.         r.input('" "')
  1833.         r.input('Escape')
  1834.         self.assertEqual(r.line, 'aa bbc bbd bbe  ')
  1835.         self.assertEqual(r.line_cursor, 15)
  1836.         r.input('"."')
  1837.         self.assertEqual(r.line, 'aa bbc bbd bbe bbc bbd bbe ')
  1838.         self.assertEqual(r.line_cursor, 27)
  1839.  
  1840.     
  1841.     def test_completer_beginning_of_line(self):
  1842.         r = ViModeTest()
  1843.         r.input('Tab')
  1844.         self.assertEqual(r.line, '    ')
  1845.         self.assertEqual(r.line_cursor, 4)
  1846.         r.input('Space')
  1847.         self.assertEqual(r.line, '     ')
  1848.         self.assertEqual(r.line_cursor, 5)
  1849.         r.input('Tab')
  1850.         self.assertEqual(r.line, '        ')
  1851.         self.assertEqual(r.line_cursor, 8)
  1852.         r.input('Space')
  1853.         r.input('Space')
  1854.         r.input('Space')
  1855.         self.assertEqual(r.line, '           ')
  1856.         self.assertEqual(r.line_cursor, 11)
  1857.         r.input('Tab')
  1858.         self.assertEqual(r.line, '            ')
  1859.         self.assertEqual(r.line_cursor, 12)
  1860.         r.input('Tab')
  1861.         self.assertEqual(r.line, '                ')
  1862.         self.assertEqual(r.line_cursor, 16)
  1863.  
  1864.     
  1865.     def test_replace_lower(self):
  1866.         r = ViModeTest()
  1867.         r._set_line('aaa bbb ccc')
  1868.         r.input('Escape')
  1869.         r.input('"0ry"')
  1870.         self.assertEqual(r.line, 'yaa bbb ccc')
  1871.         self.assertEqual(r.line_cursor, 0)
  1872.         self.assert_(not (r.vi_is_insert_mode))
  1873.         r.input('"i"')
  1874.         self.assertEqual(r.line, 'yaa bbb ccc')
  1875.         self.assertEqual(r.line_cursor, 0)
  1876.         self.assert_(r.vi_is_insert_mode)
  1877.         r.input('"x"')
  1878.         self.assertEqual(r.line, 'xyaa bbb ccc')
  1879.         self.assertEqual(r.line_cursor, 1)
  1880.         self.assert_(r.vi_is_insert_mode)
  1881.         r.input('Escape')
  1882.         self.assertEqual(r.line, 'xyaa bbb ccc')
  1883.         self.assertEqual(r.line_cursor, 0)
  1884.         self.assert_(not (r.vi_is_insert_mode))
  1885.         r.input('"ll"')
  1886.         r.input('"2rz"')
  1887.         self.assertEqual(r.line, 'xyzz bbb ccc')
  1888.         self.assertEqual(r.line_cursor, 3)
  1889.         self.assert_(not (r.vi_is_insert_mode))
  1890.         r.input('"w7."')
  1891.         self.assertEqual(r.line, 'xyzz zzzzzzz')
  1892.         self.assertEqual(r.line_cursor, 11)
  1893.         self.assert_(not (r.vi_is_insert_mode))
  1894.  
  1895.     
  1896.     def test_replace_lower_undo(self):
  1897.         r = ViModeTest()
  1898.         r._set_line('aaa')
  1899.         r.input('Escape')
  1900.         r.input('"0rz"')
  1901.         self.assertEqual(r.line, 'zaa')
  1902.         r.input('"u"')
  1903.         self.assertEqual(r.line, 'aaa')
  1904.         r.input('"2."')
  1905.         self.assertEqual(r.line, 'zza')
  1906.         r.input('"u"')
  1907.         self.assertEqual(r.line, 'aaa')
  1908.  
  1909.     
  1910.     def test_replace_lower_escape(self):
  1911.         r = ViModeTest()
  1912.         r._set_line('aaa')
  1913.         r.input('Escape')
  1914.         r.input('"0r"')
  1915.         self.assertEqual(r.line, 'aaa')
  1916.         r.input('Escape')
  1917.         self.assertEqual(r.line, 'aaa')
  1918.         r.input('"r"')
  1919.         self.assertEqual(r.line, 'aaa')
  1920.         r.input('"z"')
  1921.         self.assertEqual(r.line, 'zaa')
  1922.  
  1923.     
  1924.     def test_replace_lower_escape_undo(self):
  1925.         r = ViModeTest()
  1926.         r._set_line('aa bb cc')
  1927.         r.input('Escape')
  1928.         r.input('"0cwdd"')
  1929.         r.input('Escape')
  1930.         self.assertEqual(r.line, 'dd bb cc')
  1931.         r.input('"wr"')
  1932.         r.input('Escape')
  1933.         self.assertEqual(r.line, 'dd bb cc')
  1934.         r.input('"."')
  1935.         self.assertEqual(r.line, 'dd dd cc')
  1936.         r.input('"u"')
  1937.         self.assertEqual(r.line, 'dd bb cc')
  1938.         r.input('"u"')
  1939.         self.assertEqual(r.line, 'aa bb cc')
  1940.  
  1941.     
  1942.     def test_replace_dot(self):
  1943.         r = ViModeTest()
  1944.         r._set_line('ab')
  1945.         r.input('Escape')
  1946.         r.input('"0rzl"')
  1947.         self.assertEqual(r.line, 'zb')
  1948.         self.assertEqual(r.line_cursor, 1)
  1949.         self.assert_(not (r.vi_is_insert_mode))
  1950.         r.input('"r."')
  1951.         self.assertEqual(r.line, 'z.')
  1952.         self.assertEqual(r.line_cursor, 1)
  1953.         self.assert_(not (r.vi_is_insert_mode))
  1954.  
  1955.     
  1956.     def test_replace_upper(self):
  1957.         r = ViModeTest()
  1958.         r._set_line('aaa bbb')
  1959.         r.input('Escape')
  1960.         r.input('"0wR"')
  1961.         self.assertEqual(r.line, 'aaa bbb')
  1962.         self.assertEqual(r.line_cursor, 4)
  1963.         self.assert_(r.vi_is_insert_mode)
  1964.         r.input('"z"')
  1965.         self.assertEqual(r.line, 'aaa zbb')
  1966.         self.assertEqual(r.line_cursor, 5)
  1967.         self.assert_(r.vi_is_insert_mode)
  1968.         r.input('"zzz"')
  1969.         self.assertEqual(r.line, 'aaa zzzz')
  1970.         self.assertEqual(r.line_cursor, 8)
  1971.         self.assert_(r.vi_is_insert_mode)
  1972.         r.input('Escape')
  1973.         self.assertEqual(r.line_cursor, 7)
  1974.         self.assert_(not (r.vi_is_insert_mode))
  1975.  
  1976.     
  1977.     def test_replace_upper_dot(self):
  1978.         r = ViModeTest()
  1979.         r._set_line('aaa bbb ccc ddd')
  1980.         r.input('Escape')
  1981.         r.input('"02Rz"')
  1982.         r.input('Escape')
  1983.         self.assertEqual(r.line, 'zza bbb ccc ddd')
  1984.         self.assertEqual(r.line_cursor, 1)
  1985.         self.assert_(not (r.vi_is_insert_mode))
  1986.         r.input('"w."')
  1987.         self.assertEqual(r.line, 'zza zzb ccc ddd')
  1988.         self.assertEqual(r.line_cursor, 5)
  1989.         self.assert_(not (r.vi_is_insert_mode))
  1990.         r.input('"w6."')
  1991.         self.assertEqual(r.line, 'zza zzb zzzzzzd')
  1992.         self.assertEqual(r.line_cursor, 13)
  1993.         self.assert_(not (r.vi_is_insert_mode))
  1994.  
  1995.     
  1996.     def test_replace_upper_undo(self):
  1997.         r = ViModeTest()
  1998.         r._set_line('aaa bbb ccc')
  1999.         r.input('Escape')
  2000.         r.input('"0Rzz"')
  2001.         r.input('Escape')
  2002.         self.assertEqual(r.line, 'zza bbb ccc')
  2003.         r.input('"w3."')
  2004.         self.assertEqual(r.line, 'zza zzzzzzc')
  2005.         r.input('"u"')
  2006.         self.assertEqual(r.line, 'zza bbb ccc')
  2007.         r.input('"u"')
  2008.         self.assertEqual(r.line, 'aaa bbb ccc')
  2009.  
  2010.     
  2011.     def test_replace_backspace_and_dot(self):
  2012.         r = ViModeTest()
  2013.         r._set_line('aa bb')
  2014.         r.input('Escape')
  2015.         r.input('"0wRc"')
  2016.         self.assertEqual(r.line, 'aa cb')
  2017.         self.assertEqual(r.line_cursor, 4)
  2018.         self.assert_(r.vi_is_insert_mode)
  2019.         r.input('"c"')
  2020.         self.assertEqual(r.line, 'aa cc')
  2021.         self.assertEqual(r.line_cursor, 5)
  2022.         r.input('"c"')
  2023.         self.assertEqual(r.line, 'aa ccc')
  2024.         self.assertEqual(r.line_cursor, 6)
  2025.         r.input('BackSpace')
  2026.         self.assertEqual(r.line, 'aa cc')
  2027.         self.assertEqual(r.line_cursor, 5)
  2028.         self.assert_(r.vi_is_insert_mode)
  2029.         r.input('BackSpace')
  2030.         self.assertEqual(r.line, 'aa cb')
  2031.         self.assertEqual(r.line_cursor, 4)
  2032.         self.assert_(r.vi_is_insert_mode)
  2033.         r.input('BackSpace')
  2034.         self.assertEqual(r.line, 'aa bb')
  2035.         self.assertEqual(r.line_cursor, 3)
  2036.         self.assert_(r.vi_is_insert_mode)
  2037.         r.input('BackSpace')
  2038.         self.assertEqual(r.line, 'aa bb')
  2039.         self.assertEqual(r.line_cursor, 2)
  2040.         self.assert_(r.vi_is_insert_mode)
  2041.         r.input('"d"')
  2042.         self.assertEqual(r.line, 'aadbb')
  2043.         self.assertEqual(r.line_cursor, 3)
  2044.         self.assert_(r.vi_is_insert_mode)
  2045.         r.input('Escape')
  2046.         self.assertEqual(r.line, 'aadbb')
  2047.         self.assertEqual(r.line_cursor, 2)
  2048.         self.assert_(not (r.vi_is_insert_mode))
  2049.         r.input('"u"')
  2050.         self.assertEqual(r.line, 'aa bb')
  2051.         self.assertEqual(r.line_cursor, 3)
  2052.         self.assert_(not (r.vi_is_insert_mode))
  2053.         r.input('"hh"')
  2054.         r.input('"."')
  2055.         self.assertEqual(r.line, 'da bb')
  2056.         self.assert_(not (r.vi_is_insert_mode))
  2057.  
  2058.     
  2059.     def test_yank_line(self):
  2060.         r = ViModeTest()
  2061.         r._set_line('aa bb')
  2062.         r.input('Escape')
  2063.         r.input('"0wY"')
  2064.         self.assertEqual(r.line, 'aa bb')
  2065.         self.assert_(not (r.vi_is_insert_mode))
  2066.         r.input('"P"')
  2067.         self.assertEqual(r.line, 'aa aa bbbb')
  2068.         self.assert_(not (r.vi_is_insert_mode))
  2069.         r.input('"u"')
  2070.         self.assertEqual(r.line, 'aa bb')
  2071.         self.assert_(not (r.vi_is_insert_mode))
  2072.  
  2073.     
  2074.     def test_column(self):
  2075.         r = ViModeTest()
  2076.         r._set_line('aaa bbb')
  2077.         r.input('Escape')
  2078.         r.input('"099|"')
  2079.         self.assertEqual(r.line, 'aaa bbb')
  2080.         self.assertEqual(r.line_cursor, 6)
  2081.         r.input('"4|"')
  2082.         self.assertEqual(r.line, 'aaa bbb')
  2083.         self.assertEqual(r.line_cursor, 3)
  2084.         r.input('"d1|"')
  2085.         self.assertEqual(r.line, ' bbb')
  2086.         self.assertEqual(r.line_cursor, 0)
  2087.         r.input('"u"')
  2088.         self.assertEqual(r.line, 'aaa bbb')
  2089.         self.assertEqual(r.line_cursor, 3)
  2090.         r.input('"d7|"')
  2091.         self.assertEqual(r.line, 'aaab')
  2092.         self.assertEqual(r.line_cursor, 3)
  2093.  
  2094.     
  2095.     def test_change_case(self):
  2096.         r = ViModeTest()
  2097.         r._set_line('aaa B7B ccc')
  2098.         r.input('Escape')
  2099.         r.input('"0~"')
  2100.         self.assertEqual(r.line, 'Aaa B7B ccc')
  2101.         self.assertEqual(r.line_cursor, 1)
  2102.         self.assert_(not (r.vi_is_insert_mode))
  2103.         r.input('"h."')
  2104.         self.assertEqual(r.line, 'aaa B7B ccc')
  2105.         self.assertEqual(r.line_cursor, 1)
  2106.         self.assert_(not (r.vi_is_insert_mode))
  2107.         r.input('"9~"')
  2108.         self.assertEqual(r.line, 'aAA b7b CCc')
  2109.         self.assertEqual(r.line_cursor, 10)
  2110.         self.assert_(not (r.vi_is_insert_mode))
  2111.         r.input('"u"')
  2112.         self.assertEqual(r.line, 'aaa B7B ccc')
  2113.         self.assertEqual(r.line_cursor, 1)
  2114.         self.assert_(not (r.vi_is_insert_mode))
  2115.  
  2116.     
  2117.     def test_redo(self):
  2118.         r = ViModeTest()
  2119.         r._set_line('')
  2120.         r.input('Escape')
  2121.         r.input('"Saaa"')
  2122.         self.assertEqual(r.line, 'aaa')
  2123.         r.input('Escape')
  2124.         r.input('"Sbbb"')
  2125.         self.assertEqual(r.line, 'bbb')
  2126.         r.input('Escape')
  2127.         r.input('"Sccc"')
  2128.         r.input('Escape')
  2129.         self.assertEqual(r.line, 'ccc')
  2130.         r.input('"u"')
  2131.         self.assertEqual(r.line, 'bbb')
  2132.         r.input('Control-r')
  2133.         self.assertEqual(r.line, 'ccc')
  2134.         r.input('"u"')
  2135.         self.assertEqual(r.line, 'bbb')
  2136.         r.input('"u"')
  2137.         self.assertEqual(r.line, 'aaa')
  2138.         r.input('"u"')
  2139.         self.assertEqual(r.line, '')
  2140.         r.input('"u"')
  2141.         self.assertEqual(r.line, '')
  2142.         r.input('Control-r')
  2143.         self.assertEqual(r.line, 'aaa')
  2144.         r.input('Control-r')
  2145.         self.assertEqual(r.line, 'bbb')
  2146.         r.input('Control-r')
  2147.         self.assertEqual(r.line, 'ccc')
  2148.         r.input('Control-r')
  2149.         self.assertEqual(r.line, 'ccc')
  2150.         r.input('"u"')
  2151.         self.assertEqual(r.line, 'bbb')
  2152.         r.input('"Szzz"')
  2153.         r.input('Escape')
  2154.         self.assertEqual(r.line, 'zzz')
  2155.         r.input('"u"')
  2156.         self.assertEqual(r.line, 'bbb')
  2157.         r.input('Control-r')
  2158.         self.assertEqual(r.line, 'zzz')
  2159.         r.input('"U"')
  2160.         self.assertEqual(r.line, '')
  2161.         r.input('Control-r')
  2162.         self.assertEqual(r.line, 'aaa')
  2163.         r.input('Control-r')
  2164.         self.assertEqual(r.line, 'bbb')
  2165.         r.input('Control-r')
  2166.         self.assertEqual(r.line, 'zzz')
  2167.         r.input('Control-r')
  2168.         self.assertEqual(r.line, 'zzz')
  2169.  
  2170.  
  2171. if __name__ == '__main__':
  2172.     Tester()
  2173.     tested = ViModeTest.tested_commands.keys()
  2174.     tested.sort()
  2175.     print ' Tested functions '.center(60, '-')
  2176.     print '\n'.join(tested)
  2177.     print 
  2178.     all_funcs = []([ (x.__name__, x) for x in ViModeTest().key_dispatch.values() ])
  2179.     all_funcs = all_funcs.keys()
  2180.     not_tested = [] if x not in tested else _[2]
  2181.     not_tested.sort()
  2182.     print ' Not tested functions '.center(60, '-')
  2183.     print '\n'.join(not_tested)
  2184.  
  2185.