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
data/RELEASE-PLAN
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
Beginning with 0.8.0, RSpec is moving towards a new syntax using Expression Matchers
|
|
2
|
-
instead of adding expectations directly to Object. We'll still be adding a few methods
|
|
3
|
-
to Object, but it will be much less invasive, and will eliminate conflicts with
|
|
4
|
-
other tools and frameworks that utilize method_missing to perform magic.
|
|
5
|
-
|
|
6
|
-
For more information on Expression Matchers, see the rdoc for Spec::Matchers
|
|
7
|
-
|
|
8
|
-
Our plan is as follows:
|
|
9
|
-
|
|
10
|
-
* release 0.8.0 with:
|
|
11
|
-
- full support for Expression Matchers
|
|
12
|
-
- a translation tool that will convert the majority of your specs from the old syntax to the new syntax
|
|
13
|
-
- deprecation warnings for all of the old methods that will be removed
|
|
14
|
-
* release 0.9.0 with all of the old methods removed
|
|
15
|
-
|
|
16
|
-
Everything that is listed below is already supported and usable right now.
|
|
17
|
-
|
|
18
|
-
== General: should_xyz
|
|
19
|
-
|
|
20
|
-
#before
|
|
21
|
-
actual.should_xyz expected
|
|
22
|
-
actual.should_not_xyz expected
|
|
23
|
-
|
|
24
|
-
#after
|
|
25
|
-
actual.should xyz(expected)
|
|
26
|
-
actual.should_not xyz(expected)
|
|
27
|
-
|
|
28
|
-
This change applies to all of these as well:
|
|
29
|
-
|
|
30
|
-
should_equal
|
|
31
|
-
should_eql
|
|
32
|
-
should_be_close
|
|
33
|
-
should_include
|
|
34
|
-
should_match
|
|
35
|
-
should_satisfy
|
|
36
|
-
|
|
37
|
-
== should_be
|
|
38
|
-
|
|
39
|
-
#before
|
|
40
|
-
result.should_be true
|
|
41
|
-
result.should_be false
|
|
42
|
-
result.should_be nil
|
|
43
|
-
result.should_not_be nil
|
|
44
|
-
|
|
45
|
-
#after
|
|
46
|
-
result.should be(true)
|
|
47
|
-
result.should be(false)
|
|
48
|
-
result.should be(nil)
|
|
49
|
-
result.should_not be(true)
|
|
50
|
-
|
|
51
|
-
== should_be with arbitrary predicates
|
|
52
|
-
|
|
53
|
-
#before
|
|
54
|
-
true.should_be_arbitrary_predicate
|
|
55
|
-
true.should_be_a_arbitrary_predicate
|
|
56
|
-
true.should_be_an_arbitrary_predicate
|
|
57
|
-
|
|
58
|
-
#after
|
|
59
|
-
true.should be_arbitrary_predicate
|
|
60
|
-
true.should be_a_arbitrary_predicate
|
|
61
|
-
true.should be_an_arbitrary_predicate
|
|
62
|
-
|
|
63
|
-
== should_be with comparison operators
|
|
64
|
-
|
|
65
|
-
#before
|
|
66
|
-
5.should_be > 3
|
|
67
|
-
4.should_be >= 4
|
|
68
|
-
4.should_be <= 4
|
|
69
|
-
4.should_be < 4
|
|
70
|
-
|
|
71
|
-
#before
|
|
72
|
-
5.should be > 3
|
|
73
|
-
4.should be >= 4
|
|
74
|
-
4.should be <= 4
|
|
75
|
-
4.should be < 4
|
|
76
|
-
|
|
77
|
-
== should ==
|
|
78
|
-
|
|
79
|
-
#before
|
|
80
|
-
actual.should == expected
|
|
81
|
-
actual.should_not == expected
|
|
82
|
-
|
|
83
|
-
#after - exactly the same
|
|
84
|
-
actual.should == expected
|
|
85
|
-
actual.should_not == expected
|
|
86
|
-
|
|
87
|
-
== should =~
|
|
88
|
-
|
|
89
|
-
#before
|
|
90
|
-
actual.should =~ regexp
|
|
91
|
-
actual.should_not =~ regexp
|
|
92
|
-
|
|
93
|
-
#after - exactly the same
|
|
94
|
-
actual.should =~ regexp
|
|
95
|
-
actual.should_not =~ regexp
|
|
96
|
-
|
|
97
|
-
== should_have
|
|
98
|
-
|
|
99
|
-
#before
|
|
100
|
-
team.should_have(3).players
|
|
101
|
-
hash.should_have_key(:a)
|
|
102
|
-
|
|
103
|
-
#after
|
|
104
|
-
team.should have(3).players
|
|
105
|
-
hash.should have_key(:a)
|
|
106
|
-
|
|
107
|
-
== should_change
|
|
108
|
-
|
|
109
|
-
#before
|
|
110
|
-
proc.should_change(:target, message)
|
|
111
|
-
proc.should_change(:target, message).by(1)
|
|
112
|
-
proc.should_change(:target, message).from("a").to("b")
|
|
113
|
-
|
|
114
|
-
proc.should change(:target, message)
|
|
115
|
-
proc.should change(:target, message).by(1)
|
|
116
|
-
proc.should change(:target, message).from("a").to("b")
|
|
117
|
-
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
|
2
|
-
|
|
3
|
-
# Run spec w/ -fs to see the output of this file
|
|
4
|
-
|
|
5
|
-
context "specs with no names" do
|
|
6
|
-
|
|
7
|
-
# spec name is auto-generated as "should equal(5)"
|
|
8
|
-
specify do
|
|
9
|
-
3.should equal(3)
|
|
10
|
-
5.should equal(5)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
specify { 3.should be < 5 }
|
|
14
|
-
|
|
15
|
-
specify { ["a"].should include("a") }
|
|
16
|
-
|
|
17
|
-
specify { [1,2,3].should respond_to(:size) }
|
|
18
|
-
end
|
data/lib/spec/callback.rb
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
require 'spec/callback/callback_container'
|
|
2
|
-
require 'spec/callback/extensions/module'
|
|
3
|
-
require 'spec/callback/extensions/object'
|
|
4
|
-
|
|
5
|
-
# Callback is a fork of Brian Takita's "callback library" (see http://callback.rubyforge.org),
|
|
6
|
-
# which Brian graciously contributed to RSpec in order to avoid the dependency.
|
|
7
|
-
#
|
|
8
|
-
# RSpec uses Callback internally to create hooks to Spec::Runner events. If you're interested
|
|
9
|
-
# in a simple, powerful API for generating callback events, check out http://callback.rubyforge.org.
|
|
10
|
-
module Callback
|
|
11
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
module Callback
|
|
2
|
-
class CallbackContainer
|
|
3
|
-
def initialize
|
|
4
|
-
@callback_registry = Hash.new do |hash, key|
|
|
5
|
-
hash[key] = Array.new
|
|
6
|
-
end
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
# Defines the callback with the key in this container.
|
|
10
|
-
def define(key, callback_proc=nil, &callback_block)
|
|
11
|
-
callback = extract_callback(callback_block, callback_proc) do
|
|
12
|
-
raise "You must define the callback that accepts the call method."
|
|
13
|
-
end
|
|
14
|
-
@callback_registry[key] << callback
|
|
15
|
-
callback
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Undefines the callback with the key in this container.
|
|
19
|
-
def undefine(key, callback_proc)
|
|
20
|
-
callback = extract_callback(callback_proc) do
|
|
21
|
-
raise "You may only undefine callbacks that use the call method."
|
|
22
|
-
end
|
|
23
|
-
@callback_registry[key].delete callback
|
|
24
|
-
callback
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Notifies the callbacks for the key. Arguments may be passed.
|
|
28
|
-
# An error handler may be passed in as a block. If there is an error, the block is called with
|
|
29
|
-
# error object as an argument.
|
|
30
|
-
# An array of the return values of the callbacks is returned.
|
|
31
|
-
def notify(key, *args, &error_handler)
|
|
32
|
-
@callback_registry[key].collect do |callback|
|
|
33
|
-
begin
|
|
34
|
-
callback.call(*args)
|
|
35
|
-
rescue Exception => e
|
|
36
|
-
yield(e) if error_handler
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Clears all of the callbacks in this container.
|
|
42
|
-
def clear
|
|
43
|
-
@callback_registry.clear
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
protected
|
|
47
|
-
def extract_callback(first_choice_callback, second_choice_callback = nil)
|
|
48
|
-
callback = nil
|
|
49
|
-
if first_choice_callback
|
|
50
|
-
callback = first_choice_callback
|
|
51
|
-
elsif second_choice_callback
|
|
52
|
-
callback = second_choice_callback
|
|
53
|
-
end
|
|
54
|
-
unless callback.respond_to? :call
|
|
55
|
-
yield
|
|
56
|
-
end
|
|
57
|
-
return callback
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
module Callback
|
|
2
|
-
module ModuleMethods
|
|
3
|
-
# For each event_name submitted, defines a callback event with this name.
|
|
4
|
-
# Client code can then register as a callback listener using object.event_name.
|
|
5
|
-
def callback_events(*event_names)
|
|
6
|
-
event_names.each do |event_name|
|
|
7
|
-
define_callback_event(event_name)
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
private
|
|
12
|
-
def define_callback_event(event_name)
|
|
13
|
-
module_eval <<-EOS
|
|
14
|
-
def #{event_name}(&block)
|
|
15
|
-
register_callback(:#{event_name}, &block)
|
|
16
|
-
end
|
|
17
|
-
EOS
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
class Module
|
|
23
|
-
include Callback::ModuleMethods
|
|
24
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
module Callback
|
|
2
|
-
module InstanceMethods
|
|
3
|
-
# Registers a callback for the event on the object. The callback can either be a block or a proc.
|
|
4
|
-
# When the callbacks are notified, the return value of the proc is passed to the caller.
|
|
5
|
-
def register_callback(event, callback_proc=nil, &callback_block)
|
|
6
|
-
callbacks.define(event, callback_proc, &callback_block)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
# Removes the callback from the event. The callback proc must be the same
|
|
10
|
-
# object as the one that was passed to register_callback.
|
|
11
|
-
def unregister_callback(event, callback_proc)
|
|
12
|
-
callbacks.undefine(event, callback_proc)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
protected
|
|
16
|
-
# Notifies the callbacks registered with the event on the object. Arguments can be passed to the callbacks.
|
|
17
|
-
# An error handler may be passed in as a block. If there is an error, the block is called with
|
|
18
|
-
# error object as an argument.
|
|
19
|
-
# An array of the return values of the callbacks is returned.
|
|
20
|
-
def notify_callbacks(event, *args, &error_handler)
|
|
21
|
-
callbacks.notify(event, *args, &error_handler)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def notify_class_callbacks(event, *args, &error_handler)
|
|
25
|
-
self.class.send(:notify_callbacks, event, *args, &error_handler)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# The CallbackContainer for this object.
|
|
29
|
-
def callbacks
|
|
30
|
-
@callbacks ||= CallbackContainer.new
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
class Object
|
|
36
|
-
include Callback::InstanceMethods
|
|
37
|
-
end
|
data/lib/spec/deprecated.rb
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
module Spec
|
|
2
|
-
module Expectations
|
|
3
|
-
module ProcExpectations
|
|
4
|
-
# Given a receiver and a message (Symbol), specifies that the result
|
|
5
|
-
# of sending that message that receiver should change after
|
|
6
|
-
# executing the proc.
|
|
7
|
-
#
|
|
8
|
-
# lambda { @team.add player }.should_change(@team.players, :size)
|
|
9
|
-
# lambda { @team.add player }.should_change(@team.players, :size).by(1)
|
|
10
|
-
# lambda { @team.add player }.should_change(@team.players, :size).to(23)
|
|
11
|
-
# lambda { @team.add player }.should_change(@team.players, :size).from(22).to(23)
|
|
12
|
-
#
|
|
13
|
-
# You can use a block instead of a message and receiver.
|
|
14
|
-
#
|
|
15
|
-
# lambda { @team.add player }.should_change{@team.players.size}
|
|
16
|
-
# lambda { @team.add player }.should_change{@team.players.size}.by(1)
|
|
17
|
-
# lambda { @team.add player }.should_change{@team.players.size}.to(23)
|
|
18
|
-
# lambda { @team.add player }.should_change{@team.players.size}.from(22).to(23)
|
|
19
|
-
def should_change(receiver=nil, message=nil, &block)
|
|
20
|
-
should.change(receiver, message, &block)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Given a receiver and a message (Symbol), specifies that the result
|
|
24
|
-
# of sending that message that receiver should NOT change after
|
|
25
|
-
# executing the proc.
|
|
26
|
-
#
|
|
27
|
-
# lambda { @team.add player }.should_not_change(@team.players, :size)
|
|
28
|
-
#
|
|
29
|
-
# You can use a block instead of a message and receiver.
|
|
30
|
-
#
|
|
31
|
-
# lambda { @team.add player }.should_not_change{@team.players.size}
|
|
32
|
-
def should_not_change(receiver, message)
|
|
33
|
-
should.not.change(receiver, message)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def should_raise(exception=Exception, message=nil)
|
|
37
|
-
should.raise(exception, message)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def should_not_raise(exception=Exception, message=nil)
|
|
41
|
-
should.not.raise(exception, message)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def should_throw(symbol)
|
|
45
|
-
should.throw(symbol)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def should_not_throw(symbol=:___this_is_a_symbol_that_will_likely_never_occur___)
|
|
49
|
-
should.not.throw(symbol)
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
class Proc
|
|
56
|
-
include Spec::Expectations::ProcExpectations
|
|
57
|
-
end
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
module Spec
|
|
2
|
-
module Expectations
|
|
3
|
-
module Should
|
|
4
|
-
class Base
|
|
5
|
-
|
|
6
|
-
#== and =~ will stay after the new syntax
|
|
7
|
-
def ==(expected)
|
|
8
|
-
__delegate_method_missing_to_target "==", "==", expected
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def =~(expected)
|
|
12
|
-
__delegate_method_missing_to_target "=~", "=~", expected
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
#<, <=, >=, > are all implemented in Spec::Matchers::Be
|
|
16
|
-
# and will be removed with 0.9
|
|
17
|
-
deprecated do
|
|
18
|
-
def <(expected)
|
|
19
|
-
__delegate_method_missing_to_target "<", "<", expected
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def <=(expected)
|
|
23
|
-
__delegate_method_missing_to_target "<=", "<=", expected
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def >=(expected)
|
|
27
|
-
__delegate_method_missing_to_target ">=", ">=", expected
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def >(expected)
|
|
31
|
-
__delegate_method_missing_to_target ">", ">", expected
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def default_message(expectation, expected=nil)
|
|
36
|
-
return "expected #{expected.inspect}, got #{@target.inspect} (using #{expectation})" if expectation == '=='
|
|
37
|
-
"expected #{expectation} #{expected.inspect}, got #{@target.inspect}" unless expectation == '=='
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def fail_with_message(message, expected=nil, target=nil)
|
|
41
|
-
Spec::Expectations.fail_with(message, expected, target)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def find_supported_sym(original_sym)
|
|
45
|
-
["#{original_sym}?", "#{original_sym}s?"].each do |alternate_sym|
|
|
46
|
-
return alternate_sym.to_s if @target.respond_to?(alternate_sym.to_s)
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
deprecated do
|
|
51
|
-
def method_missing(original_sym, *args, &block)
|
|
52
|
-
if original_sym.to_s =~ /^not_/
|
|
53
|
-
return Not.new(@target).__send__(sym, *args, &block)
|
|
54
|
-
end
|
|
55
|
-
if original_sym.to_s =~ /^have_/
|
|
56
|
-
return have.__send__(original_sym.to_s[5..-1].to_sym, *args, &block)
|
|
57
|
-
end
|
|
58
|
-
__delegate_method_missing_to_target original_sym, find_supported_sym(original_sym), *args
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
module Spec
|
|
2
|
-
module Expectations
|
|
3
|
-
module Should
|
|
4
|
-
class Change < Base
|
|
5
|
-
|
|
6
|
-
def initialize(target, receiver=nil, message=nil, &block)
|
|
7
|
-
@block = block
|
|
8
|
-
@target = target
|
|
9
|
-
@receiver = receiver
|
|
10
|
-
@message = message
|
|
11
|
-
execute_change
|
|
12
|
-
evaluate_change
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def execute_change
|
|
16
|
-
@before_change = @block.nil? ? @receiver.send(@message) : @block.call
|
|
17
|
-
@target.call
|
|
18
|
-
@after_change = @block.nil? ? @receiver.send(@message) : @block.call
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def message
|
|
22
|
-
@message.nil? ? 'result' : @message
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def evaluate_change
|
|
26
|
-
if @before_change == @after_change
|
|
27
|
-
fail_with_message "#{message} should have changed, but is still #{@after_change.inspect}"
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def from(value)
|
|
32
|
-
if @before_change != value
|
|
33
|
-
fail_with_message "#{message} should have initially been #{value.inspect}, but was #{@before_change.inspect}"
|
|
34
|
-
end
|
|
35
|
-
self
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def to(value)
|
|
39
|
-
if @after_change != value
|
|
40
|
-
fail_with_message "#{message} should have been changed to #{value.inspect}, but is now #{@after_change.inspect}"
|
|
41
|
-
end
|
|
42
|
-
self
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def by(expected_delta)
|
|
46
|
-
if actual_delta != expected_delta
|
|
47
|
-
fail_with_message "#{message} should have been changed by #{expected_delta}, but was changed by #{actual_delta}"
|
|
48
|
-
end
|
|
49
|
-
self
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
private
|
|
53
|
-
def actual_delta
|
|
54
|
-
@after_change - @before_change
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
class NotChange < Change
|
|
59
|
-
def evaluate_change
|
|
60
|
-
if @before_change != @after_change
|
|
61
|
-
fail_with_message "#{@message} should not have changed, but did change from #{@before_change.inspect} to #{@after_change.inspect}"
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|