rspec 1.1.11 → 1.1.12
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/.autotest +4 -0
- data/History.txt +55 -0
- data/Manifest.txt +102 -122
- data/README.txt +30 -12
- data/Rakefile +10 -10
- data/TODO.txt +10 -2
- data/{failing_examples → examples/failing}/README.txt +0 -0
- data/{failing_examples → examples/failing}/diffing_spec.rb +0 -0
- data/{failing_examples → examples/failing}/failing_autogenerated_docstrings_example.rb +0 -0
- data/{failing_examples/failure_in_teardown.rb → examples/failing/failure_in_after.rb} +1 -1
- data/{failing_examples/failure_in_setup.rb → examples/failing/failure_in_before.rb} +1 -1
- data/{failing_examples → examples/failing}/mocking_example.rb +0 -0
- data/{failing_examples → examples/failing}/mocking_with_flexmock.rb +0 -0
- data/{failing_examples → examples/failing}/mocking_with_mocha.rb +0 -0
- data/{failing_examples → examples/failing}/mocking_with_rr.rb +0 -0
- data/{failing_examples → examples/failing}/partial_mock_example.rb +0 -0
- data/{failing_examples → examples/failing}/predicate_example.rb +5 -0
- data/{failing_examples → examples/failing}/raising_example.rb +0 -0
- data/{failing_examples → examples/failing}/spec_helper.rb +1 -1
- data/{failing_examples → examples/failing}/syntax_error_example.rb +0 -0
- data/{failing_examples → examples/failing}/team_spec.rb +0 -0
- data/{failing_examples → examples/failing}/timeout_behaviour.rb +0 -0
- data/examples/{pure → passing}/autogenerated_docstrings_example.rb +6 -0
- data/examples/{pure → passing}/before_and_after_example.rb +0 -0
- data/examples/{pure → passing}/behave_as_example.rb +0 -0
- data/examples/{pure → passing}/custom_expectation_matchers.rb +0 -0
- data/examples/{pure → passing}/custom_formatter.rb +1 -1
- data/examples/{pure → passing}/dynamic_spec.rb +2 -2
- data/examples/{pure → passing}/file_accessor.rb +0 -0
- data/examples/{pure → passing}/file_accessor_spec.rb +0 -0
- data/examples/{pure → passing}/greeter_spec.rb +0 -0
- data/examples/{pure → passing}/helper_method_example.rb +0 -0
- data/examples/{pure → passing}/io_processor.rb +0 -0
- data/examples/{pure → passing}/io_processor_spec.rb +0 -0
- data/examples/{pure → passing}/legacy_spec.rb +0 -0
- data/examples/{pure → passing}/mocking_example.rb +0 -0
- data/examples/{pure/multi_threaded_behaviour_runner.rb → passing/multi_threaded_example_group_runner.rb} +1 -3
- data/examples/{pure → passing}/nested_classes_example.rb +0 -0
- data/examples/{pure → passing}/partial_mock_example.rb +0 -0
- data/examples/{pure → passing}/pending_example.rb +0 -0
- data/examples/{pure → passing}/predicate_example.rb +0 -0
- data/examples/{pure → passing}/priority.txt +0 -0
- data/examples/{pure → passing}/shared_example_group_example.rb +0 -0
- data/examples/{pure → passing}/shared_stack_examples.rb +1 -3
- data/examples/passing/simple_matcher_example.rb +31 -0
- data/examples/{pure → passing}/spec_helper.rb +0 -0
- data/examples/{pure → passing}/stack.rb +0 -0
- data/examples/{pure → passing}/stack_spec.rb +3 -2
- data/examples/{pure → passing}/stack_spec_with_nested_example_groups.rb +0 -0
- data/examples/{pure → passing}/stubbing_example.rb +0 -0
- data/examples/{pure → passing}/yielding_example.rb +0 -0
- data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +86 -0
- data/features/before_and_after_blocks/before_and_after_blocks.feature +168 -0
- data/{stories/example_groups/autogenerated_docstrings → features/example_groups/autogenerated_docstrings.feature} +5 -5
- data/{stories/example_groups/example_group_with_should_methods → features/example_groups/example_group_with_should_methods.feature} +3 -3
- data/{stories/example_groups/nested_groups → features/example_groups/nested_groups.feature} +4 -4
- data/{stories/example_groups/output → features/example_groups/output.feature} +3 -8
- data/{stories/interop/examples_and_tests_together → features/interop/examples_and_tests_together.feature} +5 -4
- data/features/interop/test_but_not_test_unit.feature +14 -0
- data/{stories/interop/test_case_with_should_methods → features/interop/test_case_with_should_methods.feature} +2 -2
- data/{stories/mock_framework_integration/use_flexmock.story → features/mock_framework_integration/use_flexmock.feature} +1 -1
- data/features/step_definitions/running_rspec.rb +54 -0
- data/features/support/env.rb +26 -0
- data/{stories/resources → features/support}/helpers/cmdline.rb +0 -0
- data/{stories/resources → features/support}/helpers/story_helper.rb +1 -1
- data/{stories/resources → features/support}/matchers/smart_match.rb +0 -0
- data/{plugins → lib/adapters}/mock_frameworks/flexmock.rb +1 -1
- data/{plugins → lib/adapters}/mock_frameworks/mocha.rb +1 -1
- data/{plugins → lib/adapters}/mock_frameworks/rr.rb +1 -1
- data/{plugins → lib/adapters}/mock_frameworks/rspec.rb +2 -2
- data/lib/autotest/rspec.rb +4 -3
- data/lib/spec.rb +2 -27
- data/lib/spec/dsl.rb +1 -0
- data/lib/spec/{extensions → dsl}/main.rb +10 -10
- data/lib/spec/example.rb +175 -1
- data/lib/spec/example/before_and_after_hooks.rb +30 -24
- data/lib/spec/example/example_group.rb +1 -0
- data/lib/spec/example/example_group_factory.rb +26 -9
- data/lib/spec/example/example_group_methods.rb +138 -113
- data/lib/spec/example/example_methods.rb +88 -25
- data/lib/spec/example/shared_example_group.rb +28 -21
- data/lib/spec/expectations.rb +22 -18
- data/lib/spec/expectations/handler.rb +16 -36
- data/lib/spec/interop/test/unit/testcase.rb +19 -17
- data/lib/spec/interop/test/unit/testresult.rb +1 -1
- data/lib/spec/interop/test/unit/testsuite_adapter.rb +1 -1
- data/lib/spec/matchers.rb +7 -28
- data/lib/spec/matchers/be.rb +103 -116
- data/lib/spec/matchers/be_close.rb +6 -22
- data/lib/spec/matchers/eql.rb +7 -25
- data/lib/spec/matchers/equal.rb +7 -25
- data/lib/spec/matchers/errors.rb +5 -0
- data/lib/spec/matchers/exist.rb +8 -14
- data/lib/spec/matchers/generated_descriptions.rb +48 -0
- data/lib/spec/matchers/has.rb +12 -28
- data/lib/spec/matchers/include.rb +12 -9
- data/lib/spec/matchers/match.rb +8 -27
- data/lib/spec/matchers/match_array.rb +79 -0
- data/lib/spec/matchers/method_missing.rb +9 -0
- data/lib/spec/matchers/operator_matcher.rb +39 -48
- data/lib/spec/matchers/raise_error.rb +4 -8
- data/lib/spec/matchers/respond_to.rb +33 -8
- data/lib/spec/matchers/throw_symbol.rb +49 -17
- data/lib/spec/matchers/wrap_expectation.rb +55 -0
- data/lib/spec/mocks/argument_constraints.rb +77 -5
- data/lib/spec/mocks/message_expectation.rb +7 -7
- data/lib/spec/mocks/proxy.rb +14 -12
- data/lib/spec/rake/spectask.rb +4 -6
- data/lib/spec/ruby.rb +9 -0
- data/lib/spec/runner.rb +37 -162
- data/lib/spec/runner/backtrace_tweaker.rb +5 -3
- data/lib/spec/runner/class_and_arguments_parser.rb +7 -9
- data/lib/spec/runner/command_line.rb +6 -8
- data/lib/spec/{example → runner}/configuration.rb +46 -47
- data/lib/spec/runner/example_group_runner.rb +15 -4
- data/lib/spec/runner/formatter/base_text_formatter.rb +4 -3
- data/lib/spec/runner/formatter/html_formatter.rb +14 -11
- data/lib/spec/runner/formatter/nested_text_formatter.rb +2 -2
- data/lib/spec/runner/heckle_runner.rb +58 -56
- data/lib/spec/runner/option_parser.rb +8 -4
- data/lib/spec/runner/options.rb +29 -14
- data/lib/spec/runner/reporter.rb +1 -1
- data/lib/spec/runner/spec_parser.rb +11 -9
- data/lib/spec/story/runner.rb +40 -42
- data/lib/spec/story/runner/story_runner.rb +10 -6
- data/lib/spec/story/world.rb +66 -70
- data/lib/spec/version.rb +4 -2
- data/{rake_tasks → resources/rake}/examples.rake +0 -0
- data/{rake_tasks → resources/rake}/examples_with_rcov.rake +0 -0
- data/{rake_tasks → resources/rake}/failing_examples_with_html.rake +0 -0
- data/{rake_tasks → resources/rake}/verify_rcov.rake +0 -0
- data/{stories/resources → resources}/spec/example_group_with_should_methods.rb +1 -1
- data/{stories/resources → resources}/spec/simple_spec.rb +1 -1
- data/resources/spec/spec_with_flexmock.rb +19 -0
- data/{stories/resources → resources}/test/spec_and_test_together.rb +1 -1
- data/resources/test/spec_including_test_but_not_unit.rb +11 -0
- data/{stories/resources → resources}/test/test_case_with_should_methods.rb +2 -2
- data/rspec.gemspec +16 -6
- data/spec/autotest/autotest_helper.rb +2 -2
- data/spec/autotest/discover_spec.rb +4 -15
- data/spec/autotest/failed_results_re_spec.rb +24 -0
- data/spec/autotest/rspec_spec.rb +2 -38
- data/spec/spec/dsl/main_spec.rb +88 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +6 -2
- data/spec/spec/example/example_group_factory_spec.rb +50 -10
- data/spec/spec/example/example_group_methods_spec.rb +210 -160
- data/spec/spec/example/example_group_spec.rb +44 -52
- data/spec/spec/example/example_matcher_spec.rb +6 -23
- data/spec/spec/example/example_methods_spec.rb +176 -54
- data/spec/spec/example/helper_method_spec.rb +24 -0
- data/spec/spec/example/pending_module_spec.rb +2 -8
- data/spec/spec/example/shared_example_group_spec.rb +56 -80
- data/spec/spec/expectations/extensions/object_spec.rb +0 -50
- data/spec/spec/expectations/wrap_expectation_spec.rb +30 -0
- data/spec/spec/interop/test/unit/spec_spec.rb +1 -5
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +4 -0
- data/spec/spec/matchers/be_close_spec.rb +12 -10
- data/spec/spec/matchers/be_spec.rb +62 -7
- data/spec/spec/matchers/description_generation_spec.rb +19 -0
- data/spec/spec/matchers/eql_spec.rb +7 -6
- data/spec/spec/matchers/equal_spec.rb +7 -6
- data/spec/spec/matchers/handler_spec.rb +4 -43
- data/spec/spec/matchers/has_spec.rb +1 -1
- data/spec/spec/matchers/have_spec.rb +23 -18
- data/spec/spec/matchers/include_spec.rb +24 -0
- data/spec/spec/matchers/match_array_spec.rb +83 -0
- data/spec/spec/matchers/matcher_methods_spec.rb +1 -13
- data/spec/spec/matchers/raise_error_spec.rb +18 -0
- data/spec/spec/matchers/respond_to_spec.rb +71 -9
- data/spec/spec/matchers/throw_symbol_spec.rb +85 -43
- data/spec/spec/mocks/bug_report_11545_spec.rb +4 -5
- data/spec/spec/mocks/bug_report_496.rb +11 -9
- data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
- data/spec/spec/mocks/hash_including_matcher_spec.rb +39 -2
- data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
- data/spec/spec/mocks/mock_spec.rb +5 -6
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +2 -2
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +18 -3
- data/spec/spec/mocks/stub_spec.rb +6 -0
- data/spec/spec/mocks/stubbed_message_expectations_spec.rb +14 -0
- data/spec/spec/runner/command_line_spec.rb +4 -4
- data/spec/spec/runner/configuration_spec.rb +301 -0
- data/spec/spec/runner/drb_command_line_spec.rb +4 -4
- data/spec/spec/runner/example_group_runner_spec.rb +33 -0
- data/spec/spec/runner/formatter/base_formatter_spec.rb +13 -102
- data/spec/spec/runner/formatter/base_text_formatter_spec.rb +23 -0
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +5 -5
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +3 -3
- data/spec/spec/runner/formatter/html_formatted-1.8.4.html +6 -6
- data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +9 -9
- data/spec/spec/runner/formatter/html_formatted-1.8.5.html +6 -6
- data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +10 -10
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +39 -30
- data/spec/spec/runner/formatter/html_formatted-1.8.7.html +379 -0
- data/spec/spec/runner/formatter/html_formatted-1.9.1.html +379 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +14 -13
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +5 -5
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +7 -17
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +18 -17
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +5 -5
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +6 -6
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +33 -30
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +373 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +373 -0
- data/spec/spec/runner/heckler_spec.rb +16 -9
- data/spec/spec/runner/option_parser_spec.rb +3 -18
- data/spec/spec/runner/options_spec.rb +27 -8
- data/spec/spec/runner/reporter_spec.rb +5 -5
- data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
- data/spec/spec/runner/resources/utf8_encoded.rb +7 -0
- data/spec/spec/runner/spec_parser_spec.rb +85 -79
- data/spec/spec/spec_spec.rb +21 -0
- data/spec/spec_helper.rb +9 -1
- data/story_server/prototype/javascripts/prototype.js +1 -1
- metadata +119 -131
- data/examples/stories/adder.rb +0 -13
- data/examples/stories/addition +0 -34
- data/examples/stories/addition.rb +0 -9
- data/examples/stories/calculator.rb +0 -65
- data/examples/stories/game-of-life/.loadpath +0 -5
- data/examples/stories/game-of-life/README.txt +0 -21
- data/examples/stories/game-of-life/behaviour/everything.rb +0 -6
- data/examples/stories/game-of-life/behaviour/examples/examples.rb +0 -3
- data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +0 -35
- data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +0 -66
- data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +0 -21
- data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +0 -21
- data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +0 -42
- data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +0 -42
- data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +0 -17
- data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +0 -53
- data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +0 -52
- data/examples/stories/game-of-life/behaviour/stories/helper.rb +0 -6
- data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +0 -26
- data/examples/stories/game-of-life/behaviour/stories/steps.rb +0 -5
- data/examples/stories/game-of-life/behaviour/stories/stories.rb +0 -3
- data/examples/stories/game-of-life/behaviour/stories/stories.txt +0 -22
- data/examples/stories/game-of-life/life.rb +0 -3
- data/examples/stories/game-of-life/life/game.rb +0 -23
- data/examples/stories/game-of-life/life/grid.rb +0 -43
- data/examples/stories/helper.rb +0 -9
- data/examples/stories/steps/addition_steps.rb +0 -18
- data/lib/spec/adapters.rb +0 -1
- data/lib/spec/adapters/ruby_engine.rb +0 -26
- data/lib/spec/adapters/ruby_engine/mri.rb +0 -8
- data/lib/spec/adapters/ruby_engine/rubinius.rb +0 -8
- data/lib/spec/extensions.rb +0 -4
- data/lib/spec/extensions/class.rb +0 -24
- data/lib/spec/extensions/metaclass.rb +0 -7
- data/lib/spec/extensions/object.rb +0 -6
- data/spec/spec/adapters/ruby_engine_spec.rb +0 -16
- data/spec/spec/example/configuration_spec.rb +0 -296
- data/spec/spec/example/example_runner_spec.rb +0 -194
- data/spec/spec/extensions/main_spec.rb +0 -71
- data/stories/all.rb +0 -5
- data/stories/configuration/before_blocks.story +0 -21
- data/stories/configuration/stories.rb +0 -7
- data/stories/example_groups/stories.rb +0 -7
- data/stories/helper.rb +0 -6
- data/stories/interop/stories.rb +0 -7
- data/stories/mock_framework_integration/stories.rb +0 -7
- data/stories/pending_stories/README +0 -3
- data/stories/resources/spec/before_blocks_example.rb +0 -32
- data/stories/resources/spec/spec_with_flexmock.rb +0 -18
- data/stories/resources/steps/running_rspec.rb +0 -50
- data/stories/resources/stories/failing_story.rb +0 -15
- data/stories/stories/multiline_steps.story +0 -23
- data/stories/stories/steps/multiline_steps.rb +0 -13
- data/stories/stories/stories.rb +0 -6
@@ -10,6 +10,10 @@ module Spec
|
|
10
10
|
parser.parse(args)
|
11
11
|
parser.options
|
12
12
|
end
|
13
|
+
|
14
|
+
def spec_command?
|
15
|
+
$0.split('/').last == 'spec'
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
19
|
attr_reader :options
|
@@ -34,8 +38,8 @@ module Spec
|
|
34
38
|
"an example name directly, causing RSpec to run just the example",
|
35
39
|
"matching that name"],
|
36
40
|
:specification => ["-s", "--specification [NAME]", "DEPRECATED - use -e instead", "(This will be removed when autotest works with -e)"],
|
37
|
-
:line => ["-l", "--line LINE_NUMBER", Integer, "Execute
|
38
|
-
"(does not work for dynamically generated
|
41
|
+
:line => ["-l", "--line LINE_NUMBER", Integer, "Execute example group or example at given line.",
|
42
|
+
"(does not work for dynamically generated examples)"],
|
39
43
|
:format => ["-f", "--format FORMAT[:WHERE]","Specifies what format to use for output. Specify WHERE to tell",
|
40
44
|
"the formatter where to write the output. All built-in formats",
|
41
45
|
"expect WHERE to be a file name, and will write to $stdout if it's",
|
@@ -115,10 +119,10 @@ module Spec
|
|
115
119
|
on(*OPTIONS[:version]) {parse_version}
|
116
120
|
on_tail(*OPTIONS[:help]) {parse_help}
|
117
121
|
end
|
118
|
-
|
122
|
+
|
119
123
|
def order!(argv, &blk)
|
120
124
|
@argv = argv.dup
|
121
|
-
@argv = (@argv.empty? &&
|
125
|
+
@argv = (@argv.empty? && self.class.spec_command?) ? ['--help'] : @argv
|
122
126
|
@options.argv = @argv.dup
|
123
127
|
return if parse_generate_options
|
124
128
|
return if parse_drb
|
data/lib/spec/runner/options.rb
CHANGED
@@ -40,7 +40,6 @@ module Spec
|
|
40
40
|
:diff_format,
|
41
41
|
:dry_run,
|
42
42
|
:profile,
|
43
|
-
:examples,
|
44
43
|
:heckle_runner,
|
45
44
|
:line_number,
|
46
45
|
:loadby,
|
@@ -51,12 +50,10 @@ module Spec
|
|
51
50
|
:user_input_for_runner,
|
52
51
|
:error_stream,
|
53
52
|
:output_stream,
|
54
|
-
:before_suite_parts,
|
55
|
-
:after_suite_parts,
|
56
53
|
# TODO: BT - Figure out a better name
|
57
54
|
:argv
|
58
55
|
)
|
59
|
-
attr_reader :colour, :differ_class, :files, :example_groups
|
56
|
+
attr_reader :colour, :differ_class, :files, :examples, :example_groups
|
60
57
|
|
61
58
|
def initialize(error_stream, output_stream)
|
62
59
|
@error_stream = error_stream
|
@@ -76,7 +73,6 @@ module Spec
|
|
76
73
|
@examples_run = false
|
77
74
|
@examples_should_be_run = nil
|
78
75
|
@user_input_for_runner = nil
|
79
|
-
@before_suite_parts = []
|
80
76
|
@after_suite_parts = []
|
81
77
|
end
|
82
78
|
|
@@ -123,6 +119,14 @@ module Spec
|
|
123
119
|
end
|
124
120
|
end
|
125
121
|
end
|
122
|
+
|
123
|
+
def before_suite_parts
|
124
|
+
Spec::Example::BeforeAndAfterHooks.before_suite_parts
|
125
|
+
end
|
126
|
+
|
127
|
+
def after_suite_parts
|
128
|
+
Spec::Example::BeforeAndAfterHooks.after_suite_parts
|
129
|
+
end
|
126
130
|
|
127
131
|
def examples_run?
|
128
132
|
@examples_run
|
@@ -130,7 +134,17 @@ module Spec
|
|
130
134
|
|
131
135
|
def examples_should_not_be_run
|
132
136
|
@examples_should_be_run = false
|
133
|
-
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def predicate_matchers
|
140
|
+
# TODO - don't like this dependency - perhaps store these in here instead?
|
141
|
+
Spec::Runner.configuration.predicate_matchers
|
142
|
+
end
|
143
|
+
|
144
|
+
def mock_framework
|
145
|
+
# TODO - don't like this dependency - perhaps store this in here instead?
|
146
|
+
Spec::Runner.configuration.mock_framework
|
147
|
+
end
|
134
148
|
|
135
149
|
def colour=(colour)
|
136
150
|
@colour = colour
|
@@ -163,7 +177,7 @@ module Spec
|
|
163
177
|
|
164
178
|
def parse_example(example)
|
165
179
|
if(File.file?(example))
|
166
|
-
@examples = File.open(example).read.split("\n")
|
180
|
+
@examples = [File.open(example).read.split("\n")].flatten
|
167
181
|
else
|
168
182
|
@examples = [example]
|
169
183
|
end
|
@@ -209,11 +223,8 @@ module Spec
|
|
209
223
|
end
|
210
224
|
|
211
225
|
def number_of_examples
|
212
|
-
|
213
|
-
@example_groups.
|
214
|
-
total += example_group.number_of_examples
|
215
|
-
end
|
216
|
-
total
|
226
|
+
return examples.size unless examples.empty?
|
227
|
+
@example_groups.inject(0) {|sum, group| sum + group.number_of_examples}
|
217
228
|
end
|
218
229
|
|
219
230
|
def files_to_load
|
@@ -232,6 +243,10 @@ module Spec
|
|
232
243
|
result
|
233
244
|
end
|
234
245
|
|
246
|
+
def dry_run?
|
247
|
+
@dry_run == true
|
248
|
+
end
|
249
|
+
|
235
250
|
protected
|
236
251
|
def examples_should_be_run?
|
237
252
|
return @examples_should_be_run unless @examples_should_be_run.nil?
|
@@ -265,7 +280,7 @@ module Spec
|
|
265
280
|
def custom_runner
|
266
281
|
return nil unless custom_runner?
|
267
282
|
klass_name, arg = ClassAndArgumentsParser.parse(user_input_for_runner)
|
268
|
-
runner_type = load_class(klass_name, '
|
283
|
+
runner_type = load_class(klass_name, 'example group runner', '--runner')
|
269
284
|
return runner_type.new(self, arg)
|
270
285
|
end
|
271
286
|
|
@@ -299,7 +314,7 @@ module Spec
|
|
299
314
|
error_stream.puts "You must specify one file, not a directory when using the --line option"
|
300
315
|
exit(1) if stderr?
|
301
316
|
else
|
302
|
-
example = SpecParser.new.spec_name_for(files[0], line_number)
|
317
|
+
example = SpecParser.new(self).spec_name_for(files[0], line_number)
|
303
318
|
@examples = [example]
|
304
319
|
end
|
305
320
|
else
|
data/lib/spec/runner/reporter.rb
CHANGED
@@ -4,15 +4,16 @@ module Spec
|
|
4
4
|
class SpecParser
|
5
5
|
attr_reader :best_match
|
6
6
|
|
7
|
-
def initialize
|
7
|
+
def initialize(run_options)
|
8
8
|
@best_match = {}
|
9
|
+
@run_options = run_options
|
9
10
|
end
|
10
11
|
|
11
12
|
def spec_name_for(file, line_number)
|
12
13
|
best_match.clear
|
13
14
|
file = File.expand_path(file)
|
14
|
-
|
15
|
-
|
15
|
+
@run_options.example_groups.each do |example_group|
|
16
|
+
consider_example_group_for_best_match example_group, file, line_number
|
16
17
|
|
17
18
|
example_group.examples.each do |example|
|
18
19
|
consider_example_for_best_match example, example_group, file, line_number
|
@@ -31,8 +32,8 @@ module Spec
|
|
31
32
|
|
32
33
|
protected
|
33
34
|
|
34
|
-
def
|
35
|
-
parsed_backtrace = parse_backtrace(example_group.
|
35
|
+
def consider_example_group_for_best_match(example_group, file, line_number)
|
36
|
+
parsed_backtrace = parse_backtrace(example_group.backtrace)
|
36
37
|
parsed_backtrace.each do |example_file, example_line|
|
37
38
|
if is_best_match?(file, line_number, example_file, example_line)
|
38
39
|
best_match.clear
|
@@ -43,7 +44,7 @@ module Spec
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def consider_example_for_best_match(example, example_group, file, line_number)
|
46
|
-
parsed_backtrace = parse_backtrace(example.
|
47
|
+
parsed_backtrace = parse_backtrace(example.backtrace)
|
47
48
|
parsed_backtrace.each do |example_file, example_line|
|
48
49
|
if is_best_match?(file, line_number, example_file, example_line)
|
49
50
|
best_match.clear
|
@@ -61,9 +62,10 @@ module Spec
|
|
61
62
|
end
|
62
63
|
|
63
64
|
def parse_backtrace(backtrace)
|
64
|
-
backtrace.collect do |trace_line|
|
65
|
-
|
66
|
-
|
65
|
+
Array(backtrace).collect do |trace_line|
|
66
|
+
trace_line =~ /(.*)\:(\d*)(\:|$)/
|
67
|
+
file, number = $1, $2
|
68
|
+
[file, Integer(number)]
|
67
69
|
end
|
68
70
|
end
|
69
71
|
end
|
data/lib/spec/story/runner.rb
CHANGED
@@ -8,52 +8,50 @@ require 'spec/story/runner/plain_text_story_runner.rb'
|
|
8
8
|
module Spec
|
9
9
|
module Story
|
10
10
|
module Runner
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
register_listener(formatter)
|
21
|
-
end
|
22
|
-
self.register_exit_hook
|
23
|
-
end
|
24
|
-
@story_runner
|
25
|
-
end
|
26
|
-
|
27
|
-
def scenario_runner # :nodoc:
|
28
|
-
@scenario_runner ||= ScenarioRunner.new
|
29
|
-
end
|
30
|
-
|
31
|
-
def world_creator # :nodoc:
|
32
|
-
@world_creator ||= World
|
33
|
-
end
|
34
|
-
|
35
|
-
def create_story_runner
|
36
|
-
Runner::StoryRunner.new(scenario_runner, world_creator)
|
37
|
-
end
|
38
|
-
|
39
|
-
# Use this to register a customer output formatter.
|
40
|
-
def register_listener(listener)
|
41
|
-
story_runner.add_listener(listener) # run_started, story_started, story_ended, #run_ended
|
42
|
-
world_creator.add_listener(listener) # found_scenario, step_succeeded, step_failed, step_failed
|
43
|
-
scenario_runner.add_listener(listener) # scenario_started, scenario_succeeded, scenario_pending, scenario_failed
|
44
|
-
end
|
45
|
-
|
46
|
-
def register_exit_hook # :nodoc:
|
47
|
-
at_exit do
|
48
|
-
exit Runner.story_runner.run_stories unless $!
|
11
|
+
def self.run_options # :nodoc:
|
12
|
+
Spec::Runner.options
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.story_runner # :nodoc:
|
16
|
+
unless @story_runner
|
17
|
+
@story_runner = create_story_runner
|
18
|
+
run_options.story_formatters.each do |formatter|
|
19
|
+
register_listener(formatter)
|
49
20
|
end
|
21
|
+
self.register_exit_hook
|
50
22
|
end
|
51
|
-
|
52
|
-
|
53
|
-
|
23
|
+
@story_runner
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.scenario_runner # :nodoc:
|
27
|
+
@scenario_runner ||= ScenarioRunner.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.world_creator # :nodoc:
|
31
|
+
@world_creator ||= World
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.create_story_runner
|
35
|
+
Runner::StoryRunner.new(scenario_runner, world_creator)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Use this to register a customer output formatter.
|
39
|
+
def self.register_listener(listener)
|
40
|
+
story_runner.add_listener(listener) # run_started, story_started, story_ended, #run_ended
|
41
|
+
world_creator.add_listener(listener) # found_scenario, step_succeeded, step_failed, step_failed
|
42
|
+
scenario_runner.add_listener(listener) # scenario_started, scenario_succeeded, scenario_pending, scenario_failed
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.register_exit_hook # :nodoc:
|
46
|
+
at_exit do
|
47
|
+
exit Runner.story_runner.run_stories unless $!
|
54
48
|
end
|
55
|
-
|
56
49
|
end
|
50
|
+
|
51
|
+
def self.dry_run
|
52
|
+
run_options.dry_run
|
53
|
+
end
|
54
|
+
|
57
55
|
end
|
58
56
|
end
|
59
57
|
end
|
@@ -2,12 +2,16 @@ module Spec
|
|
2
2
|
module Story
|
3
3
|
module Runner
|
4
4
|
class StoryRunner
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
def self.current_story_runner
|
6
|
+
@current_story_runner
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.current_story_runner=(current_story_runner)
|
10
|
+
@current_story_runner = current_story_runner
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.scenario_from_current_story(scenario_name)
|
14
|
+
current_story_runner.scenario_from_current_story(scenario_name)
|
11
15
|
end
|
12
16
|
|
13
17
|
attr_accessor :stories, :scenarios, :current_story
|
data/lib/spec/story/world.rb
CHANGED
@@ -15,82 +15,78 @@ module Spec
|
|
15
15
|
module World
|
16
16
|
include ::Spec::Example::Pending
|
17
17
|
include ::Spec::Matchers
|
18
|
-
# store steps and listeners in the singleton metaclass.
|
19
|
-
# This serves both to keep them out of the way of runtime Worlds
|
20
|
-
# and to make them available to all instances.
|
21
|
-
class << self
|
22
|
-
def create(cls = Object, *args)
|
23
|
-
cls.new(*args).extend(World)
|
24
|
-
end
|
25
|
-
|
26
|
-
def listeners
|
27
|
-
@listeners ||= []
|
28
|
-
end
|
29
|
-
|
30
|
-
def add_listener(listener)
|
31
|
-
listeners() << listener
|
32
|
-
end
|
33
|
-
|
34
|
-
def step_mother
|
35
|
-
@step_mother ||= StepMother.new
|
36
|
-
end
|
37
|
-
|
38
|
-
def use(steps)
|
39
|
-
step_mother.use(steps)
|
40
|
-
end
|
41
|
-
|
42
|
-
def step_names
|
43
|
-
@step_names ||= []
|
44
|
-
end
|
45
18
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
19
|
+
def self.create(cls = Object, *args)
|
20
|
+
cls.new(*args).extend(World)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.listeners
|
24
|
+
@listeners ||= []
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.add_listener(listener)
|
28
|
+
listeners() << listener
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.step_mother
|
32
|
+
@step_mother ||= StepMother.new
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.use(steps)
|
36
|
+
step_mother.use(steps)
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.step_names
|
40
|
+
@step_names ||= []
|
41
|
+
end
|
62
42
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
begin
|
72
|
-
listeners.each { |l| l.step_upcoming(type, step_name, *args) }
|
73
|
-
step.perform(world, *args) unless dry_run
|
74
|
-
listeners.each { |l| l.step_succeeded(type, step_name, *args) }
|
75
|
-
rescue Exception => e
|
76
|
-
case e
|
77
|
-
when Spec::Example::ExamplePendingError
|
78
|
-
@listeners.each { |l| l.step_pending(type, step_name, *args) }
|
79
|
-
else
|
80
|
-
@listeners.each { |l| l.step_failed(type, step_name, *args) }
|
81
|
-
end
|
82
|
-
errors << e
|
83
|
-
end
|
43
|
+
def self.run_given_scenario_with_suspended_listeners(world, type, name, scenario)
|
44
|
+
current_listeners = Array.new(listeners)
|
45
|
+
begin
|
46
|
+
listeners.each { |l| l.found_scenario(type, name) }
|
47
|
+
@listeners.clear
|
48
|
+
scenario.perform(world, name) unless dry_run
|
49
|
+
ensure
|
50
|
+
@listeners.replace(current_listeners)
|
84
51
|
end
|
85
|
-
|
86
|
-
|
87
|
-
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.store_and_call(world, type, name, *args, &block)
|
55
|
+
if block_given?
|
56
|
+
step_mother.store(type, Step.new(name, &block))
|
88
57
|
end
|
58
|
+
step = step_mother.find(type, name)
|
59
|
+
|
60
|
+
step_name = step.name
|
61
|
+
step_names << step_name
|
89
62
|
|
90
|
-
|
91
|
-
|
63
|
+
# It's important to have access to the parsed args here, so
|
64
|
+
# we can give them to the listeners. The HTML reporter needs
|
65
|
+
# the args so it can style them. See the generated output in
|
66
|
+
# story_server/prototype/rspec_stories.html (generated by rake stories)
|
67
|
+
args = step.parse_args(name) if args.empty?
|
68
|
+
begin
|
69
|
+
listeners.each { |l| l.step_upcoming(type, step_name, *args) }
|
70
|
+
step.perform(world, *args) unless dry_run
|
71
|
+
listeners.each { |l| l.step_succeeded(type, step_name, *args) }
|
72
|
+
rescue Exception => e
|
73
|
+
case e
|
74
|
+
when Spec::Example::ExamplePendingError
|
75
|
+
@listeners.each { |l| l.step_pending(type, step_name, *args) }
|
76
|
+
else
|
77
|
+
@listeners.each { |l| l.step_failed(type, step_name, *args) }
|
78
|
+
end
|
79
|
+
errors << e
|
92
80
|
end
|
93
|
-
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.errors
|
84
|
+
@errors ||= []
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.dry_run
|
88
|
+
::Spec::Story::Runner.dry_run
|
89
|
+
end
|
94
90
|
|
95
91
|
def start_collecting_errors
|
96
92
|
errors.clear
|