@@ -161,99 +161,105 @@ def connect_to_dap_server path, test_info
161161 end
162162
163163 TIMEOUT_SEC = ( ENV [ 'RUBY_DEBUG_TIMEOUT_SEC' ] || 10 ) . to_i
164+ dt = ENV [ 'RUBY_DEBUG_DAP_TEST' ]
165+ DAP_TEST = dt == 'true' || dt == '1'
164166
165167 def run_dap_scenario program , &msgs
166- write_temp_file ( strip_line_num ( program ) )
167-
168- test_info = DAP_TestInfo . new ( [ ] , [ ] )
169- remote_info = setup_unix_doman_socket_remote_debuggee
170- sock = nil
171- reader_thread = nil
172- res_log = test_info . res_backlog
173- backlog = test_info . backlog
174- target_msg = nil
175-
176- msgs . call . each { |msg |
177- case msg [ :type ]
178- when 'request'
179- if msg [ :command ] == 'initialize'
180- sock , reader_thread = connect_to_dap_server remote_info . sock_path , test_info
181- end
182- str = JSON . dump ( msg )
183- sock . write "Content-Length: #{ str . bytesize } \r \n \r \n #{ str } "
184- backlog << "V>D #{ str } "
185- when 'response'
186- result = nil
187- target_msg = msg
188- Timeout . timeout ( TIMEOUT_SEC ) do
189- loop do
190- res_log . each { |r |
191- if r [ :request_seq ] == msg [ :request_seq ]
192- result = r
193- break
194- end
195- }
196- break unless result . nil?
197-
198- sleep 0.01
168+ pend 'Tests for DAP were skipped. You can enable them with RUBY_DEBUG_DAP_TEST=1.' unless DAP_TEST
169+
170+ begin
171+ write_temp_file ( strip_line_num ( program ) )
172+
173+ test_info = DAP_TestInfo . new ( [ ] , [ ] )
174+ remote_info = setup_unix_doman_socket_remote_debuggee
175+ sock = nil
176+ reader_thread = nil
177+ res_log = test_info . res_backlog
178+ backlog = test_info . backlog
179+ target_msg = nil
180+
181+ msgs . call . each { |msg |
182+ case msg [ :type ]
183+ when 'request'
184+ if msg [ :command ] == 'initialize'
185+ sock , reader_thread = connect_to_dap_server remote_info . sock_path , test_info
199186 end
200- end
187+ str = JSON . dump ( msg )
188+ sock . write "Content-Length: #{ str . bytesize } \r \n \r \n #{ str } "
189+ backlog << "V>D #{ str } "
190+ when 'response'
191+ result = nil
192+ target_msg = msg
193+ Timeout . timeout ( TIMEOUT_SEC ) do
194+ loop do
195+ res_log . each { |r |
196+ if r [ :request_seq ] == msg [ :request_seq ]
197+ result = r
198+ break
199+ end
200+ }
201+ break unless result . nil?
201202
202- msg . delete :seq
203- hash = ProtocolParser . new . parse msg
204- hash . each { |r |
205- k , v = r
206- case v
207- when Regexp
208- assert_match v , result . dig ( *k ) . to_s , FailureMessage . new { create_protocol_msg backlog , remote_info , "expected:\n #{ JSON . pretty_generate msg } \n \n result:\n #{ JSON . pretty_generate result } " }
209- else
210- assert_equal v , result . dig ( *k ) , FailureMessage . new { create_protocol_msg backlog , remote_info , "expected:\n #{ JSON . pretty_generate msg } \n \n result:\n #{ JSON . pretty_generate result } " }
203+ sleep 0.01
204+ end
211205 end
212- }
213- if msg [ :command ] == 'disconnect'
214- res_log . clear
215- reader_thread . raise Detach
216- sock . close
217- end
218- when 'event'
219- result = nil
220- target_msg = msg
221- Timeout . timeout ( TIMEOUT_SEC ) do
222- loop do
223- res_log . each { |r |
224- if r [ :event ] == msg [ :event ]
225- result = r
226- break
227- end
228- }
229- break unless result . nil?
230-
231- sleep 0.01
206+
207+ msg . delete :seq
208+ hash = ProtocolParser . new . parse msg
209+ hash . each { |r |
210+ k , v = r
211+ case v
212+ when Regexp
213+ assert_match v , result . dig ( *k ) . to_s , FailureMessage . new { create_protocol_msg backlog , remote_info , "expected:\n #{ JSON . pretty_generate msg } \n \n result:\n #{ JSON . pretty_generate result } " }
214+ else
215+ assert_equal v , result . dig ( *k ) , FailureMessage . new { create_protocol_msg backlog , remote_info , "expected:\n #{ JSON . pretty_generate msg } \n \n result:\n #{ JSON . pretty_generate result } " }
216+ end
217+ }
218+ if msg [ :command ] == 'disconnect'
219+ res_log . clear
220+ reader_thread . raise Detach
221+ sock . close
232222 end
233- end
223+ when 'event'
224+ result = nil
225+ target_msg = msg
226+ Timeout . timeout ( TIMEOUT_SEC ) do
227+ loop do
228+ res_log . each { |r |
229+ if r [ :event ] == msg [ :event ]
230+ result = r
231+ break
232+ end
233+ }
234+ break unless result . nil?
234235
235- msg . delete :seq
236- hash = ProtocolParser . new . parse msg
237- hash . each { |r |
238- k , v = r
239- case v
240- when Regexp
241- assert_match v , result . dig ( *k ) . to_s , FailureMessage . new { create_protocol_msg backlog , remote_info , "expected:\n #{ JSON . pretty_generate msg } \n \n result:\n #{ JSON . pretty_generate result } " }
242- else
243- assert_equal v , result . dig ( *k ) , FailureMessage . new { create_protocol_msg backlog , remote_info , "expected:\n #{ JSON . pretty_generate msg } \n \n result:\n #{ JSON . pretty_generate result } " }
236+ sleep 0.01
237+ end
244238 end
245- }
246- res_log . delete result
239+
240+ msg . delete :seq
241+ hash = ProtocolParser . new . parse msg
242+ hash . each { |r |
243+ k , v = r
244+ case v
245+ when Regexp
246+ assert_match v , result . dig ( *k ) . to_s , FailureMessage . new { create_protocol_msg backlog , remote_info , "expected:\n #{ JSON . pretty_generate msg } \n \n result:\n #{ JSON . pretty_generate result } " }
247+ else
248+ assert_equal v , result . dig ( *k ) , FailureMessage . new { create_protocol_msg backlog , remote_info , "expected:\n #{ JSON . pretty_generate msg } \n \n result:\n #{ JSON . pretty_generate result } " }
249+ end
250+ }
251+ res_log . delete result
252+ end
253+ }
254+ rescue Timeout ::Error
255+ flunk create_protocol_msg backlog , remote_info , "TIMEOUT ERROR (#{ TIMEOUT_SEC } sec) while waiting for the following response.\n #{ JSON . pretty_generate target_msg } "
256+ ensure
257+ reader_thread . kill
258+ sock . close
259+ kill_safely remote_info . pid , :debuggee , test_info
260+ if test_info . failed_process
261+ flunk create_protocol_msg backlog , remote_info , "Expected the debuggee program to finish"
247262 end
248- }
249- rescue Timeout ::Error
250- flunk create_protocol_msg backlog , remote_info , "TIMEOUT ERROR (#{ TIMEOUT_SEC } sec) while waiting for the following response.\n #{ JSON . pretty_generate target_msg } "
251- ensure
252- reader_thread . kill
253- sock . close
254- kill_safely remote_info . pid , :debuggee , test_info
255- if test_info . failed_process
256- flunk create_protocol_msg backlog , remote_info , "Expected the debuggee program to finish"
257263 end
258264 end
259265 end
0 commit comments