From: "U.Nakamura" Date: 2005-02-15T11:17:57+09:00 Subject: [ruby-dev:25698] skip tests, again こんにちは、なかむら(う)です。 以前、[ruby-core:3363](と[ruby-dev:24865])で、autorunner経由 でテストが実行される際に、特定のテストスクリプトを除くという パッチを投げましたが、もっと細かい粒度でテストのスキップを指 定したい場合もあるので、テストケース(クラス)名あるいはテスト メソッド名のレベルでテストをスキップできるようにするパッチを 作ってみました。 例えば、現時点だと、rubyのtest-allを実行するとOpenSSLの特定の テストが刺さるのですが、このパッチが適応してあれば、 -s/^test_(parallel|read_and_write|starttls)$/ か、 -iOpenSSL::TestSSL か、既にcommit済みの -xtest_ssl で、刺さるのを回避することができます。 Tue Feb 15 11:14:45 2005 NAKAMURA Usaku * lib/test/unit/autorunner.rb (Test::Unit::AutoRunner#options): new options (-i,--ignore, -s,--skip). Index: lib/test/unit/autorunner.rb =================================================================== RCS file: /home/cvs/ruby/lib/test/unit/autorunner.rb,v retrieving revision 1.11 diff -u -1 -p -r1.11 autorunner.rb --- lib/test/unit/autorunner.rb 19 Dec 2004 02:01:39 -0000 1.11 +++ lib/test/unit/autorunner.rb 15 Feb 2005 02:05:21 -0000 @@ -87,4 +87,2 @@ module Test abort - else - @filters << proc{false} unless(@filters.empty?) end @@ -120,3 +118,3 @@ module Test o.on('-x', '--exclude=PATTERN', Regexp, - "Ignore files to collect against PATTERN.") do |e| + "Match files to ignore against PATTERN.") do |e| @exclude << e @@ -131,5 +129,17 @@ module Test when Regexp - @filters << proc{|t| n =~ t.method_name ? true : nil} + @filters << proc{|t| n =~ t.method_name.to_s ? true : false} else - @filters << proc{|t| n == t.method_name ? true : nil} + @filters << proc{|t| n == t.method_name ? true : false} + end + end + + o.on('-s', '--skip=NAME', String, + "Skips tests matching NAME.", + "(patterns may be used).") do |n| + n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n) + case n + when Regexp + @filters << proc{|t| n =~ t.method_name.to_s ? false : nil} + else + @filters << proc{|t| n == t.method_name ? false : nil} end @@ -143,5 +153,17 @@ module Test when Regexp - @filters << proc{|t| n =~ t.class.name ? true : nil} + @filters << proc{|t| n =~ t.class.name ? true : false} + else + @filters << proc{|t| n == t.class.name ? true : false} + end + end + + o.on('-i', '--ignore=TESTCASE', String, + "Ignores tests in TestCases matching", + "TESTCASE. (patterns may be used).") do |n| + n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n) + case n + when Regexp + @filters << proc{|t| n =~ t.class.name ? false : nil} else - @filters << proc{|t| n == t.class.name ? true : nil} + @filters << proc{|t| n == t.class.name ? false : nil} end それでは。 -- U.Nakamura