/ test / python / test_deoplete_source.py
test_deoplete_source.py
  1  import unittest
  2  import imp
  3  
  4  ale_module = imp.load_source(
  5      'deoplete.sources.ale',
  6      '/testplugin/rplugin/python3/deoplete/sources/ale.py',
  7  )
  8  
  9  
 10  class VimMock(object):
 11      def __init__(self, call_list, call_results, commands):
 12          self.__call_list = call_list
 13          self.__call_results = call_results
 14  
 15          self.__commands = commands
 16  
 17      def call(self, function, *args):
 18          self.__call_list.append((function, args))
 19  
 20          return self.__call_results.get(function, 0)
 21  
 22      def command(self, command):
 23          self.__commands.append(command)
 24  
 25  
 26  class DeopleteSourceTest(unittest.TestCase):
 27      def setUp(self):
 28          super(DeopleteSourceTest, self).setUp()
 29  
 30          self.call_list = []
 31          self.call_results = {'ale#completion#CanProvideCompletions': 1}
 32          self.commands = []
 33          self.source = ale_module.Source('vim')
 34          self.source.vim = VimMock(
 35              self.call_list, self.call_results, self.commands)
 36  
 37      def test_attributes(self):
 38          """
 39          Check all of the attributes we set.
 40          """
 41          attributes = dict(
 42              (key, getattr(self.source, key))
 43              for key in
 44              dir(self.source)
 45              if not key.startswith('__')
 46              and key != 'vim'
 47              and not hasattr(getattr(self.source, key), '__self__')
 48          )
 49  
 50          self.assertEqual(attributes, {
 51              'input_patterns': {
 52                  '_': r'\.\w*$',
 53                  'rust': r'(\.|::)\w*$',
 54                  'typescript': r'(\.|\'|")\w*$',
 55                  'cpp': r'(\.|::|->)\w*$',
 56                  'c': r'(\.|->)\w*$',
 57              },
 58              'is_bytepos': True,
 59              'is_volatile': True,
 60              'mark': '[L]',
 61              'min_pattern_length': 1,
 62              'name': 'ale',
 63              'rank': 1000,
 64          })
 65  
 66      def test_complete_position(self):
 67          self.call_results['ale#completion#GetCompletionPositionForDeoplete'] = 2
 68          context = {'input': 'foo'}
 69  
 70          self.assertEqual(self.source.get_complete_position(context), 2)
 71          self.assertEqual(self.call_list, [
 72              ('ale#completion#GetCompletionPositionForDeoplete', ('foo',)),
 73          ])
 74  
 75      def test_request_completion_results(self):
 76          context = {'event': 'TextChangedI', 'is_refresh': True}
 77  
 78          self.assertEqual(self.source.gather_candidates(context), [])
 79          self.assertEqual(self.call_list, [
 80              ('ale#completion#CanProvideCompletions', ()),
 81          ])
 82          self.assertEqual(self.commands, [
 83              "call ale#completion#GetCompletions('ale-callback', " + \
 84              "{'callback': {completions -> deoplete#auto_complete() }})"
 85          ])
 86  
 87      def test_request_completion_results_from_buffer_without_providers(self):
 88          self.call_results['ale#completion#CanProvideCompletions'] = 0
 89          context = {'event': 'TextChangedI', 'is_refresh': True}
 90  
 91          self.assertIsNone(self.source.gather_candidates(context), [])
 92          self.assertEqual(self.call_list, [
 93              ('ale#completion#CanProvideCompletions', ()),
 94          ])
 95  
 96      def test_async_event(self):
 97          context = {'event': 'Async', 'is_refresh': True}
 98          self.call_results['ale#completion#GetCompletionResult'] = [
 99              {
100                  'word': 'foobar',
101                  'kind': 'v',
102                  'icase': 1,
103                  'menu': '',
104                  'info': '',
105              },
106          ]
107  
108          self.assertEqual(self.source.gather_candidates(context), [
109              {
110                  'word': 'foobar',
111                  'kind': 'v',
112                  'icase': 1,
113                  'menu': '',
114                  'info': '',
115              },
116          ])
117  
118          self.assertEqual(self.call_list, [
119              ('ale#completion#CanProvideCompletions', ()),
120              ('ale#completion#GetCompletionResult', ()),
121          ])