ruby-changes:23550
From: ryan <ko1@a...>
Date: Wed, 9 May 2012 13:11:02 +0900 (JST)
Subject: [ruby-changes:23550] ryan:r35601 (trunk): Imported minitest 3.0.0 (r7435) w/ fixes for rubygems. 10955 tests, 2253343 assertions, 1 failures, 1 errors, 28 skips minus drb tests on x86_64-darwin11.3.0 and reviewed by drbrain
ryan 2012-05-09 13:09:25 +0900 (Wed, 09 May 2012) New Revision: 35601 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35601 Log: Imported minitest 3.0.0 (r7435) w/ fixes for rubygems. 10955 tests, 2253343 assertions, 1 failures, 1 errors, 28 skips minus drb tests on x86_64-darwin11.3.0 and reviewed by drbrain Modified files: trunk/ChangeLog trunk/lib/minitest/README.txt trunk/lib/minitest/mock.rb trunk/lib/minitest/unit.rb trunk/test/minitest/metametameta.rb trunk/test/minitest/test_minitest_mock.rb trunk/test/minitest/test_minitest_unit.rb trunk/test/rubygems/test_gem_platform.rb trunk/test/rubygems/test_gem_remote_fetcher.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 35600) +++ ChangeLog (revision 35601) @@ -1,3 +1,11 @@ +Wed May 9 08:09:38 2012 Ryan Davis <ryand-ruby@z...> + + * lib/minitest/*: Imported minitest 3.0.0 (r7435) + * test/minitest/*: ditto + * test/rubygems/*: Imported fixes for buggy use of assert_match + and deprecated assert_block + UNBUNCH YOUR PANTIES. THE TESTS DO NOT RUN CLEAN ON OSX. + Wed May 9 06:28:59 2012 Eric Hodel <drbrain@s...> * re.c (rb_reg_equal): Removed incorrect example for Regexp#== with Index: lib/minitest/unit.rb =================================================================== --- lib/minitest/unit.rb (revision 35600) +++ lib/minitest/unit.rb (revision 35601) @@ -193,7 +193,7 @@ # Fails unless the block returns a true value. def assert_block msg = nil - warn "NOTE: MiniTest::Unit::TestCase#assert_block is deprecated, use assert. It will be removed on or after 2012-06-01." + warn "NOTE: MiniTest::Unit::TestCase#assert_block is deprecated, use assert. It will be removed on or after 2012-06-01. Called from #{caller.first}" msg = message(msg) { "Expected block to return true value" } assert yield, msg end @@ -281,8 +281,8 @@ def assert_match matcher, obj, msg = nil msg = message(msg) { "Expected #{mu_pp matcher} to match #{mu_pp obj}" } - assert_respond_to obj, :"=~" - matcher = Regexp.new Regexp.escape matcher if String === matcher and obj.respond_to?(:to_str) + assert_respond_to matcher, :"=~" + matcher = Regexp.new Regexp.escape matcher if String === matcher assert matcher =~ obj, msg end @@ -582,8 +582,8 @@ def refute_match matcher, obj, msg = nil msg = message(msg) {"Expected #{mu_pp matcher} to not match #{mu_pp obj}"} - assert_respond_to obj, :"=~" - matcher = Regexp.new Regexp.escape matcher if String === matcher and obj.respond_to?(:to_str) + assert_respond_to matcher, :"=~" + matcher = Regexp.new Regexp.escape matcher if String === matcher refute matcher =~ obj, msg end @@ -652,7 +652,7 @@ end class Unit # :nodoc: - VERSION = "2.12.1" # :nodoc: + VERSION = "3.0.0" # :nodoc: attr_accessor :report, :failures, :errors, :skips # :nodoc: attr_accessor :test_count, :assertion_count # :nodoc: Index: lib/minitest/README.txt =================================================================== --- lib/minitest/README.txt (revision 35600) +++ lib/minitest/README.txt (revision 35601) @@ -33,8 +33,8 @@ co-worker doesn't replace your linear algorithm with an exponential one! -minitest/mock by Steven Baker, is a beautifully tiny mock object -framework. +minitest/mock by Steven Baker, is a beautifully tiny mock (and stub) +object framework. minitest/pride shows pride in testing and adds coloring to your test output. I guess it is an example of how to write IO pipes too. :P @@ -54,7 +54,7 @@ * minitest/autorun - the easy and explicit way to run all your tests. * minitest/unit - a very fast, simple, and clean test system. * minitest/spec - a very fast, simple, and clean spec system. -* minitest/mock - a simple and clean mock system. +* minitest/mock - a simple and clean mock/stub system. * minitest/benchmark - an awesome way to assert your algorithm's performance. * minitest/pride - show your pride in testing! * Incredibly small and fast runner, but no bells and whistles. @@ -194,6 +194,18 @@ end end +=== Stubs + + def test_stale_eh + obj_under_test = Something.new + + refute obj_under_test.stale? + + Time.stub :now, Time.at(0) do # stub goes away once the block is done + assert obj_under_test.stale? + end + end + === Customizable Test Runner Types: MiniTest::Unit.runner=(runner) provides an easy way of creating custom Index: lib/minitest/mock.rb =================================================================== --- lib/minitest/mock.rb (revision 35600) +++ lib/minitest/mock.rb (revision 35601) @@ -132,3 +132,41 @@ end end end + +class Object # :nodoc: + + ## + # Add a temporary stubbed method replacing +name+ for the duration + # of the +block+. If +val_or_callable+ responds to #call, then it + # returns the result of calling it, otherwise returns the value + # as-is. Cleans up the stub at the end of the +block+. + # + # def test_stale_eh + # obj_under_test = Something.new + # refute obj_under_test.stale? + # + # Time.stub :now, Time.at(0) do + # assert obj_under_test.stale? + # end + # end + + def stub name, val_or_callable, &block + new_name = "__minitest_stub__#{name}" + + metaclass = class << self; self; end + metaclass.send :alias_method, new_name, name + metaclass.send :define_method, name do |*args| + if val_or_callable.respond_to? :call then + val_or_callable.call(*args) + else + val_or_callable + end + end + + yield + ensure + metaclass.send :undef_method, name + metaclass.send :alias_method, name, new_name + metaclass.send :undef_method, new_name + end +end Index: test/rubygems/test_gem_remote_fetcher.rb =================================================================== --- test/rubygems/test_gem_remote_fetcher.rb (revision 35600) +++ test/rubygems/test_gem_remote_fetcher.rb (revision 35601) @@ -1,10 +1,7 @@ require 'rubygems/test_case' require 'ostruct' require 'webrick' -begin - require 'webrick/https' -rescue LoadError -end +require 'webrick/https' require 'rubygems/remote_fetcher' require 'rubygems/format' @@ -752,7 +749,7 @@ with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher| fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml") end - end if defined?(OpenSSL::PKey) + end def test_do_not_allow_insecure_ssl_connection_by_default ssl_server = self.class.start_ssl_server @@ -761,14 +758,14 @@ fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml") end end - end if defined?(OpenSSL::PKey) + end def test_ssl_connection_allow_verify_none ssl_server = self.class.start_ssl_server with_configured_fetcher(":ssl_verify_mode: 0") do |fetcher| fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml") end - end if defined?(OpenSSL::PKey) + end def test_do_not_follow_insecure_redirect ssl_server = self.class.start_ssl_server @@ -778,7 +775,7 @@ fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri}") end end - end if defined?(OpenSSL::PKey) + end def with_configured_fetcher(config_str = nil, &block) if config_str @@ -856,7 +853,7 @@ end DIR = File.expand_path(File.dirname(__FILE__)) - DH_PARAM = defined?(OpenSSL::PKey) ? OpenSSL::PKey::DH.new(128) : nil + DH_PARAM = OpenSSL::PKey::DH.new(128) def start_ssl_server(config = {}) null_logger = NilLog.new @@ -894,7 +891,7 @@ end end server - end if DH_PARAM + end Index: test/rubygems/test_gem_platform.rb =================================================================== --- test/rubygems/test_gem_platform.rb (revision 35600) +++ test/rubygems/test_gem_platform.rb (revision 35601) @@ -207,64 +207,71 @@ def test_equals_tilde util_set_arch 'i386-mswin32' - assert_match 'mswin32', Gem::Platform.local - assert_match 'i386-mswin32', Gem::Platform.local + assert_local_match 'mswin32' + assert_local_match 'i386-mswin32' # oddballs - assert_match 'i386-mswin32-mq5.3', Gem::Platform.local - assert_match 'i386-mswin32-mq6', Gem::Platform.local - refute_match 'win32-1.8.2-VC7', Gem::Platform.local - refute_match 'win32-1.8.4-VC6', Gem::Platform.local - refute_match 'win32-source', Gem::Platform.local - refute_match 'windows', Gem::Platform.local + assert_local_match 'i386-mswin32-mq5.3' + assert_local_match 'i386-mswin32-mq6' + refute_local_match 'win32-1.8.2-VC7' + refute_local_match 'win32-1.8.4-VC6' + refute_local_match 'win32-source' + refute_local_match 'windows' util_set_arch 'i686-linux' - assert_match 'i486-linux', Gem::Platform.local - assert_match 'i586-linux', Gem::Platform.local - assert_match 'i686-linux', Gem::Platform.local + assert_local_match 'i486-linux' + assert_local_match 'i586-linux' + assert_local_match 'i686-linux' util_set_arch 'i686-darwin8' - assert_match 'i686-darwin8.4.1', Gem::Platform.local - assert_match 'i686-darwin8.8.2', Gem::Platform.local + assert_local_match 'i686-darwin8.4.1' + assert_local_match 'i686-darwin8.8.2' util_set_arch 'java' - assert_match 'java', Gem::Platform.local - assert_match 'jruby', Gem::Platform.local + assert_local_match 'java' + assert_local_match 'jruby' util_set_arch 'universal-dotnet2.0' - assert_match 'universal-dotnet', Gem::Platform.local - assert_match 'universal-dotnet-2.0', Gem::Platform.local - refute_match 'universal-dotnet-4.0', Gem::Platform.local - assert_match 'dotnet', Gem::Platform.local - assert_match 'dotnet-2.0', Gem::Platform.local - refute_match 'dotnet-4.0', Gem::Platform.local + assert_local_match 'universal-dotnet' + assert_local_match 'universal-dotnet-2.0' + refute_local_match 'universal-dotnet-4.0' + assert_local_match 'dotnet' + assert_local_match 'dotnet-2.0' + refute_local_match 'dotnet-4.0' util_set_arch 'universal-dotnet4.0' - assert_match 'universal-dotnet', Gem::Platform.local - refute_match 'universal-dotnet-2.0', Gem::Platform.local - assert_match 'universal-dotnet-4.0', Gem::Platform.local - assert_match 'dotnet', Gem::Platform.local - refute_match 'dotnet-2.0', Gem::Platform.local - assert_match 'dotnet-4.0', Gem::Platform.local + assert_local_match 'universal-dotnet' + refute_local_match 'universal-dotnet-2.0' + assert_local_match 'universal-dotnet-4.0' + assert_local_match 'dotnet' + refute_local_match 'dotnet-2.0' + assert_local_match 'dotnet-4.0' util_set_arch 'universal-macruby-1.0' - assert_match 'universal-macruby', Gem::Platform.local - assert_match 'macruby', Gem::Platform.local - refute_match 'universal-macruby-0.10', Gem::Platform.local - assert_match 'universal-macruby-1.0', Gem::Platform.local + assert_local_match 'universal-macruby' + assert_local_match 'macruby' + refute_local_match 'universal-macruby-0.10' + assert_local_match 'universal-macruby-1.0' util_set_arch 'powerpc-darwin' - assert_match 'powerpc-darwin', Gem::Platform.local + assert_local_match 'powerpc-darwin' util_set_arch 'powerpc-darwin7' - assert_match 'powerpc-darwin7.9.0', Gem::Platform.local + assert_local_match 'powerpc-darwin7.9.0' util_set_arch 'powerpc-darwin8' - assert_match 'powerpc-darwin8.10.0', Gem::Platform.local + assert_local_match 'powerpc-darwin8.10.0' util_set_arch 'sparc-solaris2.8' - assert_match 'sparc-solaris2.8-mq5.3', Gem::Platform.local + assert_local_match 'sparc-solaris2.8-mq5.3' end + def assert_local_match name + assert_match Gem::Platform.local, name + end + + def refute_local_match name + refute_match Gem::Platform.local, name + end end Index: test/minitest/metametameta.rb =================================================================== --- test/minitest/metametameta.rb (revision 35600) +++ test/minitest/metametameta.rb (revision 35601) @@ -26,13 +26,15 @@ output = @output.string.dup output.sub!(/Finished tests in .*/, "Finished tests in 0.00") output.sub!(/Loaded suite .*/, 'Loaded suite blah') - if /mswin|mingw/ =~ RUBY_PLATFORM + + if windows? then output.gsub!(/\[(?:[A-Za-z]:)?[^\]:]+:\d+\]/, '[FILE:LINE]') output.gsub!(/^(\s+)(?:[A-Za-z]:)?[^:]+:\d+:in/, '\1FILE:LINE:in') else output.gsub!(/\[[^\]:]+:\d+\]/, '[FILE:LINE]') output.gsub!(/^(\s+)[^:]+:\d+:in/, '\1FILE:LINE:in') end + assert_equal(expected, output) end Index: test/minitest/test_minitest_mock.rb =================================================================== --- test/minitest/test_minitest_mock.rb (revision 35600) +++ test/minitest/test_minitest_mock.rb (revision 35601) @@ -210,3 +210,62 @@ assert_equal exp, e.message end end + +require "test/minitest/metametameta" + +class TestMiniTestStub < MiniTest::Unit::TestCase + def setup + super + MiniTest::Unit::TestCase.reset + + @tc = MiniTest::Unit::TestCase.new 'fake tc' + @assertion_count = 1 + end + + def teardown + super + assert_equal @assertion_count, @tc._assertions + end + + def assert_stub val_or_callable + @assertion_count += 1 + + t = Time.now.to_i + + Time.stub :now, val_or_callable do + @tc.assert_equal 42, Time.now + end + + @tc.assert_operator Time.now.to_i, :>=, t + end + + def test_stub_value + assert_stub 42 + end + + def test_stub_block + assert_stub lambda { 42 } + end + + def test_stub_block_args + @assertion_count += 1 + + t = Time.now.to_i + + Time.stub :now, lambda { |n| n * 2 } do + @tc.assert_equal 42, Time.now(21) + end + + @tc.assert_operator Time.now.to_i, :>=, t + end + + def test_stub_callable + obj = Object.new + + def obj.call + 42 + end + + assert_stub obj + end +end Index: test/minitest/test_minitest_unit.rb =================================================================== --- test/minitest/test_minitest_unit.rb (revision 35600) +++ test/minitest/test_minitest_unit.rb (revision 35601) @@ -6,7 +6,7 @@ ###################################################################### require 'pathname' -require File.expand_path('../metametameta', __FILE__) +require 'test/minitest/metametameta' module MyModule; end class AnError < StandardError; include MyModule; end @@ -706,13 +706,16 @@ def test_assert_block exp = ["NOTE: MiniTest::Unit::TestCase#assert_block is deprecated,", - "use assert. It will be removed on or after 2012-06-01.\n"].join " " + "use assert. It will be removed on or after 2012-06-01."].join " " - assert_output "", exp do + out, err = capture_io do @tc.assert_block do true end end + + assert_equal "", out + assert_match exp, err end def test_assert_block_triggered @@ -952,15 +955,6 @@ @tc.assert_match "blah", obj end - def test_assert_match_matchee_match - @assertion_count = 2 - - obj = Object.new - def obj.=~(o); true end - - @tc.assert_match "blah", obj - end - def test_assert_match_object_triggered @assertion_count = 2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/