rspec 1.0.8 → 1.1.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 +122 -2
- data/README +10 -9
- data/Rakefile +22 -49
- data/TODO +2 -0
- data/bin/spec +1 -1
- data/bin/spec_translator +8 -8
- data/examples/{auto_spec_description_example.rb → pure/autogenerated_docstrings_example.rb} +0 -0
- data/examples/{before_and_after_example.rb → pure/before_and_after_example.rb} +1 -0
- data/examples/{behave_as_example.rb → pure/behave_as_example.rb} +0 -0
- data/examples/{custom_expectation_matchers.rb → pure/custom_expectation_matchers.rb} +0 -0
- data/examples/{custom_formatter.rb → pure/custom_formatter.rb} +1 -0
- data/examples/{dynamic_spec.rb → pure/dynamic_spec.rb} +0 -0
- data/examples/{file_accessor.rb → pure/file_accessor.rb} +1 -0
- data/examples/{file_accessor_spec.rb → pure/file_accessor_spec.rb} +0 -0
- data/examples/{greeter_spec.rb → pure/greeter_spec.rb} +1 -0
- data/examples/{helper_method_example.rb → pure/helper_method_example.rb} +0 -0
- data/examples/{io_processor.rb → pure/io_processor.rb} +0 -0
- data/examples/{io_processor_spec.rb → pure/io_processor_spec.rb} +0 -0
- data/examples/{legacy_spec.rb → pure/legacy_spec.rb} +1 -0
- data/examples/{mocking_example.rb → pure/mocking_example.rb} +0 -0
- data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
- data/examples/pure/nested_classes_example.rb +36 -0
- data/examples/{partial_mock_example.rb → pure/partial_mock_example.rb} +0 -0
- data/examples/{pending_example.rb → pure/pending_example.rb} +0 -0
- data/examples/{predicate_example.rb → pure/predicate_example.rb} +0 -0
- data/examples/{priority.txt → pure/priority.txt} +0 -0
- data/examples/pure/shared_example_group_example.rb +66 -0
- data/examples/pure/shared_stack_examples.rb +38 -0
- data/examples/pure/spec_helper.rb +3 -0
- data/examples/{stack.rb → pure/stack.rb} +0 -0
- data/examples/{stack_spec.rb → pure/stack_spec.rb} +1 -35
- data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
- data/examples/{stubbing_example.rb → pure/stubbing_example.rb} +0 -0
- data/examples/stories/adder.rb +13 -0
- data/examples/stories/addition +34 -0
- data/examples/stories/addition.rb +9 -0
- data/examples/stories/calculator.rb +65 -0
- data/examples/stories/game-of-life/README.txt +21 -0
- data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
- data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
- data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
- data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
- data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
- data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
- data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
- data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
- data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
- data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
- data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
- data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
- data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
- data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
- data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
- data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
- data/examples/stories/game-of-life/life.rb +3 -0
- data/examples/stories/game-of-life/life/game.rb +23 -0
- data/examples/stories/game-of-life/life/grid.rb +43 -0
- data/examples/stories/helper.rb +9 -0
- data/examples/stories/steps/addition_steps.rb +18 -0
- data/lib/autotest/rspec.rb +1 -2
- data/lib/spec.rb +30 -6
- data/lib/spec/example.rb +12 -0
- data/lib/spec/{dsl → example}/configuration.rb +48 -39
- data/lib/spec/{dsl → example}/errors.rb +2 -2
- data/lib/spec/example/example_group.rb +16 -0
- data/lib/spec/example/example_group_factory.rb +62 -0
- data/lib/spec/example/example_group_methods.rb +412 -0
- data/lib/spec/example/example_matcher.rb +42 -0
- data/lib/spec/example/example_methods.rb +101 -0
- data/lib/spec/example/module_reopening_fix.rb +21 -0
- data/lib/spec/example/pending.rb +18 -0
- data/lib/spec/example/shared_example_group.rb +58 -0
- data/lib/spec/expectations/differs/default.rb +15 -10
- data/lib/spec/expectations/errors.rb +7 -1
- data/lib/spec/expectations/extensions/object.rb +12 -7
- data/lib/spec/expectations/handler.rb +13 -4
- data/lib/spec/extensions.rb +2 -0
- data/lib/spec/extensions/class.rb +24 -0
- data/lib/spec/extensions/main.rb +54 -0
- data/lib/spec/extensions/object.rb +5 -1
- data/lib/spec/interop/test.rb +10 -0
- data/lib/spec/interop/test/unit/autorunner.rb +6 -0
- data/lib/spec/interop/test/unit/testcase.rb +61 -0
- data/lib/spec/interop/test/unit/testresult.rb +6 -0
- data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
- data/lib/spec/interop/test/unit/ui/console/testrunner.rb +60 -0
- data/lib/spec/matchers.rb +11 -15
- data/lib/spec/matchers/be.rb +23 -6
- data/lib/spec/matchers/change.rb +25 -1
- data/lib/spec/matchers/exist.rb +17 -0
- data/lib/spec/matchers/operator_matcher.rb +1 -0
- data/lib/spec/matchers/simple_matcher.rb +29 -0
- data/lib/spec/matchers/throw_symbol.rb +2 -0
- data/lib/spec/mocks.rb +5 -2
- data/lib/spec/mocks/argument_expectation.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +62 -44
- data/lib/spec/mocks/methods.rb +2 -2
- data/lib/spec/mocks/mock.rb +24 -3
- data/lib/spec/mocks/proxy.rb +26 -23
- data/lib/spec/mocks/space.rb +1 -1
- data/lib/spec/mocks/spec_methods.rb +20 -12
- data/lib/spec/rake/spectask.rb +19 -1
- data/lib/spec/rake/verify_rcov.rb +1 -1
- data/lib/spec/runner.rb +33 -10
- data/lib/spec/runner/backtrace_tweaker.rb +3 -3
- data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
- data/lib/spec/runner/command_line.rb +18 -12
- data/lib/spec/runner/drb_command_line.rb +4 -5
- data/lib/spec/runner/example_group_runner.rb +59 -0
- data/lib/spec/runner/formatter/base_formatter.rb +10 -8
- data/lib/spec/runner/formatter/base_text_formatter.rb +18 -18
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +31 -0
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -5
- data/lib/spec/runner/formatter/html_formatter.rb +37 -27
- data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +3 -4
- data/lib/spec/runner/formatter/specdoc_formatter.rb +27 -13
- data/lib/spec/runner/formatter/story/html_formatter.rb +124 -0
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +123 -0
- data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
- data/lib/spec/runner/heckle_runner.rb +9 -9
- data/lib/spec/runner/option_parser.rb +140 -138
- data/lib/spec/runner/options.rb +168 -90
- data/lib/spec/runner/reporter.rb +58 -40
- data/lib/spec/runner/spec_parser.rb +11 -8
- data/lib/spec/story.rb +10 -0
- data/lib/spec/story/extensions.rb +1 -0
- data/lib/spec/story/extensions/main.rb +86 -0
- data/lib/spec/story/given_scenario.rb +14 -0
- data/lib/spec/story/runner.rb +58 -0
- data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
- data/lib/spec/story/runner/scenario_collector.rb +18 -0
- data/lib/spec/story/runner/scenario_runner.rb +46 -0
- data/lib/spec/story/runner/story_mediator.rb +123 -0
- data/lib/spec/story/runner/story_parser.rb +227 -0
- data/lib/spec/story/runner/story_runner.rb +67 -0
- data/lib/spec/story/scenario.rb +14 -0
- data/lib/spec/story/step.rb +48 -0
- data/lib/spec/story/step_group.rb +89 -0
- data/lib/spec/story/step_mother.rb +37 -0
- data/lib/spec/story/story.rb +42 -0
- data/lib/spec/story/world.rb +124 -0
- data/lib/spec/version.rb +4 -5
- data/plugins/mock_frameworks/rspec.rb +1 -1
- data/spec/autotest/rspec_spec.rb +13 -7
- data/spec/autotest_helper.rb +4 -3
- data/spec/rspec_suite.rb +7 -0
- data/spec/ruby_forker.rb +13 -0
- data/spec/spec/example/configuration_spec.rb +290 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
- data/spec/spec/example/example_group_factory_spec.rb +129 -0
- data/spec/spec/example/example_group_methods_spec.rb +465 -0
- data/spec/spec/example/example_group_spec.rb +711 -0
- data/spec/spec/{dsl → example}/example_matcher_spec.rb +23 -18
- data/spec/spec/example/example_methods_spec.rb +75 -0
- data/spec/spec/example/example_runner_spec.rb +194 -0
- data/spec/spec/example/example_spec.rb +53 -0
- data/spec/spec/example/nested_example_group_spec.rb +59 -0
- data/spec/spec/example/pending_module_spec.rb +31 -0
- data/spec/spec/{dsl → example}/predicate_matcher_spec.rb +1 -1
- data/spec/spec/example/shared_example_group_spec.rb +265 -0
- data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
- data/spec/spec/expectations/differs/default_spec.rb +5 -3
- data/spec/spec/expectations/extensions/object_spec.rb +63 -2
- data/spec/spec/extensions/main_spec.rb +50 -0
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
- data/spec/spec/interop/test/unit/testcase_spec.rb +10 -0
- data/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb +20 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb +34 -0
- data/spec/spec/matchers/be_spec.rb +15 -0
- data/spec/spec/matchers/change_spec.rb +87 -0
- data/spec/spec/matchers/description_generation_spec.rb +31 -37
- data/spec/spec/matchers/exist_spec.rb +31 -22
- data/spec/spec/matchers/handler_spec.rb +42 -1
- data/spec/spec/matchers/have_spec.rb +1 -1
- data/spec/spec/matchers/mock_constraint_matchers_spec.rb +1 -1
- data/spec/spec/matchers/operator_matcher_spec.rb +1 -1
- data/spec/spec/matchers/simple_matcher_spec.rb +31 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +4 -1
- data/spec/spec/mocks/bug_report_10263.rb +24 -0
- data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
- data/spec/spec/mocks/bug_report_8165_spec.rb +2 -2
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +1 -0
- data/spec/spec/mocks/mock_spec.rb +200 -102
- data/spec/spec/mocks/multiple_return_value_spec.rb +1 -1
- data/spec/spec/mocks/options_hash_spec.rb +19 -7
- data/spec/spec/mocks/partial_mock_spec.rb +31 -9
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +6 -0
- data/spec/spec/mocks/stub_spec.rb +120 -98
- data/spec/spec/package/bin_spec_spec.rb +7 -5
- data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
- data/spec/spec/runner/command_line_spec.rb +140 -27
- data/spec/spec/runner/drb_command_line_spec.rb +39 -31
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +44 -0
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +16 -11
- data/spec/spec/runner/formatter/html_formatter_spec.rb +60 -50
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +29 -13
- data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +103 -39
- data/spec/spec/runner/formatter/story/html_formatter_spec.rb +56 -0
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +289 -0
- data/spec/spec/runner/heckle_runner_spec.rb +29 -14
- data/spec/spec/runner/heckler_spec.rb +4 -5
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +5 -5
- data/spec/spec/runner/option_parser_spec.rb +86 -58
- data/spec/spec/runner/options_spec.rb +239 -120
- data/spec/spec/runner/output_one_time_fixture.rb +7 -0
- data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
- data/spec/spec/runner/output_one_time_spec.rb +16 -0
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +6 -6
- data/spec/spec/runner/reporter_spec.rb +147 -163
- data/spec/spec/runner/spec_parser_spec.rb +31 -0
- data/spec/spec/runner_spec.rb +11 -0
- data/spec/spec/spec_classes.rb +12 -5
- data/spec/spec/story/builders.rb +46 -0
- data/spec/spec/story/extensions/main_spec.rb +161 -0
- data/spec/spec/story/extensions_spec.rb +14 -0
- data/spec/spec/story/given_scenario_spec.rb +27 -0
- data/spec/spec/story/runner/plain_text_story_runner_spec.rb +92 -0
- data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
- data/spec/spec/story/runner/scenario_runner_spec.rb +142 -0
- data/spec/spec/story/runner/story_mediator_spec.rb +133 -0
- data/spec/spec/story/runner/story_parser_spec.rb +384 -0
- data/spec/spec/story/runner/story_runner_spec.rb +219 -0
- data/spec/spec/story/runner_spec.rb +106 -0
- data/spec/spec/story/scenario_spec.rb +20 -0
- data/spec/spec/story/step_group_spec.rb +157 -0
- data/spec/spec/story/step_mother_spec.rb +72 -0
- data/spec/spec/story/step_spec.rb +147 -0
- data/spec/spec/story/story_helper.rb +2 -0
- data/spec/spec/story/story_spec.rb +86 -0
- data/spec/spec/story/world_spec.rb +416 -0
- data/spec/spec/translator_spec.rb +2 -1
- data/spec/spec_helper.rb +59 -2
- data/stories/all.rb +5 -0
- data/stories/example_groups/autogenerated_docstrings +26 -0
- data/stories/example_groups/example_group_with_should_methods +17 -0
- data/stories/example_groups/nested_groups +17 -0
- data/stories/example_groups/output +20 -0
- data/stories/example_groups/stories.rb +7 -0
- data/stories/helper.rb +6 -0
- data/stories/interop/examples_and_tests_together +30 -0
- data/stories/interop/stories.rb +7 -0
- data/stories/interop/test_case_with_should_methods +17 -0
- data/stories/pending_stories/README +3 -0
- data/stories/resources/helpers/cmdline.rb +9 -0
- data/stories/resources/helpers/story_helper.rb +16 -0
- data/stories/resources/matchers/smart_match.rb +37 -0
- data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
- data/stories/resources/spec/simple_spec.rb +8 -0
- data/stories/resources/steps/running_rspec.rb +50 -0
- data/stories/resources/test/spec_and_test_together.rb +57 -0
- data/stories/resources/test/test_case_with_should_methods.rb +30 -0
- metadata +232 -106
- data/EXAMPLES.rd +0 -111
- data/examples/multi_threaded_behaviour_runner.rb +0 -25
- data/examples/shared_behaviours_example.rb +0 -39
- data/examples/spec_helper.rb +0 -1
- data/examples/test_case_adapter_example.rb +0 -26
- data/examples/test_case_spec.rb +0 -65
- data/lib/spec/dsl.rb +0 -11
- data/lib/spec/dsl/behaviour.rb +0 -220
- data/lib/spec/dsl/behaviour_callbacks.rb +0 -82
- data/lib/spec/dsl/behaviour_eval.rb +0 -231
- data/lib/spec/dsl/behaviour_factory.rb +0 -42
- data/lib/spec/dsl/composite_proc_builder.rb +0 -33
- data/lib/spec/dsl/description.rb +0 -76
- data/lib/spec/dsl/example.rb +0 -135
- data/lib/spec/dsl/example_matcher.rb +0 -40
- data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
- data/lib/spec/runner/behaviour_runner.rb +0 -123
- data/lib/spec/runner/extensions/kernel.rb +0 -50
- data/lib/spec/runner/extensions/object.rb +0 -32
- data/lib/spec/runner/formatter.rb +0 -9
- data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -29
- data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
- data/lib/spec/test_case_adapter.rb +0 -10
- data/spec/spec/dsl/behaviour_eval_spec.rb +0 -79
- data/spec/spec/dsl/behaviour_factory_spec.rb +0 -48
- data/spec/spec/dsl/behaviour_spec.rb +0 -661
- data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -44
- data/spec/spec/dsl/configuration_spec.rb +0 -55
- data/spec/spec/dsl/description_spec.rb +0 -89
- data/spec/spec/dsl/example_class_spec.rb +0 -24
- data/spec/spec/dsl/example_instance_spec.rb +0 -160
- data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
- data/spec/spec/dsl/shared_behaviour_spec.rb +0 -252
- data/spec/spec/runner/behaviour_runner_spec.rb +0 -229
- data/spec/spec/runner/context_matching_spec.rb +0 -27
- data/spec/spec/runner/extensions/bug_report_10577_spec.rb +0 -35
- data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
- data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -40
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -20
- data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
- data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
- data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
- data/spec/spec/runner/object_ext_spec.rb +0 -11
@@ -1,82 +0,0 @@
|
|
1
|
-
module Spec
|
2
|
-
module DSL
|
3
|
-
# See http://rspec.rubyforge.org/documentation/before_and_after.html
|
4
|
-
module BehaviourCallbacks
|
5
|
-
def prepend_before(*args, &block)
|
6
|
-
scope, options = scope_and_options(*args)
|
7
|
-
add(scope, options, :before, :unshift, &block)
|
8
|
-
end
|
9
|
-
def append_before(*args, &block)
|
10
|
-
scope, options = scope_and_options(*args)
|
11
|
-
add(scope, options, :before, :<<, &block)
|
12
|
-
end
|
13
|
-
alias_method :before, :append_before
|
14
|
-
|
15
|
-
def prepend_after(*args, &block)
|
16
|
-
scope, options = scope_and_options(*args)
|
17
|
-
add(scope, options, :after, :unshift, &block)
|
18
|
-
end
|
19
|
-
alias_method :after, :prepend_after
|
20
|
-
def append_after(*args, &block)
|
21
|
-
scope, options = scope_and_options(*args)
|
22
|
-
add(scope, options, :after, :<<, &block)
|
23
|
-
end
|
24
|
-
|
25
|
-
def scope_and_options(*args)
|
26
|
-
args, options = args_and_options(*args)
|
27
|
-
scope = (args[0] || :each), options
|
28
|
-
end
|
29
|
-
|
30
|
-
def add(scope, options, where, how, &block)
|
31
|
-
scope ||= :each
|
32
|
-
options ||= {}
|
33
|
-
behaviour_type = options[:behaviour_type]
|
34
|
-
case scope
|
35
|
-
when :each; self.__send__("#{where}_each_parts", behaviour_type).__send__(how, block)
|
36
|
-
when :all; self.__send__("#{where}_all_parts", behaviour_type).__send__(how, block)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def remove_after(scope, &block)
|
41
|
-
after_each_parts.delete(block)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Deprecated. Use before(:each)
|
45
|
-
def setup(&block)
|
46
|
-
before(:each, &block)
|
47
|
-
end
|
48
|
-
|
49
|
-
# Deprecated. Use after(:each)
|
50
|
-
def teardown(&block)
|
51
|
-
after(:each, &block)
|
52
|
-
end
|
53
|
-
|
54
|
-
def before_all_parts(behaviour_type=nil) # :nodoc:
|
55
|
-
@before_all_parts ||= {}
|
56
|
-
@before_all_parts[behaviour_type] ||= []
|
57
|
-
end
|
58
|
-
|
59
|
-
def after_all_parts(behaviour_type=nil) # :nodoc:
|
60
|
-
@after_all_parts ||= {}
|
61
|
-
@after_all_parts[behaviour_type] ||= []
|
62
|
-
end
|
63
|
-
|
64
|
-
def before_each_parts(behaviour_type=nil) # :nodoc:
|
65
|
-
@before_each_parts ||= {}
|
66
|
-
@before_each_parts[behaviour_type] ||= []
|
67
|
-
end
|
68
|
-
|
69
|
-
def after_each_parts(behaviour_type=nil) # :nodoc:
|
70
|
-
@after_each_parts ||= {}
|
71
|
-
@after_each_parts[behaviour_type] ||= []
|
72
|
-
end
|
73
|
-
|
74
|
-
def clear_before_and_after! # :nodoc:
|
75
|
-
@before_all_parts = nil
|
76
|
-
@after_all_parts = nil
|
77
|
-
@before_each_parts = nil
|
78
|
-
@after_each_parts = nil
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
@@ -1,231 +0,0 @@
|
|
1
|
-
module Spec
|
2
|
-
module DSL
|
3
|
-
module BehaviourEval
|
4
|
-
module ModuleMethods
|
5
|
-
include BehaviourCallbacks
|
6
|
-
|
7
|
-
attr_writer :behaviour
|
8
|
-
attr_accessor :description
|
9
|
-
|
10
|
-
# RSpec runs every example in a new instance of Object, mixing in
|
11
|
-
# the behaviour necessary to run examples. Because this behaviour gets
|
12
|
-
# mixed in, it can get mixed in to an instance of any class at all.
|
13
|
-
#
|
14
|
-
# This is something that you would hardly ever use, but there is one
|
15
|
-
# common use case for it - inheriting from Test::Unit::TestCase. RSpec's
|
16
|
-
# Rails plugin uses this feature to provide access to all of the features
|
17
|
-
# that are available for Test::Unit within RSpec examples.
|
18
|
-
def inherit(klass)
|
19
|
-
raise ArgumentError.new("Shared behaviours cannot inherit from classes") if @behaviour.shared?
|
20
|
-
@behaviour_superclass = klass
|
21
|
-
derive_execution_context_class_from_behaviour_superclass
|
22
|
-
end
|
23
|
-
|
24
|
-
# You can pass this one or many modules. Each module will subsequently
|
25
|
-
# be included in the each object in which an example is run. Use this
|
26
|
-
# to provide global helper methods to your examples.
|
27
|
-
#
|
28
|
-
# == Example
|
29
|
-
#
|
30
|
-
# module HelperMethods
|
31
|
-
# def helper_method
|
32
|
-
# ...
|
33
|
-
# end
|
34
|
-
# end
|
35
|
-
#
|
36
|
-
# describe Thing do
|
37
|
-
# include HelperMethods
|
38
|
-
# it "should do stuff" do
|
39
|
-
# helper_method
|
40
|
-
# end
|
41
|
-
# end
|
42
|
-
def include(*mods)
|
43
|
-
mods.each do |mod|
|
44
|
-
included_modules << mod
|
45
|
-
mod.send :included, self
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
# Use this to pull in examples from shared behaviours.
|
50
|
-
# See Spec::Runner for information about shared behaviours.
|
51
|
-
def it_should_behave_like(behaviour_description)
|
52
|
-
behaviour = @behaviour.class.find_shared_behaviour(behaviour_description)
|
53
|
-
if behaviour.nil?
|
54
|
-
raise RuntimeError.new("Shared Behaviour '#{behaviour_description}' can not be found")
|
55
|
-
end
|
56
|
-
behaviour.copy_to(self)
|
57
|
-
end
|
58
|
-
|
59
|
-
def copy_to(eval_module) # :nodoc:
|
60
|
-
examples.each { |e| eval_module.examples << e; }
|
61
|
-
before_each_parts.each { |p| eval_module.before_each_parts << p }
|
62
|
-
after_each_parts.each { |p| eval_module.after_each_parts << p }
|
63
|
-
before_all_parts.each { |p| eval_module.before_all_parts << p }
|
64
|
-
after_all_parts.each { |p| eval_module.after_all_parts << p }
|
65
|
-
included_modules.each { |m| eval_module.included_modules << m }
|
66
|
-
eval_module.included_modules << self
|
67
|
-
end
|
68
|
-
|
69
|
-
# :call-seq:
|
70
|
-
# predicate_matchers[matcher_name] = method_on_object
|
71
|
-
# predicate_matchers[matcher_name] = [method1_on_object, method2_on_object]
|
72
|
-
#
|
73
|
-
# Dynamically generates a custom matcher that will match
|
74
|
-
# a predicate on your class. RSpec provides a couple of these
|
75
|
-
# out of the box:
|
76
|
-
#
|
77
|
-
# exist (or state expectations)
|
78
|
-
# File.should exist("path/to/file")
|
79
|
-
#
|
80
|
-
# an_instance_of (for mock argument constraints)
|
81
|
-
# mock.should_receive(:message).with(an_instance_of(String))
|
82
|
-
#
|
83
|
-
# == Examples
|
84
|
-
#
|
85
|
-
# class Fish
|
86
|
-
# def can_swim?
|
87
|
-
# true
|
88
|
-
# end
|
89
|
-
# end
|
90
|
-
#
|
91
|
-
# describe Fish do
|
92
|
-
# predicate_matchers[:swim] = :can_swim?
|
93
|
-
# it "should swim" do
|
94
|
-
# Fish.new.should swim
|
95
|
-
# end
|
96
|
-
# end
|
97
|
-
def predicate_matchers
|
98
|
-
@predicate_matchers ||= {:exist => :exist?, :an_instance_of => :is_a?}
|
99
|
-
end
|
100
|
-
|
101
|
-
def define_predicate_matchers(hash=nil) # :nodoc:
|
102
|
-
if hash.nil?
|
103
|
-
define_predicate_matchers(predicate_matchers)
|
104
|
-
define_predicate_matchers(Spec::Runner.configuration.predicate_matchers)
|
105
|
-
else
|
106
|
-
hash.each_pair do |matcher_method, method_on_object|
|
107
|
-
define_method matcher_method do |*args|
|
108
|
-
eval("be_#{method_on_object.to_s.gsub('?','')}(*args)")
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
# Creates an instance of Spec::DSL::Example and adds
|
115
|
-
# it to a collection of examples of the current behaviour.
|
116
|
-
def it(description=:__generate_description, opts={}, &block)
|
117
|
-
examples << Example.new(description, opts, &block)
|
118
|
-
end
|
119
|
-
|
120
|
-
# Alias for it.
|
121
|
-
def specify(description=:__generate_description, opts={}, &block)
|
122
|
-
it(description, opts, &block)
|
123
|
-
end
|
124
|
-
|
125
|
-
def methods # :nodoc:
|
126
|
-
my_methods = super
|
127
|
-
my_methods |= behaviour_superclass.methods
|
128
|
-
my_methods
|
129
|
-
end
|
130
|
-
|
131
|
-
protected
|
132
|
-
|
133
|
-
def method_missing(method_name, *args)
|
134
|
-
if behaviour_superclass.respond_to?(method_name)
|
135
|
-
return execution_context_class.send(method_name, *args)
|
136
|
-
end
|
137
|
-
super
|
138
|
-
end
|
139
|
-
|
140
|
-
def before_each_proc(behaviour_type, &error_handler)
|
141
|
-
parts = []
|
142
|
-
parts.push(*Behaviour.before_each_parts(nil))
|
143
|
-
parts.push(*Behaviour.before_each_parts(behaviour_type)) unless behaviour_type.nil?
|
144
|
-
parts.push(*before_each_parts(nil))
|
145
|
-
parts.push(*before_each_parts(behaviour_type)) unless behaviour_type.nil?
|
146
|
-
CompositeProcBuilder.new(parts).proc(&error_handler)
|
147
|
-
end
|
148
|
-
|
149
|
-
def before_all_proc(behaviour_type, &error_handler)
|
150
|
-
parts = []
|
151
|
-
parts.push(*Behaviour.before_all_parts(nil))
|
152
|
-
parts.push(*Behaviour.before_all_parts(behaviour_type)) unless behaviour_type.nil?
|
153
|
-
parts.push(*before_all_parts(nil))
|
154
|
-
parts.push(*before_all_parts(behaviour_type)) unless behaviour_type.nil?
|
155
|
-
CompositeProcBuilder.new(parts).proc(&error_handler)
|
156
|
-
end
|
157
|
-
|
158
|
-
def after_all_proc(behaviour_type)
|
159
|
-
parts = []
|
160
|
-
parts.push(*after_all_parts(behaviour_type)) unless behaviour_type.nil?
|
161
|
-
parts.push(*after_all_parts(nil))
|
162
|
-
parts.push(*Behaviour.after_all_parts(behaviour_type)) unless behaviour_type.nil?
|
163
|
-
parts.push(*Behaviour.after_all_parts(nil))
|
164
|
-
CompositeProcBuilder.new(parts).proc
|
165
|
-
end
|
166
|
-
|
167
|
-
def after_each_proc(behaviour_type)
|
168
|
-
parts = []
|
169
|
-
parts.push(*after_each_parts(behaviour_type)) unless behaviour_type.nil?
|
170
|
-
parts.push(*after_each_parts(nil))
|
171
|
-
parts.push(*Behaviour.after_each_parts(behaviour_type)) unless behaviour_type.nil?
|
172
|
-
parts.push(*Behaviour.after_each_parts(nil))
|
173
|
-
CompositeProcBuilder.new(parts).proc
|
174
|
-
end
|
175
|
-
|
176
|
-
private
|
177
|
-
|
178
|
-
def execution_context_class
|
179
|
-
@execution_context_class ||= derive_execution_context_class_from_behaviour_superclass
|
180
|
-
end
|
181
|
-
|
182
|
-
def derive_execution_context_class_from_behaviour_superclass
|
183
|
-
@execution_context_class = Class.new(behaviour_superclass)
|
184
|
-
behaviour_superclass.spec_inherited(self) if behaviour_superclass.respond_to?(:spec_inherited)
|
185
|
-
@execution_context_class
|
186
|
-
end
|
187
|
-
|
188
|
-
def behaviour_superclass
|
189
|
-
@behaviour_superclass ||= Object
|
190
|
-
end
|
191
|
-
|
192
|
-
protected
|
193
|
-
def included_modules
|
194
|
-
@included_modules ||= [::Spec::Matchers]
|
195
|
-
end
|
196
|
-
|
197
|
-
def examples
|
198
|
-
@examples ||= []
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
module InstanceMethods
|
203
|
-
def initialize(*args, &block) #:nodoc:
|
204
|
-
# TODO - inheriting from TestUnit::TestCase fails without this
|
205
|
-
# - let's figure out why and move this somewhere else
|
206
|
-
end
|
207
|
-
|
208
|
-
def violated(message="")
|
209
|
-
raise Spec::Expectations::ExpectationNotMetError.new(message)
|
210
|
-
end
|
211
|
-
|
212
|
-
def inspect
|
213
|
-
"[RSpec example]"
|
214
|
-
end
|
215
|
-
|
216
|
-
def pending(message)
|
217
|
-
if block_given?
|
218
|
-
begin
|
219
|
-
yield
|
220
|
-
rescue Exception => e
|
221
|
-
raise Spec::DSL::ExamplePendingError.new(message)
|
222
|
-
end
|
223
|
-
raise Spec::DSL::PendingFixedError.new("Expected pending '#{message}' to fail. No Error was raised.")
|
224
|
-
else
|
225
|
-
raise Spec::DSL::ExamplePendingError.new(message)
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
module Spec
|
2
|
-
module DSL
|
3
|
-
class BehaviourFactory
|
4
|
-
|
5
|
-
class << self
|
6
|
-
|
7
|
-
BEHAVIOUR_CLASSES = {:default => Spec::DSL::Behaviour}
|
8
|
-
|
9
|
-
# Registers a behaviour class +klass+ with the symbol
|
10
|
-
# +behaviour_type+. For example:
|
11
|
-
#
|
12
|
-
# Spec::DSL::BehaviourFactory.add_behaviour_class(:farm, Spec::Farm::DSL::FarmBehaviour)
|
13
|
-
#
|
14
|
-
# This will cause Kernel#describe from a file living in
|
15
|
-
# <tt>spec/farm</tt> to create behaviour instances of type
|
16
|
-
# Spec::Farm::DSL::FarmBehaviour.
|
17
|
-
def add_behaviour_class(behaviour_type, klass)
|
18
|
-
BEHAVIOUR_CLASSES[behaviour_type] = klass
|
19
|
-
end
|
20
|
-
|
21
|
-
def remove_behaviour_class(behaviour_type)
|
22
|
-
BEHAVIOUR_CLASSES.delete(behaviour_type)
|
23
|
-
end
|
24
|
-
|
25
|
-
def create(*args, &block)
|
26
|
-
opts = Hash === args.last ? args.last : {}
|
27
|
-
if opts[:shared]
|
28
|
-
behaviour_type = :default
|
29
|
-
elsif opts[:behaviour_type]
|
30
|
-
behaviour_type = opts[:behaviour_type]
|
31
|
-
elsif opts[:spec_path] =~ /spec(\\|\/)(#{BEHAVIOUR_CLASSES.keys.join('|')})/
|
32
|
-
behaviour_type = $2.to_sym
|
33
|
-
else
|
34
|
-
behaviour_type = :default
|
35
|
-
end
|
36
|
-
return BEHAVIOUR_CLASSES[behaviour_type].new(*args, &block)
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Spec
|
2
|
-
module DSL
|
3
|
-
class CompositeProcBuilder < Array
|
4
|
-
def initialize(callbacks=[])
|
5
|
-
push(*callbacks)
|
6
|
-
end
|
7
|
-
|
8
|
-
def proc(&error_handler)
|
9
|
-
parts = self
|
10
|
-
errors = []
|
11
|
-
Proc.new do
|
12
|
-
result = parts.collect do |part|
|
13
|
-
begin
|
14
|
-
if part.is_a?(UnboundMethod)
|
15
|
-
part.bind(self).call
|
16
|
-
else
|
17
|
-
instance_eval(&part)
|
18
|
-
end
|
19
|
-
rescue Exception => e
|
20
|
-
if error_handler
|
21
|
-
error_handler.call(e)
|
22
|
-
else
|
23
|
-
errors << e
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
raise errors.first unless errors.empty?
|
28
|
-
result
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
data/lib/spec/dsl/description.rb
DELETED
@@ -1,76 +0,0 @@
|
|
1
|
-
module Spec
|
2
|
-
module DSL
|
3
|
-
class Description
|
4
|
-
module ClassMethods
|
5
|
-
def generate_description(*args)
|
6
|
-
description = args.shift.to_s
|
7
|
-
unless args.empty?
|
8
|
-
suffix = args.shift.to_s
|
9
|
-
description << " " unless suffix =~ /^\s|\.|#/
|
10
|
-
description << suffix
|
11
|
-
end
|
12
|
-
description
|
13
|
-
end
|
14
|
-
end
|
15
|
-
extend ClassMethods
|
16
|
-
|
17
|
-
attr_reader :description, :described_type
|
18
|
-
|
19
|
-
def initialize(*args)
|
20
|
-
args, @options = args_and_options(*args)
|
21
|
-
init_behaviour_type(@options)
|
22
|
-
init_spec_path(@options)
|
23
|
-
init_described_type(args)
|
24
|
-
init_description(*args)
|
25
|
-
end
|
26
|
-
|
27
|
-
def [](key)
|
28
|
-
@options[key]
|
29
|
-
end
|
30
|
-
|
31
|
-
def []=(key, value)
|
32
|
-
@options[key] = value
|
33
|
-
end
|
34
|
-
|
35
|
-
def to_s; @description; end
|
36
|
-
|
37
|
-
def ==(value)
|
38
|
-
case value
|
39
|
-
when Description
|
40
|
-
@description == value.description
|
41
|
-
else
|
42
|
-
@description == value
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
def init_behaviour_type(options)
|
48
|
-
# NOTE - BE CAREFUL IF CHANGING THIS NEXT LINE:
|
49
|
-
# this line is as it is to satisfy JRuby - the original version
|
50
|
-
# read, simply: "if options[:behaviour_class]", which passed against ruby, but failed against jruby
|
51
|
-
if options[:behaviour_class] && options[:behaviour_class].ancestors.include?(Behaviour)
|
52
|
-
options[:behaviour_type] = parse_behaviour_type(@options[:behaviour_class])
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def init_spec_path(options)
|
57
|
-
if options.has_key?(:spec_path)
|
58
|
-
options[:spec_path] = File.expand_path(@options[:spec_path])
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def init_description(*args)
|
63
|
-
@description = self.class.generate_description(*args)
|
64
|
-
end
|
65
|
-
|
66
|
-
def init_described_type(args)
|
67
|
-
@described_type = args.first unless args.first.is_a?(String)
|
68
|
-
end
|
69
|
-
|
70
|
-
def parse_behaviour_type(behaviour_class)
|
71
|
-
behaviour_class.to_s.split("::").reverse[0].gsub!('Behaviour', '').downcase.to_sym
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|