def YouCompleteMe_NoPythonInterpreterFound_test( post_vim_message, *args ):
  try:
    with patch( 'ycmd.utils.ReadFile', side_effect = IOError ):

      ycm = YouCompleteMe( MakeUserOptions() )
      assert_that( ycm.IsServerAlive(), equal_to( False ) )
      post_vim_message.assert_called_once_with(
        "Unable to start the ycmd server. Cannot find Python 2.7 or 3.4+. "
        "Set the 'g:ycm_server_python_interpreter' option to a Python "
        "interpreter path. "
        "Correct the error then restart the server with ':YcmRestartServer'." )

    post_vim_message.reset_mock()

    with patch( 'ycm.tests.test_utils.server_python_interpreter',
                _PathToPythonUsedDuringBuild() ):
      ycm.RestartServer()

    assert_that( ycm.IsServerAlive(), equal_to( True ) )
    post_vim_message.assert_called_once_with( 'Restarting ycmd server...' )
  finally:
    WaitUntilReady()
    StopServer( ycm )
def YouCompleteMe_InvalidPythonInterpreterPath_test( post_vim_message ):
  try:
    with patch( 'ycm.tests.test_utils.server_python_interpreter',
                '/invalid/path/to/python' ):
      ycm = YouCompleteMe( MakeUserOptions() )
      assert_that( ycm.IsServerAlive(), equal_to( False ) )
      post_vim_message.assert_called_once_with(
        "Unable to start the ycmd server. "
        "Path in 'g:ycm_server_python_interpreter' option does not point "
        "to a valid Python 2.7 or 3.4+. "
        "Correct the error then restart the server with ':YcmRestartServer'." )

    post_vim_message.reset_mock()

    with patch( 'ycm.tests.test_utils.server_python_interpreter',
                _PathToPythonUsedDuringBuild() ):
      ycm.RestartServer()

    assert_that( ycm.IsServerAlive(), equal_to( True ) )
    post_vim_message.assert_called_once_with( 'Restarting ycmd server...' )
  finally:
    WaitUntilReady()
    StopServer( ycm )