diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-11-01 10:25:57 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-11-01 10:25:57 +0000 |
commit | bfd540cd75f7dcdd87b08266008056a0030c31a6 (patch) | |
tree | 012e19741a04b74cc61807731825782b7b3428c7 /test/ruby/envutil.rb | |
parent | 905b52217cf0b564660ca94b3788fabd686c96f1 (diff) |
* test/ruby/envutil.rb (assert_join_threads): New assertion to
join multiple threads without exceptions.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48223 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/envutil.rb')
-rw-r--r-- | test/ruby/envutil.rb | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/ruby/envutil.rb b/test/ruby/envutil.rb index f5fbb7c10b..0d5d6f9173 100644 --- a/test/ruby/envutil.rb +++ b/test/ruby/envutil.rb @@ -520,6 +520,36 @@ eom end end + # threads should respond to shift method. + # Array and Queue can be used. + def assert_join_threads(threads, message = nil) + errs = [] + values = [] + while th = threads.shift + begin + values << th.value + rescue Exception + errs << $! + end + end + if !errs.empty? + msg = errs.map {|err| + err.backtrace.map.with_index {|line, i| + if i == 0 + "#{line}: #{err.message} (#{err.class})" + else + "\tfrom #{line}" + end + }.join("\n") + }.join("\n---\n") + if message + msg = "#{message}\n#{msg}" + end + raise MiniTest::Assertion, msg + end + values + end + class << (AssertFile = Struct.new(:failure_message).new) include Assertions def assert_file_predicate(predicate, *args) |