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
data/lib/spec/dsl/example.rb
DELETED
@@ -1,135 +0,0 @@
|
|
1
|
-
require 'timeout'
|
2
|
-
|
3
|
-
module Spec
|
4
|
-
module DSL
|
5
|
-
class Example
|
6
|
-
# The global sequence number of this example
|
7
|
-
attr_accessor :number
|
8
|
-
|
9
|
-
def initialize(description, options={}, &example_block)
|
10
|
-
@from = caller(0)[3]
|
11
|
-
@options = options
|
12
|
-
@example_block = example_block
|
13
|
-
@description = description
|
14
|
-
@description_generated_proc = lambda { |desc| @generated_description = desc }
|
15
|
-
end
|
16
|
-
|
17
|
-
def run(reporter, before_each_block, after_each_block, dry_run, execution_context, timeout=nil)
|
18
|
-
@dry_run = dry_run
|
19
|
-
reporter.example_started(self)
|
20
|
-
return reporter.example_finished(self) if dry_run
|
21
|
-
|
22
|
-
errors = []
|
23
|
-
location = nil
|
24
|
-
Timeout.timeout(timeout) do
|
25
|
-
before_each_ok = before_example(execution_context, errors, &before_each_block)
|
26
|
-
example_ok = run_example(execution_context, errors) if before_each_ok
|
27
|
-
after_each_ok = after_example(execution_context, errors, &after_each_block)
|
28
|
-
location = failure_location(before_each_ok, example_ok, after_each_ok)
|
29
|
-
end
|
30
|
-
|
31
|
-
ExampleShouldRaiseHandler.new(@from, @options).handle(errors)
|
32
|
-
reporter.example_finished(self, errors.first, location, @example_block.nil?) if reporter
|
33
|
-
end
|
34
|
-
|
35
|
-
def matches?(matcher, specified_examples)
|
36
|
-
matcher.example_desc = description
|
37
|
-
matcher.matches?(specified_examples)
|
38
|
-
end
|
39
|
-
|
40
|
-
def description
|
41
|
-
@description == :__generate_description ? generated_description : @description
|
42
|
-
end
|
43
|
-
|
44
|
-
def to_s
|
45
|
-
description
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def generated_description
|
51
|
-
return @generated_description if @generated_description
|
52
|
-
if @dry_run
|
53
|
-
"NO NAME (Because of --dry-run)"
|
54
|
-
else
|
55
|
-
if @failed
|
56
|
-
"NO NAME (Because of Error raised in matcher)"
|
57
|
-
else
|
58
|
-
"NO NAME (Because there were no expectations)"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def before_example(execution_context, errors, &behaviour_before_block)
|
64
|
-
setup_mocks(execution_context)
|
65
|
-
Spec::Matchers.description_generated(@description_generated_proc)
|
66
|
-
|
67
|
-
builder = CompositeProcBuilder.new
|
68
|
-
before_proc = builder.proc(&append_errors(errors))
|
69
|
-
execution_context.instance_eval(&before_proc)
|
70
|
-
|
71
|
-
execution_context.instance_eval(&behaviour_before_block) if behaviour_before_block
|
72
|
-
return errors.empty?
|
73
|
-
rescue Exception => e
|
74
|
-
@failed = true
|
75
|
-
errors << e
|
76
|
-
return false
|
77
|
-
end
|
78
|
-
|
79
|
-
def run_example(execution_context, errors)
|
80
|
-
begin
|
81
|
-
execution_context.instance_eval(&@example_block) if @example_block
|
82
|
-
return true
|
83
|
-
rescue Exception => e
|
84
|
-
@failed = true
|
85
|
-
errors << e
|
86
|
-
return false
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def after_example(execution_context, errors, &behaviour_after_each)
|
91
|
-
execution_context.instance_eval(&behaviour_after_each) if behaviour_after_each
|
92
|
-
|
93
|
-
begin
|
94
|
-
verify_mocks(execution_context)
|
95
|
-
ensure
|
96
|
-
teardown_mocks(execution_context)
|
97
|
-
end
|
98
|
-
|
99
|
-
Spec::Matchers.unregister_description_generated(@description_generated_proc)
|
100
|
-
|
101
|
-
builder = CompositeProcBuilder.new
|
102
|
-
after_proc = builder.proc(&append_errors(errors))
|
103
|
-
execution_context.instance_eval(&after_proc)
|
104
|
-
|
105
|
-
return errors.empty?
|
106
|
-
rescue Exception => e
|
107
|
-
@failed = true
|
108
|
-
errors << e
|
109
|
-
return false
|
110
|
-
end
|
111
|
-
|
112
|
-
def setup_mocks(execution_context)
|
113
|
-
execution_context.setup_mocks_for_rspec if execution_context.respond_to?(:setup_mocks_for_rspec)
|
114
|
-
end
|
115
|
-
|
116
|
-
def verify_mocks(execution_context)
|
117
|
-
execution_context.verify_mocks_for_rspec if execution_context.respond_to?(:verify_mocks_for_rspec)
|
118
|
-
end
|
119
|
-
|
120
|
-
def teardown_mocks(execution_context)
|
121
|
-
execution_context.teardown_mocks_for_rspec if execution_context.respond_to?(:teardown_mocks_for_rspec)
|
122
|
-
end
|
123
|
-
|
124
|
-
def append_errors(errors)
|
125
|
-
proc {|error| errors << error}
|
126
|
-
end
|
127
|
-
|
128
|
-
def failure_location(before_each_ok, example_ok, after_each_ok)
|
129
|
-
return 'before(:each)' unless before_each_ok
|
130
|
-
return description unless example_ok
|
131
|
-
return 'after(:each)' unless after_each_ok
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module Spec
|
2
|
-
module DSL
|
3
|
-
class ExampleMatcher
|
4
|
-
|
5
|
-
attr_writer :example_desc
|
6
|
-
def initialize(behaviour_desc, example_desc=nil)
|
7
|
-
@behaviour_desc = behaviour_desc
|
8
|
-
@example_desc = example_desc
|
9
|
-
end
|
10
|
-
|
11
|
-
def matches?(specified_examples)
|
12
|
-
specified_examples.each do |specified_example|
|
13
|
-
return true if matches_literal_example?(specified_example) || matches_example_not_considering_modules?(specified_example)
|
14
|
-
end
|
15
|
-
false
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
def matches_literal_example?(specified_example)
|
20
|
-
specified_example =~ /(^#{context_regexp} #{example_regexp}$|^#{context_regexp}$|^#{example_regexp}$)/
|
21
|
-
end
|
22
|
-
|
23
|
-
def matches_example_not_considering_modules?(specified_example)
|
24
|
-
specified_example =~ /(^#{context_regexp_not_considering_modules} #{example_regexp}$|^#{context_regexp_not_considering_modules}$|^#{example_regexp}$)/
|
25
|
-
end
|
26
|
-
|
27
|
-
def context_regexp
|
28
|
-
Regexp.escape(@behaviour_desc)
|
29
|
-
end
|
30
|
-
|
31
|
-
def context_regexp_not_considering_modules
|
32
|
-
Regexp.escape(@behaviour_desc.split('::').last)
|
33
|
-
end
|
34
|
-
|
35
|
-
def example_regexp
|
36
|
-
Regexp.escape(@example_desc)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
module Spec
|
2
|
-
module DSL
|
3
|
-
class ExampleShouldRaiseHandler
|
4
|
-
def initialize(file_and_line_number, opts)
|
5
|
-
@file_and_line_number = file_and_line_number
|
6
|
-
@options = opts
|
7
|
-
@expected_error_class = determine_error_class(opts)
|
8
|
-
@expected_error_message = determine_error_message(opts)
|
9
|
-
end
|
10
|
-
|
11
|
-
def determine_error_class(opts)
|
12
|
-
if candidate = opts[:should_raise]
|
13
|
-
if candidate.is_a?(Class)
|
14
|
-
return candidate
|
15
|
-
elsif candidate.is_a?(Array)
|
16
|
-
return candidate[0]
|
17
|
-
else
|
18
|
-
return Exception
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def determine_error_message(opts)
|
24
|
-
if candidate = opts[:should_raise]
|
25
|
-
if candidate.is_a?(Array)
|
26
|
-
return candidate[1]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
return nil
|
30
|
-
end
|
31
|
-
|
32
|
-
def build_message(exception=nil)
|
33
|
-
if @expected_error_message.nil?
|
34
|
-
message = "example block expected #{@expected_error_class.to_s}"
|
35
|
-
else
|
36
|
-
message = "example block expected #{@expected_error_class.new(@expected_error_message.to_s).inspect}"
|
37
|
-
end
|
38
|
-
message << " but raised #{exception.inspect}" if exception
|
39
|
-
message << " but nothing was raised" unless exception
|
40
|
-
message << "\n"
|
41
|
-
message << @file_and_line_number
|
42
|
-
end
|
43
|
-
|
44
|
-
def error_matches?(error)
|
45
|
-
return false unless error.kind_of?(@expected_error_class)
|
46
|
-
unless @expected_error_message.nil?
|
47
|
-
if @expected_error_message.is_a?(Regexp)
|
48
|
-
return false unless error.message =~ @expected_error_message
|
49
|
-
else
|
50
|
-
return false unless error.message == @expected_error_message
|
51
|
-
end
|
52
|
-
end
|
53
|
-
return true
|
54
|
-
end
|
55
|
-
|
56
|
-
def handle(errors)
|
57
|
-
if @expected_error_class
|
58
|
-
if errors.empty?
|
59
|
-
errors << Spec::Expectations::ExpectationNotMetError.new(build_message)
|
60
|
-
else
|
61
|
-
error_to_remove = errors.detect do |error|
|
62
|
-
error_matches?(error)
|
63
|
-
end
|
64
|
-
if error_to_remove.nil?
|
65
|
-
errors.insert(0,Spec::Expectations::ExpectationNotMetError.new(build_message(errors[0])))
|
66
|
-
else
|
67
|
-
errors.delete(error_to_remove)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,123 +0,0 @@
|
|
1
|
-
module Spec
|
2
|
-
module Runner
|
3
|
-
class BehaviourRunner
|
4
|
-
|
5
|
-
def initialize(options, arg=nil)
|
6
|
-
@behaviours = []
|
7
|
-
@options = options
|
8
|
-
end
|
9
|
-
|
10
|
-
def add_behaviour(behaviour)
|
11
|
-
if !specified_examples.nil? && !specified_examples.empty?
|
12
|
-
behaviour.retain_examples_matching!(specified_examples)
|
13
|
-
end
|
14
|
-
@behaviours << behaviour if behaviour.number_of_examples != 0 && !behaviour.shared?
|
15
|
-
end
|
16
|
-
|
17
|
-
# Runs all behaviours and returns the number of failures.
|
18
|
-
def run(paths, exit_when_done)
|
19
|
-
prepare!(paths)
|
20
|
-
begin
|
21
|
-
run_behaviours
|
22
|
-
rescue Interrupt
|
23
|
-
ensure
|
24
|
-
report_end
|
25
|
-
end
|
26
|
-
failure_count = report_dump
|
27
|
-
|
28
|
-
heckle if(failure_count == 0 && !@options.heckle_runner.nil?)
|
29
|
-
|
30
|
-
if(exit_when_done)
|
31
|
-
exit_code = (failure_count == 0) ? 0 : 1
|
32
|
-
exit(exit_code)
|
33
|
-
end
|
34
|
-
failure_count
|
35
|
-
end
|
36
|
-
|
37
|
-
def report_end
|
38
|
-
@options.reporter.end
|
39
|
-
end
|
40
|
-
|
41
|
-
def report_dump
|
42
|
-
@options.reporter.dump
|
43
|
-
end
|
44
|
-
|
45
|
-
def prepare!(paths)
|
46
|
-
unless paths.nil? # It's nil when running single specs with ruby
|
47
|
-
paths = find_paths(paths)
|
48
|
-
sorted_paths = sort_paths(paths)
|
49
|
-
load_specs(sorted_paths) # This will populate @behaviours via callbacks to add_behaviour
|
50
|
-
end
|
51
|
-
@options.reporter.start(number_of_examples)
|
52
|
-
@behaviours.reverse! if @options.reverse
|
53
|
-
set_sequence_numbers
|
54
|
-
end
|
55
|
-
|
56
|
-
def run_behaviours
|
57
|
-
@behaviours.each do |behaviour|
|
58
|
-
behaviour.run(@options.reporter, @options.dry_run, @options.reverse, @options.timeout)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def number_of_examples
|
63
|
-
@behaviours.inject(0) {|sum, behaviour| sum + behaviour.number_of_examples}
|
64
|
-
end
|
65
|
-
|
66
|
-
FILE_SORTERS = {
|
67
|
-
'mtime' => lambda {|file_a, file_b| File.mtime(file_b) <=> File.mtime(file_a)}
|
68
|
-
}
|
69
|
-
|
70
|
-
def sorter(paths)
|
71
|
-
FILE_SORTERS[@options.loadby]
|
72
|
-
end
|
73
|
-
|
74
|
-
def sort_paths(paths)
|
75
|
-
sorter = sorter(paths)
|
76
|
-
paths = paths.sort(&sorter) unless sorter.nil?
|
77
|
-
paths
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
# Sets the #number on each Example
|
83
|
-
def set_sequence_numbers
|
84
|
-
number = 0
|
85
|
-
@behaviours.each do |behaviour|
|
86
|
-
number = behaviour.set_sequence_numbers(number, @options.reverse)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def find_paths(paths)
|
91
|
-
result = []
|
92
|
-
paths.each do |path|
|
93
|
-
if File.directory?(path)
|
94
|
-
result += Dir["#{path}/**/*.rb"]
|
95
|
-
elsif File.file?(path)
|
96
|
-
result << path
|
97
|
-
else
|
98
|
-
raise "File or directory not found: #{path}"
|
99
|
-
end
|
100
|
-
end
|
101
|
-
result
|
102
|
-
end
|
103
|
-
|
104
|
-
def load_specs(paths)
|
105
|
-
paths.each do |path|
|
106
|
-
load path
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def specified_examples
|
111
|
-
@options.examples
|
112
|
-
end
|
113
|
-
|
114
|
-
def heckle
|
115
|
-
heckle_runner = @options.heckle_runner
|
116
|
-
@options.heckle_runner = nil
|
117
|
-
behaviour_runner = self.class.new(@options)
|
118
|
-
behaviour_runner.instance_variable_set(:@behaviours, @behaviours)
|
119
|
-
heckle_runner.heckle_with(behaviour_runner)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
module Kernel
|
2
|
-
# Creates and registers an instance of a Spec::DSL::Behaviour (or a subclass).
|
3
|
-
# The instantiated behaviour class depends on the directory of the file
|
4
|
-
# calling this method. For example, Spec::Rails will use different
|
5
|
-
# classes for specs living in <tt>spec/models</tt>, <tt>spec/helpers</tt>,
|
6
|
-
# <tt>spec/views</tt> and <tt>spec/controllers</tt>.
|
7
|
-
#
|
8
|
-
# It is also possible to override autodiscovery of the behaviour class
|
9
|
-
# with an options Hash as the last argument:
|
10
|
-
#
|
11
|
-
# describe "name", :behaviour_type => :something_special do ...
|
12
|
-
#
|
13
|
-
# The reason for using different behaviour classes is to have
|
14
|
-
# different matcher methods available from within the <tt>describe</tt>
|
15
|
-
# block.
|
16
|
-
#
|
17
|
-
# See Spec::DSL::BehaviourFactory#add_behaviour_class for details about
|
18
|
-
# how to register special Spec::DSL::Behaviour implementations.
|
19
|
-
#
|
20
|
-
def describe(*args, &block)
|
21
|
-
raise ArgumentError if args.empty?
|
22
|
-
args << {} unless Hash === args.last
|
23
|
-
args.last[:spec_path] = caller(0)[1]
|
24
|
-
register_behaviour(Spec::DSL::BehaviourFactory.create(*args, &block))
|
25
|
-
end
|
26
|
-
alias :context :describe
|
27
|
-
|
28
|
-
def respond_to(*names)
|
29
|
-
Spec::Matchers::RespondTo.new(*names)
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def register_behaviour(behaviour)
|
35
|
-
if behaviour.shared?
|
36
|
-
Spec::DSL::Behaviour.add_shared_behaviour(behaviour)
|
37
|
-
else
|
38
|
-
behaviour_runner.add_behaviour(behaviour)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def behaviour_runner
|
43
|
-
# TODO: Figure out a better way to get this considered "covered" and keep this statement on multiple lines
|
44
|
-
unless $behaviour_runner; \
|
45
|
-
$behaviour_runner = ::Spec::Runner::OptionParser.new.create_behaviour_runner(ARGV.dup, STDERR, STDOUT, false); \
|
46
|
-
at_exit { $behaviour_runner.run(nil, false) }; \
|
47
|
-
end
|
48
|
-
$behaviour_runner
|
49
|
-
end
|
50
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# The following copyright applies to Object#copy_instance_variables_from,
|
2
|
-
# which we borrowed from active_support.
|
3
|
-
#
|
4
|
-
# Copyright (c) 2004 David Heinemeier Hansson
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining
|
7
|
-
# a copy of this software and associated documentation files (the
|
8
|
-
# "Software"), to deal in the Software without restriction, including
|
9
|
-
# without limitation the rights to use, copy, modify, merge, publish,
|
10
|
-
# distribute, sublicense, and/or sell copies of the Software, and to
|
11
|
-
# permit persons to whom the Software is furnished to do so, subject to
|
12
|
-
# the following conditions:
|
13
|
-
#
|
14
|
-
# The above copyright notice and this permission notice shall be
|
15
|
-
# included in all copies or substantial portions of the Software.
|
16
|
-
#
|
17
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
18
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
19
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
20
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
21
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
22
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
23
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
24
|
-
class Object
|
25
|
-
# From active_support
|
26
|
-
def copy_instance_variables_from(object, exclude = []) # :nodoc:
|
27
|
-
exclude += object.protected_instance_variables if object.respond_to? :protected_instance_variables
|
28
|
-
|
29
|
-
instance_variables = object.instance_variables - exclude.map { |name| name.to_s }
|
30
|
-
instance_variables.each { |name| instance_variable_set(name, object.instance_variable_get(name)) }
|
31
|
-
end
|
32
|
-
end
|