rspec 0.7.5.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +60 -1
- data/EXAMPLES.rd +38 -19
- data/MIT-LICENSE +1 -1
- data/README +24 -17
- data/RELEASE-PLAN +117 -0
- data/Rakefile +24 -18
- data/TODO.0.8.0 +5 -0
- data/examples/auto_spec_name_generation_example.rb +18 -0
- data/examples/custom_expectation_matchers.rb +53 -0
- data/examples/dynamic_spec.rb +9 -0
- data/examples/io_processor_spec.rb +2 -2
- data/examples/mocking_example.rb +4 -4
- data/examples/partial_mock_example.rb +2 -2
- data/examples/predicate_example.rb +2 -2
- data/examples/stack_spec.rb +32 -36
- data/examples/stubbing_example.rb +19 -19
- data/examples/test_case_spec.rb +6 -6
- data/lib/spec.rb +3 -0
- data/lib/spec/callback.rb +8 -0
- data/lib/spec/callback/extensions/object.rb +4 -0
- data/lib/spec/deprecated.rb +3 -0
- data/lib/spec/expectations.rb +44 -17
- data/lib/spec/expectations/extensions.rb +1 -2
- data/lib/spec/expectations/extensions/object.rb +78 -130
- data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
- data/lib/spec/expectations/handler.rb +47 -0
- data/lib/spec/expectations/should/base.rb +32 -29
- data/lib/spec/expectations/should/change.rb +1 -1
- data/lib/spec/expectations/should/have.rb +9 -17
- data/lib/spec/expectations/should/not.rb +54 -56
- data/lib/spec/expectations/should/should.rb +59 -65
- data/lib/spec/expectations/sugar.rb +27 -4
- data/lib/spec/matchers.rb +160 -0
- data/lib/spec/matchers/be.rb +161 -0
- data/lib/spec/matchers/be_close.rb +37 -0
- data/lib/spec/matchers/change.rb +120 -0
- data/lib/spec/matchers/eql.rb +43 -0
- data/lib/spec/matchers/equal.rb +43 -0
- data/lib/spec/matchers/has.rb +44 -0
- data/lib/spec/matchers/have.rb +140 -0
- data/lib/spec/matchers/include.rb +50 -0
- data/lib/spec/matchers/match.rb +41 -0
- data/lib/spec/matchers/raise_error.rb +100 -0
- data/lib/spec/matchers/respond_to.rb +35 -0
- data/lib/spec/matchers/satisfy.rb +47 -0
- data/lib/spec/matchers/throw_symbol.rb +75 -0
- data/lib/spec/mocks.rb +224 -1
- data/lib/spec/mocks/argument_expectation.rb +16 -2
- data/lib/spec/mocks/error_generator.rb +5 -3
- data/lib/spec/mocks/errors.rb +2 -2
- data/lib/spec/mocks/extensions/object.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +29 -19
- data/lib/spec/mocks/{mock_methods.rb → methods.rb} +5 -5
- data/lib/spec/mocks/mock.rb +2 -2
- data/lib/spec/mocks/mock_handler.rb +81 -68
- data/lib/spec/rake/spectask.rb +7 -12
- data/lib/spec/rake/verify_rcov.rb +1 -1
- data/lib/spec/runner.rb +117 -0
- data/lib/spec/runner/command_line.rb +8 -5
- data/lib/spec/runner/context.rb +13 -37
- data/lib/spec/runner/context_eval.rb +4 -3
- data/lib/spec/runner/context_runner.rb +7 -4
- data/lib/spec/runner/drb_command_line.rb +1 -1
- data/lib/spec/runner/execution_context.rb +3 -11
- data/lib/spec/runner/extensions/kernel.rb +7 -5
- data/lib/spec/runner/extensions/object.rb +4 -1
- data/lib/spec/runner/formatter/base_text_formatter.rb +11 -3
- data/lib/spec/runner/formatter/html_formatter.rb +21 -10
- data/lib/spec/runner/heckle_runner.rb +24 -8
- data/lib/spec/runner/heckle_runner_win.rb +10 -0
- data/lib/spec/runner/option_parser.rb +58 -13
- data/lib/spec/runner/spec_matcher.rb +22 -29
- data/lib/spec/runner/spec_parser.rb +1 -0
- data/lib/spec/runner/specification.rb +36 -22
- data/lib/spec/translator.rb +87 -0
- data/lib/spec/version.rb +16 -7
- data/spec/spec/callback/callback_container_spec.rb +27 -0
- data/spec/spec/callback/module_spec.rb +37 -0
- data/spec/spec/callback/object_spec.rb +90 -0
- data/spec/spec/callback/object_with_class_callback_spec.rb +19 -0
- data/spec/spec/expectations/differs/default_spec.rb +107 -0
- data/spec/spec/expectations/extensions/object_spec.rb +46 -0
- data/spec/spec/expectations/fail_with_spec.rb +71 -0
- data/spec/spec/expectations/should/should_==_spec.rb +19 -0
- data/spec/spec/expectations/should/should_=~_spec.rb +13 -0
- data/spec/spec/expectations/should/should_be_a_kind_of_spec.rb +21 -0
- data/spec/spec/expectations/should/should_be_an_instance_of_spec.rb +30 -0
- data/spec/spec/expectations/should/should_be_arbitrary_predicate_spec.rb +81 -0
- data/spec/spec/expectations/should/should_be_close_spec.rb +18 -0
- data/spec/spec/expectations/should/should_be_comparison_operator_spec.rb +44 -0
- data/spec/spec/expectations/should/should_be_false_spec.rb +39 -0
- data/spec/spec/expectations/should/should_be_spec.rb +11 -0
- data/spec/spec/expectations/should/should_be_true_spec.rb +27 -0
- data/spec/spec/expectations/should/should_change_spec.rb +184 -0
- data/spec/spec/expectations/should/should_eql_spec.rb +11 -0
- data/spec/spec/expectations/should/should_equal_spec.rb +11 -0
- data/spec/spec/expectations/should/should_have_at_least_spec.rb +53 -0
- data/spec/spec/expectations/should/should_have_at_most_spec.rb +45 -0
- data/spec/spec/expectations/should/should_have_key_spec.rb +21 -0
- data/spec/spec/expectations/should/should_have_spec.rb +64 -0
- data/spec/spec/expectations/should/should_include_spec.rb +59 -0
- data/spec/spec/expectations/should/should_match_spec.rb +25 -0
- data/spec/spec/expectations/should/should_not_==_spec.rb +15 -0
- data/spec/spec/expectations/should/should_not_be_a_kind_of_spec.rb +21 -0
- data/spec/spec/expectations/should/should_not_be_an_instance_of_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_be_arbitrary_predicate_spec.rb +68 -0
- data/spec/spec/expectations/should/should_not_be_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_change_spec.rb +24 -0
- data/spec/spec/expectations/should/should_not_eql_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_equal_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_have_key_spec.rb +15 -0
- data/spec/spec/expectations/should/should_not_include_spec.rb +58 -0
- data/spec/spec/expectations/should/should_not_match_spec.rb +11 -0
- data/spec/spec/expectations/should/should_not_raise_spec.rb +75 -0
- data/spec/spec/expectations/should/should_not_respond_to_spec.rb +15 -0
- data/spec/spec/expectations/should/should_not_throw_spec.rb +35 -0
- data/spec/spec/expectations/should/should_raise_spec.rb +66 -0
- data/spec/spec/expectations/should/should_respond_to_spec.rb +15 -0
- data/spec/spec/expectations/should/should_satisfy_spec.rb +35 -0
- data/spec/spec/expectations/should/should_throw_spec.rb +27 -0
- data/spec/spec/matchers/be_close_spec.rb +33 -0
- data/spec/spec/matchers/be_spec.rb +182 -0
- data/spec/spec/matchers/change_spec.rb +232 -0
- data/spec/spec/matchers/description_generation_spec.rb +147 -0
- data/spec/spec/matchers/eql_spec.rb +41 -0
- data/spec/spec/matchers/equal_spec.rb +41 -0
- data/spec/spec/matchers/handler_spec.rb +75 -0
- data/spec/spec/matchers/has_spec.rb +37 -0
- data/spec/spec/matchers/have_spec.rb +259 -0
- data/spec/spec/matchers/include_spec.rb +33 -0
- data/spec/spec/matchers/match_spec.rb +37 -0
- data/spec/spec/matchers/matcher_methods_spec.rb +85 -0
- data/spec/spec/matchers/raise_error_spec.rb +147 -0
- data/spec/spec/matchers/respond_to_spec.rb +30 -0
- data/spec/spec/matchers/satisfy_spec.rb +36 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +59 -0
- data/spec/spec/mocks/any_number_of_times_spec.rb +34 -0
- data/spec/spec/mocks/at_least_spec.rb +97 -0
- data/spec/spec/mocks/at_most_spec.rb +97 -0
- data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
- data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
- data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
- data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +74 -0
- data/spec/spec/mocks/mock_ordering_spec.rb +80 -0
- data/spec/spec/mocks/mock_spec.rb +407 -0
- data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
- data/spec/spec/mocks/null_object_mock_spec.rb +40 -0
- data/spec/spec/mocks/once_counts_spec.rb +56 -0
- data/spec/spec/mocks/options_hash_spec.rb +31 -0
- data/spec/spec/mocks/partial_mock_spec.rb +52 -0
- data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +64 -0
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +92 -0
- data/spec/spec/mocks/precise_counts_spec.rb +56 -0
- data/spec/spec/mocks/record_messages_spec.rb +26 -0
- data/spec/spec/mocks/stub_spec.rb +159 -0
- data/spec/spec/mocks/twice_counts_spec.rb +67 -0
- data/spec/spec/runner/command_line_spec.rb +32 -0
- data/spec/spec/runner/context_matching_spec.rb +28 -0
- data/spec/spec/runner/context_runner_spec.rb +100 -0
- data/spec/spec/runner/context_spec.rb +405 -0
- data/spec/spec/runner/drb_command_line_spec.rb +74 -0
- data/spec/spec/runner/execution_context_spec.rb +52 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +40 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +21 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +36 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +78 -0
- data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +18 -0
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +41 -0
- data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +21 -0
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +46 -0
- data/spec/spec/runner/heckle_runner_spec.rb +63 -0
- data/spec/spec/runner/heckler_spec.rb +14 -0
- data/spec/spec/runner/kernel_ext_spec.rb +16 -0
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
- data/spec/spec/runner/object_ext_spec.rb +11 -0
- data/spec/spec/runner/option_parser_spec.rb +269 -0
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +47 -0
- data/spec/spec/runner/reporter_spec.rb +126 -0
- data/spec/spec/runner/spec_matcher_spec.rb +107 -0
- data/spec/spec/runner/spec_name_generation_spec.rb +102 -0
- data/spec/spec/runner/spec_parser_spec.rb +37 -0
- data/spec/spec/runner/specification_class_spec.rb +72 -0
- data/spec/spec/runner/specification_instance_spec.rb +160 -0
- data/spec/spec/runner/specification_should_raise_spec.rb +136 -0
- data/spec/spec/spec_classes.rb +102 -0
- data/spec/spec/translator_spec.rb +79 -0
- data/spec/spec_helper.rb +35 -0
- metadata +141 -9
- data/bin/drbspec +0 -3
- data/lib/spec/expectations/diff.rb +0 -28
- data/lib/spec/expectations/extensions/numeric.rb +0 -19
- data/lib/spec/expectations/extensions/string.rb +0 -22
- data/lib/spec/expectations/message_builder.rb +0 -13
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
context "a mock acting as a NullObject" do
|
6
|
+
setup do
|
7
|
+
@mock = Mock.new("null_object", :null_object => true)
|
8
|
+
end
|
9
|
+
|
10
|
+
specify "should allow explicit expectation" do
|
11
|
+
@mock.should_receive(:something)
|
12
|
+
@mock.something
|
13
|
+
end
|
14
|
+
|
15
|
+
specify "should fail verification when explicit exception not met" do
|
16
|
+
lambda do
|
17
|
+
@mock.should_receive(:something)
|
18
|
+
@mock.__verify
|
19
|
+
end.should_raise(MockExpectationError)
|
20
|
+
end
|
21
|
+
|
22
|
+
specify "should ignore unexpected methods" do
|
23
|
+
@mock.random_call("a", "d", "c")
|
24
|
+
@mock.__verify
|
25
|
+
end
|
26
|
+
|
27
|
+
specify "should expected message with different args first" do
|
28
|
+
@mock.should_receive(:message).with(:expected_arg)
|
29
|
+
@mock.message(:unexpected_arg)
|
30
|
+
@mock.message(:expected_arg)
|
31
|
+
end
|
32
|
+
|
33
|
+
specify "should expected message with different args second" do
|
34
|
+
@mock.should_receive(:message).with(:expected_arg)
|
35
|
+
@mock.message(:expected_arg)
|
36
|
+
@mock.message(:unexpected_arg)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
context "OnceCounts" do
|
6
|
+
setup do
|
7
|
+
@mock = Mock.new("test mock", {
|
8
|
+
:auto_verify => false
|
9
|
+
})
|
10
|
+
|
11
|
+
end
|
12
|
+
specify "once should fail when called once with wrong args" do
|
13
|
+
@mock.should_receive(:random_call).once.with("a", "b", "c")
|
14
|
+
lambda do
|
15
|
+
@mock.random_call("d", "e", "f")
|
16
|
+
end.should_raise(MockExpectationError)
|
17
|
+
|
18
|
+
end
|
19
|
+
specify "once should fail when called twice" do
|
20
|
+
@mock.should_receive(:random_call).once
|
21
|
+
@mock.random_call
|
22
|
+
@mock.random_call
|
23
|
+
lambda do
|
24
|
+
@mock.__verify
|
25
|
+
end.should_raise(MockExpectationError)
|
26
|
+
|
27
|
+
end
|
28
|
+
specify "once should fail when not called" do
|
29
|
+
@mock.should_receive(:random_call).once
|
30
|
+
lambda do
|
31
|
+
@mock.__verify
|
32
|
+
end.should_raise(MockExpectationError)
|
33
|
+
|
34
|
+
end
|
35
|
+
specify "once should pass when called once" do
|
36
|
+
@mock.should_receive(:random_call).once
|
37
|
+
@mock.random_call
|
38
|
+
@mock.__verify
|
39
|
+
|
40
|
+
end
|
41
|
+
specify "once should pass when called once with specified args" do
|
42
|
+
@mock.should_receive(:random_call).once.with("a", "b", "c")
|
43
|
+
@mock.random_call("a", "b", "c")
|
44
|
+
@mock.__verify
|
45
|
+
|
46
|
+
end
|
47
|
+
specify "once should pass when called once with unspecified args" do
|
48
|
+
@mock.should_receive(:random_call).once
|
49
|
+
@mock.random_call("a", "b", "c")
|
50
|
+
@mock.__verify
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
context "calling :should_receive with an options hash" do
|
6
|
+
specify "should report the file and line submitted with :expected_from" do
|
7
|
+
spec = Spec::Runner::Specification.new "spec" do
|
8
|
+
mock = Spec::Mocks::Mock.new("a mock")
|
9
|
+
mock.should_receive(:message, :expected_from => "/path/to/blah.ext:37")
|
10
|
+
end
|
11
|
+
reporter = mock("reporter", :null_object => true)
|
12
|
+
reporter.should_receive(:spec_finished) do |spec, error|
|
13
|
+
error.backtrace.detect {|line| line =~ /\/path\/to\/blah.ext:37/}.should_not_be nil
|
14
|
+
end
|
15
|
+
spec.run(reporter, nil, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "should use the message supplied with :message" do
|
19
|
+
spec = Spec::Runner::Specification.new "spec" do
|
20
|
+
mock = Spec::Mocks::Mock.new("a mock")
|
21
|
+
mock.should_receive(:message, :message => "recebi nada")
|
22
|
+
end
|
23
|
+
reporter = mock("reporter", :null_object => true)
|
24
|
+
reporter.should_receive(:spec_finished) do |spec, error|
|
25
|
+
error.message.should == "recebi nada"
|
26
|
+
end
|
27
|
+
spec.run(reporter, nil, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
context "using a Partial Mock," do
|
6
|
+
setup do
|
7
|
+
@object = Object.new
|
8
|
+
end
|
9
|
+
|
10
|
+
specify "should_not_receive should mock out the method" do
|
11
|
+
@object.should_not_receive(:fuhbar)
|
12
|
+
@object.fuhbar
|
13
|
+
lambda do
|
14
|
+
@object.__verify
|
15
|
+
end.should_raise(Spec::Mocks::MockExpectationError)
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "should_not_receive should return a negative message expectation" do
|
19
|
+
@object.should_not_receive(:foobar).should_be_kind_of(NegativeMessageExpectation)
|
20
|
+
end
|
21
|
+
|
22
|
+
specify "should_receive should mock out the method" do
|
23
|
+
@object.should_receive(:foobar).with(:test_param).and_return(1)
|
24
|
+
@object.foobar(:test_param).should equal(1)
|
25
|
+
end
|
26
|
+
|
27
|
+
specify "should_receive should handle a hash" do
|
28
|
+
@object.should_receive(:foobar).with(:key => "value").and_return(1)
|
29
|
+
@object.foobar(:key => "value").should equal(1)
|
30
|
+
end
|
31
|
+
|
32
|
+
specify "should_receive should handle an inner hash" do
|
33
|
+
hash = {:a => {:key => "value"}}
|
34
|
+
@object.should_receive(:foobar).with(:key => "value").and_return(1)
|
35
|
+
@object.foobar(hash[:a]).should equal(1)
|
36
|
+
end
|
37
|
+
|
38
|
+
specify "should_receive should return a message expectation" do
|
39
|
+
@object.should_receive(:foobar).should_be_kind_of(MessageExpectation)
|
40
|
+
@object.foobar
|
41
|
+
end
|
42
|
+
|
43
|
+
specify "should_receive should verify method was called" do
|
44
|
+
@object.should_receive(:foobar).with(:test_param).and_return(1)
|
45
|
+
lambda do
|
46
|
+
@object.__verify
|
47
|
+
end.should_raise(Spec::Mocks::MockExpectationError)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
context "PartialMockUsingMocksDirectly" do
|
6
|
+
setup do
|
7
|
+
|
8
|
+
klass=Class.new
|
9
|
+
klass.class_eval do
|
10
|
+
def existing_method
|
11
|
+
:original_value
|
12
|
+
end
|
13
|
+
end
|
14
|
+
@obj = klass.new
|
15
|
+
|
16
|
+
end
|
17
|
+
specify "should clear expectations on verify" do
|
18
|
+
@obj.should_receive(:msg)
|
19
|
+
@obj.msg
|
20
|
+
@obj.__verify
|
21
|
+
lambda do
|
22
|
+
@obj.msg
|
23
|
+
end.should_raise(NoMethodError)
|
24
|
+
|
25
|
+
end
|
26
|
+
specify "should fail when expected message is not received" do
|
27
|
+
@obj.should_receive(:msg)
|
28
|
+
lambda do
|
29
|
+
@obj.__verify
|
30
|
+
end.should_raise(MockExpectationError)
|
31
|
+
|
32
|
+
end
|
33
|
+
specify "should fail when message is received with incorrect args" do
|
34
|
+
@obj.should_receive(:msg).with(:correct_arg)
|
35
|
+
lambda do
|
36
|
+
@obj.msg(:incorrect_arg)
|
37
|
+
end.should_raise(MockExpectationError)
|
38
|
+
@obj.msg(:correct_arg)
|
39
|
+
|
40
|
+
end
|
41
|
+
specify "should pass when expected message is received" do
|
42
|
+
@obj.should_receive(:msg)
|
43
|
+
@obj.msg
|
44
|
+
@obj.__verify
|
45
|
+
|
46
|
+
end
|
47
|
+
specify "should pass when message is received with correct args" do
|
48
|
+
@obj.should_receive(:msg).with(:correct_arg)
|
49
|
+
@obj.msg(:correct_arg)
|
50
|
+
@obj.__verify
|
51
|
+
|
52
|
+
end
|
53
|
+
specify "should revert to original method if existed" do
|
54
|
+
@obj.existing_method.should equal(:original_value)
|
55
|
+
@obj.should_receive(:existing_method).and_return(:mock_value)
|
56
|
+
@obj.existing_method.should equal(:mock_value)
|
57
|
+
@obj.__verify
|
58
|
+
@obj.existing_method.should equal(:original_value)
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
context "a mock, in handling arguments" do
|
6
|
+
setup do
|
7
|
+
@mock = Mock.new("test mock")
|
8
|
+
end
|
9
|
+
|
10
|
+
teardown do
|
11
|
+
@mock.__verify
|
12
|
+
end
|
13
|
+
|
14
|
+
specify "should accept true as boolean" do
|
15
|
+
@mock.should_receive(:random_call).with(:boolean)
|
16
|
+
@mock.random_call(true)
|
17
|
+
end
|
18
|
+
|
19
|
+
specify "should accept false as boolean" do
|
20
|
+
@mock.should_receive(:random_call).with(:boolean)
|
21
|
+
@mock.random_call(false)
|
22
|
+
end
|
23
|
+
|
24
|
+
specify "should accept fixnum as numeric" do
|
25
|
+
@mock.should_receive(:random_call).with(:numeric)
|
26
|
+
@mock.random_call(1)
|
27
|
+
end
|
28
|
+
|
29
|
+
specify "should accept float as numeric" do
|
30
|
+
@mock.should_receive(:random_call).with(:numeric)
|
31
|
+
@mock.random_call(1.5)
|
32
|
+
end
|
33
|
+
|
34
|
+
specify "should accept string as anything" do
|
35
|
+
@mock.should_receive(:random_call).with("a", :anything, "c")
|
36
|
+
@mock.random_call("a", "whatever", "c")
|
37
|
+
end
|
38
|
+
|
39
|
+
specify "should match duck type with one method" do
|
40
|
+
@mock.should_receive(:random_call).with(DuckTypeArgConstraint.new(:length))
|
41
|
+
@mock.random_call([])
|
42
|
+
end
|
43
|
+
|
44
|
+
specify "should match duck type with two methods" do
|
45
|
+
@mock.should_receive(:random_call).with(DuckTypeArgConstraint.new(:abs, :div))
|
46
|
+
@mock.random_call(1)
|
47
|
+
end
|
48
|
+
|
49
|
+
specify "should match non special symbol" do
|
50
|
+
@mock.should_receive(:random_call).with(:some_symbol)
|
51
|
+
@mock.random_call(:some_symbol)
|
52
|
+
end
|
53
|
+
|
54
|
+
specify "should match string" do
|
55
|
+
@mock.should_receive(:random_call).with(:string)
|
56
|
+
@mock.random_call("a string")
|
57
|
+
end
|
58
|
+
|
59
|
+
specify "should match string against regexp" do
|
60
|
+
@mock.should_receive(:random_call).with(/bcd/)
|
61
|
+
@mock.random_call("abcde")
|
62
|
+
end
|
63
|
+
|
64
|
+
specify "should match regexp against regexp" do
|
65
|
+
@mock.should_receive(:random_call).with(/bcd/)
|
66
|
+
@mock.random_call(/bcd/)
|
67
|
+
end
|
68
|
+
|
69
|
+
specify "should match against a hash submitted and received by value" do
|
70
|
+
@mock.should_receive(:random_call).with(:a => "a", :b => "b")
|
71
|
+
@mock.random_call(:a => "a", :b => "b")
|
72
|
+
end
|
73
|
+
|
74
|
+
specify "should match against a hash submitted by reference and received by value" do
|
75
|
+
opts = {:a => "a", :b => "b"}
|
76
|
+
@mock.should_receive(:random_call).with(opts)
|
77
|
+
@mock.random_call(:a => "a", :b => "b")
|
78
|
+
end
|
79
|
+
|
80
|
+
specify "should match against a hash submitted by value and received by reference" do
|
81
|
+
opts = {:a => "a", :b => "b"}
|
82
|
+
@mock.should_receive(:random_call).with(:a => "a", :b => "b")
|
83
|
+
@mock.random_call(opts)
|
84
|
+
end
|
85
|
+
|
86
|
+
specify "should match against a Matcher" do
|
87
|
+
@mock.should_receive(:msg).with(equal(37))
|
88
|
+
@mock.msg(37)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
context "PreciseCounts" do
|
6
|
+
setup do
|
7
|
+
@mock = Mock.new("test mock", {
|
8
|
+
:auto_verify => false
|
9
|
+
})
|
10
|
+
|
11
|
+
end
|
12
|
+
specify "should fail when exactly n times method is called less than n times" do
|
13
|
+
@mock.should_receive(:random_call).exactly(3).times
|
14
|
+
@mock.random_call
|
15
|
+
@mock.random_call
|
16
|
+
lambda do
|
17
|
+
@mock.__verify
|
18
|
+
end.should_raise(MockExpectationError)
|
19
|
+
|
20
|
+
end
|
21
|
+
specify "should fail when exactly n times method is never called" do
|
22
|
+
@mock.should_receive(:random_call).exactly(3).times
|
23
|
+
lambda do
|
24
|
+
@mock.__verify
|
25
|
+
end.should_raise(MockExpectationError)
|
26
|
+
|
27
|
+
end
|
28
|
+
specify "should pass if exactly n times method is called exactly n times" do
|
29
|
+
@mock.should_receive(:random_call).exactly(3).times
|
30
|
+
@mock.random_call
|
31
|
+
@mock.random_call
|
32
|
+
@mock.random_call
|
33
|
+
@mock.__verify
|
34
|
+
|
35
|
+
end
|
36
|
+
specify "should pass multiple calls with different args and counts" do
|
37
|
+
@mock.should_receive(:random_call).twice.with(1)
|
38
|
+
@mock.should_receive(:random_call).once.with(2)
|
39
|
+
@mock.random_call(1)
|
40
|
+
@mock.random_call(2)
|
41
|
+
@mock.random_call(1)
|
42
|
+
@mock.__verify
|
43
|
+
|
44
|
+
end
|
45
|
+
specify "should pass mutiple calls with different args" do
|
46
|
+
@mock.should_receive(:random_call).once.with(1)
|
47
|
+
@mock.should_receive(:random_call).once.with(2)
|
48
|
+
@mock.random_call(1)
|
49
|
+
@mock.random_call(2)
|
50
|
+
@mock.__verify
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
context "a mock" do
|
6
|
+
setup do
|
7
|
+
@mock = mock("mock", :null_object => true)
|
8
|
+
end
|
9
|
+
specify "should answer false for received_message? when no messages received" do
|
10
|
+
@mock.received_message?(:message).should be(false)
|
11
|
+
end
|
12
|
+
specify "should answer true for received_message? when message received" do
|
13
|
+
@mock.message
|
14
|
+
@mock.received_message?(:message).should be(true)
|
15
|
+
end
|
16
|
+
specify "should answer true for received_message? when message received with correct args" do
|
17
|
+
@mock.message 1,2,3
|
18
|
+
@mock.received_message?(:message, 1,2,3).should be(true)
|
19
|
+
end
|
20
|
+
specify "should answer false for received_message? when message received with incorrect args" do
|
21
|
+
@mock.message 1,2,3
|
22
|
+
@mock.received_message?(:message, 1,2).should be(false)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Mocks
|
5
|
+
context "A method stub" do
|
6
|
+
setup do
|
7
|
+
@class = Class.new do
|
8
|
+
def self.existing_class_method
|
9
|
+
:original_value
|
10
|
+
end
|
11
|
+
|
12
|
+
def existing_instance_method
|
13
|
+
:original_value
|
14
|
+
end
|
15
|
+
end
|
16
|
+
@obj = @class.new
|
17
|
+
end
|
18
|
+
|
19
|
+
specify "should allow for a mock expectation to temporarily replace a method stub on a mock" do
|
20
|
+
mock = Spec::Mocks::Mock.new("a mock")
|
21
|
+
mock.stub!(:msg).and_return(:stub_value)
|
22
|
+
mock.should_receive(:msg).with(:arg).and_return(:mock_value)
|
23
|
+
mock.msg(:arg).should equal(:mock_value)
|
24
|
+
mock.msg.should equal(:stub_value)
|
25
|
+
mock.msg.should equal(:stub_value)
|
26
|
+
mock.__verify
|
27
|
+
end
|
28
|
+
|
29
|
+
specify "should allow for a mock expectation to temporarily replace a method stub on a non-mock" do
|
30
|
+
@obj.stub!(:msg).and_return(:stub_value)
|
31
|
+
@obj.should_receive(:msg).with(:arg).and_return(:mock_value)
|
32
|
+
@obj.msg(:arg).should equal(:mock_value)
|
33
|
+
@obj.msg.should equal(:stub_value)
|
34
|
+
@obj.msg.should equal(:stub_value)
|
35
|
+
@obj.__verify
|
36
|
+
end
|
37
|
+
|
38
|
+
specify "should ignore when expected message is not received" do
|
39
|
+
@obj.stub!(:msg)
|
40
|
+
lambda do
|
41
|
+
@obj.__verify
|
42
|
+
end.should_not_raise
|
43
|
+
end
|
44
|
+
|
45
|
+
specify "should clear itself on __verify" do
|
46
|
+
@obj.stub!(:this_should_go).and_return(:blah)
|
47
|
+
@obj.this_should_go.should_equal :blah
|
48
|
+
@obj.__verify
|
49
|
+
lambda do
|
50
|
+
@obj.this_should_go
|
51
|
+
end.should_raise
|
52
|
+
end
|
53
|
+
|
54
|
+
specify "should ignore when expected message is received" do
|
55
|
+
@obj.stub!(:msg)
|
56
|
+
@obj.msg
|
57
|
+
@obj.__verify
|
58
|
+
end
|
59
|
+
|
60
|
+
specify "should ignore when message is received with args" do
|
61
|
+
@obj.stub!(:msg)
|
62
|
+
@obj.msg(:an_arg)
|
63
|
+
@obj.__verify
|
64
|
+
end
|
65
|
+
|
66
|
+
specify "should not support with" do
|
67
|
+
lambda do
|
68
|
+
Spec::Mocks::Mock.new("a mock").stub!(:msg).with(:arg)
|
69
|
+
end.should_raise(NoMethodError)
|
70
|
+
end
|
71
|
+
|
72
|
+
specify "should return expected value when expected message is received" do
|
73
|
+
@obj.stub!(:msg).and_return(:return_value)
|
74
|
+
@obj.msg.should equal(:return_value)
|
75
|
+
@obj.__verify
|
76
|
+
end
|
77
|
+
|
78
|
+
specify "should return values in order to consecutive calls" do
|
79
|
+
return_values = ["1",2,Object.new]
|
80
|
+
@obj.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
|
81
|
+
@obj.msg.should_eql return_values[0]
|
82
|
+
@obj.msg.should_eql return_values[1]
|
83
|
+
@obj.msg.should_eql return_values[2]
|
84
|
+
end
|
85
|
+
|
86
|
+
specify "should keep returning last value in consecutive calls" do
|
87
|
+
return_values = ["1",2,Object.new]
|
88
|
+
@obj.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
|
89
|
+
@obj.msg.should_eql return_values[0]
|
90
|
+
@obj.msg.should_eql return_values[1]
|
91
|
+
@obj.msg.should_eql return_values[2]
|
92
|
+
@obj.msg.should_eql return_values[2]
|
93
|
+
@obj.msg.should_eql return_values[2]
|
94
|
+
end
|
95
|
+
|
96
|
+
specify "should revert to original instance method if existed" do
|
97
|
+
@obj.existing_instance_method.should equal(:original_value)
|
98
|
+
@obj.stub!(:existing_instance_method).and_return(:mock_value)
|
99
|
+
@obj.existing_instance_method.should equal(:mock_value)
|
100
|
+
@obj.__verify
|
101
|
+
# TODO JRUBY: This causes JRuby to fail with:
|
102
|
+
# NativeException in 'Stub should revert to original instance method if existed'
|
103
|
+
# java.lang.ArrayIndexOutOfBoundsException: 0
|
104
|
+
# org.jruby.internal.runtime.methods.IterateCallable.internalCall(IterateCallable.java:63)
|
105
|
+
# org.jruby.internal.runtime.methods.AbstractCallable.call(AbstractCallable.java:64)
|
106
|
+
# org.jruby.runtime.ThreadContext.yieldInternal(ThreadContext.java:574)
|
107
|
+
# org.jruby.runtime.ThreadContext.yieldSpecificBlock(ThreadContext.java:549)
|
108
|
+
# org.jruby.runtime.Block.call(Block.java:158)
|
109
|
+
# org.jruby.RubyProc.call(RubyProc.java:118)
|
110
|
+
# org.jruby.internal.runtime.methods.ProcMethod.internalCall(ProcMethod.java:69)
|
111
|
+
# org.jruby.internal.runtime.methods.AbstractMethod.call(AbstractMethod.java:58)
|
112
|
+
# org.jruby.RubyObject.callMethod(RubyObject.java:379)
|
113
|
+
# org.jruby.RubyObject.callMethod(RubyObject.java:331)
|
114
|
+
# org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:472)
|
115
|
+
# org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:462)
|
116
|
+
# org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:390)
|
117
|
+
# org.jruby.evaluator.EvaluationState.eval(EvaluationState.java:133)
|
118
|
+
@obj.existing_instance_method.should equal(:original_value)
|
119
|
+
end
|
120
|
+
|
121
|
+
specify "should revert to original class method if existed" do
|
122
|
+
@class.existing_class_method.should equal(:original_value)
|
123
|
+
@class.stub!(:existing_class_method).and_return(:mock_value)
|
124
|
+
@class.existing_class_method.should equal(:mock_value)
|
125
|
+
@class.__verify
|
126
|
+
@class.existing_class_method.should equal(:original_value)
|
127
|
+
end
|
128
|
+
|
129
|
+
specify "should clear itself on __verify" do
|
130
|
+
@obj.stub!(:this_should_go).and_return(:blah)
|
131
|
+
@obj.this_should_go.should_equal :blah
|
132
|
+
@obj.__verify
|
133
|
+
lambda do
|
134
|
+
@obj.this_should_go
|
135
|
+
end.should_raise
|
136
|
+
end
|
137
|
+
|
138
|
+
specify "should support yielding" do
|
139
|
+
@obj.stub!(:method_that_yields).and_yield(:yielded_value)
|
140
|
+
current_value = :value_before
|
141
|
+
@obj.method_that_yields {|val| current_value = val}
|
142
|
+
current_value.should_equal :yielded_value
|
143
|
+
@obj.__verify
|
144
|
+
end
|
145
|
+
|
146
|
+
specify "should throw when told to" do
|
147
|
+
@mock.stub!(:something).and_throw(:blech)
|
148
|
+
lambda do
|
149
|
+
@mock.something
|
150
|
+
end.should_throw(:blech)
|
151
|
+
end
|
152
|
+
|
153
|
+
specify "should support overriding w/ a new stub" do
|
154
|
+
@stub.stub!(:existing_instance_method).and_return(:updated_stub_value)
|
155
|
+
@stub.existing_instance_method.should == :updated_stub_value
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|