[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]