示例#1
0
    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)])
示例#3
0
    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))
示例#4
0
    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))
示例#5
0
    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))
示例#6
0
    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))
示例#7
0
    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))
示例#8
0
    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))
示例#9
0
    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))
示例#10
0
    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))
示例#11
0
    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))
示例#12
0
    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))
示例#13
0
    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))
示例#14
0
    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))
示例#15
0
    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))
示例#16
0
    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))
示例#17
0
    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))
示例#18
0
    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))
示例#19
0
    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))
示例#20
0
    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))
示例#21
0
    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))
示例#22
0
    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))
示例#23
0
    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))
示例#24
0
    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))
示例#25
0
    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))
示例#26
0
    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))
示例#27
0
    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))
示例#28
0
    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))
示例#29
0
    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))
示例#30
0
    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))
示例#31
0
    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)])
示例#33
0
    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))
示例#34
0
    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)])
示例#36
0
    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))
示例#37
0
    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)])
示例#39
0
    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))
示例#40
0
    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))
示例#41
0
    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))
示例#42
0
    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))
示例#43
0
    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))
示例#44
0
    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))
示例#45
0
    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))
示例#46
0
    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))
示例#47
0
    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)])
示例#49
0
    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))
示例#50
0
    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))
示例#51
0
    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))
示例#52
0
    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))
示例#53
0
    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))
示例#54
0
    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))
示例#55
0
    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))
示例#56
0
    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))
示例#57
0
    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))
示例#58
0
    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))
示例#59
0
    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))
示例#60
0
    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))