@@ -166,13 +166,54 @@ def test_none
166166
167167 def test_repl_completion_api
168168 assert_nil ReplCompletion . rbs_load_error
169- assert_nil ReplCompletion . last_analyze_error
169+ assert_nil ReplCompletion . last_completion_error
170170 assert_equal true , ReplCompletion . rbs_load_started?
171171 assert_equal true , ReplCompletion . rbs_loaded?
172172 assert_nothing_raised { ReplCompletion . preload_rbs }
173173 assert_nothing_raised { ReplCompletion . load_rbs }
174174 end
175175
176+ def with_failing_method ( klass , method_name , message )
177+ original_method = klass . instance_method ( method_name )
178+ klass . remove_method ( method_name )
179+ klass . define_method ( method_name ) do |*, **|
180+ raise Exception . new ( message )
181+ end
182+ yield
183+ ensure
184+ klass . remove_method ( method_name )
185+ klass . define_method ( method_name , original_method )
186+ end
187+
188+ def test_analyze_error
189+ with_failing_method ( ReplCompletion . singleton_class , :analyze_code , 'error_in_analyze_code' ) do
190+ assert_nil ReplCompletion . analyze '1.' , binding
191+ end
192+ assert_equal 'error_in_analyze_code' , ReplCompletion . last_completion_error &.message
193+ ensure
194+ ReplCompletion . instance_variable_set ( :@last_completion_error , nil )
195+ end
196+
197+ def test_completion_candidates_error
198+ result = ReplCompletion . analyze '1.' , binding
199+ with_failing_method ( ReplCompletion ::Types ::InstanceType , :methods , 'error_in_methods' ) do
200+ assert_equal [ ] , result . completion_candidates
201+ end
202+ assert_equal 'error_in_methods' , ReplCompletion . last_completion_error &.message
203+ ensure
204+ ReplCompletion . instance_variable_set ( :@last_completion_error , nil )
205+ end
206+
207+ def test_doc_namespace_error
208+ result = ReplCompletion . analyze '1.' , binding
209+ with_failing_method ( ReplCompletion ::Result , :method_doc , 'error_in_method_doc' ) do
210+ assert_nil result . doc_namespace ( 'abs' )
211+ end
212+ assert_equal 'error_in_method_doc' , ReplCompletion . last_completion_error &.message
213+ ensure
214+ ReplCompletion . instance_variable_set ( :@last_completion_error , nil )
215+ end
216+
176217 def test_info
177218 assert_equal "ReplCompletion: #{ ReplCompletion ::VERSION } , Prism: #{ Prism ::VERSION } , RBS: #{ RBS ::VERSION } " , ReplCompletion . info
178219 end
0 commit comments