rspec 0.8.2 → 0.9.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 +125 -9
- data/EXAMPLES.rd +50 -27
- data/README +14 -1
- data/Rakefile +95 -42
- data/UPGRADE +31 -0
- data/bin/spec +0 -1
- data/bin/spec_translator +6 -0
- data/examples/auto_spec_description_example.rb +19 -0
- data/examples/{setup_teardown_example.rb → before_and_after_example.rb} +6 -6
- data/examples/behave_as_example.rb +45 -0
- data/examples/custom_expectation_matchers.rb +13 -12
- data/examples/dynamic_spec.rb +2 -2
- data/examples/file_accessor_spec.rb +2 -2
- data/examples/greeter_spec.rb +3 -3
- data/examples/helper_method_example.rb +2 -2
- data/examples/io_processor_spec.rb +4 -4
- data/examples/legacy_spec.rb +10 -0
- data/examples/mocking_example.rb +5 -5
- data/examples/multi_threaded_behaviour_runner.rb +25 -0
- data/examples/partial_mock_example.rb +4 -4
- data/examples/predicate_example.rb +4 -4
- data/examples/priority.txt +1 -0
- data/examples/shared_behaviours_example.rb +31 -0
- data/examples/stack_spec.rb +52 -69
- data/examples/stubbing_example.rb +10 -10
- data/examples/test_case_adapter_example.rb +26 -0
- data/examples/test_case_spec.rb +6 -6
- data/lib/spec.rb +9 -4
- data/lib/spec/dsl.rb +10 -0
- data/lib/spec/dsl/behaviour.rb +189 -0
- data/lib/spec/dsl/behaviour_callbacks.rb +43 -0
- data/lib/spec/dsl/behaviour_eval.rb +170 -0
- data/lib/spec/dsl/behaviour_factory.rb +32 -0
- data/lib/spec/dsl/composite_proc_builder.rb +28 -0
- data/lib/spec/dsl/configuration.rb +38 -0
- data/lib/spec/dsl/description.rb +34 -0
- data/lib/spec/dsl/example.rb +114 -0
- data/lib/spec/dsl/example_matcher.rb +28 -0
- data/lib/spec/{runner/spec_should_raise_handler.rb → dsl/example_should_raise_handler.rb} +4 -4
- data/lib/spec/expectations.rb +0 -3
- data/lib/spec/expectations/differs/default.rb +0 -1
- data/lib/spec/expectations/extensions.rb +0 -1
- data/lib/spec/expectations/extensions/object.rb +10 -53
- data/lib/spec/expectations/handler.rb +14 -18
- data/lib/spec/extensions.rb +1 -0
- data/lib/spec/extensions/object.rb +6 -0
- data/lib/spec/matchers.rb +19 -21
- data/lib/spec/matchers/be.rb +40 -11
- data/lib/spec/matchers/be_close.rb +2 -2
- data/lib/spec/matchers/operator_matcher.rb +52 -0
- data/lib/spec/matchers/respond_to.rb +21 -11
- data/lib/spec/mocks.rb +5 -28
- data/lib/spec/mocks/argument_constraint_matchers.rb +12 -0
- data/lib/spec/mocks/argument_expectation.rb +7 -4
- data/lib/spec/mocks/methods.rb +11 -16
- data/lib/spec/mocks/mock.rb +6 -3
- data/lib/spec/mocks/{mock_handler.rb → proxy.rb} +4 -7
- data/lib/spec/mocks/space.rb +28 -0
- data/lib/spec/mocks/spec_methods.rb +30 -0
- data/lib/spec/rake/spectask.rb +23 -21
- data/lib/spec/rake/verify_rcov.rb +1 -0
- data/lib/spec/runner.rb +88 -35
- data/lib/spec/runner/backtrace_tweaker.rb +2 -1
- data/lib/spec/runner/behaviour_runner.rb +102 -0
- data/lib/spec/runner/command_line.rb +5 -17
- data/lib/spec/runner/drb_command_line.rb +2 -2
- data/lib/spec/runner/extensions/kernel.rb +22 -9
- data/lib/spec/runner/formatter.rb +4 -0
- data/lib/spec/runner/formatter/base_formatter.rb +63 -0
- data/lib/spec/runner/formatter/base_text_formatter.rb +22 -52
- data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +25 -0
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +22 -0
- data/lib/spec/runner/formatter/html_formatter.rb +74 -29
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +6 -8
- data/lib/spec/runner/formatter/rdoc_formatter.rb +6 -6
- data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
- data/lib/spec/runner/formatter/specdoc_formatter.rb +6 -6
- data/lib/spec/runner/heckle_runner.rb +8 -7
- data/lib/spec/runner/option_parser.rb +136 -55
- data/lib/spec/runner/options.rb +26 -0
- data/lib/spec/runner/reporter.rb +38 -31
- data/lib/spec/runner/spec_parser.rb +22 -13
- data/lib/spec/test_case_adapter.rb +10 -0
- data/lib/spec/translator.rb +103 -86
- data/lib/spec/version.rb +7 -15
- data/plugins/mock_frameworks/flexmock.rb +27 -0
- data/plugins/mock_frameworks/mocha.rb +21 -0
- data/plugins/mock_frameworks/rspec.rb +18 -0
- data/spec/spec/dsl/behaviour_eval_spec.rb +49 -0
- data/spec/spec/dsl/behaviour_factory_spec.rb +30 -0
- data/spec/spec/dsl/behaviour_spec.rb +508 -0
- data/spec/spec/dsl/composite_proc_builder_spec.rb +57 -0
- data/spec/spec/dsl/configuration_spec.rb +43 -0
- data/spec/spec/dsl/description_spec.rb +51 -0
- data/spec/spec/dsl/example_class_spec.rb +24 -0
- data/spec/spec/dsl/example_instance_spec.rb +140 -0
- data/spec/spec/dsl/example_should_raise_spec.rb +137 -0
- data/spec/spec/dsl/predicate_matcher_spec.rb +21 -0
- data/spec/spec/dsl/shared_behaviour_spec.rb +186 -0
- data/spec/spec/expectations/differs/default_spec.rb +12 -12
- data/spec/spec/expectations/extensions/object_spec.rb +10 -10
- data/spec/spec/expectations/fail_with_spec.rb +20 -20
- data/spec/spec/matchers/be_close_spec.rb +37 -31
- data/spec/spec/matchers/be_spec.rb +50 -41
- data/spec/spec/matchers/change_spec.rb +54 -54
- data/spec/spec/matchers/description_generation_spec.rb +43 -31
- data/spec/spec/matchers/eql_spec.rb +24 -37
- data/spec/spec/matchers/equal_spec.rb +24 -37
- data/spec/spec/matchers/exist_spec.rb +48 -0
- data/spec/spec/matchers/handler_spec.rb +36 -23
- data/spec/spec/matchers/has_spec.rb +8 -8
- data/spec/spec/matchers/have_spec.rb +38 -38
- data/spec/spec/matchers/include_spec.rb +6 -6
- data/spec/spec/matchers/match_spec.rb +8 -8
- data/spec/spec/matchers/matcher_methods_spec.rb +24 -31
- data/spec/spec/matchers/raise_error_spec.rb +34 -34
- data/spec/spec/matchers/respond_to_spec.rb +32 -8
- data/spec/spec/matchers/satisfy_spec.rb +6 -6
- data/spec/spec/matchers/should_===_spec.rb +38 -0
- data/spec/spec/matchers/should_==_spec.rb +37 -0
- data/spec/spec/matchers/should_=~_spec.rb +36 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +47 -55
- data/spec/spec/mocks/any_number_of_times_spec.rb +16 -21
- data/spec/spec/mocks/argument_expectation_spec.rb +3 -3
- data/spec/spec/mocks/at_least_spec.rb +30 -30
- data/spec/spec/mocks/at_most_spec.rb +53 -57
- data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
- data/spec/spec/mocks/bug_report_7611_spec.rb +3 -3
- data/spec/spec/mocks/bug_report_7805_spec.rb +3 -3
- data/spec/spec/mocks/bug_report_8165_spec.rb +5 -5
- data/spec/spec/mocks/bug_report_8302_spec.rb +5 -5
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +26 -27
- data/spec/spec/mocks/mock_ordering_spec.rb +19 -15
- data/spec/spec/mocks/mock_space_spec.rb +54 -0
- data/spec/spec/mocks/mock_spec.rb +111 -141
- data/spec/spec/mocks/multiple_return_value_spec.rb +48 -48
- data/spec/spec/mocks/null_object_mock_spec.rb +10 -10
- data/spec/spec/mocks/once_counts_spec.rb +32 -35
- data/spec/spec/mocks/options_hash_spec.rb +12 -10
- data/spec/spec/mocks/partial_mock_spec.rb +15 -15
- data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +24 -22
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +19 -19
- data/spec/spec/mocks/precise_counts_spec.rb +28 -32
- data/spec/spec/mocks/record_messages_spec.rb +10 -10
- data/spec/spec/mocks/stub_spec.rb +45 -45
- data/spec/spec/mocks/twice_counts_spec.rb +21 -21
- data/spec/spec/package/bin_spec_spec.rb +12 -0
- data/spec/spec/runner/behaviour_runner_spec.rb +114 -0
- data/spec/spec/runner/command_line_spec.rb +8 -8
- data/spec/spec/runner/context_matching_spec.rb +14 -15
- data/spec/spec/runner/drb_command_line_spec.rb +12 -12
- data/spec/spec/runner/execution_context_spec.rb +8 -29
- data/spec/spec/runner/extensions/kernel_spec.rb +36 -0
- data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +27 -0
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +28 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +9 -8
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +6 -6
- data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +10 -10
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +22 -27
- data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +6 -5
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +17 -17
- data/spec/spec/runner/formatter/snippet_extractor_spec.rb +11 -0
- data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +6 -6
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +17 -17
- data/spec/spec/runner/heckle_runner_spec.rb +21 -21
- data/spec/spec/runner/heckler_spec.rb +5 -5
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +12 -12
- data/spec/spec/runner/object_ext_spec.rb +3 -3
- data/spec/spec/runner/option_parser_spec.rb +171 -102
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +21 -12
- data/spec/spec/runner/reporter_spec.rb +106 -97
- data/spec/spec/runner/spec_matcher_spec.rb +46 -51
- data/spec/spec/runner/spec_parser_spec.rb +72 -16
- data/spec/spec/spec_classes.rb +12 -3
- data/spec/spec/translator_spec.rb +165 -36
- metadata +66 -76
- data/RELEASE-PLAN +0 -117
- data/examples/auto_spec_name_generation_example.rb +0 -18
- data/lib/spec/callback.rb +0 -11
- data/lib/spec/callback/callback_container.rb +0 -60
- data/lib/spec/callback/extensions/module.rb +0 -24
- data/lib/spec/callback/extensions/object.rb +0 -37
- data/lib/spec/deprecated.rb +0 -3
- data/lib/spec/expectations/extensions/proc.rb +0 -57
- data/lib/spec/expectations/should.rb +0 -5
- data/lib/spec/expectations/should/base.rb +0 -64
- data/lib/spec/expectations/should/change.rb +0 -69
- data/lib/spec/expectations/should/have.rb +0 -128
- data/lib/spec/expectations/should/not.rb +0 -74
- data/lib/spec/expectations/should/should.rb +0 -81
- data/lib/spec/expectations/sugar.rb +0 -47
- data/lib/spec/runner/context.rb +0 -154
- data/lib/spec/runner/context_eval.rb +0 -142
- data/lib/spec/runner/context_runner.rb +0 -55
- data/lib/spec/runner/execution_context.rb +0 -17
- data/lib/spec/runner/spec_matcher.rb +0 -25
- data/lib/spec/runner/specification.rb +0 -114
- data/spec/spec/callback/callback_container_spec.rb +0 -27
- data/spec/spec/callback/module_spec.rb +0 -37
- data/spec/spec/callback/object_spec.rb +0 -90
- data/spec/spec/callback/object_with_class_callback_spec.rb +0 -19
- data/spec/spec/expectations/should/should_==_spec.rb +0 -19
- data/spec/spec/expectations/should/should_=~_spec.rb +0 -13
- data/spec/spec/expectations/should/should_be_a_kind_of_spec.rb +0 -21
- data/spec/spec/expectations/should/should_be_an_instance_of_spec.rb +0 -30
- data/spec/spec/expectations/should/should_be_arbitrary_predicate_spec.rb +0 -81
- data/spec/spec/expectations/should/should_be_close_spec.rb +0 -18
- data/spec/spec/expectations/should/should_be_comparison_operator_spec.rb +0 -44
- data/spec/spec/expectations/should/should_be_false_spec.rb +0 -39
- data/spec/spec/expectations/should/should_be_spec.rb +0 -11
- data/spec/spec/expectations/should/should_be_true_spec.rb +0 -27
- data/spec/spec/expectations/should/should_change_spec.rb +0 -184
- data/spec/spec/expectations/should/should_eql_spec.rb +0 -11
- data/spec/spec/expectations/should/should_equal_spec.rb +0 -11
- data/spec/spec/expectations/should/should_have_at_least_spec.rb +0 -53
- data/spec/spec/expectations/should/should_have_at_most_spec.rb +0 -45
- data/spec/spec/expectations/should/should_have_key_spec.rb +0 -21
- data/spec/spec/expectations/should/should_have_spec.rb +0 -64
- data/spec/spec/expectations/should/should_include_spec.rb +0 -59
- data/spec/spec/expectations/should/should_match_spec.rb +0 -25
- data/spec/spec/expectations/should/should_not_==_spec.rb +0 -15
- data/spec/spec/expectations/should/should_not_be_a_kind_of_spec.rb +0 -21
- data/spec/spec/expectations/should/should_not_be_an_instance_of_spec.rb +0 -11
- data/spec/spec/expectations/should/should_not_be_arbitrary_predicate_spec.rb +0 -68
- data/spec/spec/expectations/should/should_not_be_spec.rb +0 -11
- data/spec/spec/expectations/should/should_not_change_spec.rb +0 -24
- data/spec/spec/expectations/should/should_not_eql_spec.rb +0 -11
- data/spec/spec/expectations/should/should_not_equal_spec.rb +0 -11
- data/spec/spec/expectations/should/should_not_have_key_spec.rb +0 -15
- data/spec/spec/expectations/should/should_not_include_spec.rb +0 -58
- data/spec/spec/expectations/should/should_not_match_spec.rb +0 -11
- data/spec/spec/expectations/should/should_not_raise_spec.rb +0 -75
- data/spec/spec/expectations/should/should_not_respond_to_spec.rb +0 -15
- data/spec/spec/expectations/should/should_not_throw_spec.rb +0 -35
- data/spec/spec/expectations/should/should_raise_spec.rb +0 -66
- data/spec/spec/expectations/should/should_respond_to_spec.rb +0 -15
- data/spec/spec/expectations/should/should_satisfy_spec.rb +0 -35
- data/spec/spec/expectations/should/should_throw_spec.rb +0 -27
- data/spec/spec/runner/context_runner_spec.rb +0 -100
- data/spec/spec/runner/context_spec.rb +0 -405
- data/spec/spec/runner/kernel_ext_spec.rb +0 -16
- data/spec/spec/runner/spec_name_generation_spec.rb +0 -102
- data/spec/spec/runner/specification_class_spec.rb +0 -72
- data/spec/spec/runner/specification_instance_spec.rb +0 -160
- data/spec/spec/runner/specification_should_raise_spec.rb +0 -136
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spec
|
|
4
|
+
module DSL
|
|
5
|
+
describe CompositeProcBuilder do
|
|
6
|
+
before(:each) do
|
|
7
|
+
@klass = Class.new do
|
|
8
|
+
attr_reader :an_attribute
|
|
9
|
+
|
|
10
|
+
def an_attribute_setter
|
|
11
|
+
@an_attribute = :the_value
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
@parent = @klass.new
|
|
16
|
+
@builder = CompositeProcBuilder.new {}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "calls all of its child procs" do
|
|
20
|
+
@builder << proc {:proc1}
|
|
21
|
+
@builder << proc {:proc2}
|
|
22
|
+
@builder.proc.call.should == [:proc1, :proc2]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "calls block on exceptions" do
|
|
26
|
+
exception1 = Exception.new("Proc1 Error")
|
|
27
|
+
exception2 = Exception.new("Proc2 Error")
|
|
28
|
+
@builder << proc {raise exception1}
|
|
29
|
+
@builder << proc {raise exception2}
|
|
30
|
+
@builder << proc {:successful}
|
|
31
|
+
|
|
32
|
+
errors = []
|
|
33
|
+
@builder.proc {|e| errors << e }.call.should == [exception1, exception2, :successful]
|
|
34
|
+
|
|
35
|
+
errors.should == [exception1, exception2]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "evals procs in the caller's instance" do
|
|
39
|
+
the_proc = proc do
|
|
40
|
+
@an_attribute = :the_value
|
|
41
|
+
end
|
|
42
|
+
the_proc.class.should == Proc
|
|
43
|
+
@builder << the_proc
|
|
44
|
+
@parent.instance_eval &@builder.proc
|
|
45
|
+
@parent.an_attribute.should == :the_value
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "binds unbound methods to the parent" do
|
|
49
|
+
unbound_method = @klass.instance_method(:an_attribute_setter)
|
|
50
|
+
unbound_method.class.should == UnboundMethod
|
|
51
|
+
@builder << unbound_method
|
|
52
|
+
@parent.instance_eval &@builder.proc
|
|
53
|
+
@parent.an_attribute.should == :the_value
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
|
+
|
|
3
|
+
module Spec
|
|
4
|
+
module DSL
|
|
5
|
+
describe Configuration do
|
|
6
|
+
before(:each) do
|
|
7
|
+
@config = Configuration.new
|
|
8
|
+
@behaviour = mock("behaviour")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should default mock framework to rspec" do
|
|
12
|
+
@config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should let you set rspec explicitly" do
|
|
16
|
+
@config.mock_with(:rspec)
|
|
17
|
+
@config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should let you set mocha" do
|
|
21
|
+
@config.mock_with(:mocha)
|
|
22
|
+
@config.mock_framework.should =~ /\/plugins\/mock_frameworks\/mocha$/
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should let you set flexmock" do
|
|
26
|
+
@config.mock_with(:flexmock)
|
|
27
|
+
@config.mock_framework.should =~ /\/plugins\/mock_frameworks\/flexmock$/
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should let you set an arbitrary adapter module" do
|
|
31
|
+
adapter = Module.new
|
|
32
|
+
@config.mock_with(adapter)
|
|
33
|
+
@config.mock_framework.should == adapter
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should let you define modules to be included" do
|
|
37
|
+
mod = Module.new
|
|
38
|
+
@config.include mod
|
|
39
|
+
@config.included_modules.should include(mod)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spec
|
|
4
|
+
module DSL
|
|
5
|
+
describe Description, " constructed with a single String" do before(:each) {@description = Description.new("abc")}
|
|
6
|
+
it "should provide that string as its name" do
|
|
7
|
+
@description.description.should == "abc"
|
|
8
|
+
end
|
|
9
|
+
it "should provide nil as its type" do
|
|
10
|
+
@description.described_type.should be_nil
|
|
11
|
+
end
|
|
12
|
+
it "should respond to []" do
|
|
13
|
+
@description[:key].should be_nil
|
|
14
|
+
end
|
|
15
|
+
it "should respond to []=" do
|
|
16
|
+
@description[:key] = :value
|
|
17
|
+
@description[:key].should == :value
|
|
18
|
+
end
|
|
19
|
+
it "should return for == when value matches description" do
|
|
20
|
+
@description.should == "abc"
|
|
21
|
+
end
|
|
22
|
+
it "should return for == when value is other description that matches description" do
|
|
23
|
+
@description.should == Description.new("abc")
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe Description, " constructed with a Type" do before(:each) {@description = Description.new(Behaviour)}
|
|
28
|
+
it "should provide a String representation of that type (fully qualified) as its name" do
|
|
29
|
+
@description.description.should == "Spec::DSL::Behaviour"
|
|
30
|
+
end
|
|
31
|
+
it "should provide that type (fully qualified) as its type" do
|
|
32
|
+
@description.described_type.should == Spec::DSL::Behaviour
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe Description, " constructed with a Type and a String" do before(:each) {@description = Description.new(Behaviour, " behaving")}
|
|
37
|
+
it "should include the type and second String in its name" do
|
|
38
|
+
@description.description.should == "Spec::DSL::Behaviour behaving"
|
|
39
|
+
end
|
|
40
|
+
it "should provide that type (fully qualified) as its type" do
|
|
41
|
+
@description.described_type.should == Spec::DSL::Behaviour
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe Description, " constructed with options" do before(:each) {@description = Description.new(Behaviour, :a => "b")}
|
|
46
|
+
it "should provide its options" do
|
|
47
|
+
@description[:a].should == "b"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
|
+
|
|
3
|
+
module Spec
|
|
4
|
+
module DSL
|
|
5
|
+
describe Example, " class" do
|
|
6
|
+
|
|
7
|
+
def run(example)
|
|
8
|
+
example.run(@reporter, nil, nil, nil, Object.new)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
before do
|
|
12
|
+
@reporter = stub("reporter", :example_started => nil, :example_finished => nil)
|
|
13
|
+
@example_class = Example.dup
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should report errors in example" do
|
|
17
|
+
error = Exception.new
|
|
18
|
+
@reporter.should_receive(:example_finished).with("example", error, "example")
|
|
19
|
+
|
|
20
|
+
run(@example_class.new("example") {raise(error)})
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
|
+
|
|
3
|
+
module Spec
|
|
4
|
+
module DSL
|
|
5
|
+
describe Example, " instance" do
|
|
6
|
+
# TODO - this should be
|
|
7
|
+
# predicate_matchers :is_a
|
|
8
|
+
def is_a(error)
|
|
9
|
+
be_is_a(error)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
before do
|
|
13
|
+
@reporter = stub("reporter", :example_started => nil, :example_finished => nil)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should send reporter example_started" do
|
|
17
|
+
example=Example.new("example") {}
|
|
18
|
+
@reporter.should_receive(:example_started).with("example")
|
|
19
|
+
example.run(@reporter, nil, nil, false, nil)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should report its name for dry run" do
|
|
23
|
+
example=Example.new("example") {}
|
|
24
|
+
@reporter.should_receive(:example_finished).with("example")
|
|
25
|
+
example.run(@reporter, nil, nil, true, nil) #4th arg indicates dry run
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should report success" do
|
|
29
|
+
example=Example.new("example") {}
|
|
30
|
+
@reporter.should_receive(:example_finished).with("example", nil, nil)
|
|
31
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should report failure due to failure" do
|
|
35
|
+
example=Example.new("example") do
|
|
36
|
+
(2+2).should == 5
|
|
37
|
+
end
|
|
38
|
+
@reporter.should_receive(:example_finished).with("example", is_a(Spec::Expectations::ExpectationNotMetError), "example")
|
|
39
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should report failure due to error" do
|
|
43
|
+
error=RuntimeError.new
|
|
44
|
+
example=Example.new("example") do
|
|
45
|
+
raise(error)
|
|
46
|
+
end
|
|
47
|
+
@reporter.should_receive(:example_finished).with("example", error, "example")
|
|
48
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "should run example in scope of supplied object" do
|
|
52
|
+
scope_class = Class.new
|
|
53
|
+
example=Example.new("should pass") do
|
|
54
|
+
self.instance_of?(Example).should == false
|
|
55
|
+
self.instance_of?(scope_class).should == true
|
|
56
|
+
end
|
|
57
|
+
@reporter.should_receive(:example_finished).with("should pass", nil, nil)
|
|
58
|
+
example.run(@reporter, nil, nil, nil, scope_class.new)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should not run example block if before_each fails" do
|
|
62
|
+
example_ran = false
|
|
63
|
+
example=Example.new("should pass") {example_ran = true}
|
|
64
|
+
before_each = lambda {raise "Setup error"}
|
|
65
|
+
example.run(@reporter, before_each, nil, nil, Object.new)
|
|
66
|
+
example_ran.should == false
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should run after_each block if before_each fails" do
|
|
70
|
+
after_each_ran = false
|
|
71
|
+
example=Example.new("should pass") {}
|
|
72
|
+
before_each = lambda {raise "Setup error"}
|
|
73
|
+
after_each = lambda {after_each_ran = true}
|
|
74
|
+
example.run(@reporter, before_each, after_each, nil, Object.new)
|
|
75
|
+
after_each_ran.should == true
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should run after_each block when example fails" do
|
|
79
|
+
example=Example.new("example") do
|
|
80
|
+
raise("in body")
|
|
81
|
+
end
|
|
82
|
+
after_each=lambda do
|
|
83
|
+
raise("in after_each")
|
|
84
|
+
end
|
|
85
|
+
@reporter.should_receive(:example_finished) do |example, error, location|
|
|
86
|
+
example.should eql("example")
|
|
87
|
+
location.should eql("example")
|
|
88
|
+
error.message.should eql("in body")
|
|
89
|
+
end
|
|
90
|
+
example.run(@reporter, nil, after_each, nil, nil)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should report failure location when in before_each" do
|
|
94
|
+
example=Example.new("example") {}
|
|
95
|
+
before_each=lambda { raise("in before_each") }
|
|
96
|
+
@reporter.should_receive(:example_finished) do |name, error, location|
|
|
97
|
+
name.should eql("example")
|
|
98
|
+
error.message.should eql("in before_each")
|
|
99
|
+
location.should eql("before(:each)")
|
|
100
|
+
end
|
|
101
|
+
example.run(@reporter, before_each, nil, nil, nil)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "should report failure location when in after_each" do
|
|
105
|
+
example = Example.new("example") {}
|
|
106
|
+
after_each = lambda { raise("in after_each") }
|
|
107
|
+
@reporter.should_receive(:example_finished) do |name, error, location|
|
|
108
|
+
name.should eql("example")
|
|
109
|
+
error.message.should eql("in after_each")
|
|
110
|
+
location.should eql("after(:each)")
|
|
111
|
+
end
|
|
112
|
+
example.run(@reporter, nil, after_each, nil, nil)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it "should accept an options hash following the example name" do
|
|
116
|
+
example = Example.new("name", :key => 'value')
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "should report NAME NOT GENERATED when told to use generated description but none is generated" do
|
|
120
|
+
example = Example.new(:__generate_description)
|
|
121
|
+
@reporter.should_receive(:example_finished).with("NAME NOT GENERATED", :anything, :anything)
|
|
122
|
+
example.run(@reporter, nil, nil, nil, Object.new)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "should report generated description when told to and it is available" do
|
|
126
|
+
example = Example.new(:__generate_description) {
|
|
127
|
+
5.should == 5
|
|
128
|
+
}
|
|
129
|
+
@reporter.should_receive(:example_finished).with("should == 5", :anything, :anything)
|
|
130
|
+
example.run(@reporter, nil, nil, nil, Object.new)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it "should unregister description_generated callback (lest a memory leak should build up)" do
|
|
134
|
+
example = Example.new("something")
|
|
135
|
+
Spec::Matchers.should_receive(:unregister_description_generated).with(is_a(Proc))
|
|
136
|
+
example.run(@reporter, nil, nil, nil, Object.new)
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
|
2
|
+
|
|
3
|
+
module Spec
|
|
4
|
+
module DSL
|
|
5
|
+
describe Example, " declared with {:should_raise => ...}" do
|
|
6
|
+
before(:each) do
|
|
7
|
+
@reporter = mock("reporter")
|
|
8
|
+
@reporter.stub!(:example_started)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def verify_error(error, message=nil)
|
|
12
|
+
error.should be_an_instance_of(Spec::Expectations::ExpectationNotMetError)
|
|
13
|
+
unless message.nil?
|
|
14
|
+
return error.message.should =~ message if Regexp === message
|
|
15
|
+
return error.message.should == message
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "true} should pass when there is an ExpectationNotMetError" do
|
|
20
|
+
example = Spec::DSL:: Example.new("example", :should_raise => true) do
|
|
21
|
+
raise Spec::Expectations::ExpectationNotMetError
|
|
22
|
+
end
|
|
23
|
+
@reporter.should_receive(:example_finished) do |description, error|
|
|
24
|
+
error.should be_nil
|
|
25
|
+
end
|
|
26
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "true} should fail if nothing is raised" do
|
|
30
|
+
example = Spec::DSL:: Example.new("example", :should_raise => true) {}
|
|
31
|
+
@reporter.should_receive(:example_finished) do |example_name, error|
|
|
32
|
+
verify_error(error, /example block expected Exception but nothing was raised/)
|
|
33
|
+
end
|
|
34
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "NameError} should pass when there is a NameError" do
|
|
38
|
+
example = Spec::DSL:: Example.new("example", :should_raise => NameError) do
|
|
39
|
+
raise NameError
|
|
40
|
+
end
|
|
41
|
+
@reporter.should_receive(:example_finished) do |example_name, error|
|
|
42
|
+
error.should be_nil
|
|
43
|
+
end
|
|
44
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "NameError} should fail when there is no error" do
|
|
48
|
+
example = Spec::DSL:: Example.new("example", :should_raise => NameError) do
|
|
49
|
+
#do nothing
|
|
50
|
+
end
|
|
51
|
+
@reporter.should_receive(:example_finished) do |example_name, error|
|
|
52
|
+
verify_error(error,/example block expected NameError but nothing was raised/)
|
|
53
|
+
end
|
|
54
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "NameError} should fail when there is the wrong error" do
|
|
58
|
+
example = Spec::DSL:: Example.new("example", :should_raise => NameError) do
|
|
59
|
+
raise RuntimeError
|
|
60
|
+
end
|
|
61
|
+
@reporter.should_receive(:example_finished) do |example_name, error|
|
|
62
|
+
verify_error(error, /example block expected NameError but raised.+RuntimeError/)
|
|
63
|
+
end
|
|
64
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "[NameError]} should pass when there is a NameError" do
|
|
68
|
+
example = Spec::DSL:: Example.new("spec", :should_raise => [NameError]) do
|
|
69
|
+
raise NameError
|
|
70
|
+
end
|
|
71
|
+
@reporter.should_receive(:example_finished) do |description, error|
|
|
72
|
+
error.should be_nil
|
|
73
|
+
end
|
|
74
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "[NameError]} should fail when there is no error" do
|
|
78
|
+
example = Spec::DSL:: Example.new("spec", :should_raise => [NameError]) do
|
|
79
|
+
end
|
|
80
|
+
@reporter.should_receive(:example_finished) do |description, error|
|
|
81
|
+
verify_error(error, /example block expected NameError but nothing was raised/)
|
|
82
|
+
end
|
|
83
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "[NameError]} should fail when there is the wrong error" do
|
|
87
|
+
example = Spec::DSL:: Example.new("spec", :should_raise => [NameError]) do
|
|
88
|
+
raise RuntimeError
|
|
89
|
+
end
|
|
90
|
+
@reporter.should_receive(:example_finished) do |description, error|
|
|
91
|
+
verify_error(error, /example block expected NameError but raised.+RuntimeError/)
|
|
92
|
+
end
|
|
93
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "[NameError, 'message'} should pass when there is a NameError with the right message" do
|
|
97
|
+
example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, 'expected']) do
|
|
98
|
+
raise NameError, 'expected'
|
|
99
|
+
end
|
|
100
|
+
@reporter.should_receive(:example_finished) do |description, error|
|
|
101
|
+
error.should be_nil
|
|
102
|
+
end
|
|
103
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "[NameError, 'message'} should pass when there is a NameError with a message matching a regex" do
|
|
107
|
+
example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, /xpec/]) do
|
|
108
|
+
raise NameError, 'expected'
|
|
109
|
+
end
|
|
110
|
+
@reporter.should_receive(:example_finished) do |description, error|
|
|
111
|
+
error.should be_nil
|
|
112
|
+
end
|
|
113
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "[NameError, 'message'} should fail when there is a NameError with the wrong message" do
|
|
117
|
+
example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, 'expected']) do
|
|
118
|
+
raise NameError, 'wrong message'
|
|
119
|
+
end
|
|
120
|
+
@reporter.should_receive(:example_finished) do |description, error|
|
|
121
|
+
verify_error(error, /example block expected #<NameError: expected> but raised #<NameError: wrong message>/)
|
|
122
|
+
end
|
|
123
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "[NameError, 'message'} should fail when there is a NameError with a message not matching regexp" do
|
|
127
|
+
example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, /exp/]) do
|
|
128
|
+
raise NameError, 'wrong message'
|
|
129
|
+
end
|
|
130
|
+
@reporter.should_receive(:example_finished) do |description, error|
|
|
131
|
+
verify_error(error, /example block expected #<NameError: \(\?-mix:exp\)> but raised #<NameError: wrong message>/)
|
|
132
|
+
end
|
|
133
|
+
example.run(@reporter, nil, nil, nil, nil)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|