--- /dev/null
+import unittest
+import imp
+
+ale_module = imp.load_source(
+ 'deoplete.sources.ale',
+ '/testplugin/rplugin/python3/deoplete/sources/ale.py',
+)
+
+
+class VimMock(object):
+ def __init__(self, call_list, call_results, commands):
+ self.__call_list = call_list
+ self.__call_results = call_results
+
+ self.__commands = commands
+
+ def call(self, function, *args):
+ self.__call_list.append((function, args))
+
+ return self.__call_results.get(function, 0)
+
+ def command(self, command):
+ self.__commands.append(command)
+
+
+class DeopleteSourceTest(unittest.TestCase):
+ def setUp(self):
+ super(DeopleteSourceTest, self).setUp()
+
+ self.call_list = []
+ self.call_results = {'ale#completion#CanProvideCompletions': 1}
+ self.commands = []
+ self.source = ale_module.Source('vim')
+ self.source.vim = VimMock(
+ self.call_list, self.call_results, self.commands)
+
+ def test_attributes(self):
+ """
+ Check all of the attributes we set.
+ """
+ attributes = dict(
+ (key, getattr(self.source, key))
+ for key in
+ dir(self.source)
+ if not key.startswith('__')
+ and key != 'vim'
+ and not hasattr(getattr(self.source, key), '__self__')
+ )
+
+ self.assertEqual(attributes, {
+ 'input_patterns': {
+ '_': r'\.\w*$',
+ 'rust': r'(\.|::)\w*$',
+ 'typescript': r'(\.|\'|")\w*$',
+ 'cpp': r'(\.|::|->)\w*$',
+ 'c': r'(\.|->)\w*$',
+ },
+ 'is_bytepos': True,
+ 'is_volatile': True,
+ 'mark': '[L]',
+ 'min_pattern_length': 1,
+ 'name': 'ale',
+ 'rank': 1000,
+ })
+
+ def test_complete_position(self):
+ self.call_results['ale#completion#GetCompletionPositionForDeoplete'] = 2
+ context = {'input': 'foo'}
+
+ self.assertEqual(self.source.get_complete_position(context), 2)
+ self.assertEqual(self.call_list, [
+ ('ale#completion#GetCompletionPositionForDeoplete', ('foo',)),
+ ])
+
+ def test_request_completion_results(self):
+ context = {'event': 'TextChangedI', 'is_refresh': True}
+
+ self.assertEqual(self.source.gather_candidates(context), [])
+ self.assertEqual(self.call_list, [
+ ('ale#completion#CanProvideCompletions', ()),
+ ])
+ self.assertEqual(self.commands, [
+ "call ale#completion#GetCompletions('ale-callback', " + \
+ "{'callback': {completions -> deoplete#auto_complete() }})"
+ ])
+
+ def test_request_completion_results_from_buffer_without_providers(self):
+ self.call_results['ale#completion#CanProvideCompletions'] = 0
+ context = {'event': 'TextChangedI', 'is_refresh': True}
+
+ self.assertIsNone(self.source.gather_candidates(context), [])
+ self.assertEqual(self.call_list, [
+ ('ale#completion#CanProvideCompletions', ()),
+ ])
+
+ def test_async_event(self):
+ context = {'event': 'Async', 'is_refresh': True}
+ self.call_results['ale#completion#GetCompletionResult'] = [
+ {
+ 'word': 'foobar',
+ 'kind': 'v',
+ 'icase': 1,
+ 'menu': '',
+ 'info': '',
+ },
+ ]
+
+ self.assertEqual(self.source.gather_candidates(context), [
+ {
+ 'word': 'foobar',
+ 'kind': 'v',
+ 'icase': 1,
+ 'menu': '',
+ 'info': '',
+ },
+ ])
+
+ self.assertEqual(self.call_list, [
+ ('ale#completion#CanProvideCompletions', ()),
+ ('ale#completion#GetCompletionResult', ()),
+ ])