aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/lib/rails/test_unit/sub_test_task.rb26
-rw-r--r--railties/test/test_info_test.rb24
2 files changed, 47 insertions, 3 deletions
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)
diff --git a/railties/test/test_info_test.rb b/railties/test/test_info_test.rb
index 2f78dcff1b..d5463c11de 100644
--- a/railties/test/test_info_test.rb
+++ b/railties/test/test_info_test.rb
@@ -24,6 +24,30 @@ module Rails
assert_equal ['test'], info.tasks
end
+ def test_with_model_shorthand
+ info = new_test_info ['test', 'models/foo', '/foo/']
+
+ def info.test_file?(file)
+ file == "test/models/foo_test.rb" || super
+ end
+
+ assert_equal ['test/models/foo_test.rb'], info.files
+ assert_equal '-n /foo/', info.opts
+ assert_equal ['test'], info.tasks
+ end
+
+ def test_with_model_path
+ info = new_test_info ['test', 'app/models/foo.rb', '/foo/']
+
+ def info.test_file?(file)
+ file == "test/models/foo_test.rb" || super
+ end
+
+ assert_equal ['test/models/foo_test.rb'], info.files
+ assert_equal '-n /foo/', info.opts
+ assert_equal ['test'], info.tasks
+ end
+
def new_test_info(tasks)
Class.new(TestTask::TestInfo) {
def task_defined?(task)