From eef4f7e3af7198beca24c196c1152841fab2cd4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Wed, 11 Nov 2020 17:24:24 +0100 Subject: [PATCH] Fix rake test loader swallowing useful error information --- lib/rake/rake_test_loader.rb | 31 +++++++++++++++--------------- test/test_rake_rake_test_loader.rb | 16 ++++++++++++++- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/lib/rake/rake_test_loader.rb b/lib/rake/rake_test_loader.rb index f0f7772ba..c8f1ebf15 100644 --- a/lib/rake/rake_test_loader.rb +++ b/lib/rake/rake_test_loader.rb @@ -3,24 +3,23 @@ # Load the test files from the command line. argv = ARGV.select do |argument| - begin - case argument - when /^-/ then - argument - when /\*/ then - FileList[argument].to_a.each do |file| - require File.expand_path file - end + case argument + when /^-/ then + argument + when /\*/ then + FileList[argument].to_a.each do |file| + require File.expand_path file + end - false - else - require File.expand_path argument + false + else + path = File.expand_path argument - false - end - rescue LoadError => e - raise unless e.path - abort "\nFile does not exist: #{e.path}\n\n" + abort "\nFile does not exist: #{path}\n\n" unless File.exist?(path) + + require path + + false end end diff --git a/test/test_rake_rake_test_loader.rb b/test/test_rake_rake_test_loader.rb index 4423a9b1c..45e424ed4 100644 --- a/test/test_rake_rake_test_loader.rb +++ b/test/test_rake_rake_test_loader.rb @@ -24,7 +24,7 @@ def test_pattern $:.replace orig_loaded_features end - def test_load_error_from_require + def test_load_error_from_missing_test_file out, err = capture_io do ARGV.replace %w[no_such_test_file.rb] @@ -45,6 +45,20 @@ def test_load_error_from_require assert_match expected, err end + def test_load_error_raised_implicitly + File.write("error_test.rb", "require 'superkalifragilisticoespialidoso'") + out, err = capture_io do + ARGV.replace %w[error_test.rb] + + exc = assert_raises(LoadError) do + load @loader + end + assert_equal "cannot load such file -- superkalifragilisticoespialidoso", exc.message + end + assert_empty out + assert_empty err + end + def test_load_error_raised_explicitly File.write("error_test.rb", "raise LoadError, 'explicitly raised'") out, err = capture_io do