diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-04-05 16:31:19 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-04-05 16:31:19 -0700 |
commit | 7f698da8878b141c5324b2419d73570f507ef08f (patch) | |
tree | 44d042b4def5b691aeeea1367ba6d8e263feac30 | |
parent | 32eff659bc92895546e3d5f90ef76051f0e7b6cd (diff) | |
download | rails-7f698da8878b141c5324b2419d73570f507ef08f.tar.gz rails-7f698da8878b141c5324b2419d73570f507ef08f.tar.bz2 rails-7f698da8878b141c5324b2419d73570f507ef08f.zip |
add a class for splitting up rake commands
-rw-r--r-- | railties/lib/rails/test_unit/sub_test_task.rb | 35 | ||||
-rw-r--r-- | railties/test/test_info_test.rb | 35 |
2 files changed, 70 insertions, 0 deletions
diff --git a/railties/lib/rails/test_unit/sub_test_task.rb b/railties/lib/rails/test_unit/sub_test_task.rb index 36657dbdd4..ac2bde2071 100644 --- a/railties/lib/rails/test_unit/sub_test_task.rb +++ b/railties/lib/rails/test_unit/sub_test_task.rb @@ -2,6 +2,41 @@ require 'rake/testtask' module Rails class TestTask < Rake::TestTask # :nodoc: all + class TestInfo + def initialize(tasks) + @tasks = tasks + end + + def files + @tasks.find_all { |t| File.file?(t) && !File.directory?(t) } + end + + def tasks + @tasks - files - opt_names + end + + def opts + opts = opt_names + if opts.any? + "-n #{opts.join ' '}" + end + end + + private + + def opt_names + (@tasks - files).reject { |t| task_defined? t } + end + + def task_defined?(task) + Rake::Task.task_defined? task + end + end + + def self.test_info(tasks) + TestInfo.new tasks + end + def initialize(name = :test) super @libs << "test" # lib *and* test seem like a better default diff --git a/railties/test/test_info_test.rb b/railties/test/test_info_test.rb new file mode 100644 index 0000000000..2f78dcff1b --- /dev/null +++ b/railties/test/test_info_test.rb @@ -0,0 +1,35 @@ +require 'abstract_unit' +require 'rails/test_unit/sub_test_task' + +module Rails + class TestInfoTest < ActiveSupport::TestCase + def test_test_files + info = new_test_info ['test'] + assert_predicate info.files, :empty? + assert_nil info.opts + assert_equal ['test'], info.tasks + end + + def test_with_file + info = new_test_info ['test', __FILE__] + assert_equal [__FILE__], info.files + assert_nil info.opts + assert_equal ['test'], info.tasks + end + + def test_with_opts + info = new_test_info ['test', __FILE__, '/foo/'] + assert_equal [__FILE__], 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) + task == "test" + end + }.new tasks + end + end +end |