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,107 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
module SpecMatcherSpecHelper
|
6
|
+
class MatchDescription
|
7
|
+
def initialize(description)
|
8
|
+
@description = description
|
9
|
+
end
|
10
|
+
|
11
|
+
def matches?(matcher)
|
12
|
+
matcher.matches?(@description)
|
13
|
+
end
|
14
|
+
|
15
|
+
def failure_message
|
16
|
+
"expected matcher.matches?(#{@description.inspect}) to return true, got false"
|
17
|
+
end
|
18
|
+
|
19
|
+
def negative_failure_message
|
20
|
+
"expected matcher.matches?(#{@description.inspect}) to return false, got true"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def match_description(description)
|
24
|
+
MatchDescription.new(description)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "SpecMatcher" do
|
29
|
+
include SpecMatcherSpecHelper
|
30
|
+
|
31
|
+
specify "should match correct context and spec" do
|
32
|
+
matcher=SpecMatcher.new("context", "spec")
|
33
|
+
matcher.should match_description("context spec")
|
34
|
+
end
|
35
|
+
|
36
|
+
specify "should not match wrong spec" do
|
37
|
+
matcher=SpecMatcher.new("context", "other spec")
|
38
|
+
matcher.should_not match_description("context spec")
|
39
|
+
end
|
40
|
+
|
41
|
+
specify "should not match wrong context" do
|
42
|
+
matcher=SpecMatcher.new("other context", "spec")
|
43
|
+
matcher.should_not match_description("context spec")
|
44
|
+
end
|
45
|
+
|
46
|
+
specify "should match spec only" do
|
47
|
+
matcher=SpecMatcher.new("context", "spec")
|
48
|
+
matcher.should match_description("spec")
|
49
|
+
end
|
50
|
+
|
51
|
+
specify "should match context only" do
|
52
|
+
matcher=SpecMatcher.new("context", "spec")
|
53
|
+
matcher.should match_description("context")
|
54
|
+
end
|
55
|
+
|
56
|
+
specify "should escape regexp chars" do
|
57
|
+
matcher=SpecMatcher.new("(con|text)", "[spec]")
|
58
|
+
matcher.should_not match_description("con p")
|
59
|
+
end
|
60
|
+
|
61
|
+
# specify "should match context only" do
|
62
|
+
# matcher=SpecMatcher.new("context", "a context")
|
63
|
+
# matcher.should match_description("a context")
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# specify "should match spec only" do
|
67
|
+
# matcher=SpecMatcher.new("with a spec", "a context")
|
68
|
+
# matcher.should match_description("with a spec")
|
69
|
+
# end
|
70
|
+
|
71
|
+
# specify "should match with regexp reserved (characters) in the spec" do
|
72
|
+
# matcher=SpecMatcher.new("with ([#]) a spec", "a context")
|
73
|
+
# matcher.should match_description("a context")
|
74
|
+
# matcher.should match_description("with ([#]) a spec")
|
75
|
+
# matcher.should match_description("a context with ([#]) a spec")
|
76
|
+
# end
|
77
|
+
#
|
78
|
+
# specify "should match with regexp reserved (characters) in the context" do
|
79
|
+
# matcher=SpecMatcher.new("with a spec", "a ([#]) context")
|
80
|
+
# matcher.should match_description("a ([#]) context with a spec")
|
81
|
+
# matcher.should match_description("a ([#]) context with a spec")
|
82
|
+
# matcher.should match_description("a ([#]) context with a spec")
|
83
|
+
# end
|
84
|
+
|
85
|
+
# specify "should not match wrong spec only" do
|
86
|
+
# matcher=SpecMatcher.new("with another spec", "a context")
|
87
|
+
# matcher.should_not match_description("with a spec")
|
88
|
+
# end
|
89
|
+
#
|
90
|
+
# specify "should not match wrong context" do
|
91
|
+
# matcher=SpecMatcher.new("another context with a spec", "a context")
|
92
|
+
# matcher.should_not match_description("with a spec")
|
93
|
+
# end
|
94
|
+
#
|
95
|
+
# specify "should not match wrong context only" do
|
96
|
+
# matcher=SpecMatcher.new("another context", "a context")
|
97
|
+
# matcher.should_not match_description("with a spec")
|
98
|
+
# end
|
99
|
+
#
|
100
|
+
# specify "should not match wrong spec" do
|
101
|
+
# matcher=SpecMatcher.new("a context with another spec", "a context")
|
102
|
+
# matcher.should_not match_description("with a spec")
|
103
|
+
# end
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
module SpecNameSpecHelper
|
6
|
+
def run_spec
|
7
|
+
@spec.run(reporter, nil, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
8
|
+
end
|
9
|
+
|
10
|
+
def reporter
|
11
|
+
@reporter ||= mock("reporter")
|
12
|
+
end
|
13
|
+
|
14
|
+
def spec_class
|
15
|
+
@spec_class ||= generate_spec_class
|
16
|
+
end
|
17
|
+
|
18
|
+
def generate_spec_class
|
19
|
+
callback_container = Callback::CallbackContainer.new
|
20
|
+
spec_class = Specification.dup
|
21
|
+
spec_class.stub!(:callbacks).and_return {callback_container}
|
22
|
+
spec_class
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# context "Specification with given name" do
|
27
|
+
# include SpecNameSpecHelper
|
28
|
+
# setup do
|
29
|
+
# @spec = spec_class.new("given name")
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# specify "should start spec with given name" do
|
33
|
+
# reporter.stub!(:spec_finished)
|
34
|
+
# reporter.should_receive(:spec_started).with("given name")
|
35
|
+
# run_spec
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# specify "should finish spec with given name" do
|
39
|
+
# reporter.stub!(:spec_started)
|
40
|
+
# reporter.should_receive(:spec_finished).with("given name", :anything, :anything)
|
41
|
+
# run_spec
|
42
|
+
# end
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# context "Specification with given name and error" do
|
46
|
+
# include SpecNameSpecHelper
|
47
|
+
# setup do
|
48
|
+
# @spec = spec_class.new("given name") { raise }
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# specify "should start spec with given name" do
|
52
|
+
# reporter.stub!(:spec_finished)
|
53
|
+
# reporter.should_receive(:spec_started).with("given name")
|
54
|
+
# run_spec
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# specify "should finish spec with given name" do
|
58
|
+
# reporter.stub!(:spec_started)
|
59
|
+
# reporter.should_receive(:spec_finished).with("given name", :anything, :anything)
|
60
|
+
# run_spec
|
61
|
+
# end
|
62
|
+
# end
|
63
|
+
|
64
|
+
context "Specification with generated name" do
|
65
|
+
include SpecNameSpecHelper
|
66
|
+
setup do
|
67
|
+
@spec = spec_class.new(:__generate_description) { 5.should == 5 }
|
68
|
+
end
|
69
|
+
|
70
|
+
# specify "should start spec with given name" do
|
71
|
+
# reporter.stub!(:spec_finished)
|
72
|
+
# reporter.should_receive(:spec_started).with("NAME NOT GENERATED")
|
73
|
+
# run_spec
|
74
|
+
# end
|
75
|
+
|
76
|
+
specify "should finish spec with given name" do
|
77
|
+
reporter.stub!(:spec_started)
|
78
|
+
reporter.should_receive(:spec_finished).with("should == 5", :anything, :anything)
|
79
|
+
run_spec
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# context "Specification with generated name and error" do
|
84
|
+
# include SpecNameSpecHelper
|
85
|
+
# setup do
|
86
|
+
# @spec = spec_class.new(:__generate_description) { raise }
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
# specify "should start spec with given name" do
|
90
|
+
# reporter.stub!(:spec_finished)
|
91
|
+
# reporter.should_receive(:spec_started).with("NAME NOT GENERATED")
|
92
|
+
# run_spec
|
93
|
+
# end
|
94
|
+
#
|
95
|
+
# specify "should finish spec with given name" do
|
96
|
+
# reporter.stub!(:spec_started)
|
97
|
+
# reporter.should_receive(:spec_finished).with("NAME NOT GENERATED", :anything, :anything)
|
98
|
+
# run_spec
|
99
|
+
# end
|
100
|
+
# end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
context "c" do
|
4
|
+
|
5
|
+
specify "1" do
|
6
|
+
end
|
7
|
+
|
8
|
+
specify "2" do
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
context "SpecParser" do
|
14
|
+
setup do
|
15
|
+
@p = Spec::Runner::SpecParser.new
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "should find spec name at same line" do
|
19
|
+
@p.spec_name_for(File.open(__FILE__), 5).should_eql "c 1"
|
20
|
+
end
|
21
|
+
|
22
|
+
specify "should find spec name at end of spec line" do
|
23
|
+
@p.spec_name_for(File.open(__FILE__), 6).should_eql "c 1"
|
24
|
+
end
|
25
|
+
|
26
|
+
specify "should find context name above all specs" do
|
27
|
+
@p.spec_name_for(File.open(__FILE__), 4).should_eql "c"
|
28
|
+
end
|
29
|
+
|
30
|
+
# specify "should find context name between specs" do
|
31
|
+
# @p.spec_name_for(File.open(__FILE__), 7).should_eql "c"
|
32
|
+
# end
|
33
|
+
|
34
|
+
specify "should find nothing outside a context" do
|
35
|
+
@p.spec_name_for(File.open(__FILE__), 2).should_be_nil
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
context "A Specification class" do
|
6
|
+
setup do
|
7
|
+
@reporter = mock("reporter")
|
8
|
+
callback_container = Callback::CallbackContainer.new
|
9
|
+
@specification = Specification.dup
|
10
|
+
@specification.stub!(:callbacks).and_return {callback_container}
|
11
|
+
end
|
12
|
+
|
13
|
+
specify "should have a before_setup callback for all specs" do
|
14
|
+
@reporter.stub!(:spec_started)
|
15
|
+
@reporter.stub!(:spec_finished)
|
16
|
+
|
17
|
+
before_setup_called = false
|
18
|
+
@specification.before_setup {before_setup_called = true}
|
19
|
+
|
20
|
+
spec = @specification.new("spec") {}
|
21
|
+
spec.run(@reporter, nil, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
22
|
+
|
23
|
+
before_setup_called.should == true
|
24
|
+
end
|
25
|
+
|
26
|
+
specify "should have before_setup callback add errors to spec run" do
|
27
|
+
error=Exception.new
|
28
|
+
@specification.before_setup do
|
29
|
+
raise(error)
|
30
|
+
end
|
31
|
+
spec=@specification.new("spec") {}
|
32
|
+
@reporter.should_receive(:spec_started).with("spec")
|
33
|
+
@reporter.should_receive(:spec_finished).with("spec", error, "setup")
|
34
|
+
spec.run(@reporter, nil, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
35
|
+
end
|
36
|
+
|
37
|
+
specify "should report exceptions in spec" do
|
38
|
+
error = Exception.new
|
39
|
+
spec=@specification.new("spec") do
|
40
|
+
raise(error)
|
41
|
+
end
|
42
|
+
@reporter.should_receive(:spec_started).with("spec")
|
43
|
+
@reporter.should_receive(:spec_finished).with("spec", error, "spec")
|
44
|
+
spec.run(@reporter, nil, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
45
|
+
end
|
46
|
+
|
47
|
+
specify "should have an after_teardown callback for all specs" do
|
48
|
+
@reporter.stub!(:spec_started)
|
49
|
+
@reporter.stub!(:spec_finished)
|
50
|
+
|
51
|
+
after_teardown_called = false
|
52
|
+
@specification.after_teardown {after_teardown_called = true}
|
53
|
+
|
54
|
+
spec = @specification.new("spec") {}
|
55
|
+
spec.run(@reporter, nil, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
56
|
+
|
57
|
+
after_teardown_called.should == true
|
58
|
+
end
|
59
|
+
|
60
|
+
specify "should have after_teardown callback add errors to spec run" do
|
61
|
+
error=Exception.new
|
62
|
+
@specification.after_teardown do
|
63
|
+
raise(error)
|
64
|
+
end
|
65
|
+
spec=@specification.new("spec") {}
|
66
|
+
@reporter.should_receive(:spec_started).with("spec")
|
67
|
+
@reporter.should_receive(:spec_finished).with("spec", error, "teardown")
|
68
|
+
spec.run(@reporter, nil, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Runner
|
5
|
+
context "A Specification instance" do
|
6
|
+
setup do
|
7
|
+
@reporter = mock("reporter")
|
8
|
+
Specification.send(:current=, nil)
|
9
|
+
end
|
10
|
+
|
11
|
+
specify "should add itself to reporter when calling run dry" do
|
12
|
+
spec=Specification.new("spec") {}
|
13
|
+
@reporter.should_receive(:spec_started).with("spec")
|
14
|
+
@reporter.should_receive(:spec_finished).with("spec")
|
15
|
+
spec.run(@reporter, nil, nil, true, nil)
|
16
|
+
end
|
17
|
+
|
18
|
+
specify "should add itself to reporter when fails" do
|
19
|
+
error=RuntimeError.new
|
20
|
+
spec=Specification.new("spec") do
|
21
|
+
raise(error)
|
22
|
+
end
|
23
|
+
@reporter.should_receive(:spec_started).with("spec")
|
24
|
+
@reporter.should_receive(:spec_finished).with("spec", error, "spec")
|
25
|
+
spec.run(@reporter, nil, nil, nil, nil)
|
26
|
+
end
|
27
|
+
|
28
|
+
specify "should add itself to reporter when passes" do
|
29
|
+
spec=Specification.new("spec") {}
|
30
|
+
@reporter.should_receive(:spec_started).with("spec")
|
31
|
+
@reporter.should_receive(:spec_finished).with("spec", nil, nil)
|
32
|
+
spec.run(@reporter, nil, nil, nil, nil)
|
33
|
+
end
|
34
|
+
|
35
|
+
specify "should not run spec if setup fails" do
|
36
|
+
spec_ran = false
|
37
|
+
spec=Specification.new("should pass") do
|
38
|
+
spec_ran = true
|
39
|
+
end
|
40
|
+
@reporter.stub!(:spec_started)
|
41
|
+
@reporter.stub!(:spec_finished)
|
42
|
+
setup = proc {raise "Setup error"}
|
43
|
+
spec.run(@reporter, setup, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
44
|
+
spec_ran.should == false
|
45
|
+
@reporter.__verify
|
46
|
+
end
|
47
|
+
|
48
|
+
specify "should run spec in scope of execution context" do
|
49
|
+
spec=Specification.new("should pass") do
|
50
|
+
self.instance_of?(Specification).should == false
|
51
|
+
self.instance_of?(ExecutionContext).should == true
|
52
|
+
end
|
53
|
+
@reporter.should_receive(:spec_started).with("should pass")
|
54
|
+
@reporter.should_receive(:spec_finished).with("should pass", nil, nil)
|
55
|
+
spec.run(@reporter, nil, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
56
|
+
@reporter.__verify
|
57
|
+
end
|
58
|
+
|
59
|
+
specify "should run teardown even when main block fails" do
|
60
|
+
spec=Specification.new("spec") do
|
61
|
+
raise("in body")
|
62
|
+
end
|
63
|
+
teardown=lambda do
|
64
|
+
raise("in teardown")
|
65
|
+
end
|
66
|
+
@reporter.should_receive(:spec_started).with("spec")
|
67
|
+
@reporter.should_receive(:spec_finished) do |spec, error, location|
|
68
|
+
spec.should_eql("spec")
|
69
|
+
location.should_eql("spec")
|
70
|
+
error.message.should_eql("in body")
|
71
|
+
end
|
72
|
+
spec.run(@reporter, nil, teardown, nil, nil)
|
73
|
+
end
|
74
|
+
|
75
|
+
specify "should supply setup as spec name if failure in setup" do
|
76
|
+
spec=Specification.new("spec") {}
|
77
|
+
setup=lambda { raise("in setup") }
|
78
|
+
@reporter.should_receive(:spec_started).with("spec")
|
79
|
+
@reporter.should_receive(:spec_finished) do |name, error, location|
|
80
|
+
name.should_eql("spec")
|
81
|
+
error.message.should_eql("in setup")
|
82
|
+
location.should_eql("setup")
|
83
|
+
end
|
84
|
+
spec.run(@reporter, setup, nil, nil, nil)
|
85
|
+
end
|
86
|
+
|
87
|
+
specify "should supply teardown as failure location if failure in teardown" do
|
88
|
+
spec = Specification.new("spec") {}
|
89
|
+
teardown = lambda { raise("in teardown") }
|
90
|
+
@reporter.should_receive(:spec_started).with("spec")
|
91
|
+
@reporter.should_receive(:spec_finished) do |name, error, location|
|
92
|
+
name.should_eql("spec")
|
93
|
+
error.message.should_eql("in teardown")
|
94
|
+
location.should_eql("teardown")
|
95
|
+
end
|
96
|
+
spec.run(@reporter, nil, teardown, nil, nil)
|
97
|
+
end
|
98
|
+
|
99
|
+
specify "should verify mocks after teardown" do
|
100
|
+
spec=Specification.new("spec") do
|
101
|
+
mock=Spec::Mocks::Mock.new("a mock")
|
102
|
+
mock.should_receive(:poke)
|
103
|
+
end
|
104
|
+
@reporter.should_receive(:spec_started).with("spec")
|
105
|
+
@reporter.should_receive(:spec_finished) do |spec_name, error|
|
106
|
+
spec_name.should_eql("spec")
|
107
|
+
error.message.should_match(/expected :poke with \(any args\) once, but received it 0 times/)
|
108
|
+
end
|
109
|
+
spec.run(@reporter, nil, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
110
|
+
end
|
111
|
+
|
112
|
+
specify "should accept an options hash following the spec name" do
|
113
|
+
spec = Specification.new("name", :key => 'value')
|
114
|
+
end
|
115
|
+
|
116
|
+
specify "should update the current spec only when running the spec" do
|
117
|
+
@reporter.stub!(:spec_started)
|
118
|
+
@reporter.stub!(:spec_finished)
|
119
|
+
|
120
|
+
spec = Specification.new("spec") do
|
121
|
+
Specification.current.should == spec
|
122
|
+
end
|
123
|
+
|
124
|
+
Specification.current.should_be_nil
|
125
|
+
setup = proc {Specification.current.should == spec}
|
126
|
+
teardown = proc {Specification.current.should == spec}
|
127
|
+
spec.run(@reporter, setup, teardown, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
128
|
+
Specification.current.should_be_nil
|
129
|
+
end
|
130
|
+
|
131
|
+
specify "should notify before_setup callbacks before setup" do
|
132
|
+
spec = Specification.new("spec")
|
133
|
+
@reporter.stub!(:spec_started)
|
134
|
+
@reporter.stub!(:spec_finished)
|
135
|
+
|
136
|
+
mock = mock("setup mock")
|
137
|
+
mock.should_receive(:before_setup).ordered
|
138
|
+
mock.should_receive(:setup).ordered
|
139
|
+
|
140
|
+
spec.before_setup {mock.before_setup}
|
141
|
+
setup = proc {mock.setup}
|
142
|
+
spec.run(@reporter, setup, nil, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
143
|
+
end
|
144
|
+
|
145
|
+
specify "should notify after_teardown callbacks after teardown" do
|
146
|
+
spec = Specification.new("spec")
|
147
|
+
@reporter.stub!(:spec_started)
|
148
|
+
@reporter.stub!(:spec_finished)
|
149
|
+
|
150
|
+
mock = mock("teardown mock")
|
151
|
+
mock.should_receive(:teardown).ordered
|
152
|
+
mock.should_receive(:after_teardown).ordered
|
153
|
+
|
154
|
+
spec.after_teardown {mock.after_teardown}
|
155
|
+
teardown = proc {mock.teardown}
|
156
|
+
spec.run(@reporter, nil, teardown, nil, ::Spec::Runner::ExecutionContext.new(nil))
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|