示例#1
0
 def Wrapper( *args, **kwargs ):
   user_options = user_options_store.DefaultOptions()
   user_options[ 'gocode_binary_path' ] = DUMMY_BINARY
   with patch( 'ycmd.utils.SafePopen' ):
     completer = GoCompleter( user_options )
     return test( completer, *args, **kwargs )
示例#2
0
class GoCompleter_test(object):
    def setUp(self):
        user_options = user_options_store.DefaultOptions()
        user_options['gocode_binary_path'] = DUMMY_BINARY
        self._completer = GoCompleter(user_options)

    def _BuildRequest(self, line_num, column_num):
        request = REQUEST_DATA.copy()
        request['column_num'] = column_num
        request['line_num'] = line_num
        request['file_data'][PATH_TO_TEST_FILE]['contents'] = ReadFile(
            PATH_TO_TEST_FILE)
        return RequestWrap(request)

    def FindGoCodeBinary_test(self):
        user_options = user_options_store.DefaultOptions()

        eq_(GO_BINARIES.get("gocode"), FindBinary("gocode", user_options))

        user_options['gocode_binary_path'] = DUMMY_BINARY
        eq_(DUMMY_BINARY, FindBinary("gocode", user_options))

        user_options['gocode_binary_path'] = DATA_DIR
        eq_(None, FindBinary("gocode", user_options))

    # Test line-col to offset in the file before any unicode occurrences.
    def ComputeCandidatesInnerOffsetBeforeUnicode_test(self):
        mock = MockPopen(returncode=0,
                         stdout=ReadFile(PATH_TO_POS121_RES),
                         stderr='')
        self._completer._popener = mock
        # Col 8 corresponds to cursor at log.Pr^int("Line 7 ...
        self._completer.ComputeCandidatesInner(self._BuildRequest(7, 8))
        eq_(mock.cmd, [
            DUMMY_BINARY, '-f=json', 'autocomplete', PATH_TO_TEST_FILE, '119'
        ])

    # Test line-col to offset in the file after a unicode occurrences.
    def ComputeCandidatesInnerAfterUnicode_test(self):
        mock = MockPopen(returncode=0,
                         stdout=ReadFile(PATH_TO_POS215_RES),
                         stderr='')
        self._completer._popener = mock
        # Col 9 corresponds to cursor at log.Pri^nt("Line 7 ...
        self._completer.ComputeCandidatesInner(self._BuildRequest(9, 9))
        eq_(mock.cmd, [
            DUMMY_BINARY, '-f=json', 'autocomplete', PATH_TO_TEST_FILE, '212'
        ])

    # Test end to end parsing of completed results.
    def ComputeCandidatesInner_test(self):
        mock = MockPopen(returncode=0,
                         stdout=ReadFile(PATH_TO_POS292_RES),
                         stderr='')
        self._completer._popener = mock
        # Col 40 corresponds to cursor at ..., log.Prefi^x ...
        result = self._completer.ComputeCandidatesInner(
            self._BuildRequest(10, 40))
        eq_(mock.cmd, [
            DUMMY_BINARY, '-f=json', 'autocomplete', PATH_TO_TEST_FILE, '287'
        ])
        eq_(result, [{
            'menu_text': u'Prefix',
            'insertion_text': u'Prefix',
            'extra_menu_info': u'func() string',
            'detailed_info': u'Prefix func() string func',
            'kind': u'func'
        }])

    # Test gocode failure.
    @raises(RuntimeError)
    def ComputeCandidatesInnerGoCodeFailure_test(self):
        mock = MockPopen(returncode=1, stdout='', stderr='')
        self._completer._popener = mock
        self._completer.ComputeCandidatesInner(self._BuildRequest(1, 1))

    # Test JSON parsing failure.
    @raises(RuntimeError)
    def ComputeCandidatesInnerParseFailure_test(self):
        mock = MockPopen(returncode=0,
                         stdout="{this isn't parseable",
                         stderr='')
        self._completer._popener = mock
        self._completer.ComputeCandidatesInner(self._BuildRequest(1, 1))

    # Test empty results error (different than no results).
    @raises(RuntimeError)
    def ComputeCandidatesInnerNoResultsFailure_test(self):
        mock = MockPopen(returncode=0, stdout='[]', stderr='')
        self._completer._popener = mock
        self._completer.ComputeCandidatesInner(self._BuildRequest(1, 1))

    # Test empty results error (different than no results).
    @raises(RuntimeError)
    def ComputeCandidatesGoCodePanic_test(self):
        mock = MockPopen(returncode=0,
                         stdout=ReadFile(PATH_TO_PANIC_OUTPUT_RES),
                         stderr='')
        self._completer._popener = mock
        self._completer.ComputeCandidatesInner(self._BuildRequest(1, 1))
示例#3
0
 def setUp(self):
     user_options = user_options_store.DefaultOptions()
     user_options['gocode_binary_path'] = DUMMY_BINARY
     self._completer = GoCompleter(user_options)
示例#4
0
def GetCompleter( user_options ):
  if not ShouldEnableGoCompleter( user_options ):
    return None

  return GoCompleter( user_options )