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,35 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper.rb'
|
2
|
+
|
3
|
+
context "should_not_throw" do
|
4
|
+
specify "should fail when expected symbol is actually thrown" do
|
5
|
+
lambda do
|
6
|
+
lambda do
|
7
|
+
throw(:foo)
|
8
|
+
end.should_not_throw(:foo)
|
9
|
+
end.should_fail
|
10
|
+
end
|
11
|
+
|
12
|
+
specify "should pass when expected symbol is thrown" do
|
13
|
+
lambda do
|
14
|
+
lambda do
|
15
|
+
throw(:bar)
|
16
|
+
end.should_not_throw(:foo)
|
17
|
+
end.should_not_raise
|
18
|
+
end
|
19
|
+
|
20
|
+
specify "should pass when no symbol is thrown" do
|
21
|
+
lambda do
|
22
|
+
lambda do
|
23
|
+
"".to_s
|
24
|
+
end.should_not_throw(:foo)
|
25
|
+
end.should_not_raise
|
26
|
+
end
|
27
|
+
|
28
|
+
specify "should pass when no symbol is thrown and none is specified" do
|
29
|
+
lambda do
|
30
|
+
lambda do
|
31
|
+
"".to_s
|
32
|
+
end.should_not_throw
|
33
|
+
end.should_not_raise
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper.rb'
|
2
|
+
|
3
|
+
context "should_raise" do
|
4
|
+
specify "should fail when exact exception is raised with wrong message" do
|
5
|
+
lambda do
|
6
|
+
lambda do
|
7
|
+
raise(StandardError.new("chunky bacon"))
|
8
|
+
end.should_raise(StandardError, "rotten tomatoes")
|
9
|
+
end.should_raise(Spec::Expectations::ExpectationNotMetError)
|
10
|
+
end
|
11
|
+
|
12
|
+
specify "should fail when exact exception is raised with message not matching regexp" do
|
13
|
+
lambda do
|
14
|
+
lambda do
|
15
|
+
raise(StandardError.new("chunky bacon"))
|
16
|
+
end.should_raise(StandardError, /lean/)
|
17
|
+
end.should_raise(Spec::Expectations::ExpectationNotMetError)
|
18
|
+
end
|
19
|
+
|
20
|
+
specify "should fail when no exception is raised" do
|
21
|
+
lambda do
|
22
|
+
lambda {}.should_raise(SyntaxError)
|
23
|
+
end.should_raise(Spec::Expectations::ExpectationNotMetError, "expected SyntaxError but nothing was raised")
|
24
|
+
end
|
25
|
+
|
26
|
+
specify "should fail when wrong exception is raised" do
|
27
|
+
lambda do
|
28
|
+
lambda do
|
29
|
+
"".nonexistent_method
|
30
|
+
end.should_raise(SyntaxError)
|
31
|
+
end.should_raise(Spec::Expectations::ExpectationNotMetError, /expected SyntaxError, got #<NoMethodError: undefined method/)
|
32
|
+
end
|
33
|
+
|
34
|
+
specify "should pass when exact exception is raised" do
|
35
|
+
lambda do
|
36
|
+
lambda do
|
37
|
+
"".nonexistent_method
|
38
|
+
end.should_raise(NoMethodError)
|
39
|
+
end.should_not_raise
|
40
|
+
end
|
41
|
+
|
42
|
+
specify "should pass when exact exception is raised with message" do
|
43
|
+
lambda do
|
44
|
+
lambda do
|
45
|
+
raise(StandardError.new("this is standard"))
|
46
|
+
end.should_raise(StandardError, "this is standard")
|
47
|
+
end.should_not_raise
|
48
|
+
end
|
49
|
+
|
50
|
+
specify "should pass when exact exception is raised with message matching regexp" do
|
51
|
+
lambda do
|
52
|
+
lambda do
|
53
|
+
raise(StandardError.new("this is standard"))
|
54
|
+
end.should_raise(StandardError, /standard$/)
|
55
|
+
end.should_not_raise
|
56
|
+
end
|
57
|
+
|
58
|
+
specify "should pass when subclass exception is raised" do
|
59
|
+
lambda do
|
60
|
+
lambda do
|
61
|
+
"".nonexistent_method
|
62
|
+
end.should_raise
|
63
|
+
end.should_not_raise
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper.rb'
|
2
|
+
|
3
|
+
context "should_respond_to" do
|
4
|
+
specify "should fail when target doesnt respond to" do
|
5
|
+
lambda do
|
6
|
+
"".should_respond_to(:connect)
|
7
|
+
end.should_fail
|
8
|
+
end
|
9
|
+
|
10
|
+
specify "should pass when target responds to" do
|
11
|
+
lambda do
|
12
|
+
"".should_respond_to(:length)
|
13
|
+
end.should_not_raise
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper.rb'
|
2
|
+
|
3
|
+
context "should_satisfy" do
|
4
|
+
specify "should not raise exception when block yields true" do
|
5
|
+
lambda do
|
6
|
+
5.should_satisfy do |target|
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end.should_not_raise
|
10
|
+
end
|
11
|
+
|
12
|
+
specify "should not raise exception when block yields true again" do
|
13
|
+
lambda do
|
14
|
+
5.should_not_satisfy do |target|
|
15
|
+
false
|
16
|
+
end
|
17
|
+
end.should_not_raise
|
18
|
+
end
|
19
|
+
|
20
|
+
specify "should raise exception when block yields false" do
|
21
|
+
lambda do
|
22
|
+
5.should_satisfy do |target|
|
23
|
+
false
|
24
|
+
end
|
25
|
+
end.should_fail
|
26
|
+
end
|
27
|
+
|
28
|
+
specify "should raise exception when block yields false again" do
|
29
|
+
lambda do
|
30
|
+
5.should_not_satisfy do |target|
|
31
|
+
true
|
32
|
+
end
|
33
|
+
end.should_fail
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper.rb'
|
2
|
+
|
3
|
+
context "should_throw" do
|
4
|
+
|
5
|
+
specify "should fail when no symbol is thrown" do
|
6
|
+
lambda do
|
7
|
+
lambda {}.should_throw(:foo)
|
8
|
+
end.should_fail
|
9
|
+
end
|
10
|
+
|
11
|
+
specify "should fail when wrong symbol is thrown" do
|
12
|
+
lambda do
|
13
|
+
lambda do
|
14
|
+
throw(:bar)
|
15
|
+
end.should_throw(:foo)
|
16
|
+
end.should_fail
|
17
|
+
end
|
18
|
+
|
19
|
+
specify "should pass when proper symbol is thrown" do
|
20
|
+
lambda do
|
21
|
+
lambda do
|
22
|
+
throw(:foo)
|
23
|
+
end.should_throw(:foo)
|
24
|
+
end.should_not_raise
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
context "should be_close(expected, delta)" do
|
4
|
+
specify "should pass if target == expected" do
|
5
|
+
5.0.should be_close(5.0, 0.5)
|
6
|
+
end
|
7
|
+
specify "should pass if target < expected + delta" do
|
8
|
+
5.49.should be_close(5.0, 0.5)
|
9
|
+
end
|
10
|
+
specify "should pass if target > expected - delta" do
|
11
|
+
4.51.should be_close(5.0, 0.5)
|
12
|
+
end
|
13
|
+
specify "should fail if target == expected - delta" do
|
14
|
+
lambda {
|
15
|
+
4.5.should be_close(5.0, 0.5)
|
16
|
+
}.should fail_with("expected 5.0 +/- (<0.5), got 4.5")
|
17
|
+
end
|
18
|
+
specify "should fail if target < expected - delta" do
|
19
|
+
lambda {
|
20
|
+
4.49.should be_close(5.0, 0.5)
|
21
|
+
}.should fail_with("expected 5.0 +/- (<0.5), got 4.49")
|
22
|
+
end
|
23
|
+
specify "should fail if target == expected + delta" do
|
24
|
+
lambda {
|
25
|
+
5.5.should be_close(5.0, 0.5)
|
26
|
+
}.should fail_with("expected 5.0 +/- (<0.5), got 5.5")
|
27
|
+
end
|
28
|
+
specify "should fail if target > expected + delta" do
|
29
|
+
lambda {
|
30
|
+
5.51.should be_close(5.0, 0.5)
|
31
|
+
}.should fail_with("expected 5.0 +/- (<0.5), got 5.51")
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
context "should be_predicate" do
|
4
|
+
specify "should pass when actual returns true for :predicate?" do
|
5
|
+
actual = stub("actual", :happy? => true)
|
6
|
+
actual.should be_happy
|
7
|
+
end
|
8
|
+
|
9
|
+
specify "should pass when actual returns true for :predicates? (present tense)" do
|
10
|
+
actual = stub("actual", :exists? => true)
|
11
|
+
actual.should be_exist
|
12
|
+
end
|
13
|
+
|
14
|
+
specify "should fail when actual returns false for :predicate?" do
|
15
|
+
actual = stub("actual", :happy? => false)
|
16
|
+
lambda {
|
17
|
+
actual.should be_happy
|
18
|
+
}.should fail_with("expected happy? to return true, got false")
|
19
|
+
end
|
20
|
+
|
21
|
+
specify "should fail when actual does not respond to :predicate?" do
|
22
|
+
lambda {
|
23
|
+
Object.new.should be_happy
|
24
|
+
}.should raise_error(NameError)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "should_not be_predicate" do
|
29
|
+
specify "should pass when actual returns false for :sym?" do
|
30
|
+
actual = stub("actual", :happy? => false)
|
31
|
+
actual.should_not be_happy
|
32
|
+
end
|
33
|
+
|
34
|
+
specify "should fail when actual returns true for :sym?" do
|
35
|
+
actual = stub("actual", :happy? => true)
|
36
|
+
lambda {
|
37
|
+
actual.should_not be_happy
|
38
|
+
}.should fail_with("expected happy? to return false, got true")
|
39
|
+
end
|
40
|
+
|
41
|
+
specify "should fail when actual does not respond to :sym?" do
|
42
|
+
lambda {
|
43
|
+
Object.new.should_not be_happy
|
44
|
+
}.should raise_error(NameError)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "should be_predicate(*args)" do
|
49
|
+
specify "should pass when actual returns true for :predicate?(*args)" do
|
50
|
+
actual = mock("actual")
|
51
|
+
actual.should_receive(:older_than?).with(3).and_return(true)
|
52
|
+
actual.should be_older_than(3)
|
53
|
+
end
|
54
|
+
|
55
|
+
specify "should fail when actual returns false for :predicate?(*args)" do
|
56
|
+
actual = mock("actual")
|
57
|
+
actual.should_receive(:older_than?).with(3).and_return(false)
|
58
|
+
lambda {
|
59
|
+
actual.should be_older_than(3)
|
60
|
+
}.should fail_with("expected older_than?(3) to return true, got false")
|
61
|
+
end
|
62
|
+
|
63
|
+
specify "should fail when actual does not respond to :predicate?" do
|
64
|
+
lambda {
|
65
|
+
Object.new.should be_older_than(3)
|
66
|
+
}.should raise_error(NameError)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "should_not be_predicate(*args)" do
|
71
|
+
specify "should pass when actual returns false for :predicate?(*args)" do
|
72
|
+
actual = mock("actual")
|
73
|
+
actual.should_receive(:older_than?).with(3).and_return(false)
|
74
|
+
actual.should_not be_older_than(3)
|
75
|
+
end
|
76
|
+
|
77
|
+
specify "should fail when actual returns true for :predicate?(*args)" do
|
78
|
+
actual = mock("actual")
|
79
|
+
actual.should_receive(:older_than?).with(3).and_return(true)
|
80
|
+
lambda {
|
81
|
+
actual.should_not be_older_than(3)
|
82
|
+
}.should fail_with("expected older_than?(3) to return false, got true")
|
83
|
+
end
|
84
|
+
|
85
|
+
specify "should fail when actual does not respond to :predicate?" do
|
86
|
+
lambda {
|
87
|
+
Object.new.should_not be_older_than(3)
|
88
|
+
}.should raise_error(NameError)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "should be_true" do
|
93
|
+
specify "should pass when actual equal(true)" do
|
94
|
+
true.should be_true
|
95
|
+
end
|
96
|
+
|
97
|
+
specify "should fail when actual equal(false)" do
|
98
|
+
lambda {
|
99
|
+
false.should be_true
|
100
|
+
}.should fail_with("expected true, got false")
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "should be_false" do
|
105
|
+
specify "should pass when actual equal(false)" do
|
106
|
+
false.should be_false
|
107
|
+
end
|
108
|
+
|
109
|
+
specify "should fail when actual equal(true)" do
|
110
|
+
lambda {
|
111
|
+
true.should be_false
|
112
|
+
}.should fail_with("expected false, got true")
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context "should be_nil" do
|
117
|
+
specify "should pass when actual is nil" do
|
118
|
+
nil.should be_nil
|
119
|
+
end
|
120
|
+
|
121
|
+
specify "should fail when actual is not nil" do
|
122
|
+
lambda {
|
123
|
+
:not_nil.should be_nil
|
124
|
+
}.should fail_with("expected nil, got :not_nil")
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context "should_not be_nil" do
|
129
|
+
specify "should pass when actual is not nil" do
|
130
|
+
:not_nil.should_not be_nil
|
131
|
+
end
|
132
|
+
|
133
|
+
specify "should fail when actual is nil" do
|
134
|
+
lambda {
|
135
|
+
nil.should_not be_nil
|
136
|
+
}.should fail_with("expected not nil, got nil")
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
context "should be <" do
|
141
|
+
specify "should pass when < operator returns true" do
|
142
|
+
3.should be < 4
|
143
|
+
end
|
144
|
+
|
145
|
+
specify "should fail when < operator returns false" do
|
146
|
+
lambda { 3.should be < 3 }.should fail_with("expected < 3, got 3")
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
context "should be <=" do
|
151
|
+
specify "should pass when <= operator returns true" do
|
152
|
+
3.should be <= 4
|
153
|
+
4.should be <= 4
|
154
|
+
end
|
155
|
+
|
156
|
+
specify "should fail when <= operator returns false" do
|
157
|
+
lambda { 3.should be <= 2 }.should fail_with("expected <= 2, got 3")
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
context "should be >=" do
|
162
|
+
specify "should pass when >= operator returns true" do
|
163
|
+
4.should be >= 4
|
164
|
+
5.should be >= 4
|
165
|
+
end
|
166
|
+
|
167
|
+
specify "should fail when >= operator returns false" do
|
168
|
+
lambda { 3.should be >= 4 }.should fail_with("expected >= 4, got 3")
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context "should be >" do
|
173
|
+
specify "should pass when > operator returns true" do
|
174
|
+
5.should be > 4
|
175
|
+
end
|
176
|
+
|
177
|
+
specify "should fail when > operator returns false" do
|
178
|
+
lambda { 3.should be > 4 }.should fail_with("expected > 4, got 3")
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
|
@@ -0,0 +1,232 @@
|
|
1
|
+
#Based on patch from Wilson Bilkovich
|
2
|
+
|
3
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
4
|
+
class SomethingExpected
|
5
|
+
attr_accessor :some_value
|
6
|
+
end
|
7
|
+
|
8
|
+
context "should change(actual, message)" do
|
9
|
+
setup do
|
10
|
+
@instance = SomethingExpected.new
|
11
|
+
@instance.some_value = 5
|
12
|
+
end
|
13
|
+
|
14
|
+
specify "should pass when actual is modified by the block" do
|
15
|
+
lambda {@instance.some_value = 6}.should change(@instance, :some_value)
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "should fail when actual is not modified by the block" do
|
19
|
+
lambda do
|
20
|
+
lambda {}.should change(@instance, :some_value)
|
21
|
+
end.should fail_with("some_value should have changed, but is still 5")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "should_not change(actual, message)" do
|
26
|
+
setup do
|
27
|
+
@instance = SomethingExpected.new
|
28
|
+
@instance.some_value = 5
|
29
|
+
end
|
30
|
+
|
31
|
+
specify "should pass when actual is not modified by the block" do
|
32
|
+
lambda { }.should_not change(@instance, :some_value)
|
33
|
+
end
|
34
|
+
|
35
|
+
specify "should fail when actual is not modified by the block" do
|
36
|
+
lambda do
|
37
|
+
lambda {@instance.some_value = 6}.should_not change(@instance, :some_value)
|
38
|
+
end.should fail_with("some_value should not have changed, but did change from 5 to 6")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "should change { block }" do
|
43
|
+
setup do
|
44
|
+
@instance = SomethingExpected.new
|
45
|
+
@instance.some_value = 5
|
46
|
+
end
|
47
|
+
|
48
|
+
specify "should pass when actual is modified by the block" do
|
49
|
+
lambda {@instance.some_value = 6}.should change { @instance.some_value }
|
50
|
+
end
|
51
|
+
|
52
|
+
specify "should fail when actual is not modified by the block" do
|
53
|
+
lambda do
|
54
|
+
lambda {}.should change{ @instance.some_value }
|
55
|
+
end.should fail_with("result should have changed, but is still 5")
|
56
|
+
end
|
57
|
+
|
58
|
+
specify "should warn if passed a block using do/end" do
|
59
|
+
lambda do
|
60
|
+
lambda {}.should change do
|
61
|
+
end
|
62
|
+
end.should_raise(Spec::Matchers::MatcherError, /block passed to should or should_not/)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "should_not change { block }" do
|
67
|
+
setup do
|
68
|
+
@instance = SomethingExpected.new
|
69
|
+
@instance.some_value = 5
|
70
|
+
end
|
71
|
+
|
72
|
+
specify "should pass when actual is modified by the block" do
|
73
|
+
lambda {}.should_not change{ @instance.some_value }
|
74
|
+
end
|
75
|
+
|
76
|
+
specify "should fail when actual is not modified by the block" do
|
77
|
+
lambda do
|
78
|
+
lambda {@instance.some_value = 6}.should_not change { @instance.some_value }
|
79
|
+
end.should fail_with("result should not have changed, but did change from 5 to 6")
|
80
|
+
end
|
81
|
+
|
82
|
+
specify "should warn if passed a block using do/end" do
|
83
|
+
lambda do
|
84
|
+
lambda {}.should_not change do
|
85
|
+
end
|
86
|
+
end.should_raise(Spec::Matchers::MatcherError, /block passed to should or should_not/)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "should change(actual, message).by(expected)" do
|
91
|
+
setup do
|
92
|
+
@instance = SomethingExpected.new
|
93
|
+
@instance.some_value = 5
|
94
|
+
end
|
95
|
+
|
96
|
+
specify "should pass when attribute is changed by expected amount" do
|
97
|
+
lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by(1)
|
98
|
+
end
|
99
|
+
|
100
|
+
specify "should fail when the attribute is changed by unexpected amount" do
|
101
|
+
lambda do
|
102
|
+
lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by(1)
|
103
|
+
end.should fail_with("some_value should have been changed by 1, but was changed by 2")
|
104
|
+
end
|
105
|
+
|
106
|
+
specify "should fail when the attribute is changed by unexpected amount in the opposite direction" do
|
107
|
+
lambda do
|
108
|
+
lambda { @instance.some_value -= 1 }.should change(@instance, :some_value).by(1)
|
109
|
+
end.should fail_with("some_value should have been changed by 1, but was changed by -1")
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context "should change{ block }.by(expected)" do
|
114
|
+
setup do
|
115
|
+
@instance = SomethingExpected.new
|
116
|
+
@instance.some_value = 5
|
117
|
+
end
|
118
|
+
|
119
|
+
specify "should pass when attribute is changed by expected amount" do
|
120
|
+
lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by(1)
|
121
|
+
end
|
122
|
+
|
123
|
+
specify "should fail when the attribute is changed by unexpected amount" do
|
124
|
+
lambda do
|
125
|
+
lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by(1)
|
126
|
+
end.should fail_with("result should have been changed by 1, but was changed by 2")
|
127
|
+
end
|
128
|
+
|
129
|
+
specify "should fail when the attribute is changed by unexpected amount in the opposite direction" do
|
130
|
+
lambda do
|
131
|
+
lambda { @instance.some_value -= 1 }.should change{@instance.some_value}.by(1)
|
132
|
+
end.should fail_with("result should have been changed by 1, but was changed by -1")
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
context "should change(actual, message).from(old)" do
|
137
|
+
setup do
|
138
|
+
@instance = SomethingExpected.new
|
139
|
+
@instance.some_value = 'string'
|
140
|
+
end
|
141
|
+
|
142
|
+
specify "should pass when attribute is == to expected value before executing block" do
|
143
|
+
lambda { @instance.some_value = "astring" }.should change(@instance, :some_value).from("string")
|
144
|
+
end
|
145
|
+
|
146
|
+
specify "should fail when attribute is not == to expected value before executing block" do
|
147
|
+
lambda do
|
148
|
+
lambda { @instance.some_value = "knot" }.should change(@instance, :some_value).from("cat")
|
149
|
+
end.should fail_with("some_value should have initially been \"cat\", but was \"string\"")
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
context "should change{ block }.from(old)" do
|
154
|
+
setup do
|
155
|
+
@instance = SomethingExpected.new
|
156
|
+
@instance.some_value = 'string'
|
157
|
+
end
|
158
|
+
|
159
|
+
specify "should pass when attribute is == to expected value before executing block" do
|
160
|
+
lambda { @instance.some_value = "astring" }.should change{@instance.some_value}.from("string")
|
161
|
+
end
|
162
|
+
|
163
|
+
specify "should fail when attribute is not == to expected value before executing block" do
|
164
|
+
lambda do
|
165
|
+
lambda { @instance.some_value = "knot" }.should change{@instance.some_value}.from("cat")
|
166
|
+
end.should fail_with("result should have initially been \"cat\", but was \"string\"")
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
context "should change(actual, message).to(new)" do
|
171
|
+
setup do
|
172
|
+
@instance = SomethingExpected.new
|
173
|
+
@instance.some_value = 'string'
|
174
|
+
end
|
175
|
+
|
176
|
+
specify "should pass when attribute is == to expected value after executing block" do
|
177
|
+
lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat")
|
178
|
+
end
|
179
|
+
|
180
|
+
specify "should fail when attribute is not == to expected value after executing block" do
|
181
|
+
lambda do
|
182
|
+
lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("dog")
|
183
|
+
end.should fail_with("some_value should have been changed to \"dog\", but is now \"cat\"")
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
context "should change{ block }.to(new)" do
|
188
|
+
setup do
|
189
|
+
@instance = SomethingExpected.new
|
190
|
+
@instance.some_value = 'string'
|
191
|
+
end
|
192
|
+
|
193
|
+
specify "should pass when attribute is == to expected value after executing block" do
|
194
|
+
lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat")
|
195
|
+
end
|
196
|
+
|
197
|
+
specify "should fail when attribute is not == to expected value after executing block" do
|
198
|
+
lambda do
|
199
|
+
lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("dog")
|
200
|
+
end.should fail_with("result should have been changed to \"dog\", but is now \"cat\"")
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
context "should change(actual, message).from(old).to(new)" do
|
205
|
+
setup do
|
206
|
+
@instance = SomethingExpected.new
|
207
|
+
@instance.some_value = 'string'
|
208
|
+
end
|
209
|
+
|
210
|
+
specify "should pass when #to comes before #from" do
|
211
|
+
lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat").from("string")
|
212
|
+
end
|
213
|
+
|
214
|
+
specify "should pass when #from comes before #to" do
|
215
|
+
lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("cat")
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
context "should change{ block }.from(old).to(new)" do
|
220
|
+
setup do
|
221
|
+
@instance = SomethingExpected.new
|
222
|
+
@instance.some_value = 'string'
|
223
|
+
end
|
224
|
+
|
225
|
+
specify "should pass when #to comes before #from" do
|
226
|
+
lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat").from("string")
|
227
|
+
end
|
228
|
+
|
229
|
+
specify "should pass when #from comes before #to" do
|
230
|
+
lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("cat")
|
231
|
+
end
|
232
|
+
end
|