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
data/lib/spec/mocks/proxy.rb
CHANGED
|
@@ -4,77 +4,142 @@ module Spec
|
|
|
4
4
|
DEFAULT_OPTIONS = {
|
|
5
5
|
:null_object => false,
|
|
6
6
|
}
|
|
7
|
+
|
|
8
|
+
@@warn_about_expectations_on_nil = true
|
|
9
|
+
|
|
10
|
+
def self.allow_message_expectations_on_nil
|
|
11
|
+
@@warn_about_expectations_on_nil = false
|
|
12
|
+
|
|
13
|
+
# ensure nil.rspec_verify is called even if an expectation is not set in the example
|
|
14
|
+
# otherwise the allowance would effect subsequent examples
|
|
15
|
+
$rspec_mocks.add(nil) unless $rspec_mocks.nil?
|
|
16
|
+
end
|
|
7
17
|
|
|
8
|
-
def initialize(target, name, options={})
|
|
18
|
+
def initialize(target, name=nil, options={})
|
|
9
19
|
@target = target
|
|
10
20
|
@name = name
|
|
11
|
-
@error_generator = ErrorGenerator.new target, name
|
|
21
|
+
@error_generator = ErrorGenerator.new target, name, options
|
|
12
22
|
@expectation_ordering = OrderGroup.new @error_generator
|
|
13
23
|
@expectations = []
|
|
14
24
|
@messages_received = []
|
|
15
25
|
@stubs = []
|
|
16
26
|
@proxied_methods = []
|
|
17
27
|
@options = options ? DEFAULT_OPTIONS.dup.merge(options) : DEFAULT_OPTIONS
|
|
28
|
+
@already_proxied_respond_to = false
|
|
18
29
|
end
|
|
19
30
|
|
|
20
31
|
def null_object?
|
|
21
32
|
@options[:null_object]
|
|
22
33
|
end
|
|
34
|
+
|
|
35
|
+
def as_null_object
|
|
36
|
+
@options[:null_object] = true
|
|
37
|
+
@target
|
|
38
|
+
end
|
|
23
39
|
|
|
24
|
-
def add_message_expectation(expected_from, sym, opts={}, &block)
|
|
25
|
-
__add
|
|
26
|
-
|
|
40
|
+
def add_message_expectation(expected_from, sym, opts={}, &block)
|
|
41
|
+
__add sym
|
|
42
|
+
warn_if_nil_class sym
|
|
43
|
+
@expectations << build_expectation(expected_from, sym, opts, &block)
|
|
27
44
|
@expectations.last
|
|
28
45
|
end
|
|
29
46
|
|
|
47
|
+
def build_expectation(expected_from, sym, opts, &block)
|
|
48
|
+
if stub = find_matching_method_stub(sym)
|
|
49
|
+
stub.build_child(expected_from, block_given?? block : nil, 1, opts)
|
|
50
|
+
else
|
|
51
|
+
MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil, 1, opts)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
30
55
|
def add_negative_message_expectation(expected_from, sym, &block)
|
|
31
|
-
__add
|
|
56
|
+
__add sym
|
|
57
|
+
warn_if_nil_class sym
|
|
32
58
|
@expectations << NegativeMessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil)
|
|
33
59
|
@expectations.last
|
|
34
60
|
end
|
|
35
61
|
|
|
36
|
-
def add_stub(expected_from, sym)
|
|
37
|
-
__add
|
|
38
|
-
@stubs.unshift
|
|
62
|
+
def add_stub(expected_from, sym, opts={}, &implementation)
|
|
63
|
+
__add sym
|
|
64
|
+
@stubs.unshift MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, nil, :any, opts, &implementation)
|
|
39
65
|
@stubs.first
|
|
40
66
|
end
|
|
41
67
|
|
|
42
|
-
def
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
68
|
+
def remove_stub(message)
|
|
69
|
+
message = message.to_sym
|
|
70
|
+
if stub_to_remove = @stubs.detect { |s| s.matches_name?(message) }
|
|
71
|
+
reset_proxied_method(message)
|
|
72
|
+
@stubs.delete(stub_to_remove)
|
|
73
|
+
else
|
|
74
|
+
raise MockExpectationError, "The method `#{message}` was not stubbed or was already unstubbed"
|
|
47
75
|
end
|
|
48
76
|
end
|
|
77
|
+
|
|
78
|
+
def verify #:nodoc:
|
|
79
|
+
verify_expectations
|
|
80
|
+
ensure
|
|
81
|
+
reset
|
|
82
|
+
end
|
|
49
83
|
|
|
50
84
|
def reset
|
|
51
85
|
clear_expectations
|
|
52
86
|
clear_stubs
|
|
53
87
|
reset_proxied_methods
|
|
54
88
|
clear_proxied_methods
|
|
89
|
+
reset_nil_expectations_warning
|
|
55
90
|
end
|
|
56
91
|
|
|
57
92
|
def received_message?(sym, *args, &block)
|
|
58
|
-
|
|
59
|
-
return false
|
|
93
|
+
@messages_received.any? {|array| array == [sym, args, block]}
|
|
60
94
|
end
|
|
61
95
|
|
|
62
96
|
def has_negative_expectation?(sym)
|
|
63
|
-
@expectations.
|
|
97
|
+
@expectations.any? {|expectation| expectation.negative_expectation_for?(sym)}
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def record_message_received(sym, args, block)
|
|
101
|
+
@messages_received << [sym, args, block]
|
|
64
102
|
end
|
|
65
103
|
|
|
66
104
|
def message_received(sym, *args, &block)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
105
|
+
expectation = find_matching_expectation(sym, *args)
|
|
106
|
+
stub = find_matching_method_stub(sym, *args)
|
|
107
|
+
|
|
108
|
+
if ok_to_invoke_stub?(stub, expectation)
|
|
109
|
+
record_stub(stub, sym, args, &block)
|
|
110
|
+
elsif expectation
|
|
111
|
+
invoke_expectation(expectation, *args, &block)
|
|
71
112
|
elsif expectation = find_almost_matching_expectation(sym, *args)
|
|
72
|
-
|
|
113
|
+
record_almost_matching_expectation(expectation, sym, *args, &block)
|
|
114
|
+
elsif @target.is_a?(Class)
|
|
115
|
+
@target.superclass.send(sym, *args, &block)
|
|
73
116
|
else
|
|
74
|
-
@target.
|
|
117
|
+
@target.__send__ :method_missing, sym, *args, &block
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def record_stub(stub, sym, args, &block)
|
|
122
|
+
almost_matching_expectation(sym, *args) do |e|
|
|
123
|
+
e.advise(args, block)
|
|
124
|
+
end
|
|
125
|
+
stub.invoke(*args, &block)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def invoke_expectation(expectation, *args, &block)
|
|
129
|
+
expectation.invoke(*args, &block)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def record_almost_matching_expectation(expectation, sym, *args, &block)
|
|
133
|
+
expectation.advise(args, block)
|
|
134
|
+
unless (null_object? or has_negative_expectation?(sym))
|
|
135
|
+
raise_unexpected_message_args_error(expectation, *args)
|
|
75
136
|
end
|
|
76
137
|
end
|
|
77
138
|
|
|
139
|
+
def ok_to_invoke_stub?(stub, expectation)
|
|
140
|
+
stub && (!expectation || expectation.called_max_times?)
|
|
141
|
+
end
|
|
142
|
+
|
|
78
143
|
def raise_unexpected_message_args_error(expectation, *args)
|
|
79
144
|
@error_generator.raise_unexpected_message_args_error expectation, *args
|
|
80
145
|
end
|
|
@@ -83,34 +148,62 @@ module Spec
|
|
|
83
148
|
@error_generator.raise_unexpected_message_error sym, *args
|
|
84
149
|
end
|
|
85
150
|
|
|
151
|
+
def find_matching_method_stub(sym, *args)
|
|
152
|
+
@stubs.find {|stub| stub.matches(sym, args)}
|
|
153
|
+
end
|
|
154
|
+
|
|
86
155
|
private
|
|
87
156
|
|
|
88
|
-
def __add(
|
|
89
|
-
$rspec_mocks.add(@target)
|
|
157
|
+
def __add(sym)
|
|
158
|
+
$rspec_mocks.add(@target) unless $rspec_mocks.nil?
|
|
90
159
|
define_expected_method(sym)
|
|
91
160
|
end
|
|
92
161
|
|
|
93
|
-
def
|
|
94
|
-
if
|
|
95
|
-
|
|
96
|
-
metaclass.__send__(:alias_method, munge(sym), sym)
|
|
162
|
+
def warn_if_nil_class(sym)
|
|
163
|
+
if proxy_for_nil_class? & @@warn_about_expectations_on_nil
|
|
164
|
+
Kernel.warn("An expectation of :#{sym} was set on nil. Called from #{caller[2]}. Use allow_message_expectations_on_nil to disable warnings.")
|
|
97
165
|
end
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def define_expected_method(sym)
|
|
169
|
+
unless @proxied_methods.include?(sym)
|
|
170
|
+
visibility_string = "#{visibility(sym)} :#{sym}"
|
|
171
|
+
if target_responds_to?(sym)
|
|
172
|
+
munged_sym = munge(sym)
|
|
173
|
+
target_metaclass.instance_eval do
|
|
174
|
+
alias_method munged_sym, sym if method_defined?(sym)
|
|
175
|
+
end
|
|
176
|
+
@proxied_methods << sym
|
|
102
177
|
end
|
|
103
|
-
|
|
178
|
+
target_metaclass.class_eval(<<-EOF, __FILE__, __LINE__)
|
|
179
|
+
def #{sym}(*args, &block)
|
|
180
|
+
__mock_proxy.message_received :#{sym}, *args, &block
|
|
181
|
+
end
|
|
182
|
+
#{visibility_string}
|
|
183
|
+
EOF
|
|
184
|
+
end
|
|
104
185
|
end
|
|
105
186
|
|
|
106
187
|
def target_responds_to?(sym)
|
|
107
|
-
return @target.
|
|
188
|
+
return @target.__send__(munge(:respond_to?),sym) if @already_proxied_respond_to
|
|
108
189
|
return @already_proxied_respond_to = true if sym == :respond_to?
|
|
109
|
-
return @target.respond_to?(sym)
|
|
190
|
+
return @target.respond_to?(sym, true)
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def visibility(sym)
|
|
194
|
+
if Mock === @target
|
|
195
|
+
'public'
|
|
196
|
+
elsif target_metaclass.private_method_defined?(sym)
|
|
197
|
+
'private'
|
|
198
|
+
elsif target_metaclass.protected_method_defined?(sym)
|
|
199
|
+
'protected'
|
|
200
|
+
else
|
|
201
|
+
'public'
|
|
202
|
+
end
|
|
110
203
|
end
|
|
111
204
|
|
|
112
205
|
def munge(sym)
|
|
113
|
-
"proxied_by_rspec__#{sym
|
|
206
|
+
"proxied_by_rspec__#{sym}"
|
|
114
207
|
end
|
|
115
208
|
|
|
116
209
|
def clear_expectations
|
|
@@ -125,39 +218,51 @@ module Spec
|
|
|
125
218
|
@proxied_methods.clear
|
|
126
219
|
end
|
|
127
220
|
|
|
128
|
-
def
|
|
129
|
-
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def metaclass
|
|
133
|
-
(class << @target; self; end)
|
|
221
|
+
def target_metaclass
|
|
222
|
+
class << @target; self; end
|
|
134
223
|
end
|
|
135
224
|
|
|
136
225
|
def verify_expectations
|
|
137
|
-
@expectations.
|
|
138
|
-
expectation.verify_messages_received
|
|
139
|
-
end
|
|
226
|
+
@expectations.map {|e| e.verify_messages_received}
|
|
140
227
|
end
|
|
141
228
|
|
|
142
229
|
def reset_proxied_methods
|
|
143
|
-
@proxied_methods.
|
|
144
|
-
|
|
145
|
-
|
|
230
|
+
@proxied_methods.map {|sym| reset_proxied_method(sym)}
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
def reset_proxied_method(sym)
|
|
234
|
+
munged_sym = munge(sym)
|
|
235
|
+
target_metaclass.instance_eval do
|
|
236
|
+
remove_method sym
|
|
237
|
+
if method_defined?(munged_sym)
|
|
238
|
+
alias_method sym, munged_sym
|
|
239
|
+
remove_method munged_sym
|
|
240
|
+
end
|
|
146
241
|
end
|
|
147
242
|
end
|
|
243
|
+
|
|
244
|
+
def proxy_for_nil_class?
|
|
245
|
+
@target.nil?
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
def reset_nil_expectations_warning
|
|
249
|
+
@@warn_about_expectations_on_nil = true if proxy_for_nil_class?
|
|
250
|
+
end
|
|
148
251
|
|
|
149
252
|
def find_matching_expectation(sym, *args)
|
|
253
|
+
@expectations.find {|expectation| expectation.matches(sym, args) && !expectation.called_max_times?} ||
|
|
150
254
|
@expectations.find {|expectation| expectation.matches(sym, args)}
|
|
151
255
|
end
|
|
152
256
|
|
|
153
|
-
def
|
|
154
|
-
|
|
257
|
+
def almost_matching_expectation(sym, *args, &block)
|
|
258
|
+
if e = find_almost_matching_expectation(sym, *args)
|
|
259
|
+
yield e
|
|
260
|
+
end
|
|
155
261
|
end
|
|
156
262
|
|
|
157
|
-
def
|
|
158
|
-
@
|
|
263
|
+
def find_almost_matching_expectation(sym, *args)
|
|
264
|
+
@expectations.find {|expectation| expectation.matches_name_but_not_args(sym, args)}
|
|
159
265
|
end
|
|
160
|
-
|
|
161
266
|
end
|
|
162
267
|
end
|
|
163
|
-
end
|
|
268
|
+
end
|
data/lib/spec/mocks/space.rb
CHANGED
data/lib/spec/mocks.rb
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
require 'spec/mocks/
|
|
2
|
-
require 'spec/mocks/argument_constraint_matchers'
|
|
3
|
-
require 'spec/mocks/spec_methods'
|
|
4
|
-
require 'spec/mocks/proxy'
|
|
5
|
-
require 'spec/mocks/mock'
|
|
6
|
-
require 'spec/mocks/argument_expectation'
|
|
7
|
-
require 'spec/mocks/message_expectation'
|
|
8
|
-
require 'spec/mocks/order_group'
|
|
9
|
-
require 'spec/mocks/errors'
|
|
10
|
-
require 'spec/mocks/error_generator'
|
|
1
|
+
require 'spec/mocks/framework'
|
|
11
2
|
require 'spec/mocks/extensions/object'
|
|
12
|
-
require 'spec/mocks/space'
|
|
13
|
-
|
|
14
3
|
|
|
15
4
|
module Spec
|
|
16
5
|
# == Mocks and Stubs
|
|
@@ -116,11 +105,11 @@ module Spec
|
|
|
116
105
|
# my_mock.should_receive(:sym).with(*args)
|
|
117
106
|
# my_mock.should_not_receive(:sym).with(*args)
|
|
118
107
|
#
|
|
119
|
-
# == Argument
|
|
108
|
+
# == Argument Matchers
|
|
120
109
|
#
|
|
121
110
|
# Arguments that are passed to #with are compared with actual arguments received
|
|
122
111
|
# using == by default. In cases in which you want to specify things about the arguments
|
|
123
|
-
# rather than the arguments themselves, you can use any of
|
|
112
|
+
# rather than the arguments themselves, you can use any of RSpec's Expression Matchers.
|
|
124
113
|
# They don't all make syntactic sense (they were primarily designed for use with
|
|
125
114
|
# Spec::Expectations), but you are free to create your own custom Spec::Matchers.
|
|
126
115
|
#
|
|
@@ -129,13 +118,12 @@ module Spec
|
|
|
129
118
|
# In addition, Spec::Mocks adds some keyword Symbols that you can use to
|
|
130
119
|
# specify certain kinds of arguments:
|
|
131
120
|
#
|
|
132
|
-
# my_mock.should_receive(:sym).with(
|
|
133
|
-
# my_mock.should_receive(:sym).with(
|
|
134
|
-
# my_mock.should_receive(:sym).with(1,
|
|
135
|
-
# my_mock.should_receive(:sym).with(1,
|
|
136
|
-
# my_mock.should_receive(:sym).with(1, :string, "b") #2nd argument can be any String
|
|
121
|
+
# my_mock.should_receive(:sym).with(no_args())
|
|
122
|
+
# my_mock.should_receive(:sym).with(any_args())
|
|
123
|
+
# my_mock.should_receive(:sym).with(1, kind_of(Numeric), "b") #2nd argument can any kind of Numeric
|
|
124
|
+
# my_mock.should_receive(:sym).with(1, boolean(), "b") #2nd argument can true or false
|
|
137
125
|
# my_mock.should_receive(:sym).with(1, /abc/, "b") #2nd argument can be any String matching the submitted Regexp
|
|
138
|
-
# my_mock.should_receive(:sym).with(1,
|
|
126
|
+
# my_mock.should_receive(:sym).with(1, anything(), "b") #2nd argument can be anything at all
|
|
139
127
|
# my_mock.should_receive(:sym).with(1, ducktype(:abs, :div), "b")
|
|
140
128
|
# #2nd argument can be object that responds to #abs and #div
|
|
141
129
|
#
|
|
@@ -171,7 +159,9 @@ module Spec
|
|
|
171
159
|
# #error can be an instantiated object or a class
|
|
172
160
|
# #if it is a class, it must be instantiable with no args
|
|
173
161
|
# my_mock.should_receive(:sym).and_throw(:sym)
|
|
174
|
-
# my_mock.should_receive(:sym).and_yield(
|
|
162
|
+
# my_mock.should_receive(:sym).and_yield(values,to,yield)
|
|
163
|
+
# my_mock.should_receive(:sym).and_yield(values,to,yield).and_yield(some,other,values,this,time)
|
|
164
|
+
# # for methods that yield to a block multiple times
|
|
175
165
|
#
|
|
176
166
|
# Any of these responses can be applied to a stub as well, but stubs do
|
|
177
167
|
# not support any qualifiers about the message received (i.e. you can't specify arguments
|
|
@@ -181,7 +171,8 @@ module Spec
|
|
|
181
171
|
# my_mock.stub!(:sym).and_return(value1, value2, value3)
|
|
182
172
|
# my_mock.stub!(:sym).and_raise(error)
|
|
183
173
|
# my_mock.stub!(:sym).and_throw(:sym)
|
|
184
|
-
# my_mock.stub!(:sym).and_yield(
|
|
174
|
+
# my_mock.stub!(:sym).and_yield(values,to,yield)
|
|
175
|
+
# my_mock.stub!(:sym).and_yield(values,to,yield).and_yield(some,other,values,this,time)
|
|
185
176
|
#
|
|
186
177
|
# == Arbitrary Handling
|
|
187
178
|
#
|
|
@@ -206,4 +197,4 @@ module Spec
|
|
|
206
197
|
# my_mock.should_receive(:<<).with("illegal value").once.and_raise(ArgumentError)
|
|
207
198
|
module Mocks
|
|
208
199
|
end
|
|
209
|
-
end
|
|
200
|
+
end
|
data/lib/spec/rake/spectask.rb
CHANGED
|
@@ -8,10 +8,10 @@ require 'rake/tasklib'
|
|
|
8
8
|
module Spec
|
|
9
9
|
module Rake
|
|
10
10
|
|
|
11
|
-
# A Rake task that runs a set of
|
|
11
|
+
# A Rake task that runs a set of specs.
|
|
12
12
|
#
|
|
13
13
|
# Example:
|
|
14
|
-
#
|
|
14
|
+
#
|
|
15
15
|
# Spec::Rake::SpecTask.new do |t|
|
|
16
16
|
# t.warning = true
|
|
17
17
|
# t.rcov = true
|
|
@@ -21,7 +21,46 @@ module Spec
|
|
|
21
21
|
#
|
|
22
22
|
# rake spec
|
|
23
23
|
#
|
|
24
|
+
# If rake is invoked with a "SPEC=filename" command line option,
|
|
25
|
+
# then the list of spec files will be overridden to include only the
|
|
26
|
+
# filename specified on the command line. This provides an easy way
|
|
27
|
+
# to run just one spec.
|
|
28
|
+
#
|
|
29
|
+
# If rake is invoked with a "SPEC_OPTS=options" command line option,
|
|
30
|
+
# then the given options will override the value of the +spec_opts+
|
|
31
|
+
# attribute.
|
|
32
|
+
#
|
|
33
|
+
# If rake is invoked with a "RCOV_OPTS=options" command line option,
|
|
34
|
+
# then the given options will override the value of the +rcov_opts+
|
|
35
|
+
# attribute.
|
|
36
|
+
#
|
|
37
|
+
# Examples:
|
|
38
|
+
#
|
|
39
|
+
# rake spec # run specs normally
|
|
40
|
+
# rake spec SPEC=just_one_file.rb # run just one spec file.
|
|
41
|
+
# rake spec SPEC_OPTS="--diff" # enable diffing
|
|
42
|
+
# rake spec RCOV_OPTS="--aggregate myfile.txt" # see rcov --help for details
|
|
43
|
+
#
|
|
44
|
+
# Each attribute of this task may be a proc. This allows for lazy evaluation,
|
|
45
|
+
# which is sometimes handy if you want to defer the evaluation of an attribute value
|
|
46
|
+
# until the task is run (as opposed to when it is defined).
|
|
47
|
+
#
|
|
48
|
+
# This task can also be used to run existing Test::Unit tests and get RSpec
|
|
49
|
+
# output, for example like this:
|
|
50
|
+
#
|
|
51
|
+
# require 'spec/rake/spectask'
|
|
52
|
+
# Spec::Rake::SpecTask.new do |t|
|
|
53
|
+
# t.ruby_opts = ['-rtest/unit']
|
|
54
|
+
# t.spec_files = FileList['test/**/*_test.rb']
|
|
55
|
+
# end
|
|
56
|
+
#
|
|
24
57
|
class SpecTask < ::Rake::TaskLib
|
|
58
|
+
def self.attr_accessor(*names)
|
|
59
|
+
super(*names)
|
|
60
|
+
names.each do |name|
|
|
61
|
+
module_eval "def #{name}() evaluate(@#{name}) end" # Allows use of procs
|
|
62
|
+
end
|
|
63
|
+
end
|
|
25
64
|
|
|
26
65
|
# Name of spec task. (default is :spec)
|
|
27
66
|
attr_accessor :name
|
|
@@ -35,21 +74,20 @@ module Spec
|
|
|
35
74
|
attr_accessor :warning
|
|
36
75
|
|
|
37
76
|
# Glob pattern to match spec files. (default is 'spec/**/*_spec.rb')
|
|
77
|
+
# Setting the SPEC environment variable overrides this.
|
|
38
78
|
attr_accessor :pattern
|
|
39
79
|
|
|
40
80
|
# Array of commandline options to pass to RSpec. Defaults to [].
|
|
81
|
+
# Setting the SPEC_OPTS environment variable overrides this.
|
|
41
82
|
attr_accessor :spec_opts
|
|
42
83
|
|
|
43
|
-
# Where RSpec's output is written. Defaults to STDOUT.
|
|
44
|
-
# DEPRECATED. Use --format FORMAT:WHERE in spec_opts.
|
|
45
|
-
attr_accessor :out
|
|
46
|
-
|
|
47
84
|
# Whether or not to use RCov (default is false)
|
|
48
85
|
# See http://eigenclass.org/hiki.rb?rcov
|
|
49
86
|
attr_accessor :rcov
|
|
50
|
-
|
|
87
|
+
|
|
51
88
|
# Array of commandline options to pass to RCov. Defaults to ['--exclude', 'lib\/spec,bin\/spec'].
|
|
52
89
|
# Ignored if rcov=false
|
|
90
|
+
# Setting the RCOV_OPTS environment variable overrides this.
|
|
53
91
|
attr_accessor :rcov_opts
|
|
54
92
|
|
|
55
93
|
# Directory where the RCov report is written. Defaults to "coverage"
|
|
@@ -63,82 +101,89 @@ module Spec
|
|
|
63
101
|
# Defaults to true.
|
|
64
102
|
attr_accessor :fail_on_error
|
|
65
103
|
|
|
66
|
-
# A message to print to
|
|
104
|
+
# A message to print to stderr when there are failures.
|
|
67
105
|
attr_accessor :failure_message
|
|
68
106
|
|
|
107
|
+
# Where RSpec's output is written. Defaults to $stdout.
|
|
108
|
+
# DEPRECATED. Use --format FORMAT:WHERE in spec_opts.
|
|
109
|
+
attr_accessor :out
|
|
110
|
+
|
|
69
111
|
# Explicitly define the list of spec files to be included in a
|
|
70
|
-
# spec. +
|
|
112
|
+
# spec. +spec_files+ is expected to be an array of file names (a
|
|
71
113
|
# FileList is acceptable). If both +pattern+ and +spec_files+ are
|
|
72
114
|
# used, then the list of spec files is the union of the two.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
115
|
+
# Setting the SPEC environment variable overrides this.
|
|
116
|
+
attr_accessor :spec_files
|
|
117
|
+
|
|
118
|
+
# Use verbose output. If this is set to true, the task will print
|
|
119
|
+
# the executed spec command to stdout. Defaults to false.
|
|
120
|
+
attr_accessor :verbose
|
|
76
121
|
|
|
77
|
-
#
|
|
122
|
+
# Explicitly define the path to the ruby binary, or its proxy (e.g. multiruby)
|
|
123
|
+
attr_accessor :ruby_cmd
|
|
124
|
+
|
|
125
|
+
# Defines a new task, using the name +name+.
|
|
78
126
|
def initialize(name=:spec)
|
|
79
127
|
@name = name
|
|
80
|
-
@libs = [
|
|
128
|
+
@libs = ['lib']
|
|
81
129
|
@pattern = nil
|
|
82
130
|
@spec_files = nil
|
|
83
131
|
@spec_opts = []
|
|
84
132
|
@warning = false
|
|
85
133
|
@ruby_opts = []
|
|
86
|
-
@out = nil
|
|
87
134
|
@fail_on_error = true
|
|
88
135
|
@rcov = false
|
|
89
136
|
@rcov_opts = ['--exclude', 'lib\/spec,bin\/spec,config\/boot.rb']
|
|
90
137
|
@rcov_dir = "coverage"
|
|
91
138
|
|
|
92
139
|
yield self if block_given?
|
|
93
|
-
@pattern = 'spec/**/*_spec.rb' if
|
|
140
|
+
@pattern = 'spec/**/*_spec.rb' if pattern.nil? && spec_files.nil?
|
|
94
141
|
define
|
|
95
142
|
end
|
|
96
143
|
|
|
97
|
-
def define
|
|
98
|
-
spec_script = File.expand_path(File.dirname(__FILE__)
|
|
144
|
+
def define # :nodoc:
|
|
145
|
+
spec_script = File.expand_path(File.join(File.dirname(__FILE__),"..","..","..","bin","spec"))
|
|
99
146
|
|
|
100
|
-
lib_path =
|
|
147
|
+
lib_path = libs.join(File::PATH_SEPARATOR)
|
|
101
148
|
actual_name = Hash === name ? name.keys.first : name
|
|
102
149
|
unless ::Rake.application.last_comment
|
|
103
|
-
desc "Run
|
|
150
|
+
desc "Run specs" + (rcov ? " using RCov" : "")
|
|
104
151
|
end
|
|
105
|
-
task
|
|
106
|
-
RakeFileUtils.verbose(
|
|
152
|
+
task name do
|
|
153
|
+
RakeFileUtils.verbose(verbose) do
|
|
107
154
|
unless spec_file_list.empty?
|
|
108
|
-
# ruby [ruby_opts] -Ilib -S rcov [rcov_opts] bin/spec -- [spec_opts]
|
|
155
|
+
# ruby [ruby_opts] -Ilib -S rcov [rcov_opts] bin/spec -- examples [spec_opts]
|
|
109
156
|
# or
|
|
110
|
-
# ruby [ruby_opts] -Ilib bin/spec [spec_opts]
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
cmd
|
|
127
|
-
cmd
|
|
128
|
-
cmd << %Q| > "#{@out}"| if @out
|
|
129
|
-
|
|
157
|
+
# ruby [ruby_opts] -Ilib bin/spec examples [spec_opts]
|
|
158
|
+
cmd_parts = [ruby_cmd || RUBY]
|
|
159
|
+
cmd_parts += ruby_opts
|
|
160
|
+
cmd_parts << %[-I"#{lib_path}"]
|
|
161
|
+
cmd_parts << "-S rcov" if rcov
|
|
162
|
+
cmd_parts << "-w" if warning
|
|
163
|
+
cmd_parts << rcov_option_list
|
|
164
|
+
cmd_parts << %[-o "#{rcov_dir}"] if rcov
|
|
165
|
+
cmd_parts << %["#{spec_script}"]
|
|
166
|
+
cmd_parts << "--" if rcov
|
|
167
|
+
cmd_parts += spec_file_list.collect { |fn| %["#{fn}"] }
|
|
168
|
+
cmd_parts << spec_option_list
|
|
169
|
+
if out
|
|
170
|
+
cmd_parts << %[> "#{out}"]
|
|
171
|
+
STDERR.puts "The Spec::Rake::SpecTask#out attribute is DEPRECATED and will be removed in a future version. Use --format FORMAT:WHERE instead."
|
|
172
|
+
end
|
|
173
|
+
cmd = cmd_parts.join(" ")
|
|
174
|
+
puts cmd if verbose
|
|
130
175
|
unless system(cmd)
|
|
131
|
-
|
|
132
|
-
|
|
176
|
+
STDERR.puts failure_message if failure_message
|
|
177
|
+
raise("Command #{cmd} failed") if fail_on_error
|
|
133
178
|
end
|
|
134
179
|
end
|
|
135
180
|
end
|
|
136
181
|
end
|
|
137
182
|
|
|
138
|
-
if
|
|
183
|
+
if rcov
|
|
139
184
|
desc "Remove rcov products for #{actual_name}"
|
|
140
185
|
task paste("clobber_", actual_name) do
|
|
141
|
-
rm_r
|
|
186
|
+
rm_r rcov_dir rescue nil
|
|
142
187
|
end
|
|
143
188
|
|
|
144
189
|
clobber_task = paste("clobber_", actual_name)
|
|
@@ -150,12 +195,23 @@ module Spec
|
|
|
150
195
|
end
|
|
151
196
|
|
|
152
197
|
def rcov_option_list # :nodoc:
|
|
153
|
-
|
|
154
|
-
|
|
198
|
+
if rcov
|
|
199
|
+
ENV['RCOV_OPTS'] || rcov_opts.join(" ") || ""
|
|
200
|
+
else
|
|
201
|
+
""
|
|
202
|
+
end
|
|
155
203
|
end
|
|
156
204
|
|
|
157
205
|
def spec_option_list # :nodoc:
|
|
158
|
-
|
|
206
|
+
STDERR.puts "RSPECOPTS is DEPRECATED and will be removed in a future version. Use SPEC_OPTS instead." if ENV['RSPECOPTS']
|
|
207
|
+
ENV['SPEC_OPTS'] || ENV['RSPECOPTS'] || spec_opts.join(" ") || ""
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def evaluate(o) # :nodoc:
|
|
211
|
+
case o
|
|
212
|
+
when Proc then o.call
|
|
213
|
+
else o
|
|
214
|
+
end
|
|
159
215
|
end
|
|
160
216
|
|
|
161
217
|
def spec_file_list # :nodoc:
|
|
@@ -163,8 +219,8 @@ module Spec
|
|
|
163
219
|
FileList[ ENV['SPEC'] ]
|
|
164
220
|
else
|
|
165
221
|
result = []
|
|
166
|
-
result +=
|
|
167
|
-
result += FileList[
|
|
222
|
+
result += spec_files.to_a if spec_files
|
|
223
|
+
result += FileList[ pattern ].to_a if pattern
|
|
168
224
|
FileList[result]
|
|
169
225
|
end
|
|
170
226
|
end
|
|
@@ -172,4 +228,3 @@ module Spec
|
|
|
172
228
|
end
|
|
173
229
|
end
|
|
174
230
|
end
|
|
175
|
-
|