diff options
author | sorah <sorah@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-23 00:10:49 +0000 |
---|---|---|
committer | sorah <sorah@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-05-23 00:10:49 +0000 |
commit | 6dc0488148c33fe3839e898e011178fa006fa87d (patch) | |
tree | 99aff43b6f5f7287b393a101107b122a5ec437df /lib/test/unit.rb | |
parent | 1e13786700925d11ac6aad5fbff1e8bc4826054a (diff) |
* lib/test/unit/parallel.rb: Never Ignore SIGINT. When received
Interrupt, immediately puts result and exit. [ruby-dev:43571]
* lib/test/unit.rb: When received Interrupt, wait results from workers
and correct them. [ruby-dev:43571]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31708 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/test/unit.rb')
-rw-r--r-- | lib/test/unit.rb | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/lib/test/unit.rb b/lib/test/unit.rb index 0ab57f0fbd..6061e3b4bd 100644 --- a/lib/test/unit.rb +++ b/lib/test/unit.rb @@ -445,7 +445,7 @@ module Test jobs_status when /^done (.+?)$/ r = Marshal.load($1.unpack("m")[0]) - result << r[0..1] + result << r[0..1] unless r[0..1] == [nil,nil] rep << {file: worker.real_file, report: r[2], result: r[3], testcase: r[5]} $:.push(*r[4]).uniq! @@ -474,6 +474,24 @@ module Test shutting_down = true watchdog.kill if watchdog + if @interrupt + @ios.select!{|x| @workers_hash[x].status == :running } + while !@ios.empty? && (__io = IO.select(@ios,[],[],10)) + _io = __io[0] + _io.each do |io| + worker = @workers_hash[io] + case worker.read + when /^done (.+?)$/ + r = Marshal.load($1.unpack("m")[0]) + result << r[0..1] unless r[0..1] == [nil,nil] + rep << {file: worker.real_file, + report: r[2], result: r[3], testcase: r[5]} + $:.push(*r[4]).uniq! + @ios.delete(io) + end + end + end + end @workers.each do |worker| begin timeout(1) do @@ -500,9 +518,9 @@ module Test rep.each do |r| report.push(*r[:report]) end - @errors += rep.map{|x| x[:result][0] }.inject(:+) + @errors += rep.map{|x| x[:result][0] }.inject(:+) @failures += rep.map{|x| x[:result][1] }.inject(:+) - @skips += rep.map{|x| x[:result][2] }.inject(:+) + @skips += rep.map{|x| x[:result][2] }.inject(:+) else puts "" puts "Retrying..." |