mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Imported minitest 2.5.0 (r6557)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33036 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
885f5fa2b0
commit
2c43b9664b
9 changed files with 1085 additions and 248 deletions
|
@ -49,20 +49,34 @@ class TestMiniTestMock < MiniTest::Unit::TestCase
|
|||
util_verify_bad
|
||||
end
|
||||
|
||||
def test_not_verify_if_unexpected_method_is_called
|
||||
assert_raises NoMethodError do
|
||||
@mock.unexpected
|
||||
end
|
||||
end
|
||||
|
||||
def test_blow_up_on_wrong_number_of_arguments
|
||||
@mock.foo
|
||||
@mock.meaning_of_life
|
||||
@mock.expect(:sum, 3, [1, 2])
|
||||
|
||||
assert_raises ArgumentError do
|
||||
e = assert_raises ArgumentError do
|
||||
@mock.sum
|
||||
end
|
||||
|
||||
assert_equal "mocked method :sum expects 2 arguments, got 0", e.message
|
||||
end
|
||||
|
||||
def test_return_mock_does_not_raise
|
||||
retval = MiniTest::Mock.new
|
||||
mock = MiniTest::Mock.new
|
||||
mock.expect(:foo, retval)
|
||||
mock.foo
|
||||
|
||||
assert mock.verify
|
||||
end
|
||||
|
||||
def test_mock_args_does_not_raise
|
||||
arg = MiniTest::Mock.new
|
||||
mock = MiniTest::Mock.new
|
||||
mock.expect(:foo, nil, [arg])
|
||||
mock.foo(arg)
|
||||
|
||||
assert mock.verify
|
||||
end
|
||||
|
||||
def test_blow_up_on_wrong_arguments
|
||||
|
@ -81,18 +95,22 @@ class TestMiniTestMock < MiniTest::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_no_method_error_on_unexpected_methods
|
||||
assert_raises NoMethodError do
|
||||
e = assert_raises NoMethodError do
|
||||
@mock.bar
|
||||
end
|
||||
|
||||
expected = "unmocked method :bar, expected one of [:foo, :meaning_of_life]"
|
||||
|
||||
assert_equal expected, e.message
|
||||
end
|
||||
|
||||
def test_assign_per_mock_return_values
|
||||
a = MiniTest::Mock.new
|
||||
b = MiniTest::Mock.new
|
||||
|
||||
|
||||
a.expect(:foo, :a)
|
||||
b.expect(:foo, :b)
|
||||
|
||||
|
||||
assert_equal :a, a.foo
|
||||
assert_equal :b, b.foo
|
||||
end
|
||||
|
@ -104,6 +122,30 @@ class TestMiniTestMock < MiniTest::Unit::TestCase
|
|||
assert !MiniTest::Mock.new.respond_to?(:foo)
|
||||
end
|
||||
|
||||
def test_mock_is_a_blank_slate
|
||||
@mock.expect :kind_of?, true, [Fixnum]
|
||||
@mock.expect :==, true, [1]
|
||||
|
||||
assert @mock.kind_of?(Fixnum), "didn't mock :kind_of\?"
|
||||
assert @mock == 1, "didn't mock :=="
|
||||
end
|
||||
|
||||
def test_verify_allows_called_args_to_be_loosely_specified
|
||||
mock = MiniTest::Mock.new
|
||||
mock.expect :loose_expectation, true, [Integer]
|
||||
mock.loose_expectation 1
|
||||
|
||||
assert mock.verify
|
||||
end
|
||||
|
||||
def test_verify_raises_with_strict_args
|
||||
mock = MiniTest::Mock.new
|
||||
mock.expect :strict_expectation, true, [2]
|
||||
mock.strict_expectation 1
|
||||
|
||||
util_verify_bad
|
||||
end
|
||||
|
||||
def util_verify_bad
|
||||
assert_raises MockExpectationError do
|
||||
@mock.verify
|
||||
|
|
|
@ -4,11 +4,9 @@
|
|||
# File a patch instead and assign it to Ryan Davis.
|
||||
######################################################################
|
||||
|
||||
require 'minitest/spec'
|
||||
require 'minitest/autorun'
|
||||
require 'stringio'
|
||||
|
||||
MiniTest::Unit.autorun
|
||||
|
||||
describe MiniTest::Spec do
|
||||
before do
|
||||
@assertion_count = 4
|
||||
|
@ -202,6 +200,53 @@ describe MiniTest::Spec do
|
|||
end
|
||||
end
|
||||
|
||||
describe MiniTest::Spec, :let do
|
||||
i_suck_and_my_tests_are_order_dependent!
|
||||
|
||||
def _count
|
||||
$let_count ||= 0
|
||||
end
|
||||
|
||||
let :count do
|
||||
$let_count += 1
|
||||
$let_count
|
||||
end
|
||||
|
||||
it "is evaluated once per example" do
|
||||
_count.must_equal 0
|
||||
|
||||
count.must_equal 1
|
||||
count.must_equal 1
|
||||
|
||||
_count.must_equal 1
|
||||
end
|
||||
|
||||
it "is REALLY evaluated once per example" do
|
||||
_count.must_equal 1
|
||||
|
||||
count.must_equal 2
|
||||
count.must_equal 2
|
||||
|
||||
_count.must_equal 2
|
||||
end
|
||||
end
|
||||
|
||||
describe MiniTest::Spec, :subject do
|
||||
attr_reader :subject_evaluation_count
|
||||
|
||||
subject do
|
||||
@subject_evaluation_count ||= 0
|
||||
@subject_evaluation_count += 1
|
||||
@subject_evaluation_count
|
||||
end
|
||||
|
||||
it "is evaluated once per example" do
|
||||
subject.must_equal 1
|
||||
subject.must_equal 1
|
||||
subject_evaluation_count.must_equal 1
|
||||
end
|
||||
end
|
||||
|
||||
class TestMeta < MiniTest::Unit::TestCase
|
||||
def test_setup
|
||||
srand 42
|
||||
|
@ -245,8 +290,8 @@ class TestMeta < MiniTest::Unit::TestCase
|
|||
assert_equal "inner thingy", y.desc
|
||||
assert_equal "very inner thingy", z.desc
|
||||
|
||||
top_methods = %w(setup teardown test_0001_top_level_it)
|
||||
inner_methods = %w(setup teardown test_0001_inner_it)
|
||||
top_methods = %w(test_0001_top_level_it)
|
||||
inner_methods = %w(test_0001_inner_it)
|
||||
|
||||
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 }
|
||||
|
@ -257,8 +302,9 @@ class TestMeta < MiniTest::Unit::TestCase
|
|||
_, _, z, before_list, after_list = util_structure
|
||||
|
||||
tc = z.new(nil)
|
||||
tc.setup
|
||||
tc.teardown
|
||||
|
||||
tc.run_setup_hooks
|
||||
tc.run_teardown_hooks
|
||||
|
||||
assert_equal [1, 2, 3], before_list
|
||||
assert_equal [3, 2, 1], after_list
|
||||
|
|
|
@ -12,6 +12,7 @@ MiniTest::Unit.autorun
|
|||
|
||||
module MyModule; end
|
||||
class AnError < StandardError; include MyModule; end
|
||||
class ImmutableString < String; def inspect; super.freeze; end; end
|
||||
|
||||
class TestMiniTestUnit < MiniTest::Unit::TestCase
|
||||
pwd = Pathname.new(File.expand_path(Dir.pwd))
|
||||
|
@ -46,12 +47,12 @@ Finished tests in 0.00
|
|||
MiniTest::Unit::TestCase.reset
|
||||
@tu = MiniTest::Unit.new
|
||||
@output = StringIO.new("")
|
||||
MiniTest::Unit.runner = nil # protect the outer runner from the inner tests
|
||||
MiniTest::Unit.output = @output
|
||||
end
|
||||
|
||||
def teardown
|
||||
MiniTest::Unit.output = $stdout
|
||||
MiniTest::Unit.runner = nil
|
||||
Object.send :remove_const, :ATestCase if defined? ATestCase
|
||||
end
|
||||
|
||||
|
@ -442,6 +443,149 @@ Finished tests in 0.00
|
|||
assert_report expected
|
||||
end
|
||||
|
||||
def with_overridden_include
|
||||
Class.class_eval do
|
||||
def inherited_with_hacks klass
|
||||
throw :inherited_hook
|
||||
end
|
||||
|
||||
alias inherited_without_hacks inherited
|
||||
alias inherited inherited_with_hacks
|
||||
alias IGNORE_ME! inherited # 1.8 bug. god I love venture bros
|
||||
end
|
||||
|
||||
yield
|
||||
|
||||
ensure
|
||||
Class.class_eval do
|
||||
alias inherited inherited_without_hacks
|
||||
|
||||
undef_method :inherited_with_hacks
|
||||
undef_method :inherited_without_hacks
|
||||
end
|
||||
|
||||
refute_respond_to Class, :inherited_with_hacks
|
||||
refute_respond_to Class, :inherited_without_hacks
|
||||
end
|
||||
|
||||
def test_inherited_hook_plays_nice_with_others
|
||||
with_overridden_include do
|
||||
assert_throws :inherited_hook do
|
||||
Class.new MiniTest::Unit::TestCase
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_setup_hooks
|
||||
call_order = []
|
||||
|
||||
tc = Class.new(MiniTest::Unit::TestCase) do
|
||||
define_method :setup do
|
||||
super()
|
||||
call_order << :method
|
||||
end
|
||||
|
||||
define_method :test2 do
|
||||
call_order << :test2
|
||||
end
|
||||
|
||||
define_method :test1 do
|
||||
call_order << :test1
|
||||
end
|
||||
end
|
||||
|
||||
tc.add_setup_hook lambda { call_order << :proc }
|
||||
|
||||
argument = nil
|
||||
|
||||
tc.add_setup_hook do |arg|
|
||||
argument = arg
|
||||
call_order << :block
|
||||
end
|
||||
|
||||
@tu.run %w[--seed 42]
|
||||
|
||||
assert_kind_of tc, argument
|
||||
|
||||
expected = [:method, :proc, :block, :test1,
|
||||
:method, :proc, :block, :test2]
|
||||
|
||||
assert_equal expected, call_order
|
||||
end
|
||||
|
||||
def test_teardown_hooks
|
||||
call_order = []
|
||||
|
||||
tc = Class.new(MiniTest::Unit::TestCase) do
|
||||
define_method :teardown do
|
||||
super()
|
||||
call_order << :method
|
||||
end
|
||||
|
||||
define_method :test2 do
|
||||
call_order << :test2
|
||||
end
|
||||
|
||||
define_method :test1 do
|
||||
call_order << :test1
|
||||
end
|
||||
end
|
||||
|
||||
tc.add_teardown_hook lambda { call_order << :proc }
|
||||
|
||||
argument = nil
|
||||
|
||||
tc.add_teardown_hook do |arg|
|
||||
argument = arg
|
||||
call_order << :block
|
||||
end
|
||||
|
||||
@tu.run %w[--seed 42]
|
||||
|
||||
assert_kind_of tc, argument
|
||||
|
||||
expected = [:test1, :block, :proc, :method,
|
||||
:test2, :block, :proc, :method]
|
||||
|
||||
assert_equal expected, call_order
|
||||
end
|
||||
|
||||
def test_setup_and_teardown_hooks_survive_inheritance
|
||||
call_order = []
|
||||
|
||||
parent = Class.new(MiniTest::Unit::TestCase) do
|
||||
define_method :setup do
|
||||
super()
|
||||
call_order << :setup_method
|
||||
end
|
||||
|
||||
define_method :teardown do
|
||||
super()
|
||||
call_order << :teardown_method
|
||||
end
|
||||
|
||||
define_method :test_something do
|
||||
call_order << :test
|
||||
end
|
||||
end
|
||||
|
||||
parent.add_setup_hook { call_order << :setup_hook }
|
||||
parent.add_teardown_hook { call_order << :teardown_hook }
|
||||
|
||||
_ = Class.new parent
|
||||
|
||||
parent.add_setup_hook { call_order << :setup_after }
|
||||
parent.add_teardown_hook { call_order << :teardown_after }
|
||||
|
||||
@tu.run %w[--seed 42]
|
||||
|
||||
# Once for the parent class, once for the child
|
||||
expected = [:setup_method, :setup_hook, :setup_after, :test,
|
||||
:teardown_after, :teardown_hook, :teardown_method] * 2
|
||||
|
||||
assert_equal expected, call_order
|
||||
end
|
||||
|
||||
def util_expand_bt bt
|
||||
if RUBY_VERSION =~ /^1\.9/ then
|
||||
bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
|
||||
|
@ -1084,6 +1228,11 @@ FILE:LINE:in `test_assert_raises_triggered_subclass'
|
|||
@tc.pass
|
||||
end
|
||||
|
||||
def test_prints
|
||||
printer = Class.new { extend MiniTest::Assertions }
|
||||
@tc.assert_equal '"test"', printer.mu_pp(ImmutableString.new 'test')
|
||||
end
|
||||
|
||||
def test_refute
|
||||
@assertion_count = 2
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue