ruby-changes:39871
From: nobu <ko1@a...>
Date: Sun, 27 Sep 2015 15:35:35 +0900 (JST)
Subject: [ruby-changes:39871] nobu:r51952 (trunk): test/unit/assertions.rb: all_assertions
nobu 2015-09-27 15:35:10 +0900 (Sun, 27 Sep 2015) New Revision: 51952 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=51952 Log: test/unit/assertions.rb: all_assertions * test/lib/test/unit/assertions.rb (all_assertions): try all assertions and check if all passed. Modified files: trunk/test/lib/envutil.rb trunk/test/lib/test/unit/assertions.rb trunk/test/ruby/test_env.rb trunk/test/ruby/test_yield.rb Index: test/ruby/test_yield.rb =================================================================== --- test/ruby/test_yield.rb (revision 51951) +++ test/ruby/test_yield.rb (revision 51952) @@ -356,16 +356,12 @@ class TestRubyYieldGen < Test::Unit::Tes https://github.com/ruby/ruby/blob/trunk/test/ruby/test_yield.rb#L356 end def assert_all_sentences(syntax, *args) - fails = [] syntax = Sentence.expand_syntax(syntax) - Sentence.each(syntax, *args) {|t| - begin - yield t - rescue MiniTest::Assertion => e - fails << e.message - end - } - assert(fails.empty?, proc {fails.join("\n--------\n")}) + all_assertions do |a| + Sentence.each(syntax, *args) {|t| + a.for(t) {yield t} + } + end end def test_yield Index: test/ruby/test_env.rb =================================================================== --- test/ruby/test_env.rb (revision 51951) +++ test/ruby/test_env.rb (revision 51952) @@ -10,15 +10,13 @@ class TestEnv < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_env.rb#L10 ] def assert_invalid_env(msg = nil) - failed = {} - INVALID_ENVVARS.select do |v| - begin - assert_raise(ArgumentError) {yield v} - rescue MiniTest::Assertion => e - failed[v] = e + all_assertions(msg) do |a| + INVALID_ENVVARS.each do |v| + a.for(v) do + assert_raise(ArgumentError) {yield v} + end end end - assert(failed.empty?, message(msg) {mu_pp(failed)}) end def setup Index: test/lib/test/unit/assertions.rb =================================================================== --- test/lib/test/unit/assertions.rb (revision 51951) +++ test/lib/test/unit/assertions.rb (revision 51952) @@ -442,6 +442,28 @@ EOT https://github.com/ruby/ruby/blob/trunk/test/lib/test/unit/assertions.rb#L442 assert(failed.empty?, message(m) {failed.pretty_inspect}) end + class AllFailures + attr_reader :failures + + def initialize + @failures = {} + end + + def for(key) + yield + rescue Exception => e + @failures[key] = e + end + end + + def all_assertions(msg = nil) + all = AllFailures.new + yield all + ensure + failures = all.failures + assert(failures.empty?, message(msg) {mu_pp(failures)}) + end + def build_message(head, template=nil, *arguments) #:nodoc: template &&= template.chomp template.gsub(/\G((?:[^\\]|\\.)*?)(\\)?\?/) { $1 + ($2 ? "?" : mu_pp(arguments.shift)) } Index: test/lib/envutil.rb =================================================================== --- test/lib/envutil.rb (revision 51951) +++ test/lib/envutil.rb (revision 51952) @@ -351,22 +351,19 @@ module Test https://github.com/ruby/ruby/blob/trunk/test/lib/envutil.rb#L351 raise "test_stderr ignored, use block only or without block" if test_stderr != [] yield(stdout.lines.map {|l| l.chomp }, stderr.lines.map {|l| l.chomp }, status) else - errs = [] - [[test_stdout, stdout], [test_stderr, stderr]].each do |exp, act| - begin - if exp.is_a?(Regexp) - assert_match(exp, act, message) - elsif exp.all? {|e| String === e} - assert_equal(exp, act.lines.map {|l| l.chomp }, message) - else - assert_pattern_list(exp, act, message) + all_assertions(message) do |a| + [["stdout", test_stdout, stdout], ["stderr", test_stderr, stderr]].each do |key, exp, act| + a.for(key) do + if exp.is_a?(Regexp) + assert_match(exp, act) + elsif exp.all? {|e| String === e} + assert_equal(exp, act.lines.map {|l| l.chomp }) + else + assert_pattern_list(exp, act) + end end - rescue MiniTest::Assertion => e - errs << e.message - message = nil end end - raise MiniTest::Assertion, errs.join("\n---\n") unless errs.empty? status end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/