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
|
@@ -1,31 +1,56 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
module Spec
|
|
4
4
|
module Mocks
|
|
5
|
-
describe
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
describe Mock do
|
|
6
|
+
treats_method_missing_as_private :subject => Mock.new, :noop => false
|
|
7
|
+
|
|
8
|
+
before(:each) do
|
|
8
9
|
@mock = mock("test mock")
|
|
9
10
|
end
|
|
10
|
-
|
|
11
|
-
after do
|
|
11
|
+
|
|
12
|
+
after(:each) do
|
|
12
13
|
@mock.rspec_reset
|
|
13
14
|
end
|
|
14
|
-
|
|
15
|
+
|
|
16
|
+
describe "deprecated #stub_everything method" do
|
|
17
|
+
before(:each) do
|
|
18
|
+
Kernel.stub!(:warn)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "creates a mock that behaves as a null object" do
|
|
22
|
+
stub_everything.should be_null_object
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "provides deprecation warning" do
|
|
26
|
+
Kernel.should_receive(:warn).with(/DEPRECATION: stub_everything.* is deprecated./)
|
|
27
|
+
stub_everything
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
15
31
|
it "should report line number of expectation of unreceived message" do
|
|
16
|
-
@mock.should_receive(:wont_happen).with("x", 3)
|
|
17
|
-
|
|
18
|
-
|
|
32
|
+
expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
|
|
33
|
+
begin
|
|
34
|
+
@mock.rspec_verify
|
|
35
|
+
violated
|
|
36
|
+
rescue MockExpectationError => e
|
|
37
|
+
# NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
|
|
38
|
+
e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
19
41
|
|
|
42
|
+
it "should report line number of expectation of unreceived message after #should_receive after similar stub" do
|
|
43
|
+
@mock.stub!(:wont_happen)
|
|
44
|
+
expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
|
|
20
45
|
begin
|
|
21
46
|
@mock.rspec_verify
|
|
22
47
|
violated
|
|
23
48
|
rescue MockExpectationError => e
|
|
24
|
-
|
|
49
|
+
# NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
|
|
50
|
+
e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
|
|
25
51
|
end
|
|
26
|
-
|
|
27
52
|
end
|
|
28
|
-
|
|
53
|
+
|
|
29
54
|
it "should pass when not receiving message specified as not to be received" do
|
|
30
55
|
@mock.should_not_receive(:not_expected)
|
|
31
56
|
@mock.rspec_verify
|
|
@@ -40,24 +65,18 @@ module Spec
|
|
|
40
65
|
|
|
41
66
|
it "should fail when receiving message specified as not to be received" do
|
|
42
67
|
@mock.should_not_receive(:not_expected)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
@mock.rspec_verify
|
|
68
|
+
lambda {
|
|
69
|
+
@mock.not_expected
|
|
46
70
|
violated
|
|
47
|
-
|
|
48
|
-
e.message.should == "Mock 'test mock' expected :not_expected with (any args) 0 times, but received it once"
|
|
49
|
-
end
|
|
71
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no args) 0 times, but received it once")
|
|
50
72
|
end
|
|
51
73
|
|
|
52
74
|
it "should fail when receiving message specified as not to be received with args" do
|
|
53
75
|
@mock.should_not_receive(:not_expected).with("unexpected text")
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
@mock.rspec_verify
|
|
76
|
+
lambda {
|
|
77
|
+
@mock.not_expected("unexpected text")
|
|
57
78
|
violated
|
|
58
|
-
|
|
59
|
-
e.message.should == "Mock 'test mock' expected :not_expected with (\"unexpected text\") 0 times, but received it once"
|
|
60
|
-
end
|
|
79
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (\"unexpected text\") 0 times, but received it once")
|
|
61
80
|
end
|
|
62
81
|
|
|
63
82
|
it "should pass when receiving message specified as not to be received with wrong args" do
|
|
@@ -84,25 +103,39 @@ module Spec
|
|
|
84
103
|
@mock.rspec_verify
|
|
85
104
|
end
|
|
86
105
|
|
|
87
|
-
it "should raise exception if args
|
|
106
|
+
it "should raise exception if args don't match when method called" do
|
|
88
107
|
@mock.should_receive(:something).with("a","b","c").and_return("booh")
|
|
89
|
-
|
|
108
|
+
lambda {
|
|
90
109
|
@mock.something("a","d","c")
|
|
91
110
|
violated
|
|
92
|
-
|
|
93
|
-
e.message.should == "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")"
|
|
94
|
-
end
|
|
111
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: (\"a\", \"d\", \"c\")")
|
|
95
112
|
end
|
|
96
|
-
|
|
113
|
+
|
|
114
|
+
it "should raise exception if args don't match when method called even when the method is stubbed" do
|
|
115
|
+
@mock.stub!(:something)
|
|
116
|
+
@mock.should_receive(:something).with("a","b","c")
|
|
117
|
+
lambda {
|
|
118
|
+
@mock.something("a","d","c")
|
|
119
|
+
@mock.rspec_verify
|
|
120
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: ([\"a\", \"d\", \"c\"])")
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "should raise exception if args don't match when method called even when using null_object" do
|
|
124
|
+
@mock = mock("test mock", :null_object => true)
|
|
125
|
+
@mock.should_receive(:something).with("a","b","c")
|
|
126
|
+
lambda {
|
|
127
|
+
@mock.something("a","d","c")
|
|
128
|
+
@mock.rspec_verify
|
|
129
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: ([\"a\", \"d\", \"c\"])")
|
|
130
|
+
end
|
|
131
|
+
|
|
97
132
|
it "should fail if unexpected method called" do
|
|
98
|
-
|
|
133
|
+
lambda {
|
|
99
134
|
@mock.something("a","b","c")
|
|
100
135
|
violated
|
|
101
|
-
|
|
102
|
-
e.message.should == "Mock 'test mock' received unexpected message :something with (\"a\", \"b\", \"c\")"
|
|
103
|
-
end
|
|
136
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" received unexpected message :something with (\"a\", \"b\", \"c\")")
|
|
104
137
|
end
|
|
105
|
-
|
|
138
|
+
|
|
106
139
|
it "should use block for expectation if provided" do
|
|
107
140
|
@mock.should_receive(:something) do | a, b |
|
|
108
141
|
a.should == "a"
|
|
@@ -112,189 +145,248 @@ module Spec
|
|
|
112
145
|
@mock.something("a", "b").should == "booh"
|
|
113
146
|
@mock.rspec_verify
|
|
114
147
|
end
|
|
115
|
-
|
|
148
|
+
|
|
116
149
|
it "should fail if expectation block fails" do
|
|
117
150
|
@mock.should_receive(:something) {| bool | bool.should be_true}
|
|
118
|
-
|
|
151
|
+
lambda {
|
|
119
152
|
@mock.something false
|
|
120
|
-
|
|
121
|
-
e.message.should match(/Mock 'test mock' received :something but passed block failed with: expected true, got false/)
|
|
122
|
-
end
|
|
153
|
+
}.should raise_error(MockExpectationError, /Mock "test mock" received :something but passed block failed with: expected false to be true/)
|
|
123
154
|
end
|
|
124
|
-
|
|
125
|
-
it "should fail when method defined as never is received" do
|
|
155
|
+
|
|
156
|
+
it "should fail right away when method defined as never is received" do
|
|
126
157
|
@mock.should_receive(:not_expected).never
|
|
127
|
-
|
|
158
|
+
lambda {
|
|
128
159
|
@mock.not_expected
|
|
129
|
-
|
|
130
|
-
e.message.should == "Mock 'test mock' expected :not_expected 0 times, but received it 1 times"
|
|
131
|
-
end
|
|
160
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no args) 0 times, but received it once")
|
|
132
161
|
end
|
|
133
|
-
|
|
162
|
+
|
|
163
|
+
it "should eventually fail when method defined as never is received" do
|
|
164
|
+
@mock.should_receive(:not_expected).never
|
|
165
|
+
lambda {
|
|
166
|
+
@mock.not_expected
|
|
167
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no args) 0 times, but received it once")
|
|
168
|
+
end
|
|
169
|
+
|
|
134
170
|
it "should raise when told to" do
|
|
135
171
|
@mock.should_receive(:something).and_raise(RuntimeError)
|
|
136
172
|
lambda do
|
|
137
173
|
@mock.something
|
|
138
174
|
end.should raise_error(RuntimeError)
|
|
139
175
|
end
|
|
140
|
-
|
|
176
|
+
|
|
141
177
|
it "should raise passed an Exception instance" do
|
|
142
178
|
error = RuntimeError.new("error message")
|
|
143
179
|
@mock.should_receive(:something).and_raise(error)
|
|
144
|
-
|
|
180
|
+
lambda {
|
|
145
181
|
@mock.something
|
|
146
|
-
|
|
147
|
-
e.message.should eql("error message")
|
|
148
|
-
end
|
|
182
|
+
}.should raise_error(RuntimeError, "error message")
|
|
149
183
|
end
|
|
150
184
|
|
|
151
185
|
it "should raise RuntimeError with passed message" do
|
|
152
186
|
@mock.should_receive(:something).and_raise("error message")
|
|
153
|
-
|
|
187
|
+
lambda {
|
|
154
188
|
@mock.something
|
|
155
|
-
|
|
156
|
-
e.message.should eql("error message")
|
|
157
|
-
end
|
|
189
|
+
}.should raise_error(RuntimeError, "error message")
|
|
158
190
|
end
|
|
159
|
-
|
|
191
|
+
|
|
160
192
|
it "should not raise when told to if args dont match" do
|
|
161
193
|
@mock.should_receive(:something).with(2).and_raise(RuntimeError)
|
|
162
|
-
lambda
|
|
194
|
+
lambda {
|
|
163
195
|
@mock.something 1
|
|
164
|
-
|
|
196
|
+
}.should raise_error(MockExpectationError)
|
|
165
197
|
end
|
|
166
|
-
|
|
198
|
+
|
|
167
199
|
it "should throw when told to" do
|
|
168
200
|
@mock.should_receive(:something).and_throw(:blech)
|
|
169
|
-
lambda
|
|
201
|
+
lambda {
|
|
170
202
|
@mock.something
|
|
171
|
-
|
|
203
|
+
}.should throw_symbol(:blech)
|
|
172
204
|
end
|
|
173
205
|
|
|
174
206
|
it "should raise when explicit return and block constrained" do
|
|
175
|
-
lambda
|
|
207
|
+
lambda {
|
|
176
208
|
@mock.should_receive(:fruit) do |colour|
|
|
177
209
|
:strawberry
|
|
178
210
|
end.and_return :apple
|
|
179
|
-
|
|
211
|
+
}.should raise_error(AmbiguousReturnError)
|
|
180
212
|
end
|
|
181
|
-
|
|
213
|
+
|
|
182
214
|
it "should ignore args on any args" do
|
|
183
|
-
@mock.should_receive(:something).at_least(:once).with(
|
|
215
|
+
@mock.should_receive(:something).at_least(:once).with(any_args)
|
|
184
216
|
@mock.something
|
|
185
217
|
@mock.something 1
|
|
186
218
|
@mock.something "a", 2
|
|
187
219
|
@mock.something [], {}, "joe", 7
|
|
188
220
|
@mock.rspec_verify
|
|
189
221
|
end
|
|
190
|
-
|
|
222
|
+
|
|
191
223
|
it "should fail on no args if any args received" do
|
|
192
|
-
@mock.should_receive(:something).with(
|
|
193
|
-
|
|
224
|
+
@mock.should_receive(:something).with(no_args())
|
|
225
|
+
lambda {
|
|
194
226
|
@mock.something 1
|
|
195
|
-
|
|
196
|
-
e.message.should == "Mock 'test mock' expected :something with (no args) but received it with (1)"
|
|
197
|
-
end
|
|
227
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (no args)\n got: (1)")
|
|
198
228
|
end
|
|
199
|
-
|
|
229
|
+
|
|
200
230
|
it "should fail when args are expected but none are received" do
|
|
201
231
|
@mock.should_receive(:something).with(1)
|
|
202
|
-
|
|
232
|
+
lambda {
|
|
203
233
|
@mock.something
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
234
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (1)\n got: (no args)")
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
it "should return value from block by default" do
|
|
238
|
+
@mock.stub!(:method_that_yields).and_yield
|
|
239
|
+
@mock.method_that_yields { :returned_obj }.should == :returned_obj
|
|
240
|
+
@mock.rspec_verify
|
|
207
241
|
end
|
|
208
242
|
|
|
209
243
|
it "should yield 0 args to blocks that take a variable number of arguments" do
|
|
210
|
-
@mock.should_receive(:yield_back).with(
|
|
244
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield
|
|
211
245
|
a = nil
|
|
212
|
-
@mock.yield_back {|*a
|
|
246
|
+
@mock.yield_back {|*x| a = x}
|
|
213
247
|
a.should == []
|
|
214
248
|
@mock.rspec_verify
|
|
215
249
|
end
|
|
216
250
|
|
|
251
|
+
it "should yield 0 args multiple times to blocks that take a variable number of arguments" do
|
|
252
|
+
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield.
|
|
253
|
+
and_yield
|
|
254
|
+
a = nil
|
|
255
|
+
b = []
|
|
256
|
+
@mock.yield_back {|*a| b << a}
|
|
257
|
+
b.should == [ [], [] ]
|
|
258
|
+
@mock.rspec_verify
|
|
259
|
+
end
|
|
260
|
+
|
|
217
261
|
it "should yield one arg to blocks that take a variable number of arguments" do
|
|
218
|
-
@mock.should_receive(:yield_back).with(
|
|
262
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
|
|
219
263
|
a = nil
|
|
220
|
-
@mock.yield_back {|*a
|
|
264
|
+
@mock.yield_back {|*x| a = x}
|
|
221
265
|
a.should == [99]
|
|
222
266
|
@mock.rspec_verify
|
|
223
267
|
end
|
|
224
268
|
|
|
269
|
+
it "should yield one arg 3 times consecutively to blocks that take a variable number of arguments" do
|
|
270
|
+
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99).
|
|
271
|
+
and_yield(43).
|
|
272
|
+
and_yield("something fruity")
|
|
273
|
+
a = nil
|
|
274
|
+
b = []
|
|
275
|
+
@mock.yield_back {|*a| b << a}
|
|
276
|
+
b.should == [[99], [43], ["something fruity"]]
|
|
277
|
+
@mock.rspec_verify
|
|
278
|
+
end
|
|
279
|
+
|
|
225
280
|
it "should yield many args to blocks that take a variable number of arguments" do
|
|
226
|
-
@mock.should_receive(:yield_back).with(
|
|
281
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield(99, 27, "go")
|
|
227
282
|
a = nil
|
|
228
|
-
@mock.yield_back {|*a
|
|
283
|
+
@mock.yield_back {|*x| a = x}
|
|
229
284
|
a.should == [99, 27, "go"]
|
|
230
285
|
@mock.rspec_verify
|
|
231
286
|
end
|
|
232
287
|
|
|
288
|
+
it "should yield many args 3 times consecutively to blocks that take a variable number of arguments" do
|
|
289
|
+
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99, :green, "go").
|
|
290
|
+
and_yield("wait", :amber).
|
|
291
|
+
and_yield("stop", 12, :red)
|
|
292
|
+
a = nil
|
|
293
|
+
b = []
|
|
294
|
+
@mock.yield_back {|*a| b << a}
|
|
295
|
+
b.should == [[99, :green, "go"], ["wait", :amber], ["stop", 12, :red]]
|
|
296
|
+
@mock.rspec_verify
|
|
297
|
+
end
|
|
298
|
+
|
|
233
299
|
it "should yield single value" do
|
|
234
|
-
@mock.should_receive(:yield_back).with(
|
|
300
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
|
|
235
301
|
a = nil
|
|
236
|
-
@mock.yield_back {|a
|
|
302
|
+
@mock.yield_back {|x| a = x}
|
|
237
303
|
a.should == 99
|
|
238
304
|
@mock.rspec_verify
|
|
239
305
|
end
|
|
240
306
|
|
|
307
|
+
it "should yield single value 3 times consecutively" do
|
|
308
|
+
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99).
|
|
309
|
+
and_yield(43).
|
|
310
|
+
and_yield("something fruity")
|
|
311
|
+
a = nil
|
|
312
|
+
b = []
|
|
313
|
+
@mock.yield_back {|a| b << a}
|
|
314
|
+
b.should == [99, 43, "something fruity"]
|
|
315
|
+
@mock.rspec_verify
|
|
316
|
+
end
|
|
317
|
+
|
|
241
318
|
it "should yield two values" do
|
|
242
|
-
@mock.should_receive(:yield_back).with(
|
|
319
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
|
|
243
320
|
a, b = nil
|
|
244
|
-
@mock.yield_back {|a
|
|
321
|
+
@mock.yield_back {|x,y| a=x; b=y}
|
|
245
322
|
a.should == 'wha'
|
|
246
323
|
b.should == 'zup'
|
|
247
324
|
@mock.rspec_verify
|
|
248
325
|
end
|
|
249
326
|
|
|
327
|
+
it "should yield two values 3 times consecutively" do
|
|
328
|
+
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
|
|
329
|
+
and_yield('not', 'down').
|
|
330
|
+
and_yield(14, 65)
|
|
331
|
+
a, b = nil
|
|
332
|
+
c = []
|
|
333
|
+
@mock.yield_back {|a,b| c << [a, b]}
|
|
334
|
+
c.should == [['wha', 'zup'], ['not', 'down'], [14, 65]]
|
|
335
|
+
@mock.rspec_verify
|
|
336
|
+
end
|
|
337
|
+
|
|
250
338
|
it "should fail when calling yielding method with wrong arity" do
|
|
251
|
-
@mock.should_receive(:yield_back).with(
|
|
252
|
-
|
|
339
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
|
|
340
|
+
lambda {
|
|
253
341
|
@mock.yield_back {|a|}
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
342
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" yielded |\"wha\", \"zup\"| to block with arity of 1")
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
it "should fail when calling yielding method consecutively with wrong arity" do
|
|
346
|
+
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
|
|
347
|
+
and_yield('down').
|
|
348
|
+
and_yield(14, 65)
|
|
349
|
+
lambda {
|
|
350
|
+
a, b = nil
|
|
351
|
+
c = []
|
|
352
|
+
@mock.yield_back {|a,b| c << [a, b]}
|
|
353
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" yielded |\"down\"| to block with arity of 2")
|
|
257
354
|
end
|
|
258
355
|
|
|
259
356
|
it "should fail when calling yielding method without block" do
|
|
260
|
-
@mock.should_receive(:yield_back).with(
|
|
261
|
-
|
|
357
|
+
@mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
|
|
358
|
+
lambda {
|
|
262
359
|
@mock.yield_back
|
|
263
|
-
|
|
264
|
-
e.message.should == "Mock 'test mock' asked to yield |\"wha\", \"zup\"| but no block was passed"
|
|
265
|
-
end
|
|
360
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" asked to yield |[\"wha\", \"zup\"]| but no block was passed")
|
|
266
361
|
end
|
|
267
362
|
|
|
268
363
|
it "should be able to mock send" do
|
|
269
|
-
@mock.should_receive(:send).with(
|
|
364
|
+
@mock.should_receive(:send).with(any_args)
|
|
270
365
|
@mock.send 'hi'
|
|
271
366
|
@mock.rspec_verify
|
|
272
367
|
end
|
|
273
|
-
|
|
368
|
+
|
|
274
369
|
it "should be able to raise from method calling yielding mock" do
|
|
275
370
|
@mock.should_receive(:yield_me).and_yield 44
|
|
276
|
-
|
|
277
|
-
lambda
|
|
371
|
+
|
|
372
|
+
lambda {
|
|
278
373
|
@mock.yield_me do |x|
|
|
279
374
|
raise "Bang"
|
|
280
375
|
end
|
|
281
|
-
|
|
376
|
+
}.should raise_error(StandardError, "Bang")
|
|
282
377
|
|
|
283
378
|
@mock.rspec_verify
|
|
284
379
|
end
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
# end
|
|
296
|
-
# end
|
|
297
|
-
|
|
380
|
+
|
|
381
|
+
it "should clear expectations after verify" do
|
|
382
|
+
@mock.should_receive(:foobar)
|
|
383
|
+
@mock.foobar
|
|
384
|
+
@mock.rspec_verify
|
|
385
|
+
lambda {
|
|
386
|
+
@mock.foobar
|
|
387
|
+
}.should raise_error(MockExpectationError, "Mock \"test mock\" received unexpected message :foobar with (no args)")
|
|
388
|
+
end
|
|
389
|
+
|
|
298
390
|
it "should restore objects to their original state on rspec_reset" do
|
|
299
391
|
mock = mock("this is a mock")
|
|
300
392
|
mock.should_receive(:blah)
|
|
@@ -302,6 +394,99 @@ module Spec
|
|
|
302
394
|
mock.rspec_verify #should throw if reset didn't work
|
|
303
395
|
end
|
|
304
396
|
|
|
397
|
+
it "should work even after method_missing starts raising NameErrors instead of NoMethodErrors" do
|
|
398
|
+
# Object#method_missing throws either NameErrors or NoMethodErrors.
|
|
399
|
+
#
|
|
400
|
+
# On a fresh ruby program Object#method_missing:
|
|
401
|
+
# * raises a NoMethodError when called directly
|
|
402
|
+
# * raises a NameError when called indirectly
|
|
403
|
+
#
|
|
404
|
+
# Once Object#method_missing has been called at least once (on any object)
|
|
405
|
+
# it starts behaving differently:
|
|
406
|
+
# * raises a NameError when called directly
|
|
407
|
+
# * raises a NameError when called indirectly
|
|
408
|
+
#
|
|
409
|
+
# There was a bug in Mock#method_missing that relied on the fact
|
|
410
|
+
# that calling Object#method_missing directly raises a NoMethodError.
|
|
411
|
+
# This example tests that the bug doesn't exist anymore.
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
# Ensures that method_missing always raises NameErrors.
|
|
415
|
+
a_method_that_doesnt_exist rescue
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
@mock.should_receive(:foobar)
|
|
419
|
+
@mock.foobar
|
|
420
|
+
@mock.rspec_verify
|
|
421
|
+
|
|
422
|
+
lambda { @mock.foobar }.should_not raise_error(NameError)
|
|
423
|
+
lambda { @mock.foobar }.should raise_error(MockExpectationError)
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
it "should temporarily replace a method stub on a mock" do
|
|
427
|
+
@mock.stub!(:msg).and_return(:stub_value)
|
|
428
|
+
@mock.should_receive(:msg).with(:arg).and_return(:mock_value)
|
|
429
|
+
@mock.msg(:arg).should equal(:mock_value)
|
|
430
|
+
@mock.msg.should equal(:stub_value)
|
|
431
|
+
@mock.msg.should equal(:stub_value)
|
|
432
|
+
@mock.rspec_verify
|
|
433
|
+
end
|
|
434
|
+
|
|
435
|
+
it "should not require a different signature to replace a method stub" do
|
|
436
|
+
@mock.stub!(:msg).and_return(:stub_value)
|
|
437
|
+
@mock.should_receive(:msg).and_return(:mock_value)
|
|
438
|
+
@mock.msg(:arg).should equal(:mock_value)
|
|
439
|
+
@mock.msg.should equal(:stub_value)
|
|
440
|
+
@mock.msg.should equal(:stub_value)
|
|
441
|
+
@mock.rspec_verify
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
it "should raise an error when a previously stubbed method has a negative expectation" do
|
|
445
|
+
@mock.stub!(:msg).and_return(:stub_value)
|
|
446
|
+
@mock.should_not_receive(:msg).and_return(:mock_value)
|
|
447
|
+
lambda {@mock.msg(:arg)}.should raise_error(MockExpectationError)
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
it "should temporarily replace a method stub on a non-mock" do
|
|
451
|
+
non_mock = Object.new
|
|
452
|
+
non_mock.stub!(:msg).and_return(:stub_value)
|
|
453
|
+
non_mock.should_receive(:msg).with(:arg).and_return(:mock_value)
|
|
454
|
+
non_mock.msg(:arg).should equal(:mock_value)
|
|
455
|
+
non_mock.msg.should equal(:stub_value)
|
|
456
|
+
non_mock.msg.should equal(:stub_value)
|
|
457
|
+
non_mock.rspec_verify
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
it "should return the stubbed value when no new value specified" do
|
|
461
|
+
@mock.stub!(:msg).and_return(:stub_value)
|
|
462
|
+
@mock.should_receive(:msg)
|
|
463
|
+
@mock.msg.should equal(:stub_value)
|
|
464
|
+
@mock.rspec_verify
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
it "should not mess with the stub's yielded values when also mocked" do
|
|
468
|
+
@mock.stub!(:yield_back).and_yield(:stub_value)
|
|
469
|
+
@mock.should_receive(:yield_back).and_yield(:mock_value)
|
|
470
|
+
@mock.yield_back{|v| v.should == :mock_value }
|
|
471
|
+
@mock.yield_back{|v| v.should == :stub_value }
|
|
472
|
+
@mock.rspec_verify
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
it "should yield multiple values after a similar stub" do
|
|
476
|
+
File.stub!(:open).and_yield(:stub_value)
|
|
477
|
+
File.should_receive(:open).and_yield(:first_call).and_yield(:second_call)
|
|
478
|
+
yielded_args = []
|
|
479
|
+
File.open {|v| yielded_args << v }
|
|
480
|
+
yielded_args.should == [:first_call, :second_call]
|
|
481
|
+
File.open {|v| v.should == :stub_value }
|
|
482
|
+
File.rspec_verify
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
it "should assign stub return values" do
|
|
486
|
+
mock = Mock.new('name', :message => :response)
|
|
487
|
+
mock.message.should == :response
|
|
488
|
+
end
|
|
489
|
+
|
|
305
490
|
end
|
|
306
491
|
|
|
307
492
|
describe "a mock message receiving a block" do
|
|
@@ -309,11 +494,11 @@ module Spec
|
|
|
309
494
|
@mock = mock("mock")
|
|
310
495
|
@calls = 0
|
|
311
496
|
end
|
|
312
|
-
|
|
497
|
+
|
|
313
498
|
def add_call
|
|
314
499
|
@calls = @calls + 1
|
|
315
500
|
end
|
|
316
|
-
|
|
501
|
+
|
|
317
502
|
it "should call the block after #should_receive" do
|
|
318
503
|
@mock.should_receive(:foo) { add_call }
|
|
319
504
|
|
|
@@ -322,6 +507,15 @@ module Spec
|
|
|
322
507
|
@calls.should == 1
|
|
323
508
|
end
|
|
324
509
|
|
|
510
|
+
it "should call the block after #should_receive after a similar stub" do
|
|
511
|
+
@mock.stub!(:foo).and_return(:bar)
|
|
512
|
+
@mock.should_receive(:foo) { add_call }
|
|
513
|
+
|
|
514
|
+
@mock.foo
|
|
515
|
+
|
|
516
|
+
@calls.should == 1
|
|
517
|
+
end
|
|
518
|
+
|
|
325
519
|
it "should call the block after #once" do
|
|
326
520
|
@mock.should_receive(:foo).once { add_call }
|
|
327
521
|
|
|
@@ -341,7 +535,7 @@ module Spec
|
|
|
341
535
|
|
|
342
536
|
it "should call the block after #times" do
|
|
343
537
|
@mock.should_receive(:foo).exactly(10).times { add_call }
|
|
344
|
-
|
|
538
|
+
|
|
345
539
|
(1..10).each { @mock.foo }
|
|
346
540
|
|
|
347
541
|
@calls.should == 10
|
|
@@ -349,29 +543,52 @@ module Spec
|
|
|
349
543
|
|
|
350
544
|
it "should call the block after #any_number_of_times" do
|
|
351
545
|
@mock.should_receive(:foo).any_number_of_times { add_call }
|
|
352
|
-
|
|
546
|
+
|
|
353
547
|
(1..7).each { @mock.foo }
|
|
354
548
|
|
|
355
549
|
@calls.should == 7
|
|
356
550
|
end
|
|
357
551
|
|
|
358
|
-
it "should call the block after #with" do
|
|
359
|
-
@mock.should_receive(:foo).with(:arg) { add_call }
|
|
360
|
-
|
|
361
|
-
@mock.foo(:arg)
|
|
362
|
-
|
|
363
|
-
@calls.should == 1
|
|
364
|
-
end
|
|
365
|
-
|
|
366
552
|
it "should call the block after #ordered" do
|
|
367
553
|
@mock.should_receive(:foo).ordered { add_call }
|
|
368
554
|
@mock.should_receive(:bar).ordered { add_call }
|
|
369
|
-
|
|
555
|
+
|
|
370
556
|
@mock.foo
|
|
371
557
|
@mock.bar
|
|
372
558
|
|
|
373
559
|
@calls.should == 2
|
|
374
560
|
end
|
|
375
561
|
end
|
|
562
|
+
|
|
563
|
+
describe 'string representation generated by #to_s' do
|
|
564
|
+
it 'should not contain < because that might lead to invalid HTML in some situations' do
|
|
565
|
+
mock = mock("Dog")
|
|
566
|
+
valid_html_str = "#{mock}"
|
|
567
|
+
valid_html_str.should_not include('<')
|
|
568
|
+
end
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
describe "mock created with no name" do
|
|
572
|
+
it "should not use a name in a failure message" do
|
|
573
|
+
mock = mock()
|
|
574
|
+
expect {mock.foo}.to raise_error(/Mock received/)
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
it "should respond to initially stubbed methods" do
|
|
578
|
+
mock = mock(:foo => "woo", :bar => "car")
|
|
579
|
+
mock.foo.should == "woo"
|
|
580
|
+
mock.bar.should == "car"
|
|
581
|
+
end
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
describe "==" do
|
|
585
|
+
it "sends '== self' to the comparison object" do
|
|
586
|
+
first = mock('first')
|
|
587
|
+
second = mock('second')
|
|
588
|
+
|
|
589
|
+
first.should_receive(:==).with(second)
|
|
590
|
+
second == first
|
|
591
|
+
end
|
|
592
|
+
end
|
|
376
593
|
end
|
|
377
594
|
end
|