1require File.expand_path('../helper', __FILE__) 2require 'thread' 3 4class TestRakeMultiTask < Rake::TestCase 5 include Rake 6 include Rake::DSL 7 8 def setup 9 super 10 11 Task.clear 12 @runs = Array.new 13 @mutex = Mutex.new 14 end 15 16 def add_run(obj) 17 @mutex.synchronize do 18 @runs << obj 19 end 20 end 21 22 def test_running_multitasks 23 task :a do 3.times do |i| add_run("A#{i}"); sleep 0.01; end end 24 task :b do 3.times do |i| add_run("B#{i}"); sleep 0.01; end end 25 multitask :both => [:a, :b] 26 Task[:both].invoke 27 assert_equal 6, @runs.size 28 assert @runs.index("A0") < @runs.index("A1") 29 assert @runs.index("A1") < @runs.index("A2") 30 assert @runs.index("B0") < @runs.index("B1") 31 assert @runs.index("B1") < @runs.index("B2") 32 end 33 34 def test_all_multitasks_wait_on_slow_prerequisites 35 task :slow do 3.times do |i| add_run("S#{i}"); sleep 0.05 end end 36 task :a => [:slow] do 3.times do |i| add_run("A#{i}"); sleep 0.01 end end 37 task :b => [:slow] do 3.times do |i| add_run("B#{i}"); sleep 0.01 end end 38 multitask :both => [:a, :b] 39 Task[:both].invoke 40 assert_equal 9, @runs.size 41 assert @runs.index("S0") < @runs.index("S1") 42 assert @runs.index("S1") < @runs.index("S2") 43 assert @runs.index("S2") < @runs.index("A0") 44 assert @runs.index("S2") < @runs.index("B0") 45 assert @runs.index("A0") < @runs.index("A1") 46 assert @runs.index("A1") < @runs.index("A2") 47 assert @runs.index("B0") < @runs.index("B1") 48 assert @runs.index("B1") < @runs.index("B2") 49 end 50 51 def test_multitasks_with_parameters 52 task :a, [:arg] do |t,args| add_run(args[:arg]) end 53 multitask :b, [:arg] => [:a] do |t,args| add_run(args[:arg]+'mt') end 54 Task[:b].invoke "b" 55 assert @runs[0] == "b" 56 assert @runs[1] == "bmt" 57 end 58end 59 60