diff options
Diffstat (limited to 'test/rake/test_rake_multi_task.rb')
-rw-r--r-- | test/rake/test_rake_multi_task.rb | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/test/rake/test_rake_multi_task.rb b/test/rake/test_rake_multi_task.rb new file mode 100644 index 0000000000..cac235b9d3 --- /dev/null +++ b/test/rake/test_rake_multi_task.rb @@ -0,0 +1,51 @@ +require File.expand_path('../helper', __FILE__) +require 'thread' + +class TestRakeMultiTask < Rake::TestCase + include Rake + include Rake::DSL + + def setup + super + + Task.clear + @runs = Array.new + @mutex = Mutex.new + end + + def add_run(obj) + @mutex.synchronize do + @runs << obj + end + end + + def test_running_multitasks + task :a do 3.times do |i| add_run("A#{i}"); sleep 0.01; end end + task :b do 3.times do |i| add_run("B#{i}"); sleep 0.01; end end + multitask :both => [:a, :b] + Task[:both].invoke + assert_equal 6, @runs.size + assert @runs.index("A0") < @runs.index("A1") + assert @runs.index("A1") < @runs.index("A2") + assert @runs.index("B0") < @runs.index("B1") + assert @runs.index("B1") < @runs.index("B2") + end + + def test_all_multitasks_wait_on_slow_prerequisites + task :slow do 3.times do |i| add_run("S#{i}"); sleep 0.05 end end + task :a => [:slow] do 3.times do |i| add_run("A#{i}"); sleep 0.01 end end + task :b => [:slow] do 3.times do |i| add_run("B#{i}"); sleep 0.01 end end + multitask :both => [:a, :b] + Task[:both].invoke + assert_equal 9, @runs.size + assert @runs.index("S0") < @runs.index("S1") + assert @runs.index("S1") < @runs.index("S2") + assert @runs.index("S2") < @runs.index("A0") + assert @runs.index("S2") < @runs.index("B0") + assert @runs.index("A0") < @runs.index("A1") + assert @runs.index("A1") < @runs.index("A2") + assert @runs.index("B0") < @runs.index("B1") + assert @runs.index("B1") < @runs.index("B2") + end +end + |