From 2e0e5bb1e4ee5836572fffe6e3f16eefd56b4a25 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Fri, 5 Apr 2013 17:06:36 -0700 Subject: rake test app/model/foo.rb and rake test models/foo works --- railties/lib/rails/test_unit/sub_test_task.rb | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'railties/lib/rails') diff --git a/railties/lib/rails/test_unit/sub_test_task.rb b/railties/lib/rails/test_unit/sub_test_task.rb index ac2bde2071..a463380e2d 100644 --- a/railties/lib/rails/test_unit/sub_test_task.rb +++ b/railties/lib/rails/test_unit/sub_test_task.rb @@ -8,11 +8,21 @@ module Rails end def files - @tasks.find_all { |t| File.file?(t) && !File.directory?(t) } + @tasks.map { |task| + [task, translate(task)].find { |file| test_file?(file) } + }.compact + end + + def translate(file) + if file =~ /^app\/(.*)$/ + "test/#{$1.sub(/\.rb$/, '')}_test.rb" + else + "test/#{file}_test.rb" + end end def tasks - @tasks - files - opt_names + @tasks - test_file_tasks - opt_names end def opts @@ -24,8 +34,18 @@ module Rails private + def test_file_tasks + @tasks.find_all { |task| + [task, translate(task)].any? { |file| test_file?(file) } + } + end + + def test_file?(file) + file =~ /^test/ && File.file?(file) && !File.directory?(file) + end + def opt_names - (@tasks - files).reject { |t| task_defined? t } + (@tasks - test_file_tasks).reject { |t| task_defined? t } end def task_defined?(task) -- cgit v1.2.3