@@ -753,6 +753,89 @@ def test_resolve_test_command_for_minitest_spec_with_backticks
753753 )
754754 end
755755 end
756+
757+ def test_resolve_properly_escapes_single_file_paths
758+ with_server do |server |
759+ server . process_message ( {
760+ id : 1 ,
761+ method : "rubyLsp/resolveTestCommands" ,
762+ params : {
763+ items : [
764+ {
765+ id : "file:///test/server(v2)_test.rb" ,
766+ uri : "file:///test/server(v2)_test.rb" ,
767+ label : "/test/server(v2)_test.rb" ,
768+ tags : [ "test_file" , "framework:minitest" ] ,
769+ children : [ ] ,
770+ } ,
771+ ] ,
772+ } ,
773+ } )
774+
775+ result = server . pop_response . response
776+ assert_equal (
777+ [ "#{ COMMAND } -Itest -e \" ARGV.each { |f| require f }\" /test/server\\ (v2\\ )_test.rb" ] ,
778+ result [ :commands ] ,
779+ )
780+ end
781+ end
782+
783+ def test_resolve_properly_escapes_file_paths_within_directories
784+ with_server do |server |
785+ Dir . stubs ( :glob ) . returns ( [ "/other/test/fake(v2)_test.rb" ] )
786+ server . process_message ( {
787+ id : 1 ,
788+ method : "rubyLsp/resolveTestCommands" ,
789+ params : {
790+ items : [
791+ {
792+ id : "file:///other/test" ,
793+ uri : "file:///other/test" ,
794+ label : "/other/test" ,
795+ tags : [ "test_dir" , "framework:minitest" ] ,
796+ children : [ ] ,
797+ } ,
798+ ] ,
799+ } ,
800+ } )
801+
802+ result = server . pop_response . response
803+ assert_equal (
804+ [ "#{ COMMAND } -Itest -e \" ARGV.each { |f| require f }\" /other/test/fake\\ (v2\\ )_test.rb" ] ,
805+ result [ :commands ] ,
806+ )
807+ end
808+ end
809+
810+ def test_resolve_properly_escapes_file_paths_in_groups
811+ with_server do |server |
812+ server . process_message ( {
813+ id : 1 ,
814+ method : "rubyLsp/resolveTestCommands" ,
815+ params : {
816+ items : [
817+ {
818+ id : "ServerTest" ,
819+ uri : "file:///test/server(v2)_test.rb" ,
820+ label : "ServerTest" ,
821+ range : {
822+ start : { line : 0 , character : 0 } ,
823+ end : { line : 30 , character : 3 } ,
824+ } ,
825+ tags : [ "framework:minitest" , "test_group" ] ,
826+ children : [ ] ,
827+ } ,
828+ ] ,
829+ } ,
830+ } )
831+
832+ result = server . pop_response . response
833+ assert_equal (
834+ [ "#{ COMMAND } -Itest /test/server\\ (v2\\ )_test.rb --name \" /^ServerTest(#|::)/\" " ] ,
835+ result [ :commands ] ,
836+ )
837+ end
838+ end
756839 end
757840
758841 class ResolveTestCommandsTestUnitTest < Minitest ::Test
@@ -1254,6 +1337,89 @@ def test_resolve_test_command_mix_of_directories_and_examples
12541337 )
12551338 end
12561339 end
1340+
1341+ def test_resolve_properly_escapes_single_file_paths
1342+ with_server do |server |
1343+ server . process_message ( {
1344+ id : 1 ,
1345+ method : "rubyLsp/resolveTestCommands" ,
1346+ params : {
1347+ items : [
1348+ {
1349+ id : "file:///test/server(v2)_test.rb" ,
1350+ uri : "file:///test/server(v2)_test.rb" ,
1351+ label : "/test/server(v2)_test.rb" ,
1352+ tags : [ "test_file" , "framework:test_unit" ] ,
1353+ children : [ ] ,
1354+ } ,
1355+ ] ,
1356+ } ,
1357+ } )
1358+
1359+ result = server . pop_response . response
1360+ assert_equal (
1361+ [ "#{ COMMAND } -Itest -e \" ARGV.each { |f| require f }\" /test/server\\ (v2\\ )_test.rb" ] ,
1362+ result [ :commands ] ,
1363+ )
1364+ end
1365+ end
1366+
1367+ def test_resolve_properly_escapes_file_paths_within_directories
1368+ with_server do |server |
1369+ Dir . stubs ( :glob ) . returns ( [ "/other/test/fake(v2)_test.rb" ] )
1370+ server . process_message ( {
1371+ id : 1 ,
1372+ method : "rubyLsp/resolveTestCommands" ,
1373+ params : {
1374+ items : [
1375+ {
1376+ id : "file:///other/test" ,
1377+ uri : "file:///other/test" ,
1378+ label : "/other/test" ,
1379+ tags : [ "test_dir" , "framework:test_unit" ] ,
1380+ children : [ ] ,
1381+ } ,
1382+ ] ,
1383+ } ,
1384+ } )
1385+
1386+ result = server . pop_response . response
1387+ assert_equal (
1388+ [ "#{ COMMAND } -Itest -e \" ARGV.each { |f| require f }\" /other/test/fake\\ (v2\\ )_test.rb" ] ,
1389+ result [ :commands ] ,
1390+ )
1391+ end
1392+ end
1393+
1394+ def test_resolve_properly_escapes_file_paths_in_groups
1395+ with_server do |server |
1396+ server . process_message ( {
1397+ id : 1 ,
1398+ method : "rubyLsp/resolveTestCommands" ,
1399+ params : {
1400+ items : [
1401+ {
1402+ id : "ServerTest" ,
1403+ uri : "file:///test/server(v2)_test.rb" ,
1404+ label : "ServerTest" ,
1405+ range : {
1406+ start : { line : 0 , character : 0 } ,
1407+ end : { line : 30 , character : 3 } ,
1408+ } ,
1409+ tags : [ "framework:test_unit" , "test_group" ] ,
1410+ children : [ ] ,
1411+ } ,
1412+ ] ,
1413+ } ,
1414+ } )
1415+
1416+ result = server . pop_response . response
1417+ assert_equal (
1418+ [ "#{ COMMAND } -Itest /test/server\\ (v2\\ )_test.rb --testcase \" /^ServerTest\\ $/\" " ] ,
1419+ result [ :commands ] ,
1420+ )
1421+ end
1422+ end
12571423 end
12581424
12591425 class ResolveTestCommandsOtherFrameworksTest < Minitest ::Test
0 commit comments