try:
import unittest2 as unittest
except ImportError:
import unittest
from unittest.mock import Mock
from vimtk._demo.vimmock.mocked import BufferMock
from vimtk._demo.vimmock.mocked import CurrentMock
from vimtk._demo.vimmock.mocked import LineMock
from vimtk._demo.vimmock.mocked import RangeMock
from vimtk._demo.vimmock.mocked import VimMock
from vimtk._demo.vimmock.mocked import WindowMock
import sys
from vimtk._demo import vimmock
[docs]
class TestVimMock(unittest.TestCase):
[docs]
def setUp(self):
self.vim = VimMock()
[docs]
def test_init(self):
self.assertTrue(isinstance(self.vim.current, CurrentMock))
[docs]
def test_setup_text(self):
self.vim.current.buffer = Mock()
self.vim.setup_text('foobar')
self.vim.current.buffer.setup_text.assert_called_once_with('foobar')
[docs]
def test_open_file(self):
filepath = vimmock.mocked.__file__.replace('*.pyc', '*.py')
self.vim.open_file(filepath)
assert self.vim.current.buffer.name == filepath
[docs]
def test_eval(self):
assert self.vim.eval('&encoding') == 'utf-8'
with self.assertRaises(NotImplementedError):
self.vim.eval(':e ~')
[docs]
class TestBufferMock(unittest.TestCase):
[docs]
def setUp(self):
self.buffer = BufferMock('foo\nbar\nbaz')
[docs]
def test_getitem(self):
self.assertEqual(self.buffer[0], 'foo')
self.assertEqual(self.buffer[1], 'bar')
self.assertEqual(self.buffer[2], 'baz')
self.assertEqual(self.buffer[-1], 'baz')
with self.assertRaises(TypeError):
self.buffer['1']
[docs]
def test_getitem_range(self):
self.assertEqual(self.buffer[:1], ['foo'])
self.assertEqual(self.buffer[1:5], ['bar', 'baz'])
[docs]
def test_setitem(self):
self.buffer[0] = 'new foo'
self.assertEqual(self.buffer[0], 'new foo')
self.assertEqual(self.buffer[1], 'bar')
with self.assertRaises(TypeError):
self.buffer['1'] = 'foo'
[docs]
def test_setitem_range(self):
self.buffer[:2] = ['aaa', 'bbb']
self.assertEqual(self.buffer[:2], ['aaa', 'bbb'])
[docs]
def test_setup_text(self):
self.buffer.setup_text('\n'.join(('foo', 'bar')))
[docs]
def test_append(self):
self.buffer.append(['spam'])
assert self.buffer._text == 'foo\nbar\nbaz\nspam'
[docs]
class TestCurrentMock(unittest.TestCase):
[docs]
def setUp(self):
self.current = CurrentMock()
[docs]
def test_init(self):
self.assertTrue(isinstance(self.current.buffer, BufferMock))
self.assertTrue(isinstance(self.current.line, LineMock))
self.assertTrue(isinstance(self.current.window, WindowMock))
self.assertTrue(isinstance(self.current.range, RangeMock))
[docs]
class TestPatch(unittest.TestCase):
[docs]
def test_patch_vim(self):
sys.modules['vim'] = object()
vimmock.patch_vim()
self.assertIsInstance(sys.modules['vim'], VimMock)
if __name__ == '__main__':
unittest.main()