39c06c42e3
The completion info field may contain null characters e.g. \x00 in Python docstrings. These characters cannot be evaluated so they are removed. Rewrite the function that convert ycmd completion to Vim completion.
211 lines
5.8 KiB
Python
211 lines
5.8 KiB
Python
# Copyright (C) 2015-2016 YouCompleteMe Contributors
|
|
#
|
|
# This file is part of YouCompleteMe.
|
|
#
|
|
# YouCompleteMe is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# YouCompleteMe is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with YouCompleteMe. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
from __future__ import unicode_literals
|
|
from __future__ import print_function
|
|
from __future__ import division
|
|
from __future__ import absolute_import
|
|
# Not installing aliases from python-future; it's unreliable and slow.
|
|
from builtins import * # noqa
|
|
|
|
from nose.tools import eq_
|
|
from ycm.tests.test_utils import MockVimModule
|
|
vim_mock = MockVimModule()
|
|
|
|
from ycm.client import completion_request
|
|
|
|
|
|
class ConvertCompletionResponseToVimDatas_test( object ):
|
|
""" This class tests the
|
|
completion_request._ConvertCompletionResponseToVimDatas method """
|
|
|
|
def _Check( self, completion_id, completion_data, expected_vim_data ):
|
|
vim_data = completion_request._ConvertCompletionDataToVimData(
|
|
completion_id,
|
|
completion_data )
|
|
|
|
try:
|
|
eq_( expected_vim_data, vim_data )
|
|
except Exception:
|
|
print( "Expected:\n'{0}'\nwhen parsing:\n'{1}'\nBut found:\n'{2}'".format(
|
|
expected_vim_data,
|
|
completion_data,
|
|
vim_data ) )
|
|
raise
|
|
|
|
|
|
def AllFields_test( self ):
|
|
self._Check( 0, {
|
|
'insertion_text': 'INSERTION TEXT',
|
|
'menu_text': 'MENU TEXT',
|
|
'extra_menu_info': 'EXTRA MENU INFO',
|
|
'kind': 'K',
|
|
'detailed_info': 'DETAILED INFO',
|
|
'extra_data': {
|
|
'doc_string': 'DOC STRING',
|
|
},
|
|
}, {
|
|
'word' : 'INSERTION TEXT',
|
|
'abbr' : 'MENU TEXT',
|
|
'menu' : 'EXTRA MENU INFO',
|
|
'kind' : 'k',
|
|
'info' : 'DETAILED INFO\nDOC STRING',
|
|
'dup' : 1,
|
|
'empty' : 1,
|
|
'user_data': '0',
|
|
} )
|
|
|
|
|
|
def OnlyInsertionTextField_test( self ):
|
|
self._Check( 17, {
|
|
'insertion_text': 'INSERTION TEXT'
|
|
}, {
|
|
'word' : 'INSERTION TEXT',
|
|
'abbr' : '',
|
|
'menu' : '',
|
|
'kind' : '',
|
|
'info' : '',
|
|
'dup' : 1,
|
|
'empty' : 1,
|
|
'user_data': '17',
|
|
} )
|
|
|
|
|
|
def JustDetailedInfo_test( self ):
|
|
self._Check( 9999999999, {
|
|
'insertion_text': 'INSERTION TEXT',
|
|
'menu_text': 'MENU TEXT',
|
|
'extra_menu_info': 'EXTRA MENU INFO',
|
|
'kind': 'K',
|
|
'detailed_info': 'DETAILED INFO',
|
|
}, {
|
|
'word' : 'INSERTION TEXT',
|
|
'abbr' : 'MENU TEXT',
|
|
'menu' : 'EXTRA MENU INFO',
|
|
'kind' : 'k',
|
|
'info' : 'DETAILED INFO',
|
|
'dup' : 1,
|
|
'empty' : 1,
|
|
'user_data': '9999999999',
|
|
} )
|
|
|
|
|
|
def JustDocString_test( self ):
|
|
self._Check( 'not_an_int', {
|
|
'insertion_text': 'INSERTION TEXT',
|
|
'menu_text': 'MENU TEXT',
|
|
'extra_menu_info': 'EXTRA MENU INFO',
|
|
'kind': 'K',
|
|
'extra_data': {
|
|
'doc_string': 'DOC STRING',
|
|
},
|
|
}, {
|
|
'word' : 'INSERTION TEXT',
|
|
'abbr' : 'MENU TEXT',
|
|
'menu' : 'EXTRA MENU INFO',
|
|
'kind' : 'k',
|
|
'info' : 'DOC STRING',
|
|
'dup' : 1,
|
|
'empty' : 1,
|
|
'user_data': 'not_an_int',
|
|
} )
|
|
|
|
|
|
def ExtraInfoNoDocString_test( self ):
|
|
self._Check( 0, {
|
|
'insertion_text': 'INSERTION TEXT',
|
|
'menu_text': 'MENU TEXT',
|
|
'extra_menu_info': 'EXTRA MENU INFO',
|
|
'kind': 'K',
|
|
'extra_data': {
|
|
},
|
|
}, {
|
|
'word' : 'INSERTION TEXT',
|
|
'abbr' : 'MENU TEXT',
|
|
'menu' : 'EXTRA MENU INFO',
|
|
'kind' : 'k',
|
|
'info' : '',
|
|
'dup' : 1,
|
|
'empty' : 1,
|
|
'user_data': '0',
|
|
} )
|
|
|
|
|
|
def NullCharactersInExtraInfoAndDocString_test( self ):
|
|
self._Check( '0', {
|
|
'insertion_text': 'INSERTION TEXT',
|
|
'menu_text': 'MENU TEXT',
|
|
'extra_menu_info': 'EXTRA MENU INFO',
|
|
'kind': 'K',
|
|
'detailed_info': 'DETAILED\x00INFO',
|
|
'extra_data': {
|
|
'doc_string': 'DOC\x00STRING'
|
|
},
|
|
}, {
|
|
'word' : 'INSERTION TEXT',
|
|
'abbr' : 'MENU TEXT',
|
|
'menu' : 'EXTRA MENU INFO',
|
|
'kind' : 'k',
|
|
'info' : 'DETAILEDINFO\nDOCSTRING',
|
|
'dup' : 1,
|
|
'empty' : 1,
|
|
'user_data': '0',
|
|
} )
|
|
|
|
|
|
def ExtraInfoNoDocStringWithDetailedInfo_test( self ):
|
|
self._Check( '0', {
|
|
'insertion_text': 'INSERTION TEXT',
|
|
'menu_text': 'MENU TEXT',
|
|
'extra_menu_info': 'EXTRA MENU INFO',
|
|
'kind': 'K',
|
|
'detailed_info': 'DETAILED INFO',
|
|
'extra_data': {
|
|
},
|
|
}, {
|
|
'word' : 'INSERTION TEXT',
|
|
'abbr' : 'MENU TEXT',
|
|
'menu' : 'EXTRA MENU INFO',
|
|
'kind' : 'k',
|
|
'info' : 'DETAILED INFO',
|
|
'dup' : 1,
|
|
'empty' : 1,
|
|
'user_data': '0',
|
|
} )
|
|
|
|
|
|
def EmptyInsertionText_test( self ):
|
|
self._Check( 0, {
|
|
'insertion_text': '',
|
|
'menu_text': 'MENU TEXT',
|
|
'extra_menu_info': 'EXTRA MENU INFO',
|
|
'kind': 'K',
|
|
'detailed_info': 'DETAILED INFO',
|
|
'extra_data': {
|
|
'doc_string': 'DOC STRING',
|
|
},
|
|
}, {
|
|
'word' : '',
|
|
'abbr' : 'MENU TEXT',
|
|
'menu' : 'EXTRA MENU INFO',
|
|
'kind' : 'k',
|
|
'info' : 'DETAILED INFO\nDOC STRING',
|
|
'dup' : 1,
|
|
'empty' : 1,
|
|
'user_data': '0',
|
|
} )
|