def testMoveToEndOfWord_OnLastLine_WithTrailingWhitespace(self): set_text(self.view, 'abc\nabc\nabc ') add_sel(self.view, self.R((2, 0), (2, 0))) self.view.run_command('_vi_e', {'mode': MODE_NORMAL, 'count': 1}) self.assertEqual(self.R((2, 2), (2, 2)), first_sel(self.view)) self.view.run_command('_vi_e', {'mode': MODE_NORMAL, 'count': 1}) self.assertEqual(self.R((2, 5), (2, 5)), first_sel(self.view))
def testRepeatPartial(self): self.write('foo\nabc\nbar\nabcxmoo\nabc\nend') self.clear_sel() self.add_sel(self.R(0, 0)) self.view.run_command('_vi_question_mark_impl', {'mode': modes.NORMAL, 'search_string': 'abc'}) self.state.last_buffer_search_command = 'vi_question_mark' self.assertEqual(self.R(20, 20), first_sel(self.view)) self.view.run_command('_vi_repeat_buffer_search', {'mode': modes.NORMAL, 'reverse': False}) self.assertEqual(self.R(12, 12), first_sel(self.view)) self.assertEqual(self.view.get_regions('vi_search'), [self.R(4, 7), self.R(12, 15), self.R(20, 23)])
def testMoveToEndOfWord_OnLastLine_WithTrailingWhitespace(self): self.write('abc\nabc\nabc ') self.clear_sel() self.add_sel(self.R((2, 0), (2, 0))) self.view.run_command('_vi_e', {'mode': modes.NORMAL, 'count': 1}) self.assertEqual(self.R((2, 2), (2, 2)), first_sel(self.view)) self.view.run_command('_vi_e', {'mode': modes.NORMAL, 'count': 1}) self.assertEqual(self.R((2, 5), (2, 5)), first_sel(self.view))
def testExtendsSelection(self): self.write('abc\nabc\n') self.clear_sel() self.add_sel(self.R((0, 4), (0, 8))) self.view.run_command('_vi_gg', {'mode': modes.VISUAL_LINE}) self.assertEqual(self.R((0, 0), (0, 8)), first_sel(self.view))
def testCanMoveInModeVisualLine(self): self.write('abc\nabc\n') self.clear_sel() self.add_sel(self.R((0, 0), (0, 4))) self.view.run_command('_vi_gg', {'mode': modes.VISUAL_LINE}) self.assertEqual(self.R((0, 0), (0, 4)), first_sel(self.view))
def testCanMoveReversedCrossOverLargeCount(self): self.write('abc') self.clear_sel() self.add_sel(a=1, b=3) self.view.run_command('_vi_h', {'mode': modes.VISUAL, 'count': 100}) self.assertEqual(self.R(2, 0), first_sel(self.view))
def testCanMoveInVisualMode_Reversed(self): self.write('abc\nabc\n') self.clear_sel() self.add_sel(self.R((0, 2), (0, 1))) self.view.run_command('_vi_gg', {'mode': modes.VISUAL}) self.assertEqual(self.R((0, 2), (0, 0)), first_sel(self.view))
def testGoToHardEofIfLastLineIsEmpty(self): self.write("abc\nabc\n") self.clear_sel() self.add_sel(self.R(5, 5)) self.view.run_command("_vi_gg", {"mode": modes.NORMAL}) self.assertEqual(self.R(0, 0), first_sel(self.view))
def testCanMoveInVisualModeWithReversedSelectionCrossOver(self): self.write('abc\nabc\n') self.clear_sel() self.add_sel(a=5, b=4) self.view.run_command('_vi_dollar', {'mode': modes.VISUAL, 'count': 2}) self.assertEqual(self.R(4, 8), first_sel(self.view))
def testCanMoveInModeInternalNormal(self): self.write("abc\nabc\n") self.clear_sel() self.add_sel(self.R(1, 1)) self.view.run_command("_vi_gg", {"mode": modes.INTERNAL_NORMAL}) self.assertEqual(self.R(4, 0), first_sel(self.view))
def testCanMoveInNormalMode(self): self.write('abc\nabc') self.clear_sel() self.add_sel(self.R(5, 5)) self.view.run_command('_vi_gg', {'mode': modes.NORMAL}) self.assertEqual(self.R(0, 0), first_sel(self.view))
def testCanMoveInNormalModeWithCount(self): self.write(''.join(('abc\n',) * 10)) self.clear_sel() self.add_sel(a=0, b=0) self.view.run_command('_vi_dollar', {'mode': modes.NORMAL, 'count': 5}) self.assertEqual(self.R(18, 18), first_sel(self.view))
def testCanMoveInNormalMode(self): self.write('abc\nabc\n') self.clear_sel() self.add_sel(a=0, b=0) self.view.run_command('_vi_dollar', {'mode': modes.NORMAL, 'count': 1}) self.assertEqual(self.R(2, 2), first_sel(self.view))
def testCanMoveInInternalNormalModeWithCount(self): self.write('abc\nabc\nabc\nabc\n') self.clear_sel() self.add_sel(a=0, b=0) self.view.run_command('_vi_dollar', {'mode': modes.INTERNAL_NORMAL, 'count': 3}) self.assertEqual(self.R(0, 12), first_sel(self.view))
def testExtendsSelection(self): self.write("abc\nabc\n") self.clear_sel() self.add_sel(self.R((0, 4), (0, 8))) self.view.run_command("_vi_gg", {"mode": modes.VISUAL_LINE}) self.assertEqual(self.R((0, 0), (0, 8)), first_sel(self.view))
def testCanMoveInVisualLineModeWithReversedSelection(self): self.write('abc\nabc\nabc\nabc\n') self.clear_sel() self.add_sel(a=4, b=0) self.view.run_command('_vi_dollar', {'mode': modes.VISUAL_LINE, 'count': 1}) self.assertEqual(self.R(4, 1), first_sel(self.view))
def testStaysPutOnEmptyLineInVisualMode(self): self.write('abc\n\nabc\n') self.clear_sel() self.add_sel(a=4, b=5) self.view.run_command('_vi_dollar', {'mode': modes.VISUAL, 'count': 1}) self.assertEqual(self.R(4, 5), first_sel(self.view))
def testStopsAtLeftEnd(self): self.write('abc\n') self.clear_sel() self.add_sel(a=1, b=2) self.view.run_command('_vi_h', {'mode': modes.VISUAL, 'count': 10000}) self.assertEqual(self.R(2, 0), first_sel(self.view))
def testCanMoveInNormalMode(self): self.write("abc\nabc") self.clear_sel() self.add_sel(self.R(5, 5)) self.view.run_command("_vi_gg", {"mode": modes.NORMAL}) self.assertEqual(self.R(0, 0), first_sel(self.view))
def testCanMoveInModeInternalNormal(self): self.write('abc\nabc\n') self.clear_sel() self.add_sel(self.R(1, 1)) self.view.run_command('_vi_gg', {'mode': modes.INTERNAL_NORMAL}) self.assertEqual(self.R(4, 0), first_sel(self.view))
def testCanSearch_OppositeEndSmaller_NoCrossOver(self): self.write('foo bar\n') self.clear_sel() add_sel(self.view, self.R((0, 2), (0, 6))) self.view.run_command('_vi_reverse_find_in_line', {'mode': modes.VISUAL, 'count': 1, 'char': 'b', 'inclusive': True}) self.assertEqual(self.R((0, 2), (0, 4)), first_sel(self.view))
def testCanMoveWithCount(self): self.write('foo bar fuzz buzz') self.clear_sel() self.add_sel(a=11, b=12) self.view.run_command('_vi_h', {'mode': modes.VISUAL, 'count': 10}) self.assertEqual(self.R(12, 1), first_sel(self.view))
def testCanMove(self): self.write('abc') self.clear_sel() self.add_sel(a=1, b=2) self.view.run_command('_vi_h', {'mode': modes.VISUAL, 'count': 1}) self.assertEqual(self.R(2, 0), first_sel(self.view))
def testStopsAtLeftEndInInternalNormalMode(self): self.write('abc') self.clear_sel() self.add_sel(a=1, b=1) self.view.run_command('_vi_h', {'mode': modes.INTERNAL_NORMAL, 'count': 10000}) self.assertEqual(self.R(1, 0), first_sel(self.view))
def testCanMoveInInternalNormalModeWithCount(self): self.write('foo bar baz') self.clear_sel() self.add_sel(a=11, b=11) self.view.run_command('_vi_h', {'mode': modes.INTERNAL_NORMAL, 'count': 10}) self.assertEqual(self.R(11, 1), first_sel(self.view))
def testCanMoveInVisualMode(self): self.write('abc\nabc\n') self.clear_sel() self.add_sel(a=0, b=1) self.view.run_command('_vi_dollar', {'mode': modes.VISUAL, 'count': 1}) self.assertEqual(self.R(0, 4), first_sel(self.view))
def testCanMoveInVisualLineModeWithCount(self): self.write('abc\nabc\nabc\nabc\n') self.clear_sel() self.add_sel(a=0, b=4) self.view.run_command('_vi_dollar', {'mode': modes.VISUAL_LINE, 'count': 3}) self.assertEqual(self.R(0, 12), first_sel(self.view))
def testCanMoveInVisualModeWithCount(self): self.write(''.join(('abc\n',) * 10)) self.clear_sel() self.add_sel(a=0, b=1) self.view.run_command('_vi_dollar', {'mode': modes.VISUAL, 'count': 5}) self.assertEqual(self.R(0, 20), first_sel(self.view))
def testGoToHardEofIfLastLineIsEmpty(self): self.write('abc\nabc\n') self.clear_sel() self.add_sel(self.R(5, 5)) self.view.run_command('_vi_gg', {'mode': modes.NORMAL}) self.assertEqual(self.R(0, 0), first_sel(self.view))
def testCanMoveInModeVisualLine(self): self.write("abc\nabc\n") self.clear_sel() self.add_sel(self.R((0, 0), (0, 4))) self.view.run_command("_vi_gg", {"mode": modes.VISUAL_LINE}) self.assertEqual(self.R((0, 0), (0, 4)), first_sel(self.view))
def testSearchEnd(self): self.write('foo\nabc\nbar\nabc\nmoo\nabc\nend') self.clear_sel() self.add_sel(self.R(27, 27)) self.view.run_command('_vi_question_mark_impl', { 'mode': modes.NORMAL, 'search_string': 'abc' }) self.assertEqual(self.R(20, 20), first_sel(self.view))
def testRepeatForward(self): self.write('foo\nabc\nbar\nabc\nmoo\nabc\nend') self.clear_sel() self.add_sel(self.R(0, 0)) self.view.run_command('_vi_slash_impl', { 'mode': modes.NORMAL, 'search_string': 'abc' }) self.state.last_buffer_search_command = 'vi_slash' self.assertEqual(self.R(4, 4), first_sel(self.view)) self.view.run_command('_vi_repeat_buffer_search', { 'mode': modes.NORMAL, 'reverse': False }) self.assertEqual(self.R(12, 12), first_sel(self.view)) self.assertEqual( self.view.get_regions('vi_search'), [self.R(4, 7), self.R(12, 15), self.R(20, 23)])
def testMovesCaretToEol(self): self.write('abc') self.clear_sel() self.add_sel(self.R((0, 0), (0, 2))) self.view.run_command('_vi_big_a', { 'mode': modes.VISUAL_BLOCK, 'count': 1 }) self.assertEqual(self.R(2, 2), first_sel(self.view))
def testCanSearch_OppositeEndSmaller_NoCrossOver(self): set_text(self.view, 'foo bar\n') add_sel(self.view, self.R((0, 2), (0, 6))) self.view.run_command('_vi_reverse_find_in_line', { 'mode': modes.VISUAL, 'count': 1, 'char': 'b', 'inclusive': True }) self.assertEqual(self.R((0, 2), (0, 4)), first_sel(self.view))
def testSelectRepeatMatch(self): self.write('abc\nabc\nfoo\nabc\nbar') self.clear_sel() self.add_sel(self.R(12, 12)) self.view.run_command('_vi_octothorp', {'mode': modes.NORMAL}) self.view.run_command('_vi_octothorp', {'mode': modes.NORMAL}) self.assertEqual(self.R(0, 0), first_sel(self.view)) self.assertEqual( self.view.get_regions('vi_search'), [self.R(0, 3), self.R(4, 7), self.R(12, 15)])
def testMovesCaretToEol(self): set_text(self.view, 'abc\nabc') add_sel(self.view, self.R((0, 0), (0, 4))) self.view.sel().add(self.R((1, 0), (1, 3))) self.view.run_command('_vi_big_a', { 'mode': modes.VISUAL_LINE, 'count': 1 }) self.assertEqual(self.R(3, 3), first_sel(self.view)) self.assertEqual(self.R((1, 3), (1, 3)), second_sel(self.view))
def testMovesCaretToEol(self): set_text(self.view, 'abc\nabc') self.view.sel().add(self.R((0, 1), (0, 1))) self.view.sel().add(self.R((1, 1), (1, 1))) self.view.run_command('_vi_big_a', { 'mode': modes.INTERNAL_NORMAL, 'count': 1 }) self.assertEqual(self.R(3, 3), first_sel(self.view)) self.assertEqual(self.R((1, 3), (1, 3)), second_sel(self.view))
def testRepeatNoPartial(self): self.write('foo\nabc\nbar\nabc\nmoo\nabcxend') self.clear_sel() self.add_sel(self.R(4, 4)) self.view.run_command('_vi_octothorp', {'mode': modes.NORMAL}) self.view.run_command('_vi_repeat_buffer_search', { 'mode': modes.NORMAL, 'reverse': True }) self.assertEqual(self.R(4, 4), first_sel(self.view)) self.assertEqual(self.view.get_regions('vi_search'), [self.R(4, 7), self.R(12, 15)])
def testMoveOntoLongerLine(self): set_text(self.view, 'foo\nfoo bar\nfoo bar') add_sel(self.view, a=1, b=1) self.view.run_command('_vi_j', { 'mode': MODE_NORMAL, 'count': 1, 'xpos': 1 }) target = self.view.text_point(1, 1) expected = self.R(target, target) self.assertEqual(expected, first_sel(self.view))
def testMoveMany(self): set_text(self.view, ''.join(('abc\n', ) * 60)) add_sel(self.view, a=1, b=1) self.view.run_command('_vi_j', { 'mode': MODE_NORMAL, 'count': 50, 'xpos': 1 }) target = self.view.text_point(50, 1) expected = self.R(target, target) self.assertEqual(expected, first_sel(self.view))
def testMoveTooFar(self): set_text(self.view, 'foo\nbar\nbaz') add_sel(self.view, a=1, b=2) self.view.run_command('_vi_j', { 'mode': MODE_VISUAL, 'count': 10000, 'xpos': 1 }) target = self.view.text_point(2, 2) expected = self.R(1, target) self.assertEqual(expected, first_sel(self.view))
def testMoveReversedDownFromSameLine(self): set_text(self.view, 'abc\nabc\nabc') add_sel(self.view, a=6, b=5) self.view.run_command('_vi_j', { 'mode': MODE_VISUAL, 'count': 1, 'xpos': 1 }) target = self.view.text_point(2, 2) expected = self.R(5, target) self.assertEqual(expected, first_sel(self.view))
def testMoveFromEmptyLineToEmptyLine(self): set_text(self.view, '\n\nbar') add_sel(self.view, a=0, b=0) self.view.run_command('_vi_j', { 'mode': MODE_NORMAL, 'count': 1, 'xpos': 0 }) target = self.view.text_point(1, 0) expected = self.R(target, target) self.assertEqual(expected, first_sel(self.view))
def testMoveOne(self): set_text(self.view, 'abc\nabc\nabc') add_sel(self.view, a=1, b=2) self.view.run_command('_vi_j', { 'mode': MODE_VISUAL, 'count': 1, 'xpos': 1 }) target = self.view.text_point(1, 2) expected = self.R(1, target) self.assertEqual(expected, first_sel(self.view))
def testMoveReversedNoCrossOver(self): set_text(self.view, 'abc\nabc\nabc') add_sel(self.view, a=10, b=1) self.view.run_command('_vi_j', { 'mode': MODE_VISUAL, 'count': 1, 'xpos': 1 }) target = self.view.text_point(1, 1) expected = self.R(10, target) self.assertEqual(expected, first_sel(self.view))
def testMoveOne(self): set_text(self.view, 'abc\nabc\nabc') add_sel(self.view, a=1, b=1) self.view.run_command('_vi_j', { 'mode': _MODE_INTERNAL_NORMAL, 'count': 1, 'xpos': 1 }) target = self.view.text_point(1, 0) target = self.view.full_line(target).b expected = self.R(0, target) self.assertEqual(expected, first_sel(self.view))
def testMoveFromEmptyLine(self): set_text(self.view, '\nfoo\nbar') add_sel(self.view, a=0, b=0) self.view.run_command('_vi_j', { 'mode': _MODE_INTERNAL_NORMAL, 'count': 1, 'xpos': 0 }) target = self.view.text_point(1, 0) target = self.view.full_line(target).b expected = self.R(0, target) self.assertEqual(expected, first_sel(self.view))
def testRepeatForward(self): self.write('foo\nabc\nbar\nabc\nmoo\nabc\nend') self.clear_sel() self.add_sel(self.R(4, 4)) self.view.run_command('_vi_star', {'mode': modes.NORMAL}) self.view.run_command('_vi_repeat_buffer_search', { 'mode': modes.NORMAL, 'reverse': False }) self.assertEqual(self.R(20, 20), first_sel(self.view)) self.assertEqual( self.view.get_regions('vi_search'), [self.R(4, 7), self.R(12, 15), self.R(20, 23)])
def testMoveMany(self): set_text(self.view, ''.join(('abc\n', ) * 60)) add_sel(self.view, a=0, b=4) self.view.run_command('_vi_j', { 'mode': MODE_VISUAL_LINE, 'count': 50, 'xpos': 1 }) target = self.view.text_point(50, 0) target = self.view.full_line(target).b expected = self.R(0, target) self.assertEqual(expected, first_sel(self.view))
def testCaretEndsInExpectedRegion(self): set_text(self.view, ''.join(('foo bar\nfoo bar\nfoo bar\n', ))) add_sel(self.view, self.R((1, 3), (1, 0))) state = VintageState(self.view) state.enter_visual_mode() # TODO: we should bypass vi_r and define the values directly. data = CmdData(state) data = vi_r(data) data['action']['args']['character'] = 'X' self.view.run_command('vi_run', data) self.assertEqual(self.R((1, 0), (1, 0)), first_sel(self.view))
def testMoveFromEmptyLineToEmptyLine(self): set_text(self.view, '\n\nbar') add_sel(self.view, a=0, b=1) self.view.run_command('_vi_j', { 'mode': MODE_VISUAL_LINE, 'count': 1, 'xpos': 0 }) target = self.view.text_point(1, 0) target = self.view.full_line(target).b expected = self.R(0, target) self.assertEqual(expected, first_sel(self.view))
def testMoveOntoShorterLine(self): set_text(self.view, 'foo bar\nfoo\nbar') add_sel(self.view, a=5, b=5) self.view.run_command('_vi_j', { 'mode': MODE_NORMAL, 'count': 1, 'xpos': 5 }) target = self.view.text_point(1, 0) target = self.view.line(target).b - 1 expected = self.R(target, target) self.assertEqual(expected, first_sel(self.view))
def testMoveTooFar(self): set_text(self.view, 'foo\nbar\nbaz') add_sel(self.view, a=0, b=4) self.view.run_command('_vi_j', { 'mode': MODE_VISUAL_LINE, 'count': 10000, 'xpos': 1 }) target = self.view.text_point(2, 0) target = self.view.full_line(target).b expected = self.R(0, target) self.assertEqual(expected, first_sel(self.view))
def testCanMoveInNormalMode(self): set_text(self.view, 'abc\nabc') add_sel(self.view, a=0, b=0) self.view.run_command('_vi_big_g', {'mode': MODE_NORMAL, 'count': 1}) self.assertEqual(self.R(6, 6), first_sel(self.view))
def testCanMoveInVisualModeWithReversedSelectionCrossOver(self): set_text(self.view, 'abc\nabc\n') add_sel(self.view, a=5, b=4) self.view.run_command('_vi_dollar', {'mode': MODE_VISUAL, 'count': 2}) self.assertEqual(self.R(4, 8), first_sel(self.view))
def testStaysPutOnEmptyLineInVisualMode(self): set_text(self.view, 'abc\n\nabc\n') add_sel(self.view, a=4, b=5) self.view.run_command('_vi_dollar', {'mode': MODE_VISUAL, 'count': 1}) self.assertEqual(self.R(4, 5), first_sel(self.view))
def testCanMoveInVisualModeWithCount(self): set_text(self.view, ''.join(('abc\n', ) * 10)) add_sel(self.view, a=0, b=1) self.view.run_command('_vi_dollar', {'mode': MODE_VISUAL, 'count': 5}) self.assertEqual(self.R(0, 20), first_sel(self.view))
def testGoToHardEofIfLastLineIsEmpty(self): set_text(self.view, 'abc\nabc\n') add_sel(self.view, a=0, b=0) self.view.run_command('_vi_big_g', {'mode': MODE_NORMAL, 'count': 1}) self.assertEqual(self.R(8, 8), first_sel(self.view))
def testCanMoveInVisualMode(self): set_text(self.view, 'abc\nabc\n') add_sel(self.view, a=0, b=1) self.view.run_command('_vi_big_g', {'mode': MODE_VISUAL, 'count': 1}) self.assertEqual(self.R(0, 8), first_sel(self.view))
def testCanMoveInNormalModeWithCount(self): set_text(self.view, ''.join(('abc\n', ) * 10)) add_sel(self.view, a=0, b=0) self.view.run_command('_vi_dollar', {'mode': MODE_NORMAL, 'count': 5}) self.assertEqual(self.R(18, 18), first_sel(self.view))