Add tests for visual_range
This commit is contained in:
parent
702f43858b
commit
117661e186
|
@ -589,8 +589,50 @@ class TestVim(TestCase):
|
|||
self.assertEqual(vim.mode(pl=pl, segment_info=segment_info, override={'^V': 'VBLK'}), 'VBLK')
|
||||
|
||||
def test_visual_range(self):
|
||||
# TODO
|
||||
pass
|
||||
pl = Pl()
|
||||
vr = partial(vim.visual_range, pl=pl)
|
||||
vim_module.current.window.cursor = [0, 0]
|
||||
try:
|
||||
with vim_module._with('mode', 'i') as segment_info:
|
||||
self.assertEqual(vr(segment_info=segment_info), '')
|
||||
with vim_module._with('mode', '^V') as segment_info:
|
||||
self.assertEqual(vr(segment_info=segment_info), '1 × 1')
|
||||
with vim_module._with('vpos', line=5, col=5, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), '5 × 5')
|
||||
with vim_module._with('vpos', line=5, col=4, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), '5 × 4')
|
||||
with vim_module._with('mode', '^S') as segment_info:
|
||||
self.assertEqual(vr(segment_info=segment_info), '1 × 1')
|
||||
with vim_module._with('vpos', line=5, col=5, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), '5 × 5')
|
||||
with vim_module._with('vpos', line=5, col=4, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), '5 × 4')
|
||||
with vim_module._with('mode', 'V') as segment_info:
|
||||
self.assertEqual(vr(segment_info=segment_info), 'L:1')
|
||||
with vim_module._with('vpos', line=5, col=5, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), 'L:5')
|
||||
with vim_module._with('vpos', line=5, col=4, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), 'L:5')
|
||||
with vim_module._with('mode', 'S') as segment_info:
|
||||
self.assertEqual(vr(segment_info=segment_info), 'L:1')
|
||||
with vim_module._with('vpos', line=5, col=5, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), 'L:5')
|
||||
with vim_module._with('vpos', line=5, col=4, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), 'L:5')
|
||||
with vim_module._with('mode', 'v') as segment_info:
|
||||
self.assertEqual(vr(segment_info=segment_info), 'C:1')
|
||||
with vim_module._with('vpos', line=5, col=5, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), 'L:5')
|
||||
with vim_module._with('vpos', line=5, col=4, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), 'L:5')
|
||||
with vim_module._with('mode', 's') as segment_info:
|
||||
self.assertEqual(vr(segment_info=segment_info), 'C:1')
|
||||
with vim_module._with('vpos', line=5, col=5, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), 'L:5')
|
||||
with vim_module._with('vpos', line=5, col=4, off=0):
|
||||
self.assertEqual(vr(segment_info=segment_info), 'L:5')
|
||||
finally:
|
||||
vim_module._close(1)
|
||||
|
||||
def test_modified_indicator(self):
|
||||
pl = Pl()
|
||||
|
|
30
tests/vim.py
30
tests/vim.py
|
@ -342,15 +342,22 @@ def _emul_setwinvar(winnr, varname, value):
|
|||
|
||||
@_vim
|
||||
def _emul_virtcol(expr):
|
||||
if expr == '.' or isinstance(expr, list):
|
||||
if expr == '.':
|
||||
return current.window.cursor[1] + 1
|
||||
if isinstance(expr, list) and len(expr) == 3:
|
||||
return expr[-2] + expr[-1]
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
_v_pos = None
|
||||
|
||||
|
||||
@_vim
|
||||
def _emul_getpos(expr):
|
||||
if expr == '.' or expr == 'v':
|
||||
if expr == '.':
|
||||
return [0, current.window.cursor[0] + 1, current.window.cursor[1] + 1, 0]
|
||||
if expr == 'v':
|
||||
return _v_pos or [0, current.window.cursor[0] + 1, current.window.cursor[1] + 1, 0]
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
|
@ -848,6 +855,23 @@ class _WithNewTabPage(object):
|
|||
self.tab._close()
|
||||
|
||||
|
||||
class _WithGlobal(object):
|
||||
def __init__(self, **kwargs):
|
||||
self.kwargs = kwargs
|
||||
|
||||
def __enter__(self):
|
||||
self.empty = object()
|
||||
self.old = dict(((key, globals().get(key, self.empty)) for key in self.kwargs))
|
||||
globals().update(self.kwargs)
|
||||
|
||||
def __exit__(self, *args):
|
||||
for k, v in self.old.items():
|
||||
if v is self.empty:
|
||||
globals().pop(k, None)
|
||||
else:
|
||||
globals()[k] = v
|
||||
|
||||
|
||||
@_vim
|
||||
def _with(key, *args, **kwargs):
|
||||
if key == 'buffer':
|
||||
|
@ -870,6 +894,8 @@ def _with(key, *args, **kwargs):
|
|||
return _WithSplit()
|
||||
elif key == 'tabpage':
|
||||
return _WithNewTabPage(*args, **kwargs)
|
||||
elif key == 'vpos':
|
||||
return _WithGlobal(_v_pos=[0, kwargs['line'], kwargs['col'], kwargs['off']])
|
||||
|
||||
|
||||
class error(Exception):
|
||||
|
|
Loading…
Reference in New Issue