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

ruby-changes:16662

From: nobu <ko1@a...>
Date: Sat, 17 Jul 2010 10:10:20 +0900 (JST)
Subject: [ruby-changes:16662] Ruby:r28658 (trunk): * lib/test/unit.rb: MiniTest::Unit is different class from

nobu	2010-07-17 10:08:04 +0900 (Sat, 17 Jul 2010)

  New Revision: 28658

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28658

  Log:
    * lib/test/unit.rb: MiniTest::Unit is different class from
      Test::Unit, and install runner before loading test/minitest.

  Modified files:
    trunk/ChangeLog
    trunk/bin/testrb
    trunk/lib/test/unit.rb
    trunk/test/runner.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28657)
+++ ChangeLog	(revision 28658)
@@ -1,7 +1,7 @@
-Fri Jul 16 22:08:10 2010  Yusuke Endoh  <mame@t...>
+Sat Jul 17 10:07:52 2010  Nobuyoshi Nakada  <nobu@r...>
 
-	* lib/test/unit.rb, bin/testrb, test/runner.rb: revert r28655, which
-	  broke test-all.
+	* lib/test/unit.rb: MiniTest::Unit is different class from
+	  Test::Unit, and install runner before loading test/minitest.
 
 Fri Jul 16 14:58:38 2010  Nobuyoshi Nakada  <nobu@r...>
 
Index: lib/test/unit.rb
===================================================================
--- lib/test/unit.rb	(revision 28657)
+++ lib/test/unit.rb	(revision 28658)
@@ -9,7 +9,20 @@
   module Unit
     TEST_UNIT_IMPLEMENTATION = 'test/unit compatibility layer using minitest'
 
-    def self.setup_argv(original_argv=ARGV)
+    module RunCount
+      @@run_count = 0
+
+      def self.have_run?
+        @@run_count.nonzero?
+      end
+
+      def run(*)
+        @@run_count += 1
+        super
+      end
+    end
+
+    def self.setup_argv(original_argv=::ARGV)
       minitest_argv = []
       files = []
       reject = []
@@ -55,6 +68,12 @@
       reject_pat = Regexp.union(reject.map {|r| /#{r}/ })
       files.reject! {|f| reject_pat =~ f }
 
+      MiniTest::Unit._install_at_exit {
+        next if RunCount.have_run?
+        next if $! # don't run if there was an exception
+        exit false unless run(minitest_argv)
+      }
+
       files.each {|f|
         d = File.dirname(path = File.expand_path(f))
         unless $:.include? d
@@ -67,9 +86,27 @@
         end
       }
 
-      ARGV.replace minitest_argv
+      minitest_argv
     end
+
+    def self.run(args)
+      exit_code = MiniTest::Unit.new.run(args)
+      !exit_code || exit_code == 0
+    end
+
+    def self.start(argv=::ARGV, &block)
+      run(setup_argv(argv, &block))
+    end
   end
 end
 
-MiniTest::Unit.autorun
+class MiniTest::Unit
+  def self.new(*)
+    super.extend(Test::Unit::RunCount)
+  end
+
+  def self._install_at_exit(&block)
+    at_exit(&block) unless @@installed_at_exit
+    @@installed_at_exit = true
+  end
+end
Index: bin/testrb
===================================================================
--- bin/testrb	(revision 28657)
+++ bin/testrb	(revision 28658)
@@ -1,9 +1,9 @@
 #!/usr/bin/env ruby
 require 'test/unit'
-Test::Unit.setup_argv {|files|
+exit Test::Unit.start {|files|
   if files.empty?
     puts "Usage: testrb [options] tests..."
-    exit 1
+    exit false
   end
   if files.size == 1
     $0 = File.basename(files[0])
Index: test/runner.rb
===================================================================
--- test/runner.rb	(revision 28657)
+++ test/runner.rb	(revision 28658)
@@ -6,7 +6,7 @@
 src_testdir = File.dirname(File.expand_path(__FILE__))
 srcdir = File.dirname(src_testdir)
 
-Test::Unit.setup_argv {|files|
+exit Test::Unit.start {|files|
   if files.empty?
     [src_testdir]
   else

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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