Beispiel #1
0
def GetCompleter(user_options):
    binary = FindGoCodeBinary(user_options)
    if binary:
        _logger.info("Enabling go completion using %s", binary)
        return GoCodeCompleter(user_options)
    _logger.info("Could not find gocode binary, no go completion.")
    return None
Beispiel #2
0
 def setUp(self):
     user_options = user_options_store.DefaultOptions()
     user_options['gocode_binary_path'] = DUMMY_BINARY
     self._completer = GoCodeCompleter(user_options)
Beispiel #3
0
class GoCodeCompleter_test(object):
    def setUp(self):
        user_options = user_options_store.DefaultOptions()
        user_options['gocode_binary_path'] = DUMMY_BINARY
        self._completer = GoCodeCompleter(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_(PATH_TO_GOCODE_BINARY,
            self._completer.FindBinary("gocode", user_options))

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

        user_options['gocode_binary_path'] = DATA_DIR
        eq_(None, self._completer.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, '121'
        ])

    # 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, '215'
        ])

    # 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, '292'
        ])
        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))
Beispiel #4
0
def GetCompleter(user_options):
    return GoCodeCompleter(user_options)
 def setUp( self ):
   self._completer = GoCodeCompleter(
     user_options_store.DefaultOptions() )
   self._completer._binary = 'THE_BINARY'
class GoCodeCompleter_test( object ):
  def setUp( self ):
    self._completer = GoCodeCompleter(
      user_options_store.DefaultOptions() )
    self._completer._binary = 'THE_BINARY'


  def _BuildRequest( self, line_num, column_num ):
    request = REQUEST_DATA.copy()
    request[ 'column_num' ] = column_num
    request[ 'line_num' ] = line_num
    with open(PATH_TO_TEST_FILE, 'r') as testfile:
      request[ 'file_data' ][ PATH_TO_TEST_FILE ][ 'contents' ] = testfile.read()
    return RequestWrap( request )

  # Test line-col to offset in the file before any unicode occurrences.
  def ComputeCandidatesInnerOffsetBeforeUnicode_test( self ):
    with open(PATH_TO_POS121_RES, 'r') as gocodeoutput:
      mock = MockPopen(returncode=0, stdout=gocodeoutput.read(), 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, ['THE_BINARY', '-f=json', 'autocomplete', PATH_TO_TEST_FILE, "121"])

  # Test line-col to offset in the file after a unicode occurrences.
  def ComputeCandidatesInnerAfterUnicode_test( self ):
    with open(PATH_TO_POS215_RES, 'r') as gocodeoutput:
      mock = MockPopen(returncode=0, stdout=gocodeoutput.read(), 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, ['THE_BINARY', '-f=json', 'autocomplete', PATH_TO_TEST_FILE, "215"])

  # Test end to end parsing of completed results.
  def ComputeCandidatesInner_test( self ):
    with open(PATH_TO_POS292_RES, 'r') as gocodeoutput:
      mock = MockPopen(returncode=0, stdout=gocodeoutput.read(), 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, ['THE_BINARY', '-f=json', 'autocomplete', PATH_TO_TEST_FILE, "292"])
    eq_(result, [{
        'menu_text': u'Prefix',
        'insertion_text': u'Prefix',
        'extra_menu_info': u'func() string',
        '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 ):
    with open(PATH_TO_PANIC_OUTPUT_RES, 'r') as gocodeoutput:
      mock = MockPopen(returncode=0, stdout=gocodeoutput.read(), stderr="")
    self._completer._popener = mock
    self._completer.ComputeCandidatesInner(self._BuildRequest(1, 1))