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/matchers/change.rb
CHANGED
|
@@ -4,54 +4,59 @@ module Spec
|
|
|
4
4
|
#Based on patch from Wilson Bilkovich
|
|
5
5
|
class Change #:nodoc:
|
|
6
6
|
def initialize(receiver=nil, message=nil, &block)
|
|
7
|
-
@
|
|
8
|
-
@
|
|
9
|
-
@
|
|
7
|
+
@message = message || "result"
|
|
8
|
+
@value_proc = block || lambda {receiver.__send__(message)}
|
|
9
|
+
@to = @from = @minimum = @maximum = @amount = nil
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
def matches?(
|
|
13
|
-
if
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
@
|
|
20
|
-
|
|
21
|
-
return false if @from && (@from != @before)
|
|
22
|
-
return false if @to && (@to != @after)
|
|
12
|
+
def matches?(event_proc)
|
|
13
|
+
raise_block_syntax_error if block_given?
|
|
14
|
+
|
|
15
|
+
@before = evaluate_value_proc
|
|
16
|
+
event_proc.call
|
|
17
|
+
@after = evaluate_value_proc
|
|
18
|
+
|
|
19
|
+
return (@to = false) if @from unless @from == @before
|
|
20
|
+
return false if @to unless @to == @after
|
|
23
21
|
return (@before + @amount == @after) if @amount
|
|
22
|
+
return ((@after - @before) >= @minimum) if @minimum
|
|
23
|
+
return ((@after - @before) <= @maximum) if @maximum
|
|
24
24
|
return @before != @after
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
def
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
def raise_block_syntax_error
|
|
28
|
+
raise MatcherError.new(<<-MESSAGE
|
|
29
|
+
block passed to should or should_not change must use {} instead of do/end
|
|
30
|
+
MESSAGE
|
|
31
|
+
)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def evaluate_value_proc
|
|
35
|
+
@value_proc.call
|
|
31
36
|
end
|
|
32
37
|
|
|
33
|
-
def
|
|
38
|
+
def failure_message_for_should
|
|
34
39
|
if @to
|
|
35
|
-
"#{
|
|
40
|
+
"#{@message} should have been changed to #{@to.inspect}, but is now #{@after.inspect}"
|
|
36
41
|
elsif @from
|
|
37
|
-
"#{
|
|
42
|
+
"#{@message} should have initially been #{@from.inspect}, but was #{@before.inspect}"
|
|
38
43
|
elsif @amount
|
|
39
|
-
"#{
|
|
44
|
+
"#{@message} should have been changed by #{@amount.inspect}, but was changed by #{actual_delta.inspect}"
|
|
45
|
+
elsif @minimum
|
|
46
|
+
"#{@message} should have been changed by at least #{@minimum.inspect}, but was changed by #{actual_delta.inspect}"
|
|
47
|
+
elsif @maximum
|
|
48
|
+
"#{@message} should have been changed by at most #{@maximum.inspect}, but was changed by #{actual_delta.inspect}"
|
|
40
49
|
else
|
|
41
|
-
"#{
|
|
50
|
+
"#{@message} should have changed, but is still #{@before.inspect}"
|
|
42
51
|
end
|
|
43
52
|
end
|
|
44
53
|
|
|
45
|
-
def result
|
|
46
|
-
@message || "result"
|
|
47
|
-
end
|
|
48
|
-
|
|
49
54
|
def actual_delta
|
|
50
55
|
@after - @before
|
|
51
56
|
end
|
|
52
57
|
|
|
53
|
-
def
|
|
54
|
-
"#{
|
|
58
|
+
def failure_message_for_should_not
|
|
59
|
+
"#{@message} should not have changed, but did change from #{@before.inspect} to #{@after.inspect}"
|
|
55
60
|
end
|
|
56
61
|
|
|
57
62
|
def by(amount)
|
|
@@ -59,6 +64,16 @@ EOF
|
|
|
59
64
|
self
|
|
60
65
|
end
|
|
61
66
|
|
|
67
|
+
def by_at_least(minimum)
|
|
68
|
+
@minimum = minimum
|
|
69
|
+
self
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def by_at_most(maximum)
|
|
73
|
+
@maximum = maximum
|
|
74
|
+
self
|
|
75
|
+
end
|
|
76
|
+
|
|
62
77
|
def to(to)
|
|
63
78
|
@to = to
|
|
64
79
|
self
|
|
@@ -68,6 +83,10 @@ EOF
|
|
|
68
83
|
@from = from
|
|
69
84
|
self
|
|
70
85
|
end
|
|
86
|
+
|
|
87
|
+
def description
|
|
88
|
+
"change ##{@message}"
|
|
89
|
+
end
|
|
71
90
|
end
|
|
72
91
|
|
|
73
92
|
# :call-seq:
|
|
@@ -88,9 +107,17 @@ EOF
|
|
|
88
107
|
# team.add_player(player)
|
|
89
108
|
# }.should change(roster, :count).by(1)
|
|
90
109
|
#
|
|
110
|
+
# lambda {
|
|
111
|
+
# team.add_player(player)
|
|
112
|
+
# }.should change(roster, :count).by_at_least(1)
|
|
113
|
+
#
|
|
114
|
+
# lambda {
|
|
115
|
+
# team.add_player(player)
|
|
116
|
+
# }.should change(roster, :count).by_at_most(1)
|
|
117
|
+
#
|
|
91
118
|
# string = "string"
|
|
92
119
|
# lambda {
|
|
93
|
-
# string.reverse
|
|
120
|
+
# string.reverse!
|
|
94
121
|
# }.should change { string }.from("string").to("gnirts")
|
|
95
122
|
#
|
|
96
123
|
# lambda {
|
|
@@ -101,20 +128,24 @@ EOF
|
|
|
101
128
|
# employee.develop_great_new_social_networking_app
|
|
102
129
|
# }.should change(employee, :title).from("Mail Clerk").to("CEO")
|
|
103
130
|
#
|
|
104
|
-
# Evaluates
|
|
105
|
-
#
|
|
131
|
+
# Evaluates <tt>receiver.message</tt> or <tt>block</tt> before and after
|
|
132
|
+
# it evaluates the c object (generated by the lambdas in the examples
|
|
133
|
+
# above).
|
|
134
|
+
#
|
|
135
|
+
# Then compares the values before and after the <tt>receiver.message</tt>
|
|
136
|
+
# and evaluates the difference compared to the expected difference.
|
|
106
137
|
#
|
|
107
|
-
#
|
|
108
|
-
#
|
|
138
|
+
# == WARNING
|
|
139
|
+
# <tt>should_not change</tt> only supports the form with no
|
|
140
|
+
# subsequent calls to <tt>by</tt>, <tt>by_at_least</tt>,
|
|
141
|
+
# <tt>by_at_most</tt>, <tt>to</tt> or <tt>from</tt>.
|
|
109
142
|
#
|
|
110
|
-
#
|
|
111
|
-
#
|
|
112
|
-
#
|
|
143
|
+
# blocks passed to <tt>should</tt> <tt>change</tt> and <tt>should_not</tt>
|
|
144
|
+
# <tt>change</tt> must use the <tt>{}</tt> form (<tt>do/end</tt> is not
|
|
145
|
+
# supported).
|
|
113
146
|
#
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
def change(target=nil, message=nil, &block)
|
|
117
|
-
Matchers::Change.new(target, message, &block)
|
|
147
|
+
def change(receiver=nil, message=nil, &block)
|
|
148
|
+
Matchers::Change.new(receiver, message, &block)
|
|
118
149
|
end
|
|
119
150
|
end
|
|
120
151
|
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Spec::Matchers.constants.each do |c|
|
|
2
|
+
if Class === (klass = Spec::Matchers.const_get(c))
|
|
3
|
+
if klass.public_instance_methods.any? {|m| ['failure_message_for_should',:failure_message_for_should].include?(m)}
|
|
4
|
+
klass.class_eval do
|
|
5
|
+
alias_method :failure_message, :failure_message_for_should
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
if klass.public_instance_methods.any? {|m| ['failure_message_for_should_not',:failure_message_for_should_not].include?(m)}
|
|
9
|
+
klass.class_eval do
|
|
10
|
+
alias_method :negative_failure_message, :failure_message_for_should_not
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Matchers
|
|
3
|
+
module DSL
|
|
4
|
+
# See Spec::Matchers
|
|
5
|
+
def define(name, &declarations)
|
|
6
|
+
define_method name do |*expected|
|
|
7
|
+
Spec::Matchers::Matcher.new name, *expected, &declarations
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Deprecated - use define
|
|
12
|
+
def create(name, &declarations)
|
|
13
|
+
Spec.deprecate("Spec::Matchers.create","Spec::Matchers.define")
|
|
14
|
+
define(name, &declarations)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
Spec::Matchers.extend Spec::Matchers::DSL
|
data/lib/spec/matchers/eql.rb
CHANGED
|
@@ -1,29 +1,5 @@
|
|
|
1
1
|
module Spec
|
|
2
2
|
module Matchers
|
|
3
|
-
|
|
4
|
-
class Eql #:nodoc:
|
|
5
|
-
def initialize(expected)
|
|
6
|
-
@expected = expected
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def matches?(actual)
|
|
10
|
-
@actual = actual
|
|
11
|
-
@actual.eql?(@expected)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def failure_message
|
|
15
|
-
return "expected #{@expected.inspect}, got #{@actual.inspect} (using .eql?)", @expected, @actual
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def negative_failure_message
|
|
19
|
-
return "expected #{@actual.inspect} not to equal #{@expected.inspect} (using .eql?)", @expected, @actual
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def description
|
|
23
|
-
"eql #{@expected.inspect}"
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
3
|
# :call-seq:
|
|
28
4
|
# should eql(expected)
|
|
29
5
|
# should_not eql(expected)
|
|
@@ -37,7 +13,30 @@ module Spec
|
|
|
37
13
|
# 5.should eql(5)
|
|
38
14
|
# 5.should_not eql(3)
|
|
39
15
|
def eql(expected)
|
|
40
|
-
|
|
16
|
+
Matcher.new :eql, expected do |_expected_|
|
|
17
|
+
match do |actual|
|
|
18
|
+
actual.eql?(_expected_)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
failure_message_for_should do |actual|
|
|
22
|
+
<<-MESSAGE
|
|
23
|
+
|
|
24
|
+
expected #{_expected_.inspect}
|
|
25
|
+
got #{actual.inspect}
|
|
26
|
+
|
|
27
|
+
(compared using eql?)
|
|
28
|
+
MESSAGE
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
failure_message_for_should_not do |actual|
|
|
32
|
+
<<-MESSAGE
|
|
33
|
+
|
|
34
|
+
expected #{actual.inspect} not to equal #{_expected_.inspect}
|
|
35
|
+
|
|
36
|
+
(compared using eql?)
|
|
37
|
+
MESSAGE
|
|
38
|
+
end
|
|
39
|
+
end
|
|
41
40
|
end
|
|
42
41
|
end
|
|
43
|
-
end
|
|
42
|
+
end
|
data/lib/spec/matchers/equal.rb
CHANGED
|
@@ -1,29 +1,6 @@
|
|
|
1
1
|
module Spec
|
|
2
2
|
module Matchers
|
|
3
|
-
|
|
4
|
-
class Equal #:nodoc:
|
|
5
|
-
def initialize(expected)
|
|
6
|
-
@expected = expected
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def matches?(actual)
|
|
10
|
-
@actual = actual
|
|
11
|
-
@actual.equal?(@expected)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def failure_message
|
|
15
|
-
return "expected #{@expected.inspect}, got #{@actual.inspect} (using .equal?)", @expected, @actual
|
|
16
|
-
end
|
|
17
3
|
|
|
18
|
-
def negative_failure_message
|
|
19
|
-
return "expected #{@actual.inspect} not to equal #{@expected.inspect} (using .equal?)", @expected, @actual
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def description
|
|
23
|
-
"equal #{@expected.inspect}"
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
4
|
# :call-seq:
|
|
28
5
|
# should equal(expected)
|
|
29
6
|
# should_not equal(expected)
|
|
@@ -37,7 +14,40 @@ module Spec
|
|
|
37
14
|
# 5.should equal(5) #Fixnums are equal
|
|
38
15
|
# "5".should_not equal("5") #Strings that look the same are not the same object
|
|
39
16
|
def equal(expected)
|
|
40
|
-
|
|
17
|
+
Matcher.new :equal, expected do |_expected_|
|
|
18
|
+
match do |actual|
|
|
19
|
+
actual.equal?(_expected_)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def inspect_object(o)
|
|
23
|
+
"#<#{o.class}:#{o.object_id}> => #{o.inspect}"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
failure_message_for_should do |actual|
|
|
27
|
+
<<-MESSAGE
|
|
28
|
+
|
|
29
|
+
expected #{inspect_object(_expected_)}
|
|
30
|
+
got #{inspect_object(actual)}
|
|
31
|
+
|
|
32
|
+
Compared using equal?, which compares object identity,
|
|
33
|
+
but expected and actual are not the same object. Use
|
|
34
|
+
'actual.should == expected' if you don't care about
|
|
35
|
+
object identity in this example.
|
|
36
|
+
|
|
37
|
+
MESSAGE
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
failure_message_for_should_not do |actual|
|
|
41
|
+
<<-MESSAGE
|
|
42
|
+
|
|
43
|
+
expected not #{inspect_object(actual)}
|
|
44
|
+
got #{inspect_object(_expected_)}
|
|
45
|
+
|
|
46
|
+
Compared using equal?, which compares object identity.
|
|
47
|
+
|
|
48
|
+
MESSAGE
|
|
49
|
+
end
|
|
50
|
+
end
|
|
41
51
|
end
|
|
42
52
|
end
|
|
43
|
-
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Matchers
|
|
3
|
+
# :call-seq:
|
|
4
|
+
# should exist
|
|
5
|
+
# should_not exist
|
|
6
|
+
#
|
|
7
|
+
# Passes if actual.exist?
|
|
8
|
+
def exist(arg=nil)
|
|
9
|
+
Matcher.new :exist do
|
|
10
|
+
match do |actual|
|
|
11
|
+
arg ? actual.exist?(arg) : actual.exist?
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Matchers
|
|
3
|
+
class << self
|
|
4
|
+
attr_accessor :last_matcher, :last_should # :nodoc:
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def self.clear_generated_description
|
|
8
|
+
self.last_matcher = nil
|
|
9
|
+
self.last_should = nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.generated_description
|
|
13
|
+
return nil if last_should.nil?
|
|
14
|
+
"#{last_should.to_s.gsub('_',' ')} #{last_description}"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def self.last_description
|
|
20
|
+
last_matcher.respond_to?(:description) ? last_matcher.description : <<-MESSAGE
|
|
21
|
+
When you call a matcher in an example without a String, like this:
|
|
22
|
+
|
|
23
|
+
specify { object.should matcher }
|
|
24
|
+
|
|
25
|
+
or this:
|
|
26
|
+
|
|
27
|
+
it { should matcher }
|
|
28
|
+
|
|
29
|
+
RSpec expects the matcher to have a #description method. You should either
|
|
30
|
+
add a String to the example this matcher is being used in, or give it a
|
|
31
|
+
description method. Then you won't have to suffer this lengthy warning again.
|
|
32
|
+
MESSAGE
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
data/lib/spec/matchers/has.rb
CHANGED
|
@@ -1,44 +1,35 @@
|
|
|
1
1
|
module Spec
|
|
2
2
|
module Matchers
|
|
3
3
|
|
|
4
|
-
class Has
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
@args = args
|
|
4
|
+
class Has
|
|
5
|
+
|
|
6
|
+
def initialize(expected, *args, &block)
|
|
7
|
+
@expected, @args, @block = expected, args, block
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def matches?(
|
|
11
|
-
@
|
|
12
|
-
begin
|
|
13
|
-
return target.send(predicate, *@args)
|
|
14
|
-
rescue => @error
|
|
15
|
-
# This clause should be empty, but rcov will not report it as covered
|
|
16
|
-
# unless something (anything) is executed within the clause
|
|
17
|
-
rcov_error_report = "http://eigenclass.org/hiki.rb?rcov-0.8.0"
|
|
18
|
-
end
|
|
19
|
-
return false
|
|
10
|
+
def matches?(actual)
|
|
11
|
+
actual.__send__(predicate(@expected), *@args, &@block)
|
|
20
12
|
end
|
|
21
13
|
|
|
22
|
-
def
|
|
23
|
-
|
|
24
|
-
"expected ##{predicate}(#{@args[0].inspect}) to return true, got false"
|
|
14
|
+
def failure_message_for_should
|
|
15
|
+
"expected ##{predicate(@expected)}(#{@args[0].inspect}) to return true, got false"
|
|
25
16
|
end
|
|
26
17
|
|
|
27
|
-
def
|
|
28
|
-
|
|
29
|
-
"expected ##{predicate}(#{@args[0].inspect}) to return false, got true"
|
|
18
|
+
def failure_message_for_should_not
|
|
19
|
+
"expected ##{predicate(@expected)}(#{@args[0].inspect}) to return false, got true"
|
|
30
20
|
end
|
|
31
21
|
|
|
32
22
|
def description
|
|
33
23
|
"have key #{@args[0].inspect}"
|
|
34
24
|
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def predicate(sym)
|
|
29
|
+
"#{sym.to_s.sub("have_","has_")}?".to_sym
|
|
30
|
+
end
|
|
35
31
|
|
|
36
|
-
private
|
|
37
|
-
def predicate
|
|
38
|
-
"#{@sym.to_s.sub("have_","has_")}?".to_sym
|
|
39
|
-
end
|
|
40
|
-
|
|
41
32
|
end
|
|
42
|
-
|
|
33
|
+
|
|
43
34
|
end
|
|
44
35
|
end
|
data/lib/spec/matchers/have.rb
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
module Spec
|
|
2
2
|
module Matchers
|
|
3
|
-
|
|
4
3
|
class Have #:nodoc:
|
|
5
4
|
def initialize(expected, relativity=:exactly)
|
|
6
5
|
@expected = (expected == :no ? 0 : expected)
|
|
7
6
|
@relativity = relativity
|
|
7
|
+
@actual = nil
|
|
8
|
+
@plural_collection_name = nil
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def relativities
|
|
@@ -15,61 +16,72 @@ module Spec
|
|
|
15
16
|
}
|
|
16
17
|
end
|
|
17
18
|
|
|
18
|
-
def method_missing(sym, *args, &block)
|
|
19
|
-
@collection_name = sym
|
|
20
|
-
@args = args
|
|
21
|
-
@block = block
|
|
22
|
-
self
|
|
23
|
-
end
|
|
24
|
-
|
|
25
19
|
def matches?(collection_owner)
|
|
26
|
-
if collection_owner.respond_to?(collection_name)
|
|
27
|
-
collection = collection_owner.
|
|
20
|
+
if collection_owner.respond_to?(@collection_name)
|
|
21
|
+
collection = collection_owner.__send__(@collection_name, *@args, &@block)
|
|
22
|
+
elsif (@plural_collection_name && collection_owner.respond_to?(@plural_collection_name))
|
|
23
|
+
collection = collection_owner.__send__(@plural_collection_name, *@args, &@block)
|
|
28
24
|
elsif (collection_owner.respond_to?(:length) || collection_owner.respond_to?(:size))
|
|
29
25
|
collection = collection_owner
|
|
30
26
|
else
|
|
31
|
-
collection_owner.
|
|
27
|
+
collection_owner.__send__(@collection_name, *@args, &@block)
|
|
32
28
|
end
|
|
33
|
-
@actual = collection.length if collection.respond_to?(:length)
|
|
34
29
|
@actual = collection.size if collection.respond_to?(:size)
|
|
30
|
+
@actual = collection.length if collection.respond_to?(:length)
|
|
31
|
+
raise not_a_collection if @actual.nil?
|
|
35
32
|
return @actual >= @expected if @relativity == :at_least
|
|
36
33
|
return @actual <= @expected if @relativity == :at_most
|
|
37
34
|
return @actual == @expected
|
|
38
35
|
end
|
|
36
|
+
|
|
37
|
+
def not_a_collection
|
|
38
|
+
"expected #{@collection_name} to be a collection but it does not respond to #length or #size"
|
|
39
|
+
end
|
|
39
40
|
|
|
40
|
-
def
|
|
41
|
-
"expected #{relative_expectation} #{collection_name}, got #{@actual}"
|
|
41
|
+
def failure_message_for_should
|
|
42
|
+
"expected #{relative_expectation} #{@collection_name}, got #{@actual}"
|
|
42
43
|
end
|
|
43
44
|
|
|
44
|
-
def
|
|
45
|
+
def failure_message_for_should_not
|
|
45
46
|
if @relativity == :exactly
|
|
46
|
-
return "expected target not to have #{@expected} #{collection_name}, got #{@actual}"
|
|
47
|
+
return "expected target not to have #{@expected} #{@collection_name}, got #{@actual}"
|
|
47
48
|
elsif @relativity == :at_most
|
|
48
49
|
return <<-EOF
|
|
49
50
|
Isn't life confusing enough?
|
|
50
51
|
Instead of having to figure out the meaning of this:
|
|
51
|
-
should_not have_at_most(#{@expected}).#{collection_name}
|
|
52
|
+
should_not have_at_most(#{@expected}).#{@collection_name}
|
|
52
53
|
We recommend that you use this instead:
|
|
53
|
-
should have_at_least(#{@expected + 1}).#{collection_name}
|
|
54
|
+
should have_at_least(#{@expected + 1}).#{@collection_name}
|
|
54
55
|
EOF
|
|
55
56
|
elsif @relativity == :at_least
|
|
56
57
|
return <<-EOF
|
|
57
58
|
Isn't life confusing enough?
|
|
58
59
|
Instead of having to figure out the meaning of this:
|
|
59
|
-
should_not have_at_least(#{@expected}).#{collection_name}
|
|
60
|
+
should_not have_at_least(#{@expected}).#{@collection_name}
|
|
60
61
|
We recommend that you use this instead:
|
|
61
|
-
should have_at_most(#{@expected - 1}).#{collection_name}
|
|
62
|
+
should have_at_most(#{@expected - 1}).#{@collection_name}
|
|
62
63
|
EOF
|
|
63
64
|
end
|
|
64
65
|
end
|
|
65
66
|
|
|
66
67
|
def description
|
|
67
|
-
"have #{relative_expectation} #{collection_name}"
|
|
68
|
+
"have #{relative_expectation} #{@collection_name}"
|
|
68
69
|
end
|
|
69
70
|
|
|
71
|
+
def respond_to?(sym)
|
|
72
|
+
@expected.respond_to?(sym) || super
|
|
73
|
+
end
|
|
74
|
+
|
|
70
75
|
private
|
|
71
|
-
|
|
72
|
-
|
|
76
|
+
|
|
77
|
+
def method_missing(sym, *args, &block)
|
|
78
|
+
@collection_name = sym
|
|
79
|
+
if inflector = (defined?(ActiveSupport::Inflector) ? ActiveSupport::Inflector : (defined?(Inflector) ? Inflector : nil))
|
|
80
|
+
@plural_collection_name = inflector.pluralize(sym.to_s)
|
|
81
|
+
end
|
|
82
|
+
@args = args
|
|
83
|
+
@block = block
|
|
84
|
+
self
|
|
73
85
|
end
|
|
74
86
|
|
|
75
87
|
def relative_expectation
|
|
@@ -137,4 +149,4 @@ EOF
|
|
|
137
149
|
Matchers::Have.new(n, :at_most)
|
|
138
150
|
end
|
|
139
151
|
end
|
|
140
|
-
end
|
|
152
|
+
end
|
|
@@ -1,52 +1,5 @@
|
|
|
1
1
|
module Spec
|
|
2
2
|
module Matchers
|
|
3
|
-
|
|
4
|
-
class Include #:nodoc:
|
|
5
|
-
|
|
6
|
-
def initialize(*expecteds)
|
|
7
|
-
@expecteds = expecteds
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def matches?(actual)
|
|
11
|
-
@actual = actual
|
|
12
|
-
@expecteds.each do |expected|
|
|
13
|
-
return false unless actual.include?(expected)
|
|
14
|
-
end
|
|
15
|
-
true
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def failure_message
|
|
19
|
-
_message
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def negative_failure_message
|
|
23
|
-
_message("not ")
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def description
|
|
27
|
-
"include #{_pretty_print(@expecteds)}"
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
def _message(maybe_not="")
|
|
32
|
-
"expected #{@actual.inspect} #{maybe_not}to include #{_pretty_print(@expecteds)}"
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def _pretty_print(array)
|
|
36
|
-
result = ""
|
|
37
|
-
array.each_with_index do |item, index|
|
|
38
|
-
if index < (array.length - 2)
|
|
39
|
-
result << "#{item.inspect}, "
|
|
40
|
-
elsif index < (array.length - 1)
|
|
41
|
-
result << "#{item.inspect} and "
|
|
42
|
-
else
|
|
43
|
-
result << "#{item.inspect}"
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
result
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
3
|
# :call-seq:
|
|
51
4
|
# should include(expected)
|
|
52
5
|
# should_not include(expected)
|
|
@@ -64,7 +17,28 @@ module Spec
|
|
|
64
17
|
# "spread".should include("read")
|
|
65
18
|
# "spread".should_not include("red")
|
|
66
19
|
def include(*expected)
|
|
67
|
-
|
|
20
|
+
Matcher.new :include, *expected do |*_expected_|
|
|
21
|
+
match do |actual|
|
|
22
|
+
helper(actual, *_expected_)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def helper(actual, *_expected_)
|
|
26
|
+
_expected_.each do |expected|
|
|
27
|
+
if actual.is_a?(Hash)
|
|
28
|
+
if expected.is_a?(Hash)
|
|
29
|
+
expected.each_pair do |k,v|
|
|
30
|
+
return false unless actual[k] == v
|
|
31
|
+
end
|
|
32
|
+
else
|
|
33
|
+
return false unless actual.has_key?(expected)
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
return false unless actual.include?(expected)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
true
|
|
40
|
+
end
|
|
41
|
+
end
|
|
68
42
|
end
|
|
69
43
|
end
|
|
70
44
|
end
|