mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Imported minitest 2.6.2 (r6712)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33487 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9cfc7a658f
commit
9bec8ef50c
8 changed files with 119 additions and 24 deletions
|
@ -1,3 +1,8 @@
|
|||
Thu Oct 20 05:13:39 2011 Ryan Davis <ryan@lust.zenspider.com>
|
||||
|
||||
* lib/minitest/*: Imported minitest 2.6.2 (r6712)
|
||||
* test/minitest/*: ditto
|
||||
|
||||
Thu Oct 20 06:55:32 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
|
||||
|
||||
* lib/openssl/buffering.rb: Force multi-byte strings to be treated as
|
||||
|
|
|
@ -1,13 +1,25 @@
|
|||
= minitest/{unit,spec,mock,benchmark}
|
||||
|
||||
home :: https://github.com/seattlerb/minitest
|
||||
rdoc :: http://bfts.rubyforge.org/minitest
|
||||
rdoc :: http://docs.seattlerb.org/minitest
|
||||
vim :: https://github.com/sunaku/vim-ruby-minitest
|
||||
|
||||
== DESCRIPTION:
|
||||
|
||||
minitest provides a complete suite of testing facilities supporting
|
||||
TDD, BDD, mocking, and benchmarking.
|
||||
|
||||
"I had a class with Jim Weirich on testing last week and we were
|
||||
allowed to choose our testing frameworks. Kirk Haines and I were
|
||||
paired up and we cracked open the code for a few test
|
||||
frameworks...
|
||||
|
||||
I MUST say that mintiest is *very* readable / understandable
|
||||
compared to the 'other two' options we looked at. Nicely done and
|
||||
thank you for helping us keep our mental sanity."
|
||||
|
||||
-- Wayne E. Seguin
|
||||
|
||||
minitest/unit is a small and incredibly fast unit testing framework.
|
||||
It provides a rich set of assertions to make your tests clean and
|
||||
readable.
|
||||
|
@ -32,6 +44,11 @@ implementors that need a minimal set of methods to bootstrap a working
|
|||
test suite. For example, there is no magic involved for test-case
|
||||
discovery.
|
||||
|
||||
"Again, I can’t praise enough the idea of a testing/specing
|
||||
framework that I can actually read in full in one sitting!"
|
||||
|
||||
-- Piotr Szotkowski
|
||||
|
||||
== FEATURES/PROBLEMS:
|
||||
|
||||
* minitest/autorun - the easy and explicit way to run all your tests.
|
||||
|
|
|
@ -99,7 +99,7 @@ module MiniTest
|
|||
end
|
||||
|
||||
def respond_to?(sym) # :nodoc:
|
||||
return true if @expected_calls.has_key?(sym)
|
||||
return true if @expected_calls.has_key?(sym.to_sym)
|
||||
return __respond_to?(sym)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -192,10 +192,12 @@ class MiniTest::Spec < MiniTest::Unit::TestCase
|
|||
# write specs don't like class inheritence, so this goes way out of
|
||||
# its way to make sure that expectations aren't inherited.
|
||||
#
|
||||
# This is also aliased to #specify and doesn't require a +desc+ arg.
|
||||
#
|
||||
# Hint: If you _do_ want inheritence, use minitest/unit. You can mix
|
||||
# and match between assertions and expectations as much as you want.
|
||||
|
||||
def self.it desc, &block
|
||||
def self.it desc = "anonymous", &block
|
||||
block ||= proc { skip "(no tests defined)" }
|
||||
|
||||
@specs ||= 0
|
||||
|
@ -240,7 +242,9 @@ class MiniTest::Spec < MiniTest::Unit::TestCase
|
|||
|
||||
# :stopdoc:
|
||||
class << self
|
||||
attr_reader :name, :desc
|
||||
attr_reader :desc
|
||||
alias :specify :it
|
||||
alias :name :to_s
|
||||
end
|
||||
# :startdoc:
|
||||
end
|
||||
|
@ -334,9 +338,13 @@ module MiniTest::Expectations
|
|||
#
|
||||
# n.must_be :<=, 42
|
||||
#
|
||||
# This can also do predicates:
|
||||
#
|
||||
# str.must_be :empty?
|
||||
#
|
||||
# :method: must_be
|
||||
|
||||
infect_an_assertion :assert_operator, :must_be
|
||||
infect_an_assertion :assert_operator, :must_be, :reverse
|
||||
|
||||
##
|
||||
# See MiniTest::Assertions#assert_output
|
||||
|
@ -491,9 +499,13 @@ module MiniTest::Expectations
|
|||
#
|
||||
# n.wont_be :<=, 42
|
||||
#
|
||||
# This can also do predicates:
|
||||
#
|
||||
# str.wont_be :empty?
|
||||
#
|
||||
# :method: wont_be
|
||||
|
||||
infect_an_assertion :refute_operator, :wont_be
|
||||
infect_an_assertion :refute_operator, :wont_be, :reverse
|
||||
|
||||
##
|
||||
# See MiniTest::Assertions#refute_respond_to
|
||||
|
|
|
@ -24,7 +24,7 @@ module MiniTest
|
|||
|
||||
class Skip < Assertion; end
|
||||
|
||||
file = if RUBY_VERSION =~ /^1\.9/ then # bt's expanded, but __FILE__ isn't :(
|
||||
file = if RUBY_VERSION >= '1.9.0' then # bt's expanded, but __FILE__ isn't :(
|
||||
File.expand_path __FILE__
|
||||
elsif __FILE__ =~ /^[^\.]/ then # assume both relative
|
||||
require 'pathname'
|
||||
|
@ -253,7 +253,7 @@ module MiniTest
|
|||
end
|
||||
|
||||
##
|
||||
# Fails unless +obj+ is an instace of +cls+.
|
||||
# Fails unless +obj+ is an instance of +cls+.
|
||||
|
||||
def assert_instance_of cls, obj, msg = nil
|
||||
msg = message(msg) {
|
||||
|
@ -291,12 +291,16 @@ module MiniTest
|
|||
assert obj.nil?, msg
|
||||
end
|
||||
|
||||
UNDEFINED = Object.new
|
||||
def UNDEFINED.inspect; "UNDEFINED"; end
|
||||
|
||||
##
|
||||
# For testing equality operators and so-forth.
|
||||
# For testing with binary operators.
|
||||
#
|
||||
# assert_operator 5, :<=, 4
|
||||
|
||||
def assert_operator o1, op, o2, msg = nil
|
||||
def assert_operator o1, op, o2 = UNDEFINED, msg = nil
|
||||
return assert_predicate o1, op, msg if UNDEFINED == o2
|
||||
msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op} #{mu_pp(o2)}" }
|
||||
assert o1.__send__(op, o2), msg
|
||||
end
|
||||
|
@ -319,6 +323,20 @@ module MiniTest
|
|||
(!stdout || x) && (!stderr || y)
|
||||
end
|
||||
|
||||
##
|
||||
# For testing with predicates.
|
||||
#
|
||||
# assert_predicate str, :empty?
|
||||
#
|
||||
# This is really meant for specs and is front-ended by assert_operator:
|
||||
#
|
||||
# str.must_be :empty?
|
||||
|
||||
def assert_predicate o1, op, msg = nil
|
||||
msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op}" }
|
||||
assert o1.__send__(op), msg
|
||||
end
|
||||
|
||||
##
|
||||
# Fails unless the block raises one of +exp+
|
||||
|
||||
|
@ -582,13 +600,26 @@ module MiniTest
|
|||
# refute_operator 1, :>, 2 #=> pass
|
||||
# refute_operator 1, :<, 2 #=> fail
|
||||
|
||||
def refute_operator o1, op, o2, msg = nil
|
||||
msg = message(msg) {
|
||||
"Expected #{mu_pp(o1)} to not be #{op} #{mu_pp(o2)}"
|
||||
}
|
||||
def refute_operator o1, op, o2 = UNDEFINED, msg = nil
|
||||
return refute_predicate o1, op, msg if UNDEFINED == o2
|
||||
msg = message(msg) { "Expected #{mu_pp(o1)} to not be #{op} #{mu_pp(o2)}"}
|
||||
refute o1.__send__(op, o2), msg
|
||||
end
|
||||
|
||||
##
|
||||
# For testing with predicates.
|
||||
#
|
||||
# refute_predicate str, :empty?
|
||||
#
|
||||
# This is really meant for specs and is front-ended by refute_operator:
|
||||
#
|
||||
# str.wont_be :empty?
|
||||
|
||||
def refute_predicate o1, op, msg = nil
|
||||
msg = message(msg) { "Expected #{mu_pp(o1)} to not be #{op}" }
|
||||
refute o1.__send__(op), msg
|
||||
end
|
||||
|
||||
##
|
||||
# Fails if +obj+ responds to the message +meth+.
|
||||
|
||||
|
@ -620,7 +651,7 @@ module MiniTest
|
|||
end
|
||||
|
||||
class Unit
|
||||
VERSION = "2.5.1" # :nodoc:
|
||||
VERSION = "2.6.1" # :nodoc:
|
||||
|
||||
attr_accessor :report, :failures, :errors, :skips # :nodoc:
|
||||
attr_accessor :test_count, :assertion_count # :nodoc:
|
||||
|
|
|
@ -91,6 +91,7 @@ class TestMiniTestMock < MiniTest::Unit::TestCase
|
|||
|
||||
def test_respond_appropriately
|
||||
assert @mock.respond_to?(:foo)
|
||||
assert @mock.respond_to?('foo')
|
||||
assert !@mock.respond_to?(:bar)
|
||||
end
|
||||
|
||||
|
|
|
@ -95,11 +95,16 @@ describe MiniTest::Spec do
|
|||
proc { 42.must_be_nil }.must_raise MiniTest::Assertion
|
||||
end
|
||||
|
||||
it "needs to verify using any operator" do
|
||||
it "needs to verify using any binary operator" do
|
||||
41.must_be(:<, 42).must_equal true
|
||||
proc { 42.must_be(:<, 41) }.must_raise MiniTest::Assertion
|
||||
end
|
||||
|
||||
it "needs to verify using any predicate" do
|
||||
"".must_be(:empty?).must_equal true
|
||||
proc { "blah".must_be(:empty?) }.must_raise MiniTest::Assertion
|
||||
end
|
||||
|
||||
it "needs to catch an expected exception" do
|
||||
@assertion_count = 2
|
||||
|
||||
|
@ -156,6 +161,11 @@ describe MiniTest::Spec do
|
|||
proc { "blah".wont_match(/\w+/) }.must_raise MiniTest::Assertion
|
||||
end
|
||||
|
||||
it "needs to verify using any (negative) predicate" do
|
||||
"blah".wont_be(:empty?).must_equal false
|
||||
proc { "".wont_be(:empty?) }.must_raise MiniTest::Assertion
|
||||
end
|
||||
|
||||
it "needs to verify non-nil" do
|
||||
42.wont_be_nil.must_equal false
|
||||
proc { nil.wont_be_nil }.must_raise MiniTest::Assertion
|
||||
|
@ -277,6 +287,9 @@ class TestMeta < MiniTest::Unit::TestCase
|
|||
before { before_list << 3 }
|
||||
after { after_list << 3 }
|
||||
it "inner-it" do end
|
||||
|
||||
it {} # ignore me
|
||||
specify {} # anonymous it
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -328,11 +341,13 @@ class TestMeta < MiniTest::Unit::TestCase
|
|||
assert_equal "very inner thingy", z.desc
|
||||
|
||||
top_methods = %w(test_0001_top_level_it)
|
||||
inner_methods = %w(test_0001_inner_it)
|
||||
inner_methods1 = %w(test_0001_inner_it)
|
||||
inner_methods2 = inner_methods1 +
|
||||
%w(test_0002_anonymous test_0003_anonymous)
|
||||
|
||||
assert_equal top_methods, x.instance_methods(false).sort.map {|o| o.to_s }
|
||||
assert_equal inner_methods, y.instance_methods(false).sort.map {|o| o.to_s }
|
||||
assert_equal inner_methods, z.instance_methods(false).sort.map {|o| o.to_s }
|
||||
assert_equal top_methods, x.instance_methods(false).sort.map(&:to_s)
|
||||
assert_equal inner_methods1, y.instance_methods(false).sort.map(&:to_s)
|
||||
assert_equal inner_methods2, z.instance_methods(false).sort.map(&:to_s)
|
||||
end
|
||||
|
||||
def test_setup_teardown_behavior
|
||||
|
|
|
@ -587,7 +587,7 @@ Finished tests in 0.00
|
|||
end
|
||||
|
||||
def util_expand_bt bt
|
||||
if RUBY_VERSION =~ /^1\.9/ then
|
||||
if RUBY_VERSION >= '1.9.0' then
|
||||
bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
|
||||
else
|
||||
bt
|
||||
|
@ -883,6 +883,13 @@ class TestMiniTestUnitTestCase < MiniTest::Unit::TestCase
|
|||
@tc.assert_operator 2, :>, 1
|
||||
end
|
||||
|
||||
def test_assert_operator_bad_object
|
||||
bad = Object.new
|
||||
def bad.==(other) true end
|
||||
|
||||
@tc.assert_operator bad, :equal?, bad
|
||||
end
|
||||
|
||||
def test_assert_operator_triggered
|
||||
util_assert_triggered "Expected 2 to be < 1." do
|
||||
@tc.assert_operator 2, :<, 1
|
||||
|
@ -990,7 +997,7 @@ FILE:LINE:in `test_assert_raises_triggered_different'
|
|||
---------------"
|
||||
|
||||
actual = e.message.gsub(/^.+:\d+/, 'FILE:LINE')
|
||||
actual.gsub!(/block \(\d+ levels\) in /, '') if RUBY_VERSION =~ /^1\.9/
|
||||
actual.gsub!(/block \(\d+ levels\) in /, '') if RUBY_VERSION >= '1.9.0'
|
||||
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
@ -1011,7 +1018,7 @@ FILE:LINE:in `test_assert_raises_triggered_different_msg'
|
|||
---------------"
|
||||
|
||||
actual = e.message.gsub(/^.+:\d+/, 'FILE:LINE')
|
||||
actual.gsub!(/block \(\d+ levels\) in /, '') if RUBY_VERSION =~ /^1\.9/
|
||||
actual.gsub!(/block \(\d+ levels\) in /, '') if RUBY_VERSION >= '1.9.0'
|
||||
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
@ -1055,7 +1062,7 @@ FILE:LINE:in `test_assert_raises_triggered_subclass'
|
|||
---------------"
|
||||
|
||||
actual = e.message.gsub(/^.+:\d+/, 'FILE:LINE')
|
||||
actual.gsub!(/block \(\d+ levels\) in /, '') if RUBY_VERSION =~ /^1\.9/
|
||||
actual.gsub!(/block \(\d+ levels\) in /, '') if RUBY_VERSION >= '1.9.0'
|
||||
|
||||
assert_equal expected, actual
|
||||
end
|
||||
|
@ -1364,6 +1371,13 @@ FILE:LINE:in `test_assert_raises_triggered_subclass'
|
|||
@tc.refute_operator 2, :<, 1
|
||||
end
|
||||
|
||||
def test_refute_operator_bad_object
|
||||
bad = Object.new
|
||||
def bad.==(other) true end
|
||||
|
||||
@tc.refute_operator true, :equal?, bad
|
||||
end
|
||||
|
||||
def test_refute_operator_triggered
|
||||
util_assert_triggered "Expected 2 to not be > 1." do
|
||||
@tc.refute_operator 2, :>, 1
|
||||
|
|
Loading…
Reference in a new issue