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,151 +1,210 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "have matcher" do
|
|
2
4
|
|
|
3
|
-
module HaveSpecHelper
|
|
4
5
|
def create_collection_owner_with(n)
|
|
5
6
|
owner = Spec::Expectations::Helper::CollectionOwner.new
|
|
6
|
-
(1..n).each do |
|
|
7
|
-
owner.add_to_collection_with_length_method(
|
|
8
|
-
owner.add_to_collection_with_size_method(
|
|
7
|
+
(1..n).each do |number|
|
|
8
|
+
owner.add_to_collection_with_length_method(number)
|
|
9
|
+
owner.add_to_collection_with_size_method(number)
|
|
9
10
|
end
|
|
10
11
|
owner
|
|
11
12
|
end
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
describe "should have(n).items" do
|
|
15
|
-
include HaveSpecHelper
|
|
16
|
-
|
|
17
|
-
it "should pass if target has a collection of items with n members" do
|
|
18
|
-
owner = create_collection_owner_with(3)
|
|
19
|
-
owner.should have(3).items_in_collection_with_length_method
|
|
20
|
-
owner.should have(3).items_in_collection_with_size_method
|
|
21
|
-
end
|
|
22
13
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
14
|
+
before(:each) do
|
|
15
|
+
if defined?(::ActiveSupport::Inflector)
|
|
16
|
+
@active_support_was_defined = true
|
|
17
|
+
else
|
|
18
|
+
@active_support_was_defined = false
|
|
19
|
+
module ::ActiveSupport
|
|
20
|
+
class Inflector
|
|
21
|
+
def self.pluralize(string)
|
|
22
|
+
string.to_s + 's'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
owner.should have(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
owner.should have(4).items_in_collection_with_size_method
|
|
36
|
-
}.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should fail if target has a collection of items with > n members" do
|
|
40
|
-
owner = create_collection_owner_with(3)
|
|
41
|
-
lambda {
|
|
42
|
-
owner.should have(2).items_in_collection_with_length_method
|
|
43
|
-
}.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
|
|
44
|
-
lambda {
|
|
45
|
-
owner.should have(2).items_in_collection_with_size_method
|
|
46
|
-
}.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
|
|
47
|
-
end
|
|
48
|
-
end
|
|
29
|
+
describe "should have(n).items" do
|
|
30
|
+
it "should pass if target has a collection of items with n members" do
|
|
31
|
+
owner = create_collection_owner_with(3)
|
|
32
|
+
owner.should have(3).items_in_collection_with_length_method
|
|
33
|
+
owner.should have(3).items_in_collection_with_size_method
|
|
34
|
+
end
|
|
49
35
|
|
|
50
|
-
|
|
51
|
-
|
|
36
|
+
it "should convert :no to 0" do
|
|
37
|
+
owner = create_collection_owner_with(0)
|
|
38
|
+
owner.should have(:no).items_in_collection_with_length_method
|
|
39
|
+
owner.should have(:no).items_in_collection_with_size_method
|
|
40
|
+
end
|
|
52
41
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
42
|
+
it "should fail if target has a collection of items with < n members" do
|
|
43
|
+
owner = create_collection_owner_with(3)
|
|
44
|
+
lambda {
|
|
45
|
+
owner.should have(4).items_in_collection_with_length_method
|
|
46
|
+
}.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
|
|
47
|
+
lambda {
|
|
48
|
+
owner.should have(4).items_in_collection_with_size_method
|
|
49
|
+
}.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should fail if target has a collection of items with > n members" do
|
|
53
|
+
owner = create_collection_owner_with(3)
|
|
54
|
+
lambda {
|
|
55
|
+
owner.should have(2).items_in_collection_with_length_method
|
|
56
|
+
}.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
|
|
57
|
+
lambda {
|
|
58
|
+
owner.should have(2).items_in_collection_with_size_method
|
|
59
|
+
}.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
|
|
60
|
+
end
|
|
63
61
|
end
|
|
64
62
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
owner.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
63
|
+
describe 'should have(1).item when ActiveSupport::Inflector is defined' do
|
|
64
|
+
it 'should pluralize the collection name' do
|
|
65
|
+
owner = create_collection_owner_with(1)
|
|
66
|
+
owner.should have(1).item
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
after(:each) do
|
|
70
|
+
unless @active_support_was_defined
|
|
71
|
+
Object.__send__ :remove_const, :ActiveSupport
|
|
72
|
+
end
|
|
73
|
+
end
|
|
73
74
|
end
|
|
74
|
-
end
|
|
75
75
|
|
|
76
|
-
describe
|
|
77
|
-
|
|
76
|
+
describe 'should have(1).item when Inflector is defined' do
|
|
77
|
+
before(:each) do
|
|
78
|
+
if defined?(Inflector)
|
|
79
|
+
@inflector_was_defined = true
|
|
80
|
+
else
|
|
81
|
+
@inflector_was_defined = false
|
|
82
|
+
class ::Inflector
|
|
83
|
+
def self.pluralize(string)
|
|
84
|
+
string.to_s + 's'
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'should pluralize the collection name' do
|
|
91
|
+
owner = create_collection_owner_with(1)
|
|
92
|
+
owner.should have(1).item
|
|
93
|
+
end
|
|
78
94
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
95
|
+
after(:each) do
|
|
96
|
+
unless @inflector_was_defined
|
|
97
|
+
Object.__send__ :remove_const, :Inflector
|
|
98
|
+
end
|
|
99
|
+
end
|
|
83
100
|
end
|
|
84
101
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
102
|
+
describe "should have(n).items where result responds to items but returns something other than a collection" do
|
|
103
|
+
it "should provide a meaningful error" do
|
|
104
|
+
owner = Class.new do
|
|
105
|
+
def items
|
|
106
|
+
Object.new
|
|
107
|
+
end
|
|
108
|
+
end.new
|
|
109
|
+
lambda do
|
|
110
|
+
owner.should have(3).items
|
|
111
|
+
end.should raise_error("expected items to be a collection but it does not respond to #length or #size")
|
|
112
|
+
end
|
|
89
113
|
end
|
|
90
114
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
owner.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
115
|
+
describe "should_not have(n).items" do
|
|
116
|
+
it "should pass if target has a collection of items with < n members" do
|
|
117
|
+
owner = create_collection_owner_with(3)
|
|
118
|
+
owner.should_not have(4).items_in_collection_with_length_method
|
|
119
|
+
owner.should_not have(4).items_in_collection_with_size_method
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "should pass if target has a collection of items with > n members" do
|
|
123
|
+
owner = create_collection_owner_with(3)
|
|
124
|
+
owner.should_not have(2).items_in_collection_with_length_method
|
|
125
|
+
owner.should_not have(2).items_in_collection_with_size_method
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "should fail if target has a collection of items with n members" do
|
|
129
|
+
owner = create_collection_owner_with(3)
|
|
130
|
+
lambda {
|
|
131
|
+
owner.should_not have(3).items_in_collection_with_length_method
|
|
132
|
+
}.should fail_with("expected target not to have 3 items_in_collection_with_length_method, got 3")
|
|
133
|
+
lambda {
|
|
134
|
+
owner.should_not have(3).items_in_collection_with_size_method
|
|
135
|
+
}.should fail_with("expected target not to have 3 items_in_collection_with_size_method, got 3")
|
|
136
|
+
end
|
|
109
137
|
end
|
|
110
|
-
end
|
|
111
138
|
|
|
112
|
-
describe "should
|
|
113
|
-
|
|
139
|
+
describe "should have_exactly(n).items" do
|
|
140
|
+
it "should pass if target has a collection of items with n members" do
|
|
141
|
+
owner = create_collection_owner_with(3)
|
|
142
|
+
owner.should have_exactly(3).items_in_collection_with_length_method
|
|
143
|
+
owner.should have_exactly(3).items_in_collection_with_size_method
|
|
144
|
+
end
|
|
114
145
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
it "should pass if target has a collection of items with > n members" do
|
|
122
|
-
owner = create_collection_owner_with(3)
|
|
123
|
-
owner.should have_at_least(2).items_in_collection_with_length_method
|
|
124
|
-
owner.should have_at_least(2).items_in_collection_with_size_method
|
|
125
|
-
end
|
|
146
|
+
it "should convert :no to 0" do
|
|
147
|
+
owner = create_collection_owner_with(0)
|
|
148
|
+
owner.should have_exactly(:no).items_in_collection_with_length_method
|
|
149
|
+
owner.should have_exactly(:no).items_in_collection_with_size_method
|
|
150
|
+
end
|
|
126
151
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
152
|
+
it "should fail if target has a collection of items with < n members" do
|
|
153
|
+
owner = create_collection_owner_with(3)
|
|
154
|
+
lambda {
|
|
155
|
+
owner.should have_exactly(4).items_in_collection_with_length_method
|
|
156
|
+
}.should fail_with("expected 4 items_in_collection_with_length_method, got 3")
|
|
157
|
+
lambda {
|
|
158
|
+
owner.should have_exactly(4).items_in_collection_with_size_method
|
|
159
|
+
}.should fail_with("expected 4 items_in_collection_with_size_method, got 3")
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "should fail if target has a collection of items with > n members" do
|
|
163
|
+
owner = create_collection_owner_with(3)
|
|
164
|
+
lambda {
|
|
165
|
+
owner.should have_exactly(2).items_in_collection_with_length_method
|
|
166
|
+
}.should fail_with("expected 2 items_in_collection_with_length_method, got 3")
|
|
167
|
+
lambda {
|
|
168
|
+
owner.should have_exactly(2).items_in_collection_with_size_method
|
|
169
|
+
}.should fail_with("expected 2 items_in_collection_with_size_method, got 3")
|
|
170
|
+
end
|
|
135
171
|
end
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
172
|
+
|
|
173
|
+
describe "should have_at_least(n).items" do
|
|
174
|
+
it "should pass if target has a collection of items with n members" do
|
|
175
|
+
owner = create_collection_owner_with(3)
|
|
176
|
+
owner.should have_at_least(3).items_in_collection_with_length_method
|
|
177
|
+
owner.should have_at_least(3).items_in_collection_with_size_method
|
|
178
|
+
end
|
|
142
179
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
180
|
+
it "should pass if target has a collection of items with > n members" do
|
|
181
|
+
owner = create_collection_owner_with(3)
|
|
182
|
+
owner.should have_at_least(2).items_in_collection_with_length_method
|
|
183
|
+
owner.should have_at_least(2).items_in_collection_with_size_method
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "should fail if target has a collection of items with < n members" do
|
|
187
|
+
owner = create_collection_owner_with(3)
|
|
188
|
+
lambda {
|
|
189
|
+
owner.should have_at_least(4).items_in_collection_with_length_method
|
|
190
|
+
}.should fail_with("expected at least 4 items_in_collection_with_length_method, got 3")
|
|
191
|
+
lambda {
|
|
192
|
+
owner.should have_at_least(4).items_in_collection_with_size_method
|
|
193
|
+
}.should fail_with("expected at least 4 items_in_collection_with_size_method, got 3")
|
|
194
|
+
end
|
|
146
195
|
|
|
147
|
-
|
|
148
|
-
|
|
196
|
+
it "should provide educational negative failure messages" do
|
|
197
|
+
#given
|
|
198
|
+
owner = create_collection_owner_with(3)
|
|
199
|
+
length_matcher = have_at_least(3).items_in_collection_with_length_method
|
|
200
|
+
size_matcher = have_at_least(3).items_in_collection_with_size_method
|
|
201
|
+
|
|
202
|
+
#when
|
|
203
|
+
length_matcher.matches?(owner)
|
|
204
|
+
size_matcher.matches?(owner)
|
|
205
|
+
|
|
206
|
+
#then
|
|
207
|
+
length_matcher.failure_message_for_should_not.should == <<-EOF
|
|
149
208
|
Isn't life confusing enough?
|
|
150
209
|
Instead of having to figure out the meaning of this:
|
|
151
210
|
should_not have_at_least(3).items_in_collection_with_length_method
|
|
@@ -153,107 +212,170 @@ We recommend that you use this instead:
|
|
|
153
212
|
should have_at_most(2).items_in_collection_with_length_method
|
|
154
213
|
EOF
|
|
155
214
|
|
|
156
|
-
|
|
215
|
+
size_matcher.failure_message_for_should_not.should == <<-EOF
|
|
157
216
|
Isn't life confusing enough?
|
|
158
217
|
Instead of having to figure out the meaning of this:
|
|
159
218
|
should_not have_at_least(3).items_in_collection_with_size_method
|
|
160
219
|
We recommend that you use this instead:
|
|
161
220
|
should have_at_most(2).items_in_collection_with_size_method
|
|
162
221
|
EOF
|
|
163
|
-
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
describe "should have_at_most(n).items" do
|
|
167
|
-
include HaveSpecHelper
|
|
168
|
-
|
|
169
|
-
it "should pass if target has a collection of items with n members" do
|
|
170
|
-
owner = create_collection_owner_with(3)
|
|
171
|
-
owner.should have_at_most(3).items_in_collection_with_length_method
|
|
172
|
-
owner.should have_at_most(3).items_in_collection_with_size_method
|
|
222
|
+
end
|
|
173
223
|
end
|
|
174
224
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
owner.should have_at_most(
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
owner.should have_at_most(2).items_in_collection_with_size_method
|
|
182
|
-
}.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
it "should pass if target has a collection of items with < n members" do
|
|
186
|
-
owner = create_collection_owner_with(3)
|
|
187
|
-
owner.should have_at_most(4).items_in_collection_with_length_method
|
|
188
|
-
owner.should have_at_most(4).items_in_collection_with_size_method
|
|
189
|
-
end
|
|
225
|
+
describe "should have_at_most(n).items" do
|
|
226
|
+
it "should pass if target has a collection of items with n members" do
|
|
227
|
+
owner = create_collection_owner_with(3)
|
|
228
|
+
owner.should have_at_most(3).items_in_collection_with_length_method
|
|
229
|
+
owner.should have_at_most(3).items_in_collection_with_size_method
|
|
230
|
+
end
|
|
190
231
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
232
|
+
it "should fail if target has a collection of items with > n members" do
|
|
233
|
+
owner = create_collection_owner_with(3)
|
|
234
|
+
lambda {
|
|
235
|
+
owner.should have_at_most(2).items_in_collection_with_length_method
|
|
236
|
+
}.should fail_with("expected at most 2 items_in_collection_with_length_method, got 3")
|
|
237
|
+
lambda {
|
|
238
|
+
owner.should have_at_most(2).items_in_collection_with_size_method
|
|
239
|
+
}.should fail_with("expected at most 2 items_in_collection_with_size_method, got 3")
|
|
240
|
+
end
|
|
200
241
|
|
|
201
|
-
|
|
202
|
-
|
|
242
|
+
it "should pass if target has a collection of items with < n members" do
|
|
243
|
+
owner = create_collection_owner_with(3)
|
|
244
|
+
owner.should have_at_most(4).items_in_collection_with_length_method
|
|
245
|
+
owner.should have_at_most(4).items_in_collection_with_size_method
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
it "should provide educational negative failure messages" do
|
|
249
|
+
#given
|
|
250
|
+
owner = create_collection_owner_with(3)
|
|
251
|
+
length_matcher = have_at_most(3).items_in_collection_with_length_method
|
|
252
|
+
size_matcher = have_at_most(3).items_in_collection_with_size_method
|
|
253
|
+
|
|
254
|
+
#when
|
|
255
|
+
length_matcher.matches?(owner)
|
|
256
|
+
size_matcher.matches?(owner)
|
|
257
|
+
|
|
258
|
+
#then
|
|
259
|
+
length_matcher.failure_message_for_should_not.should == <<-EOF
|
|
203
260
|
Isn't life confusing enough?
|
|
204
261
|
Instead of having to figure out the meaning of this:
|
|
205
262
|
should_not have_at_most(3).items_in_collection_with_length_method
|
|
206
263
|
We recommend that you use this instead:
|
|
207
264
|
should have_at_least(4).items_in_collection_with_length_method
|
|
208
265
|
EOF
|
|
209
|
-
|
|
210
|
-
|
|
266
|
+
|
|
267
|
+
size_matcher.failure_message_for_should_not.should == <<-EOF
|
|
211
268
|
Isn't life confusing enough?
|
|
212
269
|
Instead of having to figure out the meaning of this:
|
|
213
270
|
should_not have_at_most(3).items_in_collection_with_size_method
|
|
214
271
|
We recommend that you use this instead:
|
|
215
272
|
should have_at_least(4).items_in_collection_with_size_method
|
|
216
273
|
EOF
|
|
274
|
+
end
|
|
217
275
|
end
|
|
218
|
-
end
|
|
219
276
|
|
|
220
|
-
describe "have(n).items(args, block)" do
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
277
|
+
describe "have(n).items(args, block)" do
|
|
278
|
+
it "should pass args to target" do
|
|
279
|
+
target = mock("target")
|
|
280
|
+
target.should_receive(:items).with("arg1","arg2").and_return([1,2,3])
|
|
281
|
+
target.should have(3).items("arg1","arg2")
|
|
282
|
+
end
|
|
226
283
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
284
|
+
it "should pass block to target" do
|
|
285
|
+
target = mock("target")
|
|
286
|
+
block = lambda { 5 }
|
|
287
|
+
target.should_receive(:items).with("arg1","arg2", block).and_return([1,2,3])
|
|
288
|
+
target.should have(3).items("arg1","arg2", block)
|
|
289
|
+
end
|
|
232
290
|
end
|
|
233
|
-
end
|
|
234
291
|
|
|
235
|
-
describe "have(n).items where target IS a collection" do
|
|
236
|
-
|
|
237
|
-
|
|
292
|
+
describe "have(n).items where target IS a collection" do
|
|
293
|
+
it "should reference the number of items IN the collection" do
|
|
294
|
+
[1,2,3].should have(3).items
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
it "should fail when the number of items IN the collection is not as expected" do
|
|
298
|
+
lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3")
|
|
299
|
+
end
|
|
238
300
|
end
|
|
239
301
|
|
|
240
|
-
|
|
241
|
-
|
|
302
|
+
describe "have(n).characters where target IS a String" do
|
|
303
|
+
it "should pass if the length is correct" do
|
|
304
|
+
"this string".should have(11).characters
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
it "should fail if the length is incorrect" do
|
|
308
|
+
lambda { "this string".should have(12).characters }.should fail_with("expected 12 characters, got 11")
|
|
309
|
+
end
|
|
242
310
|
end
|
|
243
|
-
end
|
|
244
311
|
|
|
245
|
-
describe "have(n).
|
|
246
|
-
|
|
247
|
-
|
|
312
|
+
describe "have(n).things on an object which is not a collection nor contains one" do
|
|
313
|
+
it "should fail" do
|
|
314
|
+
lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/)
|
|
315
|
+
end
|
|
248
316
|
end
|
|
249
317
|
|
|
250
|
-
|
|
251
|
-
|
|
318
|
+
describe Spec::Matchers::Have, "for a collection owner that implements #send" do
|
|
319
|
+
before(:each) do
|
|
320
|
+
@collection = Object.new
|
|
321
|
+
def @collection.floozles; [1,2] end
|
|
322
|
+
def @collection.send(*args); raise "DOH! Library developers shouldn't use #send!" end
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
it "should work in the straightforward case" do
|
|
326
|
+
lambda {
|
|
327
|
+
@collection.should have(2).floozles
|
|
328
|
+
}.should_not raise_error
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
it "should work when doing automatic pluralization" do
|
|
332
|
+
lambda {
|
|
333
|
+
@collection.should have_at_least(1).floozle
|
|
334
|
+
}.should_not raise_error
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
it "should blow up when the owner doesn't respond to that method" do
|
|
338
|
+
lambda {
|
|
339
|
+
@collection.should have(99).problems
|
|
340
|
+
}.should raise_error(NoMethodError, /problems/)
|
|
341
|
+
end
|
|
252
342
|
end
|
|
253
|
-
end
|
|
254
343
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
344
|
+
module Spec
|
|
345
|
+
module Matchers
|
|
346
|
+
describe Have do
|
|
347
|
+
treats_method_missing_as_private :noop => false
|
|
348
|
+
|
|
349
|
+
describe "respond_to?" do
|
|
350
|
+
before :each do
|
|
351
|
+
@have = Have.new(:foo)
|
|
352
|
+
@a_method_which_have_defines = Have.instance_methods.first
|
|
353
|
+
@a_method_which_object_defines = Object.instance_methods.first
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
it "should be true for a method which Have defines" do
|
|
357
|
+
@have.should respond_to(@a_method_which_have_defines)
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
it "should be true for a method that it's superclass (Object) defines" do
|
|
361
|
+
@have.should respond_to(@a_method_which_object_defines)
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
it "should be false for a method which neither Object nor nor Have defines" do
|
|
365
|
+
@have.should_not respond_to(:foo_bar_baz)
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
it "should be false if the owner doesn't respond to the method" do
|
|
369
|
+
have = Have.new(99)
|
|
370
|
+
have.should_not respond_to(:problems)
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
it "should be true if the owner responds to the method" do
|
|
374
|
+
have = Have.new(:a_symbol)
|
|
375
|
+
have.should respond_to(:to_sym)
|
|
376
|
+
end
|
|
377
|
+
end
|
|
378
|
+
end
|
|
379
|
+
end
|
|
258
380
|
end
|
|
259
|
-
end
|
|
381
|
+
end
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe "should include(expected)" do
|
|
4
4
|
it "should pass if target includes expected" do
|
|
5
5
|
[1,2,3].should include(3)
|
|
6
6
|
"abc".should include("a")
|
|
7
7
|
end
|
|
8
|
+
|
|
9
|
+
it 'should pass if target is a Hash and has the expected as a key' do
|
|
10
|
+
{:key => 'value'}.should include(:key)
|
|
11
|
+
end
|
|
8
12
|
|
|
9
13
|
it "should fail if target does not include expected" do
|
|
10
14
|
lambda {
|
|
@@ -13,6 +17,9 @@ describe "should include(expected)" do
|
|
|
13
17
|
lambda {
|
|
14
18
|
"abc".should include("d")
|
|
15
19
|
}.should fail_with("expected \"abc\" to include \"d\"")
|
|
20
|
+
lambda {
|
|
21
|
+
{:key => 'value'}.should include(:other)
|
|
22
|
+
}.should fail_with(%Q|expected {:key=>"value"} to include :other|)
|
|
16
23
|
end
|
|
17
24
|
end
|
|
18
25
|
|
|
@@ -20,11 +27,21 @@ describe "should include(with, multiple, args)" do
|
|
|
20
27
|
it "should pass if target includes all items" do
|
|
21
28
|
[1,2,3].should include(1,2,3)
|
|
22
29
|
end
|
|
30
|
+
|
|
31
|
+
it 'should pass if target is a Hash including all items as keys' do
|
|
32
|
+
{:key => 'value', :other => 'value'}.should include(:key, :other)
|
|
33
|
+
end
|
|
23
34
|
|
|
24
35
|
it "should fail if target does not include any one of the items" do
|
|
25
36
|
lambda {
|
|
26
37
|
[1,2,3].should include(1,2,4)
|
|
27
|
-
}.should fail_with("expected [1, 2, 3] to include 1, 2 and 4")
|
|
38
|
+
}.should fail_with("expected [1, 2, 3] to include 1, 2, and 4")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'should pass if target is a Hash missing any item as a key' do
|
|
42
|
+
lambda {
|
|
43
|
+
{:key => 'value'}.should include(:key, :other)
|
|
44
|
+
}.should fail_with(%Q|expected {:key=>"value"} to include :key and :other|)
|
|
28
45
|
end
|
|
29
46
|
end
|
|
30
47
|
|
|
@@ -33,6 +50,10 @@ describe "should_not include(expected)" do
|
|
|
33
50
|
[1,2,3].should_not include(4)
|
|
34
51
|
"abc".should_not include("d")
|
|
35
52
|
end
|
|
53
|
+
|
|
54
|
+
it 'should pass if target is a Hash and does not have the expected as a key' do
|
|
55
|
+
{:other => 'value'}.should_not include(:key)
|
|
56
|
+
end
|
|
36
57
|
|
|
37
58
|
it "should fail if target includes expected" do
|
|
38
59
|
lambda {
|
|
@@ -41,5 +62,27 @@ describe "should_not include(expected)" do
|
|
|
41
62
|
lambda {
|
|
42
63
|
"abc".should_not include("c")
|
|
43
64
|
}.should fail_with("expected \"abc\" not to include \"c\"")
|
|
65
|
+
lambda {
|
|
66
|
+
{:key => 'value'}.should_not include(:key)
|
|
67
|
+
}.should fail_with(%Q|expected {:key=>"value"} not to include :key|)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe "should include(:key => value)" do
|
|
72
|
+
it "should pass if target is a Hash and includes the key/value pair" do
|
|
73
|
+
{:key => 'value'}.should include(:key => 'value')
|
|
74
|
+
end
|
|
75
|
+
it "should pass if target is a Hash and includes the key/value pair among others" do
|
|
76
|
+
{:key => 'value', :other => 'different'}.should include(:key => 'value')
|
|
77
|
+
end
|
|
78
|
+
it "should fail if target is a Hash and has a different value for key" do
|
|
79
|
+
lambda {
|
|
80
|
+
{:key => 'different'}.should include(:key => 'value')
|
|
81
|
+
}.should fail_with(%Q|expected {:key=>"different"} to include {:key=>"value"}|)
|
|
82
|
+
end
|
|
83
|
+
it "should fail if target is a Hash and has a different key" do
|
|
84
|
+
lambda {
|
|
85
|
+
{:other => 'value'}.should include(:key => 'value')
|
|
86
|
+
}.should fail_with(%Q|expected {:other=>"value"} to include {:key=>"value"}|)
|
|
44
87
|
end
|
|
45
88
|
end
|