2017-05-19 15:10:25 +02:00
|
|
|
from unittest.mock import Mock
|
|
|
|
from unittest.mock import MagicMock
|
2017-05-19 16:51:34 +02:00
|
|
|
from pyfakefs import fake_filesystem_unittest
|
2019-05-07 09:01:18 +02:00
|
|
|
import pynvim
|
2017-05-19 16:51:34 +02:00
|
|
|
import os
|
2017-05-19 15:10:25 +02:00
|
|
|
|
|
|
|
from python3.neotags import NeotagsPlugin
|
|
|
|
|
|
|
|
|
2017-05-19 16:51:34 +02:00
|
|
|
class TestNeotagsPlugin(fake_filesystem_unittest.TestCase):
|
2017-05-19 15:10:25 +02:00
|
|
|
|
|
|
|
def setUp(self):
|
2017-05-19 16:51:34 +02:00
|
|
|
self.templates_dirname = os.path.join(
|
|
|
|
os.path.dirname(__file__),
|
|
|
|
'templates'
|
|
|
|
)
|
|
|
|
self.setUpPyfakefs()
|
2019-05-07 09:01:18 +02:00
|
|
|
self.plugin = NeotagsPlugin(Mock(pynvim.api.nvim))
|
2017-05-19 15:10:25 +02:00
|
|
|
|
|
|
|
def test_default_options(self):
|
|
|
|
self.assertEqual('ctags', self.plugin.options['ctags_cmd'])
|
|
|
|
self.assertEqual('tags', self.plugin.options['tags_filename'])
|
|
|
|
self.assertEqual(False, self.plugin.options['logging'])
|
|
|
|
|
2017-08-21 11:14:24 +02:00
|
|
|
def test_custom_options(self):
|
2017-05-19 15:10:25 +02:00
|
|
|
self.plugin.nvim.configure_mock(vars={})
|
|
|
|
self.plugin.nvim.vars['neotags_tags_filename'] = 'new_tags'
|
|
|
|
self.plugin.nvim.vars['neotags_ctags_cmd'] = 'new_ctags'
|
|
|
|
self.plugin.nvim.vars['neotags_logging'] = True
|
|
|
|
|
|
|
|
self.plugin.update_settings()
|
|
|
|
|
|
|
|
self.assertEqual('new_tags', self.plugin.options['tags_filename'])
|
|
|
|
self.assertEqual('new_ctags', self.plugin.options['ctags_cmd'])
|
|
|
|
self.assertEqual(True, self.plugin.options['logging'])
|
|
|
|
|
|
|
|
def test_debug_logs_to_nvim_when_logging_is_active(self):
|
|
|
|
self.plugin.options['logging'] = True
|
|
|
|
self.plugin.nvim.out_write = MagicMock()
|
|
|
|
|
|
|
|
self.plugin.debug('some message')
|
|
|
|
self.plugin.nvim.out_write.assert_called_once_with(
|
|
|
|
"neotags > some message\n"
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_debug_does_not_log_to_nvim_when_logging_is_inactive(self):
|
|
|
|
self.plugin.options['logging'] = False
|
|
|
|
self.plugin.nvim.out_write = MagicMock()
|
|
|
|
|
|
|
|
self.plugin.debug('some message')
|
|
|
|
self.plugin.nvim.out_write.assert_not_called()
|
|
|
|
|
|
|
|
def test_error_logs_to_nvim_when_logging_is_active(self):
|
|
|
|
self.plugin.options['logging'] = True
|
|
|
|
self.plugin.nvim.err_write = MagicMock()
|
|
|
|
|
|
|
|
self.plugin.error('some message')
|
|
|
|
self.plugin.nvim.err_write.assert_called_once_with(
|
|
|
|
"neotags > some message\n"
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_error_does_not_log_to_nvim_when_logging_is_inactive(self):
|
|
|
|
self.plugin.options['logging'] = False
|
|
|
|
self.plugin.nvim.err_write = MagicMock()
|
|
|
|
|
|
|
|
self.plugin.error('some message')
|
|
|
|
self.plugin.nvim.err_write.assert_not_called()
|
2017-05-19 16:51:34 +02:00
|
|
|
|
|
|
|
def test_get_tags_file_in_same_folder(self):
|
|
|
|
filename = '/var/data/some_file.py'
|
|
|
|
expected_tags_filename = '/var/data/tags'
|
|
|
|
|
|
|
|
self.fs.CreateFile(filename)
|
|
|
|
self.fs.CreateFile(expected_tags_filename)
|
|
|
|
|
|
|
|
self.assertEqual(
|
|
|
|
expected_tags_filename,
|
|
|
|
self.plugin.get_tags_file(filename)
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_get_tags_file_in_parent_folder(self):
|
|
|
|
filename = '/var/data/some_file.py'
|
|
|
|
expected_tags_filename = '/var/tags'
|
|
|
|
|
|
|
|
self.fs.CreateFile(filename)
|
|
|
|
self.fs.CreateFile(expected_tags_filename)
|
|
|
|
|
|
|
|
self.assertEqual(
|
|
|
|
expected_tags_filename,
|
|
|
|
self.plugin.get_tags_file(filename)
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_get_tags_file_in_root_folder(self):
|
|
|
|
filename = '/var/data/some_file.py'
|
|
|
|
expected_tags_filename = '/tags'
|
|
|
|
|
|
|
|
self.fs.CreateFile(filename)
|
|
|
|
self.fs.CreateFile(expected_tags_filename)
|
|
|
|
|
|
|
|
self.assertEqual(
|
|
|
|
expected_tags_filename,
|
|
|
|
self.plugin.get_tags_file(filename)
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_strips_existing_tags(self):
|
|
|
|
filename = '/var/data/example.py'
|
|
|
|
tags_file = '/var/data/tags'
|
|
|
|
expected_tags_file = os.path.join(
|
|
|
|
self.templates_dirname,
|
|
|
|
'expected_tags'
|
|
|
|
)
|
|
|
|
|
2017-05-19 16:52:06 +02:00
|
|
|
self.copyRealFile(
|
|
|
|
expected_tags_file,
|
|
|
|
expected_tags_file
|
|
|
|
)
|
2017-05-19 16:51:34 +02:00
|
|
|
self.copyRealFile(
|
|
|
|
os.path.join(self.templates_dirname, 'example.py'),
|
|
|
|
os.path.join(os.path.dirname(filename), os.path.basename(filename))
|
|
|
|
)
|
|
|
|
self.copyRealFile(
|
|
|
|
os.path.join(self.templates_dirname, 'tags'),
|
|
|
|
os.path.join(
|
|
|
|
os.path.dirname(tags_file), os.path.basename(tags_file)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
self.plugin.strip_existing_tags(tags_file, os.path.basename(filename))
|
|
|
|
with open(tags_file) as f, open(expected_tags_file) as e:
|
|
|
|
self.assertEqual(e.read(), f.read())
|