Skip to content
Browse files

rake test app/model/foo.rb and rake test models/foo works

  • Loading branch information...
1 parent 88cf64a commit 2e0e5bb1e4ee5836572fffe6e3f16eefd56b4a25 @tenderlove tenderlove committed
Showing with 47 additions and 3 deletions.
  1. +23 −3 railties/lib/rails/test_unit/sub_test_task.rb
  2. +24 −0 railties/test/test_info_test.rb
View
26 railties/lib/rails/test_unit/sub_test_task.rb
@@ -8,11 +8,21 @@ def initialize(tasks)
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 @@ def opts
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)
View
24 railties/test/test_info_test.rb
@@ -24,6 +24,30 @@ def test_with_opts
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)

0 comments on commit 2e0e5bb

Please sign in to comment.
Something went wrong with that request. Please try again.