postcomplete_tests.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. #!/usr/bin/env python
  2. #
  3. # Copyright (C) 2013 Google Inc.
  4. #
  5. # This file is part of YouCompleteMe.
  6. #
  7. # YouCompleteMe is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation, either version 3 of the License, or
  10. # (at your option) any later version.
  11. #
  12. # YouCompleteMe is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with YouCompleteMe. If not, see <http://www.gnu.org/licenses/>.
  19. from mock import MagicMock
  20. from nose.tools import eq_
  21. from hamcrest import assert_that, empty
  22. from ycm import vimsupport
  23. from ycm.youcompleteme import YouCompleteMe
  24. def HasPostCompletionAction_TrueOnCsharp_test():
  25. vimsupport.CurrentFiletypes = MagicMock( return_value = [ "cs" ] )
  26. ycm_state = YouCompleteMe( MagicMock( spec_set = dict ) )
  27. eq_( True, ycm_state.HasPostCompletionAction() )
  28. def HasPostCompletionAction_FalseOnOtherFiletype_test():
  29. vimsupport.CurrentFiletypes = MagicMock( return_value = [ "txt" ] )
  30. ycm_state = YouCompleteMe( MagicMock( spec_set = dict ) )
  31. eq_( False, ycm_state.HasPostCompletionAction() )
  32. def GetRequiredNamespaceImport_ReturnEmptyForNoExtraData_test():
  33. ycm_state = YouCompleteMe( MagicMock( spec_set = dict ) )
  34. eq_( "", ycm_state.GetRequiredNamespaceImport( {} ) )
  35. def GetRequiredNamespaceImport_ReturnNamespaceFromExtraData_test():
  36. namespace = "A_NAMESPACE"
  37. ycm_state = YouCompleteMe( MagicMock( spec_set = dict ) )
  38. eq_( namespace, ycm_state.GetRequiredNamespaceImport(
  39. _BuildCompletion( namespace )
  40. ))
  41. def FilterMatchingCompletions_MatchIsReturned_test():
  42. ycm_state = YouCompleteMe( MagicMock( spec_set = dict ) )
  43. vimsupport.TextBeforeCursor = MagicMock( return_value = " Test" )
  44. completions = [ _BuildCompletion( "A" ) ]
  45. result = ycm_state.FilterMatchingCompletions( completions )
  46. eq_( list( result ), completions )
  47. def FilterMatchingCompletions_ShortTextDoesntRaise_test():
  48. ycm_state = YouCompleteMe( MagicMock( spec_set = dict ) )
  49. vimsupport.TextBeforeCursor = MagicMock( return_value = "X" )
  50. completions = [ _BuildCompletion( "A" ) ]
  51. ycm_state.FilterMatchingCompletions( completions )
  52. def FilterMatchingCompletions_ExactMatchIsReturned_test():
  53. ycm_state = YouCompleteMe( MagicMock( spec_set = dict ) )
  54. vimsupport.TextBeforeCursor = MagicMock( return_value = "Test" )
  55. completions = [ _BuildCompletion( "A" ) ]
  56. result = ycm_state.FilterMatchingCompletions( completions )
  57. eq_( list( result ), completions )
  58. def FilterMatchingCompletions_NonMatchIsntReturned_test():
  59. ycm_state = YouCompleteMe( MagicMock( spec_set = dict ) )
  60. vimsupport.TextBeforeCursor = MagicMock( return_value = " Quote" )
  61. completions = [ _BuildCompletion( "A" ) ]
  62. result = ycm_state.FilterMatchingCompletions( completions )
  63. assert_that( list( result ), empty() )
  64. def PostComplete_EmptyDoesntInsertNamespace_test():
  65. ycm_state = _SetupForCompletionDone( [] )
  66. ycm_state.OnCompleteDone()
  67. assert not vimsupport.InsertNamespace.called
  68. def PostComplete_ExistingWithoutNamespaceDoesntInsertNamespace_test():
  69. completions = [ _BuildCompletion( None ) ]
  70. ycm_state = _SetupForCompletionDone( completions )
  71. ycm_state.OnCompleteDone()
  72. assert not vimsupport.InsertNamespace.called
  73. def PostComplete_ValueDoesInsertNamespace_test():
  74. namespace = "A_NAMESPACE"
  75. completions = [ _BuildCompletion( namespace ) ]
  76. ycm_state = _SetupForCompletionDone( completions )
  77. ycm_state.OnCompleteDone()
  78. vimsupport.InsertNamespace.assert_called_once_with( namespace )
  79. def PostComplete_InsertSecondNamespaceIfSelected_test():
  80. namespace = "A_NAMESPACE"
  81. namespace2 = "ANOTHER_NAMESPACE"
  82. completions = [
  83. _BuildCompletion( namespace ),
  84. _BuildCompletion( namespace2 ),
  85. ]
  86. ycm_state = _SetupForCompletionDone( completions )
  87. vimsupport.PresentDialog = MagicMock( return_value = 1 )
  88. ycm_state.OnCompleteDone()
  89. vimsupport.InsertNamespace.assert_called_once_with( namespace2 )
  90. def _SetupForCompletionDone( completions ):
  91. vimsupport.CurrentFiletypes = MagicMock( return_value = [ "cs" ] )
  92. ycm_state = YouCompleteMe( MagicMock( spec_set = dict ) )
  93. request = MagicMock();
  94. request.Done = MagicMock( return_value = True )
  95. request.RawResponse = MagicMock( return_value = completions )
  96. ycm_state._latest_completion_request = request
  97. vimsupport.InsertNamespace = MagicMock()
  98. vimsupport.TextBeforeCursor = MagicMock( return_value = " Test" )
  99. return ycm_state
  100. def _BuildCompletion( namespace ):
  101. return {
  102. 'extra_data': { 'required_namespace_import' : namespace },
  103. 'insertion_text': 'Test'
  104. }