dchelimsky-rspec 1.1.10
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/History.txt +1192 -0
- data/License.txt +22 -0
- data/Manifest.txt +403 -0
- data/README.txt +39 -0
- data/Rakefile +90 -0
- data/TODO.txt +10 -0
- data/bin/autospec +4 -0
- data/bin/spec +4 -0
- data/examples/pure/autogenerated_docstrings_example.rb +19 -0
- data/examples/pure/before_and_after_example.rb +40 -0
- data/examples/pure/behave_as_example.rb +45 -0
- data/examples/pure/custom_expectation_matchers.rb +54 -0
- data/examples/pure/custom_formatter.rb +12 -0
- data/examples/pure/dynamic_spec.rb +9 -0
- data/examples/pure/file_accessor.rb +19 -0
- data/examples/pure/file_accessor_spec.rb +38 -0
- data/examples/pure/greeter_spec.rb +31 -0
- data/examples/pure/helper_method_example.rb +14 -0
- data/examples/pure/io_processor.rb +8 -0
- data/examples/pure/io_processor_spec.rb +21 -0
- data/examples/pure/legacy_spec.rb +11 -0
- data/examples/pure/mocking_example.rb +27 -0
- data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
- data/examples/pure/nested_classes_example.rb +36 -0
- data/examples/pure/partial_mock_example.rb +29 -0
- data/examples/pure/pending_example.rb +20 -0
- data/examples/pure/predicate_example.rb +27 -0
- data/examples/pure/priority.txt +1 -0
- data/examples/pure/shared_example_group_example.rb +81 -0
- data/examples/pure/shared_stack_examples.rb +38 -0
- data/examples/pure/spec_helper.rb +3 -0
- data/examples/pure/stack.rb +36 -0
- data/examples/pure/stack_spec.rb +63 -0
- data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
- data/examples/pure/stubbing_example.rb +69 -0
- data/examples/pure/yielding_example.rb +33 -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/.loadpath +5 -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/game.rb +23 -0
- data/examples/stories/game-of-life/life/grid.rb +43 -0
- data/examples/stories/game-of-life/life.rb +3 -0
- data/examples/stories/helper.rb +9 -0
- data/examples/stories/steps/addition_steps.rb +18 -0
- data/failing_examples/README.txt +7 -0
- data/failing_examples/diffing_spec.rb +36 -0
- data/failing_examples/failing_autogenerated_docstrings_example.rb +19 -0
- data/failing_examples/failure_in_setup.rb +10 -0
- data/failing_examples/failure_in_teardown.rb +10 -0
- data/failing_examples/mocking_example.rb +40 -0
- data/failing_examples/mocking_with_flexmock.rb +26 -0
- data/failing_examples/mocking_with_mocha.rb +25 -0
- data/failing_examples/mocking_with_rr.rb +27 -0
- data/failing_examples/partial_mock_example.rb +20 -0
- data/failing_examples/predicate_example.rb +29 -0
- data/failing_examples/raising_example.rb +47 -0
- data/failing_examples/spec_helper.rb +3 -0
- data/failing_examples/syntax_error_example.rb +7 -0
- data/failing_examples/team_spec.rb +44 -0
- data/failing_examples/timeout_behaviour.rb +7 -0
- data/init.rb +9 -0
- data/lib/autotest/discover.rb +3 -0
- data/lib/autotest/rspec.rb +46 -0
- data/lib/spec/adapters/ruby_engine/mri.rb +8 -0
- data/lib/spec/adapters/ruby_engine/rubinius.rb +8 -0
- data/lib/spec/adapters/ruby_engine.rb +26 -0
- data/lib/spec/adapters.rb +1 -0
- data/lib/spec/example/before_and_after_hooks.rb +93 -0
- data/lib/spec/example/configuration.rb +167 -0
- data/lib/spec/example/errors.rb +30 -0
- data/lib/spec/example/example_group.rb +25 -0
- data/lib/spec/example/example_group_factory.rb +81 -0
- data/lib/spec/example/example_group_methods.rb +368 -0
- data/lib/spec/example/example_matcher.rb +44 -0
- data/lib/spec/example/example_methods.rb +105 -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 +52 -0
- data/lib/spec/example.rb +12 -0
- data/lib/spec/expectations/differs/default.rb +66 -0
- data/lib/spec/expectations/errors.rb +12 -0
- data/lib/spec/expectations/extensions/object.rb +63 -0
- data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
- data/lib/spec/expectations/extensions.rb +2 -0
- data/lib/spec/expectations/handler.rb +52 -0
- data/lib/spec/expectations.rb +56 -0
- data/lib/spec/extensions/class.rb +24 -0
- data/lib/spec/extensions/main.rb +87 -0
- data/lib/spec/extensions/metaclass.rb +7 -0
- data/lib/spec/extensions/object.rb +6 -0
- data/lib/spec/extensions.rb +4 -0
- data/lib/spec/interop/test/unit/autorunner.rb +6 -0
- data/lib/spec/interop/test/unit/testcase.rb +71 -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 +61 -0
- data/lib/spec/interop/test.rb +12 -0
- data/lib/spec/matchers/be.rb +221 -0
- data/lib/spec/matchers/be_close.rb +37 -0
- data/lib/spec/matchers/change.rb +148 -0
- data/lib/spec/matchers/eql.rb +43 -0
- data/lib/spec/matchers/equal.rb +43 -0
- data/lib/spec/matchers/exist.rb +22 -0
- data/lib/spec/matchers/has.rb +34 -0
- data/lib/spec/matchers/have.rb +150 -0
- data/lib/spec/matchers/include.rb +77 -0
- data/lib/spec/matchers/match.rb +41 -0
- data/lib/spec/matchers/operator_matcher.rb +79 -0
- data/lib/spec/matchers/raise_error.rb +132 -0
- data/lib/spec/matchers/respond_to.rb +46 -0
- data/lib/spec/matchers/satisfy.rb +47 -0
- data/lib/spec/matchers/simple_matcher.rb +132 -0
- data/lib/spec/matchers/throw_symbol.rb +74 -0
- data/lib/spec/matchers.rb +162 -0
- data/lib/spec/mocks/argument_constraints.rb +165 -0
- data/lib/spec/mocks/argument_expectation.rb +49 -0
- data/lib/spec/mocks/error_generator.rb +84 -0
- data/lib/spec/mocks/errors.rb +10 -0
- data/lib/spec/mocks/extensions/object.rb +3 -0
- data/lib/spec/mocks/extensions.rb +1 -0
- data/lib/spec/mocks/framework.rb +15 -0
- data/lib/spec/mocks/message_expectation.rb +331 -0
- data/lib/spec/mocks/methods.rb +51 -0
- data/lib/spec/mocks/mock.rb +56 -0
- data/lib/spec/mocks/order_group.rb +29 -0
- data/lib/spec/mocks/proxy.rb +224 -0
- data/lib/spec/mocks/space.rb +28 -0
- data/lib/spec/mocks/spec_methods.rb +46 -0
- data/lib/spec/mocks.rb +200 -0
- data/lib/spec/rake/spectask.rb +227 -0
- data/lib/spec/rake/verify_rcov.rb +52 -0
- data/lib/spec/runner/backtrace_tweaker.rb +56 -0
- data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
- data/lib/spec/runner/command_line.rb +17 -0
- data/lib/spec/runner/drb_command_line.rb +20 -0
- data/lib/spec/runner/example_group_runner.rb +59 -0
- data/lib/spec/runner/formatter/base_formatter.rb +79 -0
- data/lib/spec/runner/formatter/base_text_formatter.rb +126 -0
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
- data/lib/spec/runner/formatter/html_formatter.rb +337 -0
- data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
- data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
- data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
- data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
- data/lib/spec/runner/formatter/story/html_formatter.rb +174 -0
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +194 -0
- data/lib/spec/runner/formatter/story/progress_bar_formatter.rb +42 -0
- data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
- data/lib/spec/runner/heckle_runner.rb +72 -0
- data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
- data/lib/spec/runner/option_parser.rb +205 -0
- data/lib/spec/runner/options.rb +320 -0
- data/lib/spec/runner/reporter.rb +167 -0
- data/lib/spec/runner/spec_parser.rb +71 -0
- data/lib/spec/runner.rb +213 -0
- data/lib/spec/story/extensions/main.rb +86 -0
- data/lib/spec/story/extensions/regexp.rb +9 -0
- data/lib/spec/story/extensions/string.rb +9 -0
- data/lib/spec/story/extensions.rb +3 -0
- data/lib/spec/story/given_scenario.rb +14 -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 +54 -0
- data/lib/spec/story/runner/story_mediator.rb +137 -0
- data/lib/spec/story/runner/story_parser.rb +247 -0
- data/lib/spec/story/runner/story_runner.rb +70 -0
- data/lib/spec/story/runner.rb +59 -0
- data/lib/spec/story/scenario.rb +14 -0
- data/lib/spec/story/step.rb +70 -0
- data/lib/spec/story/step_group.rb +89 -0
- data/lib/spec/story/step_mother.rb +38 -0
- data/lib/spec/story/story.rb +39 -0
- data/lib/spec/story/world.rb +128 -0
- data/lib/spec/story.rb +10 -0
- data/lib/spec/version.rb +13 -0
- data/lib/spec.rb +32 -0
- data/plugins/mock_frameworks/flexmock.rb +23 -0
- data/plugins/mock_frameworks/mocha.rb +19 -0
- data/plugins/mock_frameworks/rr.rb +21 -0
- data/plugins/mock_frameworks/rspec.rb +20 -0
- data/rake_tasks/examples.rake +7 -0
- data/rake_tasks/examples_with_rcov.rake +9 -0
- data/rake_tasks/failing_examples_with_html.rake +9 -0
- data/rake_tasks/verify_rcov.rake +7 -0
- data/rspec.gemspec +42 -0
- data/spec/README.jruby +15 -0
- data/spec/autotest/autotest_helper.rb +6 -0
- data/spec/autotest/autotest_matchers.rb +47 -0
- data/spec/autotest/discover_spec.rb +19 -0
- data/spec/autotest/rspec_spec.rb +150 -0
- data/spec/rspec_suite.rb +6 -0
- data/spec/ruby_forker.rb +13 -0
- data/spec/spec/adapters/ruby_engine_spec.rb +16 -0
- data/spec/spec/example/configuration_spec.rb +296 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
- data/spec/spec/example/example_group_factory_spec.rb +165 -0
- data/spec/spec/example/example_group_methods_spec.rb +584 -0
- data/spec/spec/example/example_group_spec.rb +683 -0
- data/spec/spec/example/example_matcher_spec.rb +96 -0
- data/spec/spec/example/example_methods_spec.rb +169 -0
- data/spec/spec/example/example_runner_spec.rb +194 -0
- data/spec/spec/example/nested_example_group_spec.rb +71 -0
- data/spec/spec/example/pending_module_spec.rb +145 -0
- data/spec/spec/example/predicate_matcher_spec.rb +21 -0
- data/spec/spec/example/shared_example_group_spec.rb +281 -0
- data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
- data/spec/spec/expectations/differs/default_spec.rb +127 -0
- data/spec/spec/expectations/extensions/object_spec.rb +95 -0
- data/spec/spec/expectations/fail_with_spec.rb +71 -0
- data/spec/spec/extensions/main_spec.rb +71 -0
- data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
- data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
- data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
- data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
- data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
- data/spec/spec/interop/test/unit/spec_spec.rb +52 -0
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
- data/spec/spec/interop/test/unit/testcase_spec.rb +49 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
- data/spec/spec/matchers/be_close_spec.rb +39 -0
- data/spec/spec/matchers/be_spec.rb +248 -0
- data/spec/spec/matchers/change_spec.rb +329 -0
- data/spec/spec/matchers/description_generation_spec.rb +153 -0
- data/spec/spec/matchers/eql_spec.rb +28 -0
- data/spec/spec/matchers/equal_spec.rb +28 -0
- data/spec/spec/matchers/exist_spec.rb +57 -0
- data/spec/spec/matchers/handler_spec.rb +150 -0
- data/spec/spec/matchers/has_spec.rb +63 -0
- data/spec/spec/matchers/have_spec.rb +394 -0
- data/spec/spec/matchers/include_spec.rb +64 -0
- data/spec/spec/matchers/match_spec.rb +37 -0
- data/spec/spec/matchers/matcher_methods_spec.rb +78 -0
- data/spec/spec/matchers/mock_constraint_matchers_spec.rb +24 -0
- data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
- data/spec/spec/matchers/raise_error_spec.rb +315 -0
- data/spec/spec/matchers/respond_to_spec.rb +54 -0
- data/spec/spec/matchers/satisfy_spec.rb +36 -0
- data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +54 -0
- data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
- data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
- data/spec/spec/mocks/at_least_spec.rb +97 -0
- data/spec/spec/mocks/at_most_spec.rb +93 -0
- data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
- data/spec/spec/mocks/bug_report_10263_spec.rb +24 -0
- data/spec/spec/mocks/bug_report_11545_spec.rb +33 -0
- data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
- data/spec/spec/mocks/bug_report_496.rb +17 -0
- data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
- data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
- data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
- data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +95 -0
- data/spec/spec/mocks/hash_including_matcher_spec.rb +53 -0
- data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
- data/spec/spec/mocks/mock_space_spec.rb +54 -0
- data/spec/spec/mocks/mock_spec.rb +555 -0
- data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
- data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
- data/spec/spec/mocks/once_counts_spec.rb +53 -0
- data/spec/spec/mocks/options_hash_spec.rb +35 -0
- data/spec/spec/mocks/partial_mock_spec.rb +149 -0
- data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +130 -0
- data/spec/spec/mocks/precise_counts_spec.rb +52 -0
- data/spec/spec/mocks/record_messages_spec.rb +26 -0
- data/spec/spec/mocks/stub_spec.rb +188 -0
- data/spec/spec/mocks/twice_counts_spec.rb +67 -0
- data/spec/spec/package/bin_spec_spec.rb +22 -0
- data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
- data/spec/spec/runner/command_line_spec.rb +141 -0
- data/spec/spec/runner/drb_command_line_spec.rb +97 -0
- data/spec/spec/runner/empty_file.txt +0 -0
- data/spec/spec/runner/examples.txt +2 -0
- data/spec/spec/runner/failed.txt +3 -0
- data/spec/spec/runner/formatter/base_formatter_spec.rb +112 -0
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +370 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +61 -0
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +318 -0
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +155 -0
- data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
- data/spec/spec/runner/formatter/story/html_formatter_spec.rb +135 -0
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +600 -0
- data/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb +82 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +370 -0
- data/spec/spec/runner/heckle_runner_spec.rb +78 -0
- data/spec/spec/runner/heckler_spec.rb +13 -0
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
- data/spec/spec/runner/option_parser_spec.rb +421 -0
- data/spec/spec/runner/options_spec.rb +450 -0
- 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 +62 -0
- data/spec/spec/runner/reporter_spec.rb +238 -0
- data/spec/spec/runner/resources/a_bar.rb +0 -0
- data/spec/spec/runner/resources/a_foo.rb +0 -0
- data/spec/spec/runner/resources/a_spec.rb +1 -0
- data/spec/spec/runner/spec.opts +2 -0
- data/spec/spec/runner/spec_drb.opts +1 -0
- data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
- data/spec/spec/runner/spec_parser_spec.rb +85 -0
- data/spec/spec/runner/spec_spaced.opts +2 -0
- data/spec/spec/runner_spec.rb +11 -0
- data/spec/spec/spec_classes.rb +133 -0
- 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 +90 -0
- data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
- data/spec/spec/story/runner/scenario_runner_spec.rb +214 -0
- data/spec/spec/story/runner/story_mediator_spec.rb +143 -0
- data/spec/spec/story/runner/story_parser_spec.rb +401 -0
- data/spec/spec/story/runner/story_runner_spec.rb +294 -0
- data/spec/spec/story/runner_spec.rb +93 -0
- data/spec/spec/story/scenario_spec.rb +18 -0
- data/spec/spec/story/step_group_spec.rb +157 -0
- data/spec/spec/story/step_mother_spec.rb +84 -0
- data/spec/spec/story/step_spec.rb +272 -0
- data/spec/spec/story/story_helper.rb +2 -0
- data/spec/spec/story/story_spec.rb +84 -0
- data/spec/spec/story/world_spec.rb +423 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +77 -0
- data/stories/all.rb +5 -0
- data/stories/configuration/before_blocks.story +21 -0
- data/stories/configuration/stories.rb +7 -0
- data/stories/example_groups/autogenerated_docstrings +45 -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 +25 -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/mock_framework_integration/stories.rb +7 -0
- data/stories/mock_framework_integration/use_flexmock.story +9 -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/before_blocks_example.rb +32 -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/spec/spec_with_flexmock.rb +18 -0
- data/stories/resources/steps/running_rspec.rb +50 -0
- data/stories/resources/stories/failing_story.rb +15 -0
- data/stories/resources/test/spec_and_test_together.rb +57 -0
- data/stories/resources/test/test_case_with_should_methods.rb +30 -0
- data/stories/stories/multiline_steps.story +23 -0
- data/stories/stories/steps/multiline_steps.rb +13 -0
- data/stories/stories/stories.rb +6 -0
- data/story_server/prototype/javascripts/builder.js +136 -0
- data/story_server/prototype/javascripts/controls.js +972 -0
- data/story_server/prototype/javascripts/dragdrop.js +976 -0
- data/story_server/prototype/javascripts/effects.js +1117 -0
- data/story_server/prototype/javascripts/prototype.js +4140 -0
- data/story_server/prototype/javascripts/rspec.js +149 -0
- data/story_server/prototype/javascripts/scriptaculous.js +58 -0
- data/story_server/prototype/javascripts/slider.js +276 -0
- data/story_server/prototype/javascripts/sound.js +55 -0
- data/story_server/prototype/javascripts/unittest.js +568 -0
- data/story_server/prototype/lib/server.rb +24 -0
- data/story_server/prototype/stories.html +176 -0
- data/story_server/prototype/stylesheets/rspec.css +136 -0
- data/story_server/prototype/stylesheets/test.css +90 -0
- metadata +495 -0
@@ -0,0 +1,167 @@
|
|
1
|
+
module Spec
|
2
|
+
module Example
|
3
|
+
class Configuration
|
4
|
+
# Chooses what mock framework to use. Example:
|
5
|
+
#
|
6
|
+
# Spec::Runner.configure do |config|
|
7
|
+
# config.mock_with :rspec, :mocha, :flexmock, or :rr
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# To use any other mock framework, you'll have to provide your own
|
11
|
+
# adapter. This is simply a module that responds to the following
|
12
|
+
# methods:
|
13
|
+
#
|
14
|
+
# setup_mocks_for_rspec
|
15
|
+
# verify_mocks_for_rspec
|
16
|
+
# teardown_mocks_for_rspec.
|
17
|
+
#
|
18
|
+
# These are your hooks into the lifecycle of a given example. RSpec will
|
19
|
+
# call setup_mocks_for_rspec before running anything else in each
|
20
|
+
# Example. After executing the #after methods, RSpec will then call
|
21
|
+
# verify_mocks_for_rspec and teardown_mocks_for_rspec (this is
|
22
|
+
# guaranteed to run even if there are failures in
|
23
|
+
# verify_mocks_for_rspec).
|
24
|
+
#
|
25
|
+
# Once you've defined this module, you can pass that to mock_with:
|
26
|
+
#
|
27
|
+
# Spec::Runner.configure do |config|
|
28
|
+
# config.mock_with MyMockFrameworkAdapter
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
def mock_with(mock_framework)
|
32
|
+
@mock_framework = case mock_framework
|
33
|
+
when Symbol
|
34
|
+
mock_framework_path(mock_framework.to_s)
|
35
|
+
else
|
36
|
+
mock_framework
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def mock_framework # :nodoc:
|
41
|
+
@mock_framework ||= mock_framework_path("rspec")
|
42
|
+
end
|
43
|
+
|
44
|
+
# :call-seq:
|
45
|
+
# include(Some::Helpers)
|
46
|
+
# include(Some::Helpers, More::Helpers)
|
47
|
+
# include(My::Helpers, :type => :key)
|
48
|
+
#
|
49
|
+
# Declares modules to be included in multiple example groups
|
50
|
+
# (<tt>describe</tt> blocks). With no :type, the modules listed will be
|
51
|
+
# included in all example groups. Use :type to restrict the inclusion to
|
52
|
+
# a subset of example groups. The value assigned to :type should be a
|
53
|
+
# key that maps to a class that is either a subclass of
|
54
|
+
# Spec::Example::ExampleGroup or extends Spec::Example::ExampleGroupMethods
|
55
|
+
# and includes Spec::Example::ExampleMethods
|
56
|
+
#
|
57
|
+
# config.include(My::Pony, My::Horse, :type => :farm)
|
58
|
+
#
|
59
|
+
# Only example groups that have that type will get the modules included:
|
60
|
+
#
|
61
|
+
# describe "Downtown", :type => :city do
|
62
|
+
# # Will *not* get My::Pony and My::Horse included
|
63
|
+
# end
|
64
|
+
#
|
65
|
+
# describe "Old Mac Donald", :type => :farm do
|
66
|
+
# # *Will* get My::Pony and My::Horse included
|
67
|
+
# end
|
68
|
+
#
|
69
|
+
def include(*args)
|
70
|
+
include_or_extend(:include, *args)
|
71
|
+
end
|
72
|
+
|
73
|
+
def extend(*args)
|
74
|
+
include_or_extend(:extend, *args)
|
75
|
+
end
|
76
|
+
|
77
|
+
def include_or_extend(*args)
|
78
|
+
action = args.shift
|
79
|
+
args << {} unless Hash === args.last
|
80
|
+
modules, options = args_and_options(*args)
|
81
|
+
required_example_group = get_type_from_options(options)
|
82
|
+
required_example_group = required_example_group.to_sym if required_example_group
|
83
|
+
modules.each do |mod|
|
84
|
+
ExampleGroupFactory.get(required_example_group).send(action, mod)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# Defines global predicate matchers. Example:
|
89
|
+
#
|
90
|
+
# config.predicate_matchers[:swim] = :can_swim?
|
91
|
+
#
|
92
|
+
# This makes it possible to say:
|
93
|
+
#
|
94
|
+
# person.should swim # passes if person.can_swim? returns true
|
95
|
+
#
|
96
|
+
def predicate_matchers
|
97
|
+
@predicate_matchers ||= {}
|
98
|
+
end
|
99
|
+
|
100
|
+
# Prepends a global <tt>before</tt> block to all example groups.
|
101
|
+
# See #append_before for filtering semantics.
|
102
|
+
def prepend_before(*args, &proc)
|
103
|
+
scope, options = scope_and_options(*args)
|
104
|
+
example_group = ExampleGroupFactory.get(
|
105
|
+
get_type_from_options(options)
|
106
|
+
)
|
107
|
+
example_group.prepend_before(scope, &proc)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Appends a global <tt>before</tt> block to all example groups.
|
111
|
+
#
|
112
|
+
# If you want to restrict the block to a subset of all the example
|
113
|
+
# groups then specify this in a Hash as the last argument:
|
114
|
+
#
|
115
|
+
# config.prepend_before(:all, :type => :farm)
|
116
|
+
#
|
117
|
+
# or
|
118
|
+
#
|
119
|
+
# config.prepend_before(:type => :farm)
|
120
|
+
#
|
121
|
+
def append_before(*args, &proc)
|
122
|
+
scope, options = scope_and_options(*args)
|
123
|
+
example_group = ExampleGroupFactory.get(
|
124
|
+
get_type_from_options(options)
|
125
|
+
)
|
126
|
+
example_group.append_before(scope, &proc)
|
127
|
+
end
|
128
|
+
alias_method :before, :append_before
|
129
|
+
|
130
|
+
# Prepends a global <tt>after</tt> block to all example groups.
|
131
|
+
# See #append_before for filtering semantics.
|
132
|
+
def prepend_after(*args, &proc)
|
133
|
+
scope, options = scope_and_options(*args)
|
134
|
+
example_group = ExampleGroupFactory.get(
|
135
|
+
get_type_from_options(options)
|
136
|
+
)
|
137
|
+
example_group.prepend_after(scope, &proc)
|
138
|
+
end
|
139
|
+
alias_method :after, :prepend_after
|
140
|
+
|
141
|
+
# Appends a global <tt>after</tt> block to all example groups.
|
142
|
+
# See #append_before for filtering semantics.
|
143
|
+
def append_after(*args, &proc)
|
144
|
+
scope, options = scope_and_options(*args)
|
145
|
+
example_group = ExampleGroupFactory.get(
|
146
|
+
get_type_from_options(options)
|
147
|
+
)
|
148
|
+
example_group.append_after(scope, &proc)
|
149
|
+
end
|
150
|
+
|
151
|
+
private
|
152
|
+
|
153
|
+
def scope_and_options(*args)
|
154
|
+
args, options = args_and_options(*args)
|
155
|
+
scope = (args[0] || :each), options
|
156
|
+
end
|
157
|
+
|
158
|
+
def get_type_from_options(options)
|
159
|
+
options[:type] || options[:behaviour_type]
|
160
|
+
end
|
161
|
+
|
162
|
+
def mock_framework_path(framework_name)
|
163
|
+
File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "plugins", "mock_frameworks", framework_name))
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Spec
|
2
|
+
module Example
|
3
|
+
class ExamplePendingError < StandardError
|
4
|
+
attr_reader :pending_caller
|
5
|
+
|
6
|
+
def initialize(message=nil)
|
7
|
+
super
|
8
|
+
@pending_caller = caller[2]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class NotYetImplementedError < ExamplePendingError
|
13
|
+
MESSAGE = "Not Yet Implemented"
|
14
|
+
RSPEC_ROOT_LIB = File.expand_path(File.dirname(__FILE__) + "/../..")
|
15
|
+
|
16
|
+
def initialize(backtrace)
|
17
|
+
super(MESSAGE)
|
18
|
+
@pending_caller = pending_caller_from(backtrace)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def pending_caller_from(backtrace)
|
24
|
+
backtrace.detect {|line| !line.include?(RSPEC_ROOT_LIB) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class PendingExampleFixedError < StandardError; end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Spec
|
2
|
+
module Example
|
3
|
+
# Base class for customized example groups. Use this if you
|
4
|
+
# want to make a custom example group.
|
5
|
+
class ExampleGroup
|
6
|
+
extend Spec::Example::ExampleGroupMethods
|
7
|
+
include Spec::Example::ExampleMethods
|
8
|
+
|
9
|
+
def initialize(defined_description, options={}, &implementation)
|
10
|
+
@_options = options
|
11
|
+
@_defined_description = defined_description
|
12
|
+
@_implementation = implementation || pending_implementation
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def pending_implementation
|
18
|
+
error = NotYetImplementedError.new(caller)
|
19
|
+
lambda { raise(error) }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
Spec::ExampleGroup = Spec::Example::ExampleGroup
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Spec
|
2
|
+
module Example
|
3
|
+
class ExampleGroupFactory
|
4
|
+
class << self
|
5
|
+
def reset
|
6
|
+
@example_group_types = nil
|
7
|
+
default(ExampleGroup)
|
8
|
+
end
|
9
|
+
|
10
|
+
def all_registered?(example_group_classes)
|
11
|
+
example_group_classes.each do |example_group_class|
|
12
|
+
return false unless registered_or_ancestor_of_registered? example_group_class
|
13
|
+
end
|
14
|
+
return true
|
15
|
+
end
|
16
|
+
|
17
|
+
# Registers an example group class +klass+ with the symbol +type+. For
|
18
|
+
# example:
|
19
|
+
#
|
20
|
+
# Spec::Example::ExampleGroupFactory.register(:farm, FarmExampleGroup)
|
21
|
+
#
|
22
|
+
# With that you can append a hash with :type => :farm to the describe
|
23
|
+
# method and it will load an instance of FarmExampleGroup.
|
24
|
+
#
|
25
|
+
# describe Pig, :type => :farm do
|
26
|
+
# ...
|
27
|
+
#
|
28
|
+
# If you don't use the hash explicitly, <tt>describe</tt> will
|
29
|
+
# implicitly use an instance of FarmExampleGroup for any file loaded
|
30
|
+
# from the <tt>./spec/farm</tt> directory.
|
31
|
+
def register(key, example_group_class)
|
32
|
+
@example_group_types[key] = example_group_class
|
33
|
+
end
|
34
|
+
|
35
|
+
# Sets the default ExampleGroup class
|
36
|
+
def default(example_group_class)
|
37
|
+
old = @example_group_types
|
38
|
+
@example_group_types = Hash.new(example_group_class)
|
39
|
+
@example_group_types.merge!(old) if old
|
40
|
+
end
|
41
|
+
|
42
|
+
def get(key=nil)
|
43
|
+
if @example_group_types.values.include?(key)
|
44
|
+
key
|
45
|
+
else
|
46
|
+
@example_group_types[key]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def create_example_group(*args, &block)
|
51
|
+
opts = Hash === args.last ? args.last : {}
|
52
|
+
superclass = determine_superclass(opts)
|
53
|
+
superclass.describe(*args, &block)
|
54
|
+
end
|
55
|
+
|
56
|
+
protected
|
57
|
+
|
58
|
+
def determine_superclass(opts)
|
59
|
+
key = if opts[:type]
|
60
|
+
opts[:type]
|
61
|
+
elsif opts[:spec_path] =~ /spec(\\|\/)(#{@example_group_types.keys.join('|')})/
|
62
|
+
$2 == '' ? nil : $2.to_sym
|
63
|
+
end
|
64
|
+
get(key)
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def registered_or_ancestor_of_registered? example_group_class
|
70
|
+
registered_types.any? {|registered_type| registered_type.ancestors.include? example_group_class}
|
71
|
+
end
|
72
|
+
|
73
|
+
def registered_types
|
74
|
+
@example_group_types.values
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
self.reset
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,368 @@
|
|
1
|
+
module Spec
|
2
|
+
module Example
|
3
|
+
|
4
|
+
module ExampleGroupMethods
|
5
|
+
include Spec::Example::BeforeAndAfterHooks
|
6
|
+
|
7
|
+
class << self
|
8
|
+
attr_accessor :matcher_class
|
9
|
+
|
10
|
+
def description_text(*args)
|
11
|
+
args.inject("") do |result, arg|
|
12
|
+
result << " " unless (result == "" || arg.to_s =~ /^(\s|\.|#)/)
|
13
|
+
result << arg.to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_reader :description_text, :description_options, :spec_path
|
19
|
+
alias :options :description_options
|
20
|
+
|
21
|
+
def description_args
|
22
|
+
@description_args ||= []
|
23
|
+
end
|
24
|
+
|
25
|
+
def inherited(klass)
|
26
|
+
super
|
27
|
+
klass.register {}
|
28
|
+
Spec::Runner.register_at_exit_hook
|
29
|
+
end
|
30
|
+
|
31
|
+
# Makes the describe/it syntax available from a class. For example:
|
32
|
+
#
|
33
|
+
# class StackSpec < Spec::ExampleGroup
|
34
|
+
# describe Stack, "with no elements"
|
35
|
+
#
|
36
|
+
# before
|
37
|
+
# @stack = Stack.new
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# it "should raise on pop" do
|
41
|
+
# lambda{ @stack.pop }.should raise_error
|
42
|
+
# end
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
def describe(*args, &example_group_block)
|
46
|
+
args << {} unless Hash === args.last
|
47
|
+
if example_group_block
|
48
|
+
options = args.last
|
49
|
+
options[:spec_path] = eval("caller(0)[1]", example_group_block) unless options[:spec_path]
|
50
|
+
if options[:shared]
|
51
|
+
create_shared_example_group(args, example_group_block)
|
52
|
+
else
|
53
|
+
create_nested_example_group(args, example_group_block)
|
54
|
+
end
|
55
|
+
else
|
56
|
+
set_description(*args)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
alias :context :describe
|
60
|
+
|
61
|
+
def create_shared_example_group(args, example_group_block)
|
62
|
+
SharedExampleGroup.new(*args, &example_group_block)
|
63
|
+
end
|
64
|
+
|
65
|
+
def create_nested_example_group(args, example_group_block)
|
66
|
+
self.subclass("Subclass") do
|
67
|
+
describe(*args)
|
68
|
+
module_eval(&example_group_block)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Use this to pull in examples from shared example groups.
|
73
|
+
# See Spec::Runner for information about shared example groups.
|
74
|
+
def it_should_behave_like(*shared_example_groups)
|
75
|
+
shared_example_groups.each do |group|
|
76
|
+
include_shared_example_group(group)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# :call-seq:
|
81
|
+
# predicate_matchers[matcher_name] = method_on_object
|
82
|
+
# predicate_matchers[matcher_name] = [method1_on_object, method2_on_object]
|
83
|
+
#
|
84
|
+
# Dynamically generates a custom matcher that will match
|
85
|
+
# a predicate on your class. RSpec provides a couple of these
|
86
|
+
# out of the box:
|
87
|
+
#
|
88
|
+
# exist (or state expectations)
|
89
|
+
# File.should exist("path/to/file")
|
90
|
+
#
|
91
|
+
# an_instance_of (for mock argument constraints)
|
92
|
+
# mock.should_receive(:message).with(an_instance_of(String))
|
93
|
+
#
|
94
|
+
# == Examples
|
95
|
+
#
|
96
|
+
# class Fish
|
97
|
+
# def can_swim?
|
98
|
+
# true
|
99
|
+
# end
|
100
|
+
# end
|
101
|
+
#
|
102
|
+
# describe Fish do
|
103
|
+
# predicate_matchers[:swim] = :can_swim?
|
104
|
+
# it "should swim" do
|
105
|
+
# Fish.new.should swim
|
106
|
+
# end
|
107
|
+
# end
|
108
|
+
def predicate_matchers
|
109
|
+
@predicate_matchers ||= {:an_instance_of => :is_a?}
|
110
|
+
end
|
111
|
+
|
112
|
+
# Creates an instance of the current example group class and adds it to
|
113
|
+
# a collection of examples of the current example group.
|
114
|
+
def example(description=nil, options={}, &implementation)
|
115
|
+
e = new(description, options, &implementation)
|
116
|
+
example_objects << e
|
117
|
+
e
|
118
|
+
end
|
119
|
+
|
120
|
+
alias_method :it, :example
|
121
|
+
alias_method :specify, :example
|
122
|
+
|
123
|
+
# Use this to temporarily disable an example.
|
124
|
+
def xexample(description=nil, opts={}, &block)
|
125
|
+
Kernel.warn("Example disabled: #{description}")
|
126
|
+
end
|
127
|
+
|
128
|
+
alias_method :xit, :xexample
|
129
|
+
alias_method :xspecify, :xexample
|
130
|
+
|
131
|
+
def run
|
132
|
+
examples = examples_to_run
|
133
|
+
reporter.add_example_group(self) unless examples_to_run.empty?
|
134
|
+
return true if examples.empty?
|
135
|
+
return dry_run(examples) if dry_run?
|
136
|
+
|
137
|
+
plugin_mock_framework
|
138
|
+
define_methods_from_predicate_matchers
|
139
|
+
|
140
|
+
success, before_all_instance_variables = run_before_all
|
141
|
+
success, after_all_instance_variables = execute_examples(success, before_all_instance_variables, examples)
|
142
|
+
success = run_after_all(success, after_all_instance_variables)
|
143
|
+
end
|
144
|
+
|
145
|
+
def description
|
146
|
+
result = ExampleGroupMethods.description_text(*description_parts)
|
147
|
+
if result.nil? || result == ""
|
148
|
+
return to_s
|
149
|
+
else
|
150
|
+
result
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def described_type
|
155
|
+
description_parts.find {|part| part.is_a?(Module)}
|
156
|
+
end
|
157
|
+
|
158
|
+
def description_parts #:nodoc:
|
159
|
+
parts = []
|
160
|
+
each_ancestor_example_group_class do |example_group_class|
|
161
|
+
parts << example_group_class.description_args
|
162
|
+
end
|
163
|
+
parts.flatten.compact
|
164
|
+
end
|
165
|
+
|
166
|
+
def set_description(*args)
|
167
|
+
args, options = args_and_options(*args)
|
168
|
+
@description_args = args
|
169
|
+
@description_options = options
|
170
|
+
@description_text = ExampleGroupMethods.description_text(*args)
|
171
|
+
@spec_path = File.expand_path(options[:spec_path]) if options[:spec_path]
|
172
|
+
self
|
173
|
+
end
|
174
|
+
|
175
|
+
def examples #:nodoc:
|
176
|
+
examples = example_objects.dup
|
177
|
+
add_method_examples(examples)
|
178
|
+
Spec::Runner.options.reverse ? examples.reverse : examples
|
179
|
+
end
|
180
|
+
|
181
|
+
def number_of_examples #:nodoc:
|
182
|
+
examples.length
|
183
|
+
end
|
184
|
+
|
185
|
+
# Only used from RSpec's own examples
|
186
|
+
def reset # :nodoc:
|
187
|
+
@before_all_parts = nil
|
188
|
+
@after_all_parts = nil
|
189
|
+
@before_each_parts = nil
|
190
|
+
@after_each_parts = nil
|
191
|
+
end
|
192
|
+
|
193
|
+
def register(®istration_binding_block)
|
194
|
+
@registration_binding_block = registration_binding_block
|
195
|
+
Spec::Runner.options.add_example_group self
|
196
|
+
end
|
197
|
+
|
198
|
+
def unregister #:nodoc:
|
199
|
+
Spec::Runner.options.remove_example_group self
|
200
|
+
end
|
201
|
+
|
202
|
+
def registration_backtrace
|
203
|
+
eval("caller", @registration_binding_block)
|
204
|
+
end
|
205
|
+
|
206
|
+
def run_before_each(example)
|
207
|
+
each_ancestor_example_group_class do |example_group_class|
|
208
|
+
example.eval_each_fail_fast(example_group_class.before_each_parts)
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def run_after_each(example)
|
213
|
+
each_ancestor_example_group_class(:superclass_first) do |example_group_class|
|
214
|
+
example.eval_each_fail_slow(example_group_class.after_each_parts)
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
private
|
219
|
+
def dry_run(examples)
|
220
|
+
examples.each do |example|
|
221
|
+
Spec::Runner.options.reporter.example_started(example)
|
222
|
+
Spec::Runner.options.reporter.example_finished(example)
|
223
|
+
end
|
224
|
+
return true
|
225
|
+
end
|
226
|
+
|
227
|
+
def run_before_all
|
228
|
+
before_all = new("before(:all)")
|
229
|
+
begin
|
230
|
+
each_ancestor_example_group_class do |example_group_class|
|
231
|
+
before_all.eval_each_fail_fast(example_group_class.before_all_parts)
|
232
|
+
end
|
233
|
+
return [true, before_all.instance_variable_hash]
|
234
|
+
rescue Exception => e
|
235
|
+
reporter.failure(before_all, e)
|
236
|
+
return [false, before_all.instance_variable_hash]
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
def execute_examples(success, instance_variables, examples)
|
241
|
+
return [success, instance_variables] unless success
|
242
|
+
|
243
|
+
after_all_instance_variables = instance_variables
|
244
|
+
examples.each do |example_group_instance|
|
245
|
+
success &= example_group_instance.execute(Spec::Runner.options, instance_variables)
|
246
|
+
after_all_instance_variables = example_group_instance.instance_variable_hash
|
247
|
+
end
|
248
|
+
return [success, after_all_instance_variables]
|
249
|
+
end
|
250
|
+
|
251
|
+
def run_after_all(success, instance_variables)
|
252
|
+
after_all = new("after(:all)")
|
253
|
+
after_all.set_instance_variables_from_hash(instance_variables)
|
254
|
+
each_ancestor_example_group_class(:superclass_first) do |example_group_class|
|
255
|
+
after_all.eval_each_fail_slow(example_group_class.after_all_parts)
|
256
|
+
end
|
257
|
+
return success
|
258
|
+
rescue Exception => e
|
259
|
+
reporter.failure(after_all, e)
|
260
|
+
return false
|
261
|
+
end
|
262
|
+
|
263
|
+
def examples_to_run
|
264
|
+
all_examples = examples
|
265
|
+
return all_examples unless specified_examples?
|
266
|
+
all_examples.reject do |example|
|
267
|
+
matcher = ExampleGroupMethods.matcher_class.
|
268
|
+
new(description.to_s, example.description)
|
269
|
+
!matcher.matches?(specified_examples)
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
def specified_examples?
|
274
|
+
specified_examples && !specified_examples.empty?
|
275
|
+
end
|
276
|
+
|
277
|
+
def specified_examples
|
278
|
+
Spec::Runner.options.examples
|
279
|
+
end
|
280
|
+
|
281
|
+
def reporter
|
282
|
+
Spec::Runner.options.reporter
|
283
|
+
end
|
284
|
+
|
285
|
+
def dry_run?
|
286
|
+
Spec::Runner.options.dry_run
|
287
|
+
end
|
288
|
+
|
289
|
+
def example_objects
|
290
|
+
@example_objects ||= []
|
291
|
+
end
|
292
|
+
|
293
|
+
def each_ancestor_example_group_class(superclass_last=false)
|
294
|
+
classes = []
|
295
|
+
current_class = self
|
296
|
+
while is_example_group_class?(current_class)
|
297
|
+
superclass_last ? classes << current_class : classes.unshift(current_class)
|
298
|
+
current_class = current_class.superclass
|
299
|
+
end
|
300
|
+
|
301
|
+
classes.each do |example_group|
|
302
|
+
yield example_group
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
def is_example_group_class?(klass)
|
307
|
+
klass.kind_of?(ExampleGroupMethods) && klass.included_modules.include?(ExampleMethods)
|
308
|
+
end
|
309
|
+
|
310
|
+
def plugin_mock_framework
|
311
|
+
case mock_framework = Spec::Runner.configuration.mock_framework
|
312
|
+
when Module
|
313
|
+
include mock_framework
|
314
|
+
else
|
315
|
+
require Spec::Runner.configuration.mock_framework
|
316
|
+
include Spec::Plugins::MockFramework
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
def define_methods_from_predicate_matchers # :nodoc:
|
321
|
+
all_predicate_matchers = predicate_matchers.merge(
|
322
|
+
Spec::Runner.configuration.predicate_matchers
|
323
|
+
)
|
324
|
+
all_predicate_matchers.each_pair do |matcher_method, method_on_object|
|
325
|
+
define_method matcher_method do |*args|
|
326
|
+
eval("be_#{method_on_object.to_s.gsub('?','')}(*args)")
|
327
|
+
end
|
328
|
+
end
|
329
|
+
end
|
330
|
+
|
331
|
+
def add_method_examples(examples)
|
332
|
+
instance_methods.sort.each do |method_name|
|
333
|
+
if example_method?(method_name)
|
334
|
+
examples << new(method_name) do
|
335
|
+
__send__(method_name)
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
def example_method?(method_name)
|
342
|
+
should_method?(method_name)
|
343
|
+
end
|
344
|
+
|
345
|
+
def should_method?(method_name)
|
346
|
+
!(method_name =~ /^should(_not)?$/) &&
|
347
|
+
method_name =~ /^should/ && (
|
348
|
+
[-1,0].include?(instance_method(method_name).arity)
|
349
|
+
)
|
350
|
+
end
|
351
|
+
|
352
|
+
def include_shared_example_group(shared_example_group)
|
353
|
+
case shared_example_group
|
354
|
+
when SharedExampleGroup
|
355
|
+
include shared_example_group
|
356
|
+
else
|
357
|
+
example_group = SharedExampleGroup.find_shared_example_group(shared_example_group)
|
358
|
+
unless example_group
|
359
|
+
raise RuntimeError.new("Shared Example Group '#{shared_example_group}' can not be found")
|
360
|
+
end
|
361
|
+
include(example_group)
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
end
|
366
|
+
|
367
|
+
end
|
368
|
+
end
|