rspec 1.0.0 → 1.3.1
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/.document +7 -0
- data/History.rdoc +1546 -0
- data/{MIT-LICENSE → License.txt} +3 -1
- data/Manifest.txt +384 -0
- data/README.rdoc +41 -0
- data/Rakefile +94 -229
- data/Ruby1.9.rdoc +31 -0
- data/TODO.txt +17 -0
- data/Upgrade.rdoc +260 -0
- data/bin/autospec +4 -0
- data/bin/spec +5 -3
- data/cucumber.yml +5 -0
- data/examples/failing/README.txt +11 -0
- data/examples/failing/diffing_spec.rb +36 -0
- data/examples/failing/failing_implicit_docstrings_example.rb +17 -0
- data/examples/failing/failure_in_after.rb +10 -0
- data/examples/failing/failure_in_before.rb +10 -0
- data/examples/failing/mocking_example.rb +38 -0
- data/examples/failing/mocking_with_flexmock.rb +26 -0
- data/examples/failing/mocking_with_mocha.rb +25 -0
- data/examples/failing/mocking_with_rr.rb +27 -0
- data/examples/failing/partial_mock_example.rb +18 -0
- data/examples/failing/pending_example.rb +7 -0
- data/examples/failing/predicate_example.rb +32 -0
- data/examples/failing/raising_example.rb +47 -0
- data/examples/failing/syntax_error_example.rb +7 -0
- data/examples/failing/team_spec.rb +41 -0
- data/examples/failing/timeout_behaviour.rb +5 -0
- data/examples/{custom_formatter.rb → passing/custom_formatter.rb} +1 -1
- data/examples/passing/dynamic_spec.rb +7 -0
- data/examples/{file_accessor.rb → passing/file_accessor.rb} +18 -18
- data/examples/{file_accessor_spec.rb → passing/file_accessor_spec.rb} +37 -38
- data/examples/passing/filtered_formatter.rb +17 -0
- data/examples/passing/filtered_formatter_example.rb +31 -0
- data/examples/{greeter_spec.rb → passing/greeter_spec.rb} +1 -1
- data/examples/passing/helper_method_example.rb +12 -0
- data/examples/passing/implicit_docstrings_example.rb +16 -0
- data/examples/{io_processor.rb → passing/io_processor.rb} +8 -8
- data/examples/{io_processor_spec.rb → passing/io_processor_spec.rb} +2 -3
- data/examples/{mocking_example.rb → passing/mocking_example.rb} +0 -2
- data/examples/{multi_threaded_behaviour_runner.rb → passing/multi_threaded_example_group_runner.rb} +10 -9
- data/examples/passing/nested_classes_example.rb +35 -0
- data/examples/passing/options_example.rb +29 -0
- data/examples/passing/options_formatter.rb +20 -0
- data/examples/{partial_mock_example.rb → passing/partial_mock_example.rb} +2 -3
- data/examples/passing/pending_example.rb +18 -0
- data/examples/{predicate_example.rb → passing/predicate_example.rb} +1 -3
- data/examples/{shared_behaviours_example.rb → passing/shared_example_group_example.rb} +15 -11
- data/examples/passing/shared_stack_examples.rb +36 -0
- data/examples/passing/simple_matcher_example.rb +29 -0
- data/examples/{stack.rb → passing/stack.rb} +1 -1
- data/examples/{stack_spec.rb → passing/stack_spec.rb} +6 -40
- data/examples/passing/stack_spec_with_nested_example_groups.rb +66 -0
- data/examples/{stubbing_example.rb → passing/stubbing_example.rb} +1 -3
- data/examples/passing/yielding_example.rb +31 -0
- data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +85 -0
- data/features/before_and_after_blocks/before_and_after_blocks.feature +167 -0
- data/features/command_line/line_number_option.feature +56 -0
- data/features/command_line/line_number_option_with_example_with_no_name.feature +22 -0
- data/features/example_groups/define_example_attribute.feature +41 -0
- data/features/example_groups/example_group_with_should_methods.feature +29 -0
- data/features/example_groups/implicit_docstrings.feature +59 -0
- data/features/example_groups/nested_groups.feature +32 -0
- data/features/expectations/customized_message.feature +54 -0
- data/features/expectations/expect_change.feature +65 -0
- data/features/expectations/expect_error.feature +44 -0
- data/features/extensions/custom_example_group.feature +19 -0
- data/features/formatters/custom_formatter.feature +30 -0
- data/features/formatters/nested_formatter.feature +32 -0
- data/features/interop/cucumber_stubs_dont_leak.feature +11 -0
- data/features/interop/examples_and_tests_together.feature +84 -0
- data/features/interop/rspec_output.feature +25 -0
- data/features/interop/test_but_not_test_unit.feature +26 -0
- data/features/interop/test_case_with_should_methods.feature +46 -0
- data/features/load_paths/add_lib_to_load_path.feature +20 -0
- data/features/load_paths/add_spec_to_load_path.feature +20 -0
- data/features/matchers/define_diffable_matcher.feature +26 -0
- data/features/matchers/define_matcher.feature +179 -0
- data/features/matchers/define_matcher_outside_rspec.feature +38 -0
- data/features/matchers/define_matcher_with_fluent_interface.feature +48 -0
- data/features/matchers/define_wrapped_matcher.feature +56 -0
- data/features/matchers/match_unless_raises.feature +60 -0
- data/features/matchers/match_unless_raises_unexpected_error.feature +39 -0
- data/features/mock_framework_integration/use_flexmock.feature +27 -0
- data/features/mock_framework_integration/use_mocha.feature +27 -0
- data/features/mock_framework_integration/use_rr.feature +27 -0
- data/features/mocks/block_local_expectations.feature +62 -0
- data/features/mocks/mix_stubs_and_mocks.feature +22 -0
- data/features/mocks/stub_implementation.feature +26 -0
- data/features/pending/pending_examples.feature +81 -0
- data/features/runner/specify_line_number.feature +32 -0
- data/features/spec_helper/spec_helper.feature +25 -0
- data/features/step_definitions/running_rspec_steps.rb +52 -0
- data/features/step_definitions/stubbing_steps.rb +16 -0
- data/features/subject/explicit_subject.feature +31 -0
- data/features/subject/implicit_subject.feature +43 -0
- data/features/support/env.rb +83 -0
- data/features/support/matchers/smart_match.rb +31 -0
- data/geminstaller.yml +29 -0
- data/init.rb +9 -0
- data/lib/autotest/discover.rb +3 -0
- data/lib/autotest/rspec.rb +54 -0
- data/lib/spec/adapters/mock_frameworks/flexmock.rb +24 -0
- data/{plugins → lib/spec/adapters}/mock_frameworks/mocha.rb +8 -4
- data/lib/spec/adapters/mock_frameworks/rr.rb +22 -0
- data/lib/spec/adapters/mock_frameworks/rspec.rb +21 -0
- data/lib/spec/autorun.rb +3 -0
- data/lib/spec/deprecation.rb +41 -0
- data/lib/spec/dsl/main.rb +93 -0
- data/lib/spec/dsl.rb +1 -10
- data/lib/spec/example/args_and_options.rb +27 -0
- data/lib/spec/example/before_and_after_hooks.rb +93 -0
- data/lib/spec/example/errors.rb +25 -0
- data/lib/spec/example/example_group.rb +10 -0
- data/lib/spec/example/example_group_factory.rb +82 -0
- data/lib/spec/example/example_group_hierarchy.rb +53 -0
- data/lib/spec/example/example_group_methods.rb +287 -0
- data/lib/spec/example/example_group_proxy.rb +61 -0
- data/lib/spec/example/example_matcher.rb +43 -0
- data/lib/spec/example/example_methods.rb +152 -0
- data/lib/spec/example/example_proxy.rb +41 -0
- data/lib/spec/example/module_reopening_fix.rb +43 -0
- data/lib/spec/example/pending.rb +18 -0
- data/lib/spec/example/predicate_matchers.rb +46 -0
- data/lib/spec/example/shared_example_group.rb +59 -0
- data/lib/spec/example/subject.rb +114 -0
- data/lib/spec/example.rb +164 -0
- data/lib/spec/expectations/errors.rb +7 -1
- data/lib/spec/expectations/extensions/kernel.rb +52 -0
- data/lib/spec/expectations/extensions.rb +1 -2
- data/lib/spec/expectations/fail_with.rb +45 -0
- data/lib/spec/expectations/handler.rb +37 -30
- data/lib/spec/expectations.rb +2 -23
- data/lib/spec/extensions/instance_exec.rb +31 -0
- data/lib/spec/interop/test/unit/autorunner.rb +6 -0
- data/lib/spec/interop/test/unit/testcase.rb +56 -0
- data/lib/spec/interop/test/unit/testresult.rb +6 -0
- data/lib/spec/interop/test/unit/testsuite_adapter.rb +36 -0
- data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
- data/lib/spec/interop/test.rb +44 -0
- data/lib/spec/matchers/be.rb +183 -140
- data/lib/spec/matchers/be_close.rb +18 -23
- data/lib/spec/matchers/be_instance_of.rb +26 -0
- data/lib/spec/matchers/be_kind_of.rb +26 -0
- data/lib/spec/matchers/change.rb +72 -41
- data/lib/spec/matchers/compatibility.rb +14 -0
- data/lib/spec/matchers/dsl.rb +20 -0
- data/lib/spec/matchers/eql.rb +25 -26
- data/lib/spec/matchers/equal.rb +35 -25
- data/lib/spec/matchers/errors.rb +5 -0
- data/lib/spec/matchers/exist.rb +16 -0
- data/lib/spec/matchers/generated_descriptions.rb +36 -0
- data/lib/spec/matchers/has.rb +17 -26
- data/lib/spec/matchers/have.rb +36 -24
- data/lib/spec/matchers/include.rb +22 -48
- data/lib/spec/matchers/match.rb +11 -31
- data/lib/spec/matchers/match_array.rb +71 -0
- data/lib/spec/matchers/matcher.rb +132 -0
- data/lib/spec/matchers/method_missing.rb +9 -0
- data/lib/spec/matchers/operator_matcher.rb +55 -44
- data/lib/spec/matchers/pretty.rb +37 -0
- data/lib/spec/matchers/raise_exception.rb +131 -0
- data/lib/spec/matchers/respond_to.rb +35 -9
- data/lib/spec/matchers/satisfy.rb +2 -2
- data/lib/spec/matchers/simple_matcher.rb +134 -0
- data/lib/spec/matchers/throw_symbol.rb +56 -31
- data/lib/spec/matchers/wrap_expectation.rb +55 -0
- data/lib/spec/matchers.rb +104 -48
- data/lib/spec/mocks/argument_expectation.rb +28 -112
- data/lib/spec/mocks/argument_matchers.rb +237 -0
- data/lib/spec/mocks/error_generator.rb +20 -13
- data/lib/spec/mocks/errors.rb +1 -1
- data/lib/spec/mocks/example_methods.rb +69 -0
- data/lib/spec/mocks/extensions.rb +1 -0
- data/lib/spec/mocks/framework.rb +15 -0
- data/lib/spec/mocks/message_expectation.rb +206 -93
- data/lib/spec/mocks/methods.rb +66 -7
- data/lib/spec/mocks/mock.rb +53 -11
- data/lib/spec/mocks/proxy.rb +160 -55
- data/lib/spec/mocks/space.rb +2 -2
- data/lib/spec/mocks.rb +14 -23
- data/lib/spec/rake/spectask.rb +108 -53
- data/lib/spec/rake/verify_rcov.rb +4 -4
- data/lib/spec/ruby.rb +9 -0
- data/lib/spec/runner/backtrace_tweaker.rb +45 -23
- data/lib/spec/runner/class_and_arguments_parser.rb +14 -0
- data/lib/spec/runner/command_line.rb +7 -14
- data/lib/spec/runner/configuration.rb +202 -0
- data/lib/spec/runner/differs/default.rb +93 -0
- data/lib/spec/runner/differs/load-diff-lcs.rb +12 -0
- data/lib/spec/runner/drb_command_line.rb +18 -7
- data/lib/spec/runner/example_group_runner.rb +58 -0
- data/lib/spec/runner/extensions/kernel.rb +5 -46
- data/lib/spec/runner/formatter/base_formatter.rb +97 -26
- data/lib/spec/runner/formatter/base_text_formatter.rb +79 -39
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +25 -0
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +6 -8
- data/lib/spec/runner/formatter/html_formatter.rb +101 -75
- data/lib/spec/runner/formatter/nested_text_formatter.rb +50 -0
- data/lib/spec/runner/formatter/no_op_method_missing.rb +21 -0
- data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +11 -8
- data/lib/spec/runner/formatter/silent_formatter.rb +10 -0
- data/lib/spec/runner/formatter/snippet_extractor.rb +2 -2
- data/lib/spec/runner/formatter/specdoc_formatter.rb +20 -15
- data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
- data/lib/spec/runner/heckle_runner.rb +56 -56
- data/lib/spec/runner/{heckle_runner_win.rb → heckle_runner_unsupported.rb} +10 -10
- data/lib/spec/runner/line_number_query.rb +78 -0
- data/lib/spec/runner/option_parser.rb +147 -148
- data/lib/spec/runner/options.rb +343 -95
- data/lib/spec/runner/reporter.rb +117 -60
- data/lib/spec/runner.rb +39 -138
- data/lib/spec/stubs/cucumber.rb +5 -0
- data/lib/spec/test/unit.rb +10 -0
- data/lib/spec/version.rb +14 -22
- data/lib/spec.rb +5 -10
- data/resources/helpers/cmdline.rb +8 -0
- data/resources/rake/examples.rake +7 -0
- data/resources/rake/examples_with_rcov.rake +9 -0
- data/resources/rake/failing_examples_with_html.rake +9 -0
- data/resources/rake/verify_rcov.rake +7 -0
- data/spec/README.jruby +15 -0
- data/spec/autotest/autotest_helper.rb +8 -0
- data/spec/autotest/autotest_matchers.rb +38 -0
- data/spec/autotest/discover_spec.rb +8 -0
- data/spec/autotest/failed_results_re_spec.rb +31 -0
- data/spec/autotest/rspec_spec.rb +126 -0
- data/spec/ruby_forker.rb +13 -0
- data/spec/spec/dsl/main_spec.rb +103 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +51 -0
- data/spec/spec/example/example_group_factory_spec.rb +180 -0
- data/spec/spec/example/example_group_methods_spec.rb +778 -0
- data/spec/spec/example/example_group_proxy_spec.rb +107 -0
- data/spec/spec/example/example_group_spec.rb +632 -0
- data/spec/spec/example/example_matcher_spec.rb +85 -0
- data/spec/spec/example/example_methods_spec.rb +162 -0
- data/spec/spec/example/example_proxy_spec.rb +57 -0
- data/spec/spec/example/helper_method_spec.rb +24 -0
- data/spec/spec/{dsl/behaviour_eval_spec.rb → example/nested_example_group_spec.rb} +25 -3
- data/spec/spec/example/pending_module_spec.rb +58 -0
- data/spec/spec/example/predicate_matcher_spec.rb +41 -0
- data/spec/spec/example/shared_example_group_spec.rb +257 -0
- data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
- data/spec/spec/example/subject_spec.rb +110 -0
- data/spec/spec/expectations/differs/default_spec.rb +100 -13
- data/spec/spec/expectations/extensions/{object_spec.rb → kernel_spec.rb} +13 -14
- data/spec/spec/expectations/fail_with_spec.rb +42 -17
- data/spec/spec/expectations/handler_spec.rb +206 -0
- data/spec/spec/expectations/wrap_expectation_spec.rb +31 -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/test_case_with_various_names.rb +22 -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 +48 -0
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +18 -0
- data/spec/spec/interop/test/unit/testcase_spec.rb +50 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
- data/spec/spec/matchers/be_close_spec.rb +32 -21
- data/spec/spec/matchers/be_instance_of_spec.rb +36 -0
- data/spec/spec/matchers/be_kind_of_spec.rb +33 -0
- data/spec/spec/matchers/be_spec.rb +261 -10
- data/spec/spec/matchers/change_spec.rb +178 -61
- data/spec/spec/matchers/compatibility_spec.rb +28 -0
- data/spec/spec/matchers/description_generation_spec.rb +47 -46
- data/spec/spec/matchers/dsl_spec.rb +34 -0
- data/spec/spec/matchers/eql_spec.rb +14 -9
- data/spec/spec/matchers/equal_spec.rb +43 -14
- data/spec/spec/matchers/exist_spec.rb +41 -24
- data/spec/spec/matchers/has_spec.rb +154 -1
- data/spec/spec/matchers/have_spec.rb +311 -189
- data/spec/spec/matchers/include_spec.rb +45 -2
- data/spec/spec/matchers/match_array_spec.rb +115 -0
- data/spec/spec/matchers/match_spec.rb +25 -5
- data/spec/spec/matchers/matcher_spec.rb +289 -0
- data/spec/spec/matchers/matchers_spec.rb +2 -0
- data/spec/spec/matchers/operator_matcher_spec.rb +48 -15
- data/spec/spec/matchers/raise_exception_spec.rb +345 -0
- data/spec/spec/matchers/respond_to_spec.rb +78 -16
- data/spec/spec/matchers/satisfy_spec.rb +1 -1
- data/spec/spec/matchers/simple_matcher_spec.rb +100 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +111 -41
- data/spec/spec/mocks/and_yield_spec.rb +117 -0
- data/spec/spec/mocks/any_number_of_times_spec.rb +9 -2
- data/spec/spec/mocks/argument_expectation_spec.rb +19 -15
- data/spec/spec/mocks/argument_matchers_spec.rb +19 -0
- data/spec/spec/mocks/at_least_spec.rb +2 -2
- data/spec/spec/mocks/at_most_spec.rb +3 -3
- data/spec/spec/mocks/bug_report_10260_spec.rb +1 -1
- data/spec/spec/mocks/bug_report_10263_spec.rb +27 -0
- data/spec/spec/mocks/bug_report_11545_spec.rb +32 -0
- data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
- data/spec/spec/mocks/bug_report_496_spec.rb +17 -0
- data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
- data/spec/spec/mocks/bug_report_7611_spec.rb +2 -2
- data/spec/spec/mocks/bug_report_7805_spec.rb +2 -2
- data/spec/spec/mocks/bug_report_8165_spec.rb +4 -4
- data/spec/spec/mocks/bug_report_8302_spec.rb +2 -2
- data/spec/spec/mocks/bug_report_830_spec.rb +21 -0
- data/spec/spec/mocks/double_spec.rb +12 -0
- data/spec/spec/mocks/failing_argument_matchers_spec.rb +95 -0
- data/spec/spec/mocks/hash_including_matcher_spec.rb +90 -0
- data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
- data/spec/spec/mocks/mock_ordering_spec.rb +15 -5
- data/spec/spec/mocks/mock_space_spec.rb +1 -1
- data/spec/spec/mocks/mock_spec.rb +346 -129
- data/spec/spec/mocks/multiple_return_value_spec.rb +9 -9
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
- data/spec/spec/mocks/null_object_mock_spec.rb +15 -1
- data/spec/spec/mocks/once_counts_spec.rb +2 -2
- data/spec/spec/mocks/options_hash_spec.rb +19 -17
- data/spec/spec/mocks/partial_mock_spec.rb +124 -12
- data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +2 -2
- data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
- data/spec/spec/mocks/precise_counts_spec.rb +2 -2
- data/spec/spec/mocks/record_messages_spec.rb +2 -2
- data/spec/spec/mocks/stub_chain_spec.rb +42 -0
- data/spec/spec/mocks/stub_implementation_spec.rb +31 -0
- data/spec/spec/mocks/stub_spec.rb +147 -103
- data/spec/spec/mocks/stubbed_message_expectations_spec.rb +26 -0
- data/spec/spec/mocks/twice_counts_spec.rb +2 -2
- data/spec/spec/mocks/unstub_spec.rb +127 -0
- data/spec/spec/package/bin_spec_spec.rb +11 -7
- data/spec/spec/rake/spectask_spec.rb +150 -0
- data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
- data/spec/spec/runner/command_line_spec.rb +158 -29
- data/spec/spec/runner/configuration_spec.rb +320 -0
- data/spec/spec/runner/drb_command_line_spec.rb +137 -72
- data/spec/spec/runner/empty_file.txt +0 -0
- data/spec/spec/runner/example_group_runner_spec.rb +26 -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 +30 -0
- data/spec/spec/runner/formatter/base_text_formatter_spec.rb +113 -0
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +17 -12
- data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +377 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +377 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.7.html +377 -0
- data/spec/spec/runner/formatter/html_formatted-1.9.1.html +377 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +112 -52
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +329 -0
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +70 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +87 -16
- data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +153 -50
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6-jruby.html +371 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +371 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +371 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +371 -0
- data/spec/spec/runner/formatter/text_mate_formatter_spec.rb +106 -0
- data/spec/spec/runner/heckle_runner_spec.rb +32 -17
- data/spec/spec/runner/heckler_spec.rb +17 -11
- data/spec/spec/runner/line_number_query/line_number_query_fixture.rb +70 -0
- data/spec/spec/runner/line_number_query_spec.rb +129 -0
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +27 -21
- data/spec/spec/runner/option_parser_spec.rb +367 -164
- data/spec/spec/runner/options_spec.rb +506 -94
- data/spec/spec/runner/output_one_time_fixture.rb +7 -0
- data/spec/spec/runner/output_one_time_fixture_runner.rb +7 -0
- data/spec/spec/runner/output_one_time_spec.rb +15 -0
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +94 -27
- data/spec/spec/runner/reporter_spec.rb +212 -121
- 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/resources/custom_example_group_runner.rb +14 -0
- data/spec/spec/runner/resources/utf8_encoded.rb +8 -0
- data/spec/spec/runner/spec.opts +2 -0
- data/spec/spec/runner/spec_drb.opts +2 -0
- data/spec/spec/runner/spec_spaced.opts +2 -0
- data/spec/spec/runner_spec.rb +13 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +87 -45
- data/spec/support/macros.rb +29 -0
- data/spec/{spec → support}/spec_classes.rb +26 -4
- metadata +461 -141
- data/CHANGES +0 -748
- data/EXAMPLES.rd +0 -108
- data/README +0 -70
- data/UPGRADE +0 -31
- data/bin/spec_translator +0 -8
- data/examples/auto_spec_description_example.rb +0 -19
- data/examples/before_and_after_example.rb +0 -39
- data/examples/behave_as_example.rb +0 -45
- data/examples/dynamic_spec.rb +0 -9
- data/examples/helper_method_example.rb +0 -11
- data/examples/legacy_spec.rb +0 -10
- data/examples/not_yet_implemented_spec.rb +0 -12
- data/examples/priority.txt +0 -1
- 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/behaviour.rb +0 -204
- data/lib/spec/dsl/behaviour_callbacks.rb +0 -77
- data/lib/spec/dsl/behaviour_eval.rb +0 -177
- data/lib/spec/dsl/behaviour_factory.rb +0 -42
- data/lib/spec/dsl/composite_proc_builder.rb +0 -28
- data/lib/spec/dsl/configuration.rb +0 -119
- data/lib/spec/dsl/description.rb +0 -46
- data/lib/spec/dsl/example.rb +0 -127
- data/lib/spec/dsl/example_matcher.rb +0 -28
- data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
- data/lib/spec/expectations/differs/default.rb +0 -61
- data/lib/spec/expectations/extensions/object.rb +0 -66
- data/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
- data/lib/spec/extensions/object.rb +0 -6
- data/lib/spec/extensions.rb +0 -1
- data/lib/spec/matchers/raise_error.rb +0 -100
- data/lib/spec/mocks/argument_constraint_matchers.rb +0 -12
- data/lib/spec/mocks/spec_methods.rb +0 -30
- data/lib/spec/runner/behaviour_runner.rb +0 -102
- data/lib/spec/runner/extensions/object.rb +0 -32
- data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -25
- data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
- data/lib/spec/runner/formatter.rb +0 -9
- data/lib/spec/runner/spec_parser.rb +0 -50
- data/lib/spec/test_case_adapter.rb +0 -10
- data/lib/spec/translator.rb +0 -106
- data/plugins/mock_frameworks/flexmock.rb +0 -27
- data/plugins/mock_frameworks/rspec.rb +0 -18
- data/spec/spec/dsl/behaviour_factory_spec.rb +0 -30
- data/spec/spec/dsl/behaviour_spec.rb +0 -604
- data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -57
- data/spec/spec/dsl/configuration_spec.rb +0 -50
- data/spec/spec/dsl/description_spec.rb +0 -81
- data/spec/spec/dsl/example_class_spec.rb +0 -24
- data/spec/spec/dsl/example_instance_spec.rb +0 -162
- data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
- data/spec/spec/dsl/predicate_matcher_spec.rb +0 -21
- data/spec/spec/dsl/shared_behaviour_spec.rb +0 -208
- data/spec/spec/matchers/handler_spec.rb +0 -88
- data/spec/spec/matchers/matcher_methods_spec.rb +0 -78
- data/spec/spec/matchers/raise_error_spec.rb +0 -147
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +0 -73
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +0 -92
- data/spec/spec/runner/behaviour_runner_spec.rb +0 -118
- data/spec/spec/runner/context_matching_spec.rb +0 -27
- data/spec/spec/runner/execution_context_spec.rb +0 -31
- data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
- data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -27
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -21
- 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/spec/spec/runner/spec_matcher_spec.rb +0 -102
- data/spec/spec/runner/spec_parser_spec.rb +0 -93
- data/spec/spec/translator_spec.rb +0 -216
- /data/examples/{custom_expectation_matchers.rb → passing/custom_matchers.rb} +0 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'autotest'
|
|
2
|
+
|
|
3
|
+
Autotest.add_hook :initialize do |at|
|
|
4
|
+
at.clear_mappings
|
|
5
|
+
# watch out for Ruby bug (1.8.6): %r(/) != /\//
|
|
6
|
+
at.add_mapping(%r%^spec/.*_spec\.rb$%) { |filename, _|
|
|
7
|
+
filename
|
|
8
|
+
}
|
|
9
|
+
at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m|
|
|
10
|
+
["spec/#{m[1]}_spec.rb"]
|
|
11
|
+
}
|
|
12
|
+
at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.rb$%) {
|
|
13
|
+
at.files_matching %r%^spec/.*_spec\.rb$%
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class RspecCommandError < StandardError; end
|
|
18
|
+
|
|
19
|
+
class Autotest::Rspec < Autotest
|
|
20
|
+
|
|
21
|
+
SPEC_PROGRAM = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec'))
|
|
22
|
+
|
|
23
|
+
def initialize
|
|
24
|
+
super
|
|
25
|
+
self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n\n?(.*?(\n\n\(.*?)?)\n\n/m
|
|
26
|
+
self.completed_re = /\n(?:\e\[\d*m)?\d* examples?/m
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def consolidate_failures(failed)
|
|
30
|
+
filters = new_hash_of_arrays
|
|
31
|
+
failed.each do |spec, trace|
|
|
32
|
+
if trace =~ /\n(\.\/)?(.*spec\.rb):[\d]+:/
|
|
33
|
+
filters[$2] << spec
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
return filters
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def make_test_cmd(files_to_test)
|
|
40
|
+
files_to_test.empty? ? '' :
|
|
41
|
+
"#{ruby} #{SPEC_PROGRAM} --autospec #{normalize(files_to_test).keys.flatten.join(' ')} #{add_options_if_present}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def normalize(files_to_test)
|
|
45
|
+
files_to_test.keys.inject({}) do |result, filename|
|
|
46
|
+
result[File.expand_path(filename)] = []
|
|
47
|
+
result
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def add_options_if_present # :nodoc:
|
|
52
|
+
File.exist?("spec/spec.opts") ? "-O #{File.join('spec','spec.opts')} " : ""
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# Created by Jim Weirich on 2007-04-10.
|
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
|
5
|
+
|
|
6
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
|
7
|
+
require 'flexmock/rspec'
|
|
8
|
+
|
|
9
|
+
module Spec
|
|
10
|
+
module Adapters
|
|
11
|
+
module MockFramework
|
|
12
|
+
include FlexMock::MockContainer
|
|
13
|
+
def setup_mocks_for_rspec
|
|
14
|
+
# No setup required
|
|
15
|
+
end
|
|
16
|
+
def verify_mocks_for_rspec
|
|
17
|
+
flexmock_verify
|
|
18
|
+
end
|
|
19
|
+
def teardown_mocks_for_rspec
|
|
20
|
+
flexmock_close
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
require 'rubygems'
|
|
2
|
-
gem 'mocha'
|
|
1
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
|
3
2
|
require 'mocha/standalone'
|
|
4
3
|
require 'mocha/object'
|
|
5
4
|
|
|
6
5
|
module Spec
|
|
7
|
-
module
|
|
6
|
+
module Adapters
|
|
8
7
|
module MockFramework
|
|
9
|
-
|
|
8
|
+
# Mocha::Standalone was deprecated as of Mocha 0.9.7.
|
|
9
|
+
begin
|
|
10
|
+
include Mocha::API
|
|
11
|
+
rescue NameError
|
|
12
|
+
include Mocha::Standalone
|
|
13
|
+
end
|
|
10
14
|
def setup_mocks_for_rspec
|
|
11
15
|
mocha_setup
|
|
12
16
|
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
|
2
|
+
require 'rr'
|
|
3
|
+
|
|
4
|
+
patterns = ::Spec::Runner::QuietBacktraceTweaker::IGNORE_PATTERNS
|
|
5
|
+
patterns.push(RR::Errors::BACKTRACE_IDENTIFIER)
|
|
6
|
+
|
|
7
|
+
module Spec
|
|
8
|
+
module Adapters
|
|
9
|
+
module MockFramework
|
|
10
|
+
include RR::Extensions::InstanceMethods
|
|
11
|
+
def setup_mocks_for_rspec
|
|
12
|
+
RR::Space.instance.reset
|
|
13
|
+
end
|
|
14
|
+
def verify_mocks_for_rspec
|
|
15
|
+
RR::Space.instance.verify_doubles
|
|
16
|
+
end
|
|
17
|
+
def teardown_mocks_for_rspec
|
|
18
|
+
RR::Space.instance.reset
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'spec/mocks/framework'
|
|
2
|
+
require 'spec/mocks/extensions'
|
|
3
|
+
|
|
4
|
+
module Spec
|
|
5
|
+
module Adapters
|
|
6
|
+
unless defined?(MockFramework)
|
|
7
|
+
module MockFramework
|
|
8
|
+
include Spec::Mocks::ExampleMethods
|
|
9
|
+
def setup_mocks_for_rspec
|
|
10
|
+
$rspec_mocks ||= Spec::Mocks::Space.new
|
|
11
|
+
end
|
|
12
|
+
def verify_mocks_for_rspec
|
|
13
|
+
$rspec_mocks.verify_all
|
|
14
|
+
end
|
|
15
|
+
def teardown_mocks_for_rspec
|
|
16
|
+
$rspec_mocks.reset_all
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
data/lib/spec/autorun.rb
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
class << self
|
|
3
|
+
def deprecate(method, alternate_method=nil)
|
|
4
|
+
return if Spec::Runner.configuration.suppress_deprecation_warnings?
|
|
5
|
+
message = <<-NOTICE
|
|
6
|
+
|
|
7
|
+
*****************************************************************
|
|
8
|
+
DEPRECATION WARNING: you are using deprecated behaviour that will
|
|
9
|
+
be removed from a future version of RSpec.
|
|
10
|
+
|
|
11
|
+
#{caller(0)[2]}
|
|
12
|
+
|
|
13
|
+
* #{method} is deprecated.
|
|
14
|
+
NOTICE
|
|
15
|
+
if alternate_method
|
|
16
|
+
message << <<-ADDITIONAL
|
|
17
|
+
* please use #{alternate_method} instead.
|
|
18
|
+
ADDITIONAL
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
message << "*****************************************************************"
|
|
22
|
+
warn(message)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def warn(message)
|
|
26
|
+
Kernel.warn(message)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class HashWithDeprecationNotice < Hash
|
|
32
|
+
def initialize(method, alternate_method=nil, &block)
|
|
33
|
+
@method, @alternate_method = method, alternate_method
|
|
34
|
+
end
|
|
35
|
+
def []=(k,v)
|
|
36
|
+
Spec.deprecate(@method, @alternate_method)
|
|
37
|
+
super
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module DSL
|
|
3
|
+
module Main
|
|
4
|
+
include Spec::Example::ArgsAndOptions
|
|
5
|
+
|
|
6
|
+
# Creates and returns a class that includes the ExampleGroupMethods
|
|
7
|
+
# module. Which ExampleGroup type is created depends on the directory of the file
|
|
8
|
+
# calling this method. For example, Spec::Rails will use different
|
|
9
|
+
# classes for specs living in <tt>spec/models</tt>,
|
|
10
|
+
# <tt>spec/helpers</tt>, <tt>spec/views</tt> and
|
|
11
|
+
# <tt>spec/controllers</tt>.
|
|
12
|
+
#
|
|
13
|
+
# It is also possible to override autodiscovery of the example group
|
|
14
|
+
# type with an options Hash as the last argument:
|
|
15
|
+
#
|
|
16
|
+
# describe "name", :type => :something_special do ...
|
|
17
|
+
#
|
|
18
|
+
# The reason for using different example group classes is to have different
|
|
19
|
+
# matcher methods available from within the <tt>describe</tt> block.
|
|
20
|
+
#
|
|
21
|
+
# See Spec::Example::ExampleGroupFactory#register for details about how to
|
|
22
|
+
# register special implementations.
|
|
23
|
+
#
|
|
24
|
+
def describe(*args, &block)
|
|
25
|
+
raise Spec::Example::NoDescriptionError.new("example group", caller(0)[1]) if args.empty?
|
|
26
|
+
add_options(args, :scope => self)
|
|
27
|
+
set_location(args.options, caller(0)[1])
|
|
28
|
+
Spec::Example::ExampleGroupFactory.create_example_group(*args, &block)
|
|
29
|
+
end
|
|
30
|
+
alias :context :describe unless defined?(IRB::Context)
|
|
31
|
+
|
|
32
|
+
# Creates an example group that can be shared by other example groups
|
|
33
|
+
#
|
|
34
|
+
# == Examples
|
|
35
|
+
#
|
|
36
|
+
# share_examples_for "All Editions" do
|
|
37
|
+
# it "all editions behaviour" ...
|
|
38
|
+
# end
|
|
39
|
+
#
|
|
40
|
+
# describe SmallEdition do
|
|
41
|
+
# it_should_behave_like "All Editions"
|
|
42
|
+
#
|
|
43
|
+
# it "should do small edition stuff" do
|
|
44
|
+
# ...
|
|
45
|
+
# end
|
|
46
|
+
# end
|
|
47
|
+
def share_examples_for(*args, &block)
|
|
48
|
+
add_options(args)
|
|
49
|
+
set_location(args.options, caller(0)[1])
|
|
50
|
+
Spec::Example::ExampleGroupFactory.create_shared_example_group(*args, &block)
|
|
51
|
+
end
|
|
52
|
+
alias :shared_examples_for :share_examples_for
|
|
53
|
+
|
|
54
|
+
# Creates a Shared Example Group and assigns it to a constant
|
|
55
|
+
#
|
|
56
|
+
# share_as :AllEditions do
|
|
57
|
+
# it "should do all editions stuff" ...
|
|
58
|
+
# end
|
|
59
|
+
#
|
|
60
|
+
# describe SmallEdition do
|
|
61
|
+
# it_should_behave_like AllEditions
|
|
62
|
+
#
|
|
63
|
+
# it "should do small edition stuff" do
|
|
64
|
+
# ...
|
|
65
|
+
# end
|
|
66
|
+
# end
|
|
67
|
+
#
|
|
68
|
+
# And, for those of you who prefer to use something more like Ruby, you
|
|
69
|
+
# can just include the module directly
|
|
70
|
+
#
|
|
71
|
+
# describe SmallEdition do
|
|
72
|
+
# include AllEditions
|
|
73
|
+
#
|
|
74
|
+
# it "should do small edition stuff" do
|
|
75
|
+
# ...
|
|
76
|
+
# end
|
|
77
|
+
# end
|
|
78
|
+
def share_as(name, &block)
|
|
79
|
+
Spec.deprecate("share_as","shared_examples_for")
|
|
80
|
+
begin
|
|
81
|
+
args = [name]
|
|
82
|
+
add_options(args)
|
|
83
|
+
set_location(args.options, caller(0)[1])
|
|
84
|
+
Object.const_set(name, Spec::Example::ExampleGroupFactory.create_shared_example_group(*args, &block))
|
|
85
|
+
rescue NameError => e
|
|
86
|
+
raise NameError.new(e.message + "\nThe first argument to share_as must be a legal name for a constant\n")
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
include Spec::DSL::Main
|
data/lib/spec/dsl.rb
CHANGED
|
@@ -1,10 +1 @@
|
|
|
1
|
-
require 'spec/dsl/
|
|
2
|
-
require 'spec/dsl/configuration'
|
|
3
|
-
require 'spec/dsl/behaviour_callbacks'
|
|
4
|
-
require 'spec/dsl/behaviour'
|
|
5
|
-
require 'spec/dsl/behaviour_eval'
|
|
6
|
-
require 'spec/dsl/composite_proc_builder'
|
|
7
|
-
require 'spec/dsl/example'
|
|
8
|
-
require 'spec/dsl/example_matcher'
|
|
9
|
-
require 'spec/dsl/example_should_raise_handler'
|
|
10
|
-
require 'spec/dsl/behaviour_factory'
|
|
1
|
+
require 'spec/dsl/main'
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
module ArgsAndOptions
|
|
4
|
+
def args_and_options(*args) # :nodoc:
|
|
5
|
+
options = Hash === args.last ? args.pop : {}
|
|
6
|
+
return args, options
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def add_options(args, options={}) # :nodoc:
|
|
10
|
+
args << {} unless Hash === args.last
|
|
11
|
+
args.extend WithOptions
|
|
12
|
+
args.options.merge!(options)
|
|
13
|
+
args.options
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def set_location(options, location) # :nodoc:
|
|
17
|
+
options[:location] ||= location
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module WithOptions # :nodoc:
|
|
21
|
+
def options
|
|
22
|
+
last
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
module BeforeAndAfterHooks
|
|
4
|
+
class << self
|
|
5
|
+
def before_suite_parts # :nodoc:
|
|
6
|
+
@before_suite_parts ||= []
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def after_suite_parts # :nodoc:
|
|
10
|
+
@after_suite_parts ||= []
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Registers a block to be executed before examples. <tt>scope</tt> can be
|
|
15
|
+
# <tt>:each</tt> (default), <tt>:all</tt>, or <tt>:suite</tt>. When
|
|
16
|
+
# <tt>:each</tt>, the block is executed before each example. When
|
|
17
|
+
# <tt>:all</tt>, the block is executed only once before any examples are
|
|
18
|
+
# run.
|
|
19
|
+
def append_before(scope = :each, &block)
|
|
20
|
+
before_parts(scope) << block
|
|
21
|
+
end
|
|
22
|
+
alias_method :before, :append_before
|
|
23
|
+
|
|
24
|
+
# Registers a block to be executed before each example.
|
|
25
|
+
# This method prepends +block+ to existing before blocks.
|
|
26
|
+
#
|
|
27
|
+
# See <tt>append_before</tt> for scoping semantics.
|
|
28
|
+
def prepend_before(scope = :each, &block)
|
|
29
|
+
before_parts(scope).unshift(block)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Registers a block to be executed after each example.
|
|
33
|
+
# This method prepends +block+ to existing after blocks.
|
|
34
|
+
#
|
|
35
|
+
# See <tt>append_before</tt> for scoping semantics.
|
|
36
|
+
def prepend_after(scope = :each, &block)
|
|
37
|
+
after_parts(scope).unshift(block)
|
|
38
|
+
end
|
|
39
|
+
alias_method :after, :prepend_after
|
|
40
|
+
|
|
41
|
+
# Registers a block to be executed after each example.
|
|
42
|
+
# This method appends +block+ to existing after blocks.
|
|
43
|
+
#
|
|
44
|
+
# See <tt>append_before</tt> for scoping semantics.
|
|
45
|
+
def append_after(scope = :each, &block)
|
|
46
|
+
after_parts(scope) << block
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def before_each_parts # :nodoc:
|
|
50
|
+
@before_each_parts ||= []
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def after_each_parts # :nodoc:
|
|
54
|
+
@after_each_parts ||= []
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def before_all_parts # :nodoc:
|
|
58
|
+
@before_all_parts ||= []
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def after_all_parts # :nodoc:
|
|
62
|
+
@after_all_parts ||= []
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def before_suite_parts # :nodoc:
|
|
66
|
+
BeforeAndAfterHooks.before_suite_parts
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def after_suite_parts # :nodoc:
|
|
70
|
+
BeforeAndAfterHooks.after_suite_parts
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
|
|
75
|
+
def before_parts(scope)
|
|
76
|
+
case scope
|
|
77
|
+
when :each; before_each_parts
|
|
78
|
+
when :all; before_all_parts
|
|
79
|
+
when :suite; before_suite_parts
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def after_parts(scope)
|
|
84
|
+
case scope
|
|
85
|
+
when :each; after_each_parts
|
|
86
|
+
when :all; after_all_parts
|
|
87
|
+
when :suite; after_suite_parts
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
class ExamplePendingError < StandardError; end
|
|
4
|
+
|
|
5
|
+
class NotYetImplementedError < ExamplePendingError
|
|
6
|
+
MESSAGE = "Not Yet Implemented"
|
|
7
|
+
def initialize
|
|
8
|
+
super(MESSAGE)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class PendingExampleFixedError < StandardError; end
|
|
13
|
+
|
|
14
|
+
class NoDescriptionError < ArgumentError
|
|
15
|
+
class << self
|
|
16
|
+
def message(kind, location)
|
|
17
|
+
"No description supplied for #{kind} declared on #{location}"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
def initialize(kind, location)
|
|
21
|
+
super(self.class.message(kind, location))
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
|
|
4
|
+
class ExampleGroupFactory
|
|
5
|
+
module ClassMethods
|
|
6
|
+
include Spec::Example::ArgsAndOptions
|
|
7
|
+
|
|
8
|
+
def reset
|
|
9
|
+
@example_group_types = nil
|
|
10
|
+
default(ExampleGroup)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def example_group_creation_listeners
|
|
14
|
+
@example_group_creation_listeners ||= []
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def register_example_group(klass)
|
|
18
|
+
example_group_creation_listeners.each do |listener|
|
|
19
|
+
listener.register_example_group(klass)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def create_shared_example_group(*args, &example_group_block) # :nodoc:
|
|
24
|
+
::Spec::Example::SharedExampleGroup.register(*args, &example_group_block)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def create_example_group(*args, &block)
|
|
28
|
+
raise ArgumentError if args.empty? || block.nil?
|
|
29
|
+
add_options(args)
|
|
30
|
+
superclass = determine_superclass(args.last)
|
|
31
|
+
superclass.describe(*args, &block)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Registers an example group class +klass+ with the symbol +type+. For
|
|
35
|
+
# example:
|
|
36
|
+
#
|
|
37
|
+
# Spec::Example::ExampleGroupFactory.register(:farm, FarmExampleGroup)
|
|
38
|
+
#
|
|
39
|
+
# With that you can append a hash with :type => :farm to the describe
|
|
40
|
+
# method and it will load an instance of FarmExampleGroup.
|
|
41
|
+
#
|
|
42
|
+
# describe Pig, :type => :farm do
|
|
43
|
+
# ...
|
|
44
|
+
#
|
|
45
|
+
# If you don't use the hash explicitly, <tt>describe</tt> will
|
|
46
|
+
# implicitly use an instance of FarmExampleGroup for any file loaded
|
|
47
|
+
# from the <tt>./spec/farm</tt> directory.
|
|
48
|
+
def register(key, example_group_class)
|
|
49
|
+
@example_group_types[key.to_sym] = example_group_class
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Sets the default ExampleGroup class
|
|
53
|
+
def default(example_group_class)
|
|
54
|
+
Spec.__send__ :remove_const, :ExampleGroup if Spec.const_defined?(:ExampleGroup)
|
|
55
|
+
Spec.const_set(:ExampleGroup, example_group_class)
|
|
56
|
+
old = @example_group_types
|
|
57
|
+
@example_group_types = Hash.new(example_group_class)
|
|
58
|
+
@example_group_types.merge!(old) if old
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def [](key)
|
|
62
|
+
@example_group_types[key]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
protected
|
|
66
|
+
|
|
67
|
+
def determine_superclass(opts)
|
|
68
|
+
if type = opts[:type]
|
|
69
|
+
self[type]
|
|
70
|
+
elsif opts[:location] =~ /spec(\\|\/)(#{@example_group_types.keys.sort_by{|k| k.to_s.length}.reverse.join('|')})/
|
|
71
|
+
self[$2 == '' ? nil : $2.to_sym]
|
|
72
|
+
else
|
|
73
|
+
self[nil]
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
extend ClassMethods
|
|
79
|
+
self.reset
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
class ExampleGroupHierarchy < Array
|
|
4
|
+
def initialize(example_group_class)
|
|
5
|
+
push example_group_class
|
|
6
|
+
if example_group_class.respond_to?(:superclass) && example_group_class.superclass.respond_to?(:example_group_hierarchy)
|
|
7
|
+
unshift example_group_class.superclass.example_group_hierarchy
|
|
8
|
+
flatten!
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def run_before_all(example)
|
|
13
|
+
example.eval_each_fail_fast(before_all_parts)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def run_before_each(example)
|
|
17
|
+
example.eval_each_fail_fast(before_each_parts)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def run_after_each(example)
|
|
21
|
+
example.eval_each_fail_slow(after_each_parts)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def run_after_all(example)
|
|
25
|
+
example.eval_each_fail_slow(after_all_parts)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def before_all_parts
|
|
29
|
+
@before_all_parts ||= collect {|klass| klass.before_all_parts}.flatten
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def before_each_parts
|
|
33
|
+
@before_each_parts ||= collect {|klass| klass.before_each_parts}.flatten
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def after_each_parts
|
|
37
|
+
@after_each_parts ||= reverse.collect {|klass| klass.after_each_parts}.flatten
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def after_all_parts
|
|
41
|
+
@after_all_parts ||= reverse.collect {|klass| klass.after_all_parts}.flatten
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def nested_descriptions
|
|
45
|
+
@nested_descriptions ||= collect {|eg| nested_description_from(eg) == "" ? nil : nested_description_from(eg) }.compact
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def nested_description_from(example_group)
|
|
49
|
+
example_group.description_args.join
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|