@@ -355,6 +355,127 @@ defmodule ElixirLS.DebugAdapter.ServerTest do
355
355
end )
356
356
end
357
357
358
+ @ tag :fixture
359
+ test "no mix exs" , % { server: server } do
360
+ in_fixture ( __DIR__ , "no_mix_exs" , fn ->
361
+ Server . receive_packet (
362
+ server ,
363
+ initialize_req ( 1 , % {
364
+ "supportsVariablePaging" => true ,
365
+ "supportsVariableType" => true
366
+ } )
367
+ )
368
+
369
+ assert_receive ( response ( _ , 1 , "initialize" , % { "supportsConfigurationDoneRequest" => true } ) )
370
+
371
+ Server . receive_packet (
372
+ server ,
373
+ launch_req ( 2 , % {
374
+ "request" => "launch" ,
375
+ "type" => "mix_task" ,
376
+ "task" => "run" ,
377
+ "taskArgs" => [ "--no-mix-exs" , "script.exs" ] ,
378
+ "projectDir" => File . cwd! ( ) ,
379
+ "exitAfterTaskReturns" => false ,
380
+ "requireFiles" => [
381
+ "script.exs"
382
+ ]
383
+ } )
384
+ )
385
+
386
+ assert_receive ( response ( _ , 2 , "launch" , % { } ) , 5000 )
387
+ assert_receive ( event ( _ , "initialized" , % { } ) )
388
+ abs_path = Path . absname ( "script.exs" )
389
+
390
+ Server . receive_packet (
391
+ server ,
392
+ set_breakpoints_req ( 3 , % { "path" => abs_path } , [ % { "line" => 4 } ] )
393
+ )
394
+
395
+ assert_receive (
396
+ response ( _ , 3 , "setBreakpoints" , % { "breakpoints" => [ % { "verified" => true } ] } ) ,
397
+ 5000
398
+ )
399
+
400
+ Server . receive_packet ( server , request ( 5 , "configurationDone" , % { } ) )
401
+ assert_receive ( response ( _ , 5 , "configurationDone" , % { } ) )
402
+
403
+ Server . receive_packet ( server , request ( 6 , "threads" , % { } ) )
404
+ assert_receive ( response ( _ , 6 , "threads" , % { "threads" => threads } ) )
405
+ # ensure thread ids are unique
406
+ thread_ids = Enum . map ( threads , & & 1 [ "id" ] )
407
+ assert Enum . count ( Enum . uniq ( thread_ids ) ) == Enum . count ( thread_ids )
408
+
409
+ assert_receive event ( _ , "stopped" , % {
410
+ "allThreadsStopped" => false ,
411
+ "reason" => "breakpoint" ,
412
+ "threadId" => thread_id
413
+ } ) ,
414
+ 5_000
415
+
416
+ Server . receive_packet ( server , stacktrace_req ( 7 , thread_id ) )
417
+
418
+ assert_receive response ( _ , 7 , "stackTrace" , % {
419
+ "totalFrames" => 1 ,
420
+ "stackFrames" => [
421
+ % {
422
+ "column" => 0 ,
423
+ "id" => frame_id ,
424
+ "line" => 4 ,
425
+ "name" => "Abc.debug_me/0" ,
426
+ "source" => % { "path" => ^ abs_path }
427
+ }
428
+ ]
429
+ } )
430
+ when is_integer ( frame_id )
431
+
432
+ Server . receive_packet ( server , scopes_req ( 8 , frame_id ) )
433
+
434
+ assert_receive response ( _ , 8 , "scopes" , % {
435
+ "scopes" => [
436
+ % {
437
+ "expensive" => false ,
438
+ "indexedVariables" => 0 ,
439
+ "name" => "variables" ,
440
+ "namedVariables" => 1 ,
441
+ "variablesReference" => vars_id
442
+ } ,
443
+ % {
444
+ "expensive" => false ,
445
+ "indexedVariables" => 0 ,
446
+ "name" => "versioned variables" ,
447
+ "namedVariables" => 1 ,
448
+ "variablesReference" => _vars_id
449
+ } ,
450
+ % {
451
+ "expensive" => false ,
452
+ "indexedVariables" => 0 ,
453
+ "name" => "process info" ,
454
+ "namedVariables" => _ ,
455
+ "variablesReference" => _
456
+ }
457
+ ]
458
+ } )
459
+
460
+ Server . receive_packet ( server , vars_req ( 9 , vars_id ) )
461
+
462
+ assert_receive response ( _ , 9 , "variables" , % {
463
+ "variables" => [
464
+ % {
465
+ "name" => "a" ,
466
+ "type" => "list" ,
467
+ "value" => "[1, 2, 3]" ,
468
+ "variablesReference" => _
469
+ }
470
+ ]
471
+ } ) ,
472
+ 1000
473
+
474
+ Server . receive_packet ( server , continue_req ( 15 , thread_id ) )
475
+ assert_receive response ( _ , 15 , "continue" , % { "allThreadsContinued" => true } )
476
+ end )
477
+ end
478
+
358
479
@ tag :fixture
359
480
test "launch with no debug" , % { server: server } do
360
481
in_fixture ( __DIR__ , "mix_project" , fn ->
0 commit comments