зеркало из https://github.com/github/ruby.git
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:
Родитель
9cfc7a658f
Коммит
9bec8ef50c
|
@ -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>
|
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
|
* lib/openssl/buffering.rb: Force multi-byte strings to be treated as
|
||||||
|
|
|
@ -1,13 +1,25 @@
|
||||||
= minitest/{unit,spec,mock,benchmark}
|
= minitest/{unit,spec,mock,benchmark}
|
||||||
|
|
||||||
home :: https://github.com/seattlerb/minitest
|
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:
|
== DESCRIPTION:
|
||||||
|
|
||||||
minitest provides a complete suite of testing facilities supporting
|
minitest provides a complete suite of testing facilities supporting
|
||||||
TDD, BDD, mocking, and benchmarking.
|
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.
|
minitest/unit is a small and incredibly fast unit testing framework.
|
||||||
It provides a rich set of assertions to make your tests clean and
|
It provides a rich set of assertions to make your tests clean and
|
||||||
readable.
|
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
|
test suite. For example, there is no magic involved for test-case
|
||||||
discovery.
|
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:
|
== FEATURES/PROBLEMS:
|
||||||
|
|
||||||
* minitest/autorun - the easy and explicit way to run all your tests.
|
* minitest/autorun - the easy and explicit way to run all your tests.
|
||||||
|
|
|
@ -99,7 +99,7 @@ module MiniTest
|
||||||
end
|
end
|
||||||
|
|
||||||
def respond_to?(sym) # :nodoc:
|
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)
|
return __respond_to?(sym)
|
||||||
end
|
end
|
||||||
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
|
# write specs don't like class inheritence, so this goes way out of
|
||||||
# its way to make sure that expectations aren't inherited.
|
# 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
|
# Hint: If you _do_ want inheritence, use minitest/unit. You can mix
|
||||||
# and match between assertions and expectations as much as you want.
|
# 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)" }
|
block ||= proc { skip "(no tests defined)" }
|
||||||
|
|
||||||
@specs ||= 0
|
@specs ||= 0
|
||||||
|
@ -240,7 +242,9 @@ class MiniTest::Spec < MiniTest::Unit::TestCase
|
||||||
|
|
||||||
# :stopdoc:
|
# :stopdoc:
|
||||||
class << self
|
class << self
|
||||||
attr_reader :name, :desc
|
attr_reader :desc
|
||||||
|
alias :specify :it
|
||||||
|
alias :name :to_s
|
||||||
end
|
end
|
||||||
# :startdoc:
|
# :startdoc:
|
||||||
end
|
end
|
||||||
|
@ -334,9 +338,13 @@ module MiniTest::Expectations
|
||||||
#
|
#
|
||||||
# n.must_be :<=, 42
|
# n.must_be :<=, 42
|
||||||
#
|
#
|
||||||
|
# This can also do predicates:
|
||||||
|
#
|
||||||
|
# str.must_be :empty?
|
||||||
|
#
|
||||||
# :method: must_be
|
# :method: must_be
|
||||||
|
|
||||||
infect_an_assertion :assert_operator, :must_be
|
infect_an_assertion :assert_operator, :must_be, :reverse
|
||||||
|
|
||||||
##
|
##
|
||||||
# See MiniTest::Assertions#assert_output
|
# See MiniTest::Assertions#assert_output
|
||||||
|
@ -491,9 +499,13 @@ module MiniTest::Expectations
|
||||||
#
|
#
|
||||||
# n.wont_be :<=, 42
|
# n.wont_be :<=, 42
|
||||||
#
|
#
|
||||||
|
# This can also do predicates:
|
||||||
|
#
|
||||||
|
# str.wont_be :empty?
|
||||||
|
#
|
||||||
# :method: wont_be
|
# :method: wont_be
|
||||||
|
|
||||||
infect_an_assertion :refute_operator, :wont_be
|
infect_an_assertion :refute_operator, :wont_be, :reverse
|
||||||
|
|
||||||
##
|
##
|
||||||
# See MiniTest::Assertions#refute_respond_to
|
# See MiniTest::Assertions#refute_respond_to
|
||||||
|
|
|
@ -24,7 +24,7 @@ module MiniTest
|
||||||
|
|
||||||
class Skip < Assertion; end
|
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__
|
File.expand_path __FILE__
|
||||||
elsif __FILE__ =~ /^[^\.]/ then # assume both relative
|
elsif __FILE__ =~ /^[^\.]/ then # assume both relative
|
||||||
require 'pathname'
|
require 'pathname'
|
||||||
|
@ -253,7 +253,7 @@ module MiniTest
|
||||||
end
|
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
|
def assert_instance_of cls, obj, msg = nil
|
||||||
msg = message(msg) {
|
msg = message(msg) {
|
||||||
|
@ -291,12 +291,16 @@ module MiniTest
|
||||||
assert obj.nil?, msg
|
assert obj.nil?, msg
|
||||||
end
|
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
|
# 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)}" }
|
msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op} #{mu_pp(o2)}" }
|
||||||
assert o1.__send__(op, o2), msg
|
assert o1.__send__(op, o2), msg
|
||||||
end
|
end
|
||||||
|
@ -319,6 +323,20 @@ module MiniTest
|
||||||
(!stdout || x) && (!stderr || y)
|
(!stdout || x) && (!stderr || y)
|
||||||
end
|
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+
|
# Fails unless the block raises one of +exp+
|
||||||
|
|
||||||
|
@ -582,13 +600,26 @@ module MiniTest
|
||||||
# refute_operator 1, :>, 2 #=> pass
|
# refute_operator 1, :>, 2 #=> pass
|
||||||
# refute_operator 1, :<, 2 #=> fail
|
# refute_operator 1, :<, 2 #=> fail
|
||||||
|
|
||||||
def refute_operator o1, op, o2, msg = nil
|
def refute_operator o1, op, o2 = UNDEFINED, msg = nil
|
||||||
msg = message(msg) {
|
return refute_predicate o1, op, msg if UNDEFINED == o2
|
||||||
"Expected #{mu_pp(o1)} to not be #{op} #{mu_pp(o2)}"
|
msg = message(msg) { "Expected #{mu_pp(o1)} to not be #{op} #{mu_pp(o2)}"}
|
||||||
}
|
|
||||||
refute o1.__send__(op, o2), msg
|
refute o1.__send__(op, o2), msg
|
||||||
end
|
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+.
|
# Fails if +obj+ responds to the message +meth+.
|
||||||
|
|
||||||
|
@ -620,7 +651,7 @@ module MiniTest
|
||||||
end
|
end
|
||||||
|
|
||||||
class Unit
|
class Unit
|
||||||
VERSION = "2.5.1" # :nodoc:
|
VERSION = "2.6.1" # :nodoc:
|
||||||
|
|
||||||
attr_accessor :report, :failures, :errors, :skips # :nodoc:
|
attr_accessor :report, :failures, :errors, :skips # :nodoc:
|
||||||
attr_accessor :test_count, :assertion_count # :nodoc:
|
attr_accessor :test_count, :assertion_count # :nodoc:
|
||||||
|
|
|
@ -91,6 +91,7 @@ class TestMiniTestMock < MiniTest::Unit::TestCase
|
||||||
|
|
||||||
def test_respond_appropriately
|
def test_respond_appropriately
|
||||||
assert @mock.respond_to?(:foo)
|
assert @mock.respond_to?(:foo)
|
||||||
|
assert @mock.respond_to?('foo')
|
||||||
assert !@mock.respond_to?(:bar)
|
assert !@mock.respond_to?(:bar)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -95,11 +95,16 @@ describe MiniTest::Spec do
|
||||||
proc { 42.must_be_nil }.must_raise MiniTest::Assertion
|
proc { 42.must_be_nil }.must_raise MiniTest::Assertion
|
||||||
end
|
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
|
41.must_be(:<, 42).must_equal true
|
||||||
proc { 42.must_be(:<, 41) }.must_raise MiniTest::Assertion
|
proc { 42.must_be(:<, 41) }.must_raise MiniTest::Assertion
|
||||||
end
|
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
|
it "needs to catch an expected exception" do
|
||||||
@assertion_count = 2
|
@assertion_count = 2
|
||||||
|
|
||||||
|
@ -156,6 +161,11 @@ describe MiniTest::Spec do
|
||||||
proc { "blah".wont_match(/\w+/) }.must_raise MiniTest::Assertion
|
proc { "blah".wont_match(/\w+/) }.must_raise MiniTest::Assertion
|
||||||
end
|
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
|
it "needs to verify non-nil" do
|
||||||
42.wont_be_nil.must_equal false
|
42.wont_be_nil.must_equal false
|
||||||
proc { nil.wont_be_nil }.must_raise MiniTest::Assertion
|
proc { nil.wont_be_nil }.must_raise MiniTest::Assertion
|
||||||
|
@ -277,6 +287,9 @@ class TestMeta < MiniTest::Unit::TestCase
|
||||||
before { before_list << 3 }
|
before { before_list << 3 }
|
||||||
after { after_list << 3 }
|
after { after_list << 3 }
|
||||||
it "inner-it" do end
|
it "inner-it" do end
|
||||||
|
|
||||||
|
it {} # ignore me
|
||||||
|
specify {} # anonymous it
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -328,11 +341,13 @@ class TestMeta < MiniTest::Unit::TestCase
|
||||||
assert_equal "very inner thingy", z.desc
|
assert_equal "very inner thingy", z.desc
|
||||||
|
|
||||||
top_methods = %w(test_0001_top_level_it)
|
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 top_methods, x.instance_methods(false).sort.map(&:to_s)
|
||||||
assert_equal inner_methods, y.instance_methods(false).sort.map {|o| o.to_s }
|
assert_equal inner_methods1, y.instance_methods(false).sort.map(&:to_s)
|
||||||
assert_equal inner_methods, z.instance_methods(false).sort.map {|o| o.to_s }
|
assert_equal inner_methods2, z.instance_methods(false).sort.map(&:to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_setup_teardown_behavior
|
def test_setup_teardown_behavior
|
||||||
|
|
|
@ -587,7 +587,7 @@ Finished tests in 0.00
|
||||||
end
|
end
|
||||||
|
|
||||||
def util_expand_bt bt
|
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 }
|
bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
|
||||||
else
|
else
|
||||||
bt
|
bt
|
||||||
|
@ -883,6 +883,13 @@ class TestMiniTestUnitTestCase < MiniTest::Unit::TestCase
|
||||||
@tc.assert_operator 2, :>, 1
|
@tc.assert_operator 2, :>, 1
|
||||||
end
|
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
|
def test_assert_operator_triggered
|
||||||
util_assert_triggered "Expected 2 to be < 1." do
|
util_assert_triggered "Expected 2 to be < 1." do
|
||||||
@tc.assert_operator 2, :<, 1
|
@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 = 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
|
assert_equal expected, actual
|
||||||
end
|
end
|
||||||
|
@ -1011,7 +1018,7 @@ FILE:LINE:in `test_assert_raises_triggered_different_msg'
|
||||||
---------------"
|
---------------"
|
||||||
|
|
||||||
actual = e.message.gsub(/^.+:\d+/, 'FILE:LINE')
|
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
|
assert_equal expected, actual
|
||||||
end
|
end
|
||||||
|
@ -1055,7 +1062,7 @@ FILE:LINE:in `test_assert_raises_triggered_subclass'
|
||||||
---------------"
|
---------------"
|
||||||
|
|
||||||
actual = e.message.gsub(/^.+:\d+/, 'FILE:LINE')
|
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
|
assert_equal expected, actual
|
||||||
end
|
end
|
||||||
|
@ -1364,6 +1371,13 @@ FILE:LINE:in `test_assert_raises_triggered_subclass'
|
||||||
@tc.refute_operator 2, :<, 1
|
@tc.refute_operator 2, :<, 1
|
||||||
end
|
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
|
def test_refute_operator_triggered
|
||||||
util_assert_triggered "Expected 2 to not be > 1." do
|
util_assert_triggered "Expected 2 to not be > 1." do
|
||||||
@tc.refute_operator 2, :>, 1
|
@tc.refute_operator 2, :>, 1
|
||||||
|
|
Загрузка…
Ссылка в новой задаче