rspec 1.0.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +7 -0
- data/History.rdoc +1546 -0
- data/{MIT-LICENSE → License.txt} +3 -1
- data/Manifest.txt +384 -0
- data/README.rdoc +41 -0
- data/Rakefile +94 -229
- data/Ruby1.9.rdoc +31 -0
- data/TODO.txt +17 -0
- data/Upgrade.rdoc +260 -0
- data/bin/autospec +4 -0
- data/bin/spec +5 -3
- data/cucumber.yml +5 -0
- data/examples/failing/README.txt +11 -0
- data/examples/failing/diffing_spec.rb +36 -0
- data/examples/failing/failing_implicit_docstrings_example.rb +17 -0
- data/examples/failing/failure_in_after.rb +10 -0
- data/examples/failing/failure_in_before.rb +10 -0
- data/examples/failing/mocking_example.rb +38 -0
- data/examples/failing/mocking_with_flexmock.rb +26 -0
- data/examples/failing/mocking_with_mocha.rb +25 -0
- data/examples/failing/mocking_with_rr.rb +27 -0
- data/examples/failing/partial_mock_example.rb +18 -0
- data/examples/failing/pending_example.rb +7 -0
- data/examples/failing/predicate_example.rb +32 -0
- data/examples/failing/raising_example.rb +47 -0
- data/examples/failing/syntax_error_example.rb +7 -0
- data/examples/failing/team_spec.rb +41 -0
- data/examples/failing/timeout_behaviour.rb +5 -0
- data/examples/{custom_formatter.rb → passing/custom_formatter.rb} +1 -1
- data/examples/passing/dynamic_spec.rb +7 -0
- data/examples/{file_accessor.rb → passing/file_accessor.rb} +18 -18
- data/examples/{file_accessor_spec.rb → passing/file_accessor_spec.rb} +37 -38
- data/examples/passing/filtered_formatter.rb +17 -0
- data/examples/passing/filtered_formatter_example.rb +31 -0
- data/examples/{greeter_spec.rb → passing/greeter_spec.rb} +1 -1
- data/examples/passing/helper_method_example.rb +12 -0
- data/examples/passing/implicit_docstrings_example.rb +16 -0
- data/examples/{io_processor.rb → passing/io_processor.rb} +8 -8
- data/examples/{io_processor_spec.rb → passing/io_processor_spec.rb} +2 -3
- data/examples/{mocking_example.rb → passing/mocking_example.rb} +0 -2
- data/examples/{multi_threaded_behaviour_runner.rb → passing/multi_threaded_example_group_runner.rb} +10 -9
- data/examples/passing/nested_classes_example.rb +35 -0
- data/examples/passing/options_example.rb +29 -0
- data/examples/passing/options_formatter.rb +20 -0
- data/examples/{partial_mock_example.rb → passing/partial_mock_example.rb} +2 -3
- data/examples/passing/pending_example.rb +18 -0
- data/examples/{predicate_example.rb → passing/predicate_example.rb} +1 -3
- data/examples/{shared_behaviours_example.rb → passing/shared_example_group_example.rb} +15 -11
- data/examples/passing/shared_stack_examples.rb +36 -0
- data/examples/passing/simple_matcher_example.rb +29 -0
- data/examples/{stack.rb → passing/stack.rb} +1 -1
- data/examples/{stack_spec.rb → passing/stack_spec.rb} +6 -40
- data/examples/passing/stack_spec_with_nested_example_groups.rb +66 -0
- data/examples/{stubbing_example.rb → passing/stubbing_example.rb} +1 -3
- data/examples/passing/yielding_example.rb +31 -0
- data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +85 -0
- data/features/before_and_after_blocks/before_and_after_blocks.feature +167 -0
- data/features/command_line/line_number_option.feature +56 -0
- data/features/command_line/line_number_option_with_example_with_no_name.feature +22 -0
- data/features/example_groups/define_example_attribute.feature +41 -0
- data/features/example_groups/example_group_with_should_methods.feature +29 -0
- data/features/example_groups/implicit_docstrings.feature +59 -0
- data/features/example_groups/nested_groups.feature +32 -0
- data/features/expectations/customized_message.feature +54 -0
- data/features/expectations/expect_change.feature +65 -0
- data/features/expectations/expect_error.feature +44 -0
- data/features/extensions/custom_example_group.feature +19 -0
- data/features/formatters/custom_formatter.feature +30 -0
- data/features/formatters/nested_formatter.feature +32 -0
- data/features/interop/cucumber_stubs_dont_leak.feature +11 -0
- data/features/interop/examples_and_tests_together.feature +84 -0
- data/features/interop/rspec_output.feature +25 -0
- data/features/interop/test_but_not_test_unit.feature +26 -0
- data/features/interop/test_case_with_should_methods.feature +46 -0
- data/features/load_paths/add_lib_to_load_path.feature +20 -0
- data/features/load_paths/add_spec_to_load_path.feature +20 -0
- data/features/matchers/define_diffable_matcher.feature +26 -0
- data/features/matchers/define_matcher.feature +179 -0
- data/features/matchers/define_matcher_outside_rspec.feature +38 -0
- data/features/matchers/define_matcher_with_fluent_interface.feature +48 -0
- data/features/matchers/define_wrapped_matcher.feature +56 -0
- data/features/matchers/match_unless_raises.feature +60 -0
- data/features/matchers/match_unless_raises_unexpected_error.feature +39 -0
- data/features/mock_framework_integration/use_flexmock.feature +27 -0
- data/features/mock_framework_integration/use_mocha.feature +27 -0
- data/features/mock_framework_integration/use_rr.feature +27 -0
- data/features/mocks/block_local_expectations.feature +62 -0
- data/features/mocks/mix_stubs_and_mocks.feature +22 -0
- data/features/mocks/stub_implementation.feature +26 -0
- data/features/pending/pending_examples.feature +81 -0
- data/features/runner/specify_line_number.feature +32 -0
- data/features/spec_helper/spec_helper.feature +25 -0
- data/features/step_definitions/running_rspec_steps.rb +52 -0
- data/features/step_definitions/stubbing_steps.rb +16 -0
- data/features/subject/explicit_subject.feature +31 -0
- data/features/subject/implicit_subject.feature +43 -0
- data/features/support/env.rb +83 -0
- data/features/support/matchers/smart_match.rb +31 -0
- data/geminstaller.yml +29 -0
- data/init.rb +9 -0
- data/lib/autotest/discover.rb +3 -0
- data/lib/autotest/rspec.rb +54 -0
- data/lib/spec/adapters/mock_frameworks/flexmock.rb +24 -0
- data/{plugins → lib/spec/adapters}/mock_frameworks/mocha.rb +8 -4
- data/lib/spec/adapters/mock_frameworks/rr.rb +22 -0
- data/lib/spec/adapters/mock_frameworks/rspec.rb +21 -0
- data/lib/spec/autorun.rb +3 -0
- data/lib/spec/deprecation.rb +41 -0
- data/lib/spec/dsl/main.rb +93 -0
- data/lib/spec/dsl.rb +1 -10
- data/lib/spec/example/args_and_options.rb +27 -0
- data/lib/spec/example/before_and_after_hooks.rb +93 -0
- data/lib/spec/example/errors.rb +25 -0
- data/lib/spec/example/example_group.rb +10 -0
- data/lib/spec/example/example_group_factory.rb +82 -0
- data/lib/spec/example/example_group_hierarchy.rb +53 -0
- data/lib/spec/example/example_group_methods.rb +287 -0
- data/lib/spec/example/example_group_proxy.rb +61 -0
- data/lib/spec/example/example_matcher.rb +43 -0
- data/lib/spec/example/example_methods.rb +152 -0
- data/lib/spec/example/example_proxy.rb +41 -0
- data/lib/spec/example/module_reopening_fix.rb +43 -0
- data/lib/spec/example/pending.rb +18 -0
- data/lib/spec/example/predicate_matchers.rb +46 -0
- data/lib/spec/example/shared_example_group.rb +59 -0
- data/lib/spec/example/subject.rb +114 -0
- data/lib/spec/example.rb +164 -0
- data/lib/spec/expectations/errors.rb +7 -1
- data/lib/spec/expectations/extensions/kernel.rb +52 -0
- data/lib/spec/expectations/extensions.rb +1 -2
- data/lib/spec/expectations/fail_with.rb +45 -0
- data/lib/spec/expectations/handler.rb +37 -30
- data/lib/spec/expectations.rb +2 -23
- data/lib/spec/extensions/instance_exec.rb +31 -0
- data/lib/spec/interop/test/unit/autorunner.rb +6 -0
- data/lib/spec/interop/test/unit/testcase.rb +56 -0
- data/lib/spec/interop/test/unit/testresult.rb +6 -0
- data/lib/spec/interop/test/unit/testsuite_adapter.rb +36 -0
- data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
- data/lib/spec/interop/test.rb +44 -0
- data/lib/spec/matchers/be.rb +183 -140
- data/lib/spec/matchers/be_close.rb +18 -23
- data/lib/spec/matchers/be_instance_of.rb +26 -0
- data/lib/spec/matchers/be_kind_of.rb +26 -0
- data/lib/spec/matchers/change.rb +72 -41
- data/lib/spec/matchers/compatibility.rb +14 -0
- data/lib/spec/matchers/dsl.rb +20 -0
- data/lib/spec/matchers/eql.rb +25 -26
- data/lib/spec/matchers/equal.rb +35 -25
- data/lib/spec/matchers/errors.rb +5 -0
- data/lib/spec/matchers/exist.rb +16 -0
- data/lib/spec/matchers/generated_descriptions.rb +36 -0
- data/lib/spec/matchers/has.rb +17 -26
- data/lib/spec/matchers/have.rb +36 -24
- data/lib/spec/matchers/include.rb +22 -48
- data/lib/spec/matchers/match.rb +11 -31
- data/lib/spec/matchers/match_array.rb +71 -0
- data/lib/spec/matchers/matcher.rb +132 -0
- data/lib/spec/matchers/method_missing.rb +9 -0
- data/lib/spec/matchers/operator_matcher.rb +55 -44
- data/lib/spec/matchers/pretty.rb +37 -0
- data/lib/spec/matchers/raise_exception.rb +131 -0
- data/lib/spec/matchers/respond_to.rb +35 -9
- data/lib/spec/matchers/satisfy.rb +2 -2
- data/lib/spec/matchers/simple_matcher.rb +134 -0
- data/lib/spec/matchers/throw_symbol.rb +56 -31
- data/lib/spec/matchers/wrap_expectation.rb +55 -0
- data/lib/spec/matchers.rb +104 -48
- data/lib/spec/mocks/argument_expectation.rb +28 -112
- data/lib/spec/mocks/argument_matchers.rb +237 -0
- data/lib/spec/mocks/error_generator.rb +20 -13
- data/lib/spec/mocks/errors.rb +1 -1
- data/lib/spec/mocks/example_methods.rb +69 -0
- data/lib/spec/mocks/extensions.rb +1 -0
- data/lib/spec/mocks/framework.rb +15 -0
- data/lib/spec/mocks/message_expectation.rb +206 -93
- data/lib/spec/mocks/methods.rb +66 -7
- data/lib/spec/mocks/mock.rb +53 -11
- data/lib/spec/mocks/proxy.rb +160 -55
- data/lib/spec/mocks/space.rb +2 -2
- data/lib/spec/mocks.rb +14 -23
- data/lib/spec/rake/spectask.rb +108 -53
- data/lib/spec/rake/verify_rcov.rb +4 -4
- data/lib/spec/ruby.rb +9 -0
- data/lib/spec/runner/backtrace_tweaker.rb +45 -23
- data/lib/spec/runner/class_and_arguments_parser.rb +14 -0
- data/lib/spec/runner/command_line.rb +7 -14
- data/lib/spec/runner/configuration.rb +202 -0
- data/lib/spec/runner/differs/default.rb +93 -0
- data/lib/spec/runner/differs/load-diff-lcs.rb +12 -0
- data/lib/spec/runner/drb_command_line.rb +18 -7
- data/lib/spec/runner/example_group_runner.rb +58 -0
- data/lib/spec/runner/extensions/kernel.rb +5 -46
- data/lib/spec/runner/formatter/base_formatter.rb +97 -26
- data/lib/spec/runner/formatter/base_text_formatter.rb +79 -39
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +25 -0
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +6 -8
- data/lib/spec/runner/formatter/html_formatter.rb +101 -75
- data/lib/spec/runner/formatter/nested_text_formatter.rb +50 -0
- data/lib/spec/runner/formatter/no_op_method_missing.rb +21 -0
- data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +11 -8
- data/lib/spec/runner/formatter/silent_formatter.rb +10 -0
- data/lib/spec/runner/formatter/snippet_extractor.rb +2 -2
- data/lib/spec/runner/formatter/specdoc_formatter.rb +20 -15
- data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
- data/lib/spec/runner/heckle_runner.rb +56 -56
- data/lib/spec/runner/{heckle_runner_win.rb → heckle_runner_unsupported.rb} +10 -10
- data/lib/spec/runner/line_number_query.rb +78 -0
- data/lib/spec/runner/option_parser.rb +147 -148
- data/lib/spec/runner/options.rb +343 -95
- data/lib/spec/runner/reporter.rb +117 -60
- data/lib/spec/runner.rb +39 -138
- data/lib/spec/stubs/cucumber.rb +5 -0
- data/lib/spec/test/unit.rb +10 -0
- data/lib/spec/version.rb +14 -22
- data/lib/spec.rb +5 -10
- data/resources/helpers/cmdline.rb +8 -0
- data/resources/rake/examples.rake +7 -0
- data/resources/rake/examples_with_rcov.rake +9 -0
- data/resources/rake/failing_examples_with_html.rake +9 -0
- data/resources/rake/verify_rcov.rake +7 -0
- data/spec/README.jruby +15 -0
- data/spec/autotest/autotest_helper.rb +8 -0
- data/spec/autotest/autotest_matchers.rb +38 -0
- data/spec/autotest/discover_spec.rb +8 -0
- data/spec/autotest/failed_results_re_spec.rb +31 -0
- data/spec/autotest/rspec_spec.rb +126 -0
- data/spec/ruby_forker.rb +13 -0
- data/spec/spec/dsl/main_spec.rb +103 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +51 -0
- data/spec/spec/example/example_group_factory_spec.rb +180 -0
- data/spec/spec/example/example_group_methods_spec.rb +778 -0
- data/spec/spec/example/example_group_proxy_spec.rb +107 -0
- data/spec/spec/example/example_group_spec.rb +632 -0
- data/spec/spec/example/example_matcher_spec.rb +85 -0
- data/spec/spec/example/example_methods_spec.rb +162 -0
- data/spec/spec/example/example_proxy_spec.rb +57 -0
- data/spec/spec/example/helper_method_spec.rb +24 -0
- data/spec/spec/{dsl/behaviour_eval_spec.rb → example/nested_example_group_spec.rb} +25 -3
- data/spec/spec/example/pending_module_spec.rb +58 -0
- data/spec/spec/example/predicate_matcher_spec.rb +41 -0
- data/spec/spec/example/shared_example_group_spec.rb +257 -0
- data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
- data/spec/spec/example/subject_spec.rb +110 -0
- data/spec/spec/expectations/differs/default_spec.rb +100 -13
- data/spec/spec/expectations/extensions/{object_spec.rb → kernel_spec.rb} +13 -14
- data/spec/spec/expectations/fail_with_spec.rb +42 -17
- data/spec/spec/expectations/handler_spec.rb +206 -0
- data/spec/spec/expectations/wrap_expectation_spec.rb +31 -0
- data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
- data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
- data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
- data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
- data/spec/spec/interop/test/unit/resources/test_case_with_various_names.rb +22 -0
- data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
- data/spec/spec/interop/test/unit/spec_spec.rb +48 -0
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +18 -0
- data/spec/spec/interop/test/unit/testcase_spec.rb +50 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
- data/spec/spec/matchers/be_close_spec.rb +32 -21
- data/spec/spec/matchers/be_instance_of_spec.rb +36 -0
- data/spec/spec/matchers/be_kind_of_spec.rb +33 -0
- data/spec/spec/matchers/be_spec.rb +261 -10
- data/spec/spec/matchers/change_spec.rb +178 -61
- data/spec/spec/matchers/compatibility_spec.rb +28 -0
- data/spec/spec/matchers/description_generation_spec.rb +47 -46
- data/spec/spec/matchers/dsl_spec.rb +34 -0
- data/spec/spec/matchers/eql_spec.rb +14 -9
- data/spec/spec/matchers/equal_spec.rb +43 -14
- data/spec/spec/matchers/exist_spec.rb +41 -24
- data/spec/spec/matchers/has_spec.rb +154 -1
- data/spec/spec/matchers/have_spec.rb +311 -189
- data/spec/spec/matchers/include_spec.rb +45 -2
- data/spec/spec/matchers/match_array_spec.rb +115 -0
- data/spec/spec/matchers/match_spec.rb +25 -5
- data/spec/spec/matchers/matcher_spec.rb +289 -0
- data/spec/spec/matchers/matchers_spec.rb +2 -0
- data/spec/spec/matchers/operator_matcher_spec.rb +48 -15
- data/spec/spec/matchers/raise_exception_spec.rb +345 -0
- data/spec/spec/matchers/respond_to_spec.rb +78 -16
- data/spec/spec/matchers/satisfy_spec.rb +1 -1
- data/spec/spec/matchers/simple_matcher_spec.rb +100 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +111 -41
- data/spec/spec/mocks/and_yield_spec.rb +117 -0
- data/spec/spec/mocks/any_number_of_times_spec.rb +9 -2
- data/spec/spec/mocks/argument_expectation_spec.rb +19 -15
- data/spec/spec/mocks/argument_matchers_spec.rb +19 -0
- data/spec/spec/mocks/at_least_spec.rb +2 -2
- data/spec/spec/mocks/at_most_spec.rb +3 -3
- data/spec/spec/mocks/bug_report_10260_spec.rb +1 -1
- data/spec/spec/mocks/bug_report_10263_spec.rb +27 -0
- data/spec/spec/mocks/bug_report_11545_spec.rb +32 -0
- data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
- data/spec/spec/mocks/bug_report_496_spec.rb +17 -0
- data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
- data/spec/spec/mocks/bug_report_7611_spec.rb +2 -2
- data/spec/spec/mocks/bug_report_7805_spec.rb +2 -2
- data/spec/spec/mocks/bug_report_8165_spec.rb +4 -4
- data/spec/spec/mocks/bug_report_8302_spec.rb +2 -2
- data/spec/spec/mocks/bug_report_830_spec.rb +21 -0
- data/spec/spec/mocks/double_spec.rb +12 -0
- data/spec/spec/mocks/failing_argument_matchers_spec.rb +95 -0
- data/spec/spec/mocks/hash_including_matcher_spec.rb +90 -0
- data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
- data/spec/spec/mocks/mock_ordering_spec.rb +15 -5
- data/spec/spec/mocks/mock_space_spec.rb +1 -1
- data/spec/spec/mocks/mock_spec.rb +346 -129
- data/spec/spec/mocks/multiple_return_value_spec.rb +9 -9
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
- data/spec/spec/mocks/null_object_mock_spec.rb +15 -1
- data/spec/spec/mocks/once_counts_spec.rb +2 -2
- data/spec/spec/mocks/options_hash_spec.rb +19 -17
- data/spec/spec/mocks/partial_mock_spec.rb +124 -12
- data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +2 -2
- data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
- data/spec/spec/mocks/precise_counts_spec.rb +2 -2
- data/spec/spec/mocks/record_messages_spec.rb +2 -2
- data/spec/spec/mocks/stub_chain_spec.rb +42 -0
- data/spec/spec/mocks/stub_implementation_spec.rb +31 -0
- data/spec/spec/mocks/stub_spec.rb +147 -103
- data/spec/spec/mocks/stubbed_message_expectations_spec.rb +26 -0
- data/spec/spec/mocks/twice_counts_spec.rb +2 -2
- data/spec/spec/mocks/unstub_spec.rb +127 -0
- data/spec/spec/package/bin_spec_spec.rb +11 -7
- data/spec/spec/rake/spectask_spec.rb +150 -0
- data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
- data/spec/spec/runner/command_line_spec.rb +158 -29
- data/spec/spec/runner/configuration_spec.rb +320 -0
- data/spec/spec/runner/drb_command_line_spec.rb +137 -72
- data/spec/spec/runner/empty_file.txt +0 -0
- data/spec/spec/runner/example_group_runner_spec.rb +26 -0
- data/spec/spec/runner/examples.txt +2 -0
- data/spec/spec/runner/failed.txt +3 -0
- data/spec/spec/runner/formatter/base_formatter_spec.rb +30 -0
- data/spec/spec/runner/formatter/base_text_formatter_spec.rb +113 -0
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +17 -12
- data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +377 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +377 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.7.html +377 -0
- data/spec/spec/runner/formatter/html_formatted-1.9.1.html +377 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +112 -52
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +329 -0
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +70 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +87 -16
- data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +153 -50
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6-jruby.html +371 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +371 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +371 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +371 -0
- data/spec/spec/runner/formatter/text_mate_formatter_spec.rb +106 -0
- data/spec/spec/runner/heckle_runner_spec.rb +32 -17
- data/spec/spec/runner/heckler_spec.rb +17 -11
- data/spec/spec/runner/line_number_query/line_number_query_fixture.rb +70 -0
- data/spec/spec/runner/line_number_query_spec.rb +129 -0
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +27 -21
- data/spec/spec/runner/option_parser_spec.rb +367 -164
- data/spec/spec/runner/options_spec.rb +506 -94
- data/spec/spec/runner/output_one_time_fixture.rb +7 -0
- data/spec/spec/runner/output_one_time_fixture_runner.rb +7 -0
- data/spec/spec/runner/output_one_time_spec.rb +15 -0
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +94 -27
- data/spec/spec/runner/reporter_spec.rb +212 -121
- data/spec/spec/runner/resources/a_bar.rb +0 -0
- data/spec/spec/runner/resources/a_foo.rb +0 -0
- data/spec/spec/runner/resources/a_spec.rb +1 -0
- data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
- data/spec/spec/runner/resources/utf8_encoded.rb +8 -0
- data/spec/spec/runner/spec.opts +2 -0
- data/spec/spec/runner/spec_drb.opts +2 -0
- data/spec/spec/runner/spec_spaced.opts +2 -0
- data/spec/spec/runner_spec.rb +13 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +87 -45
- data/spec/support/macros.rb +29 -0
- data/spec/{spec → support}/spec_classes.rb +26 -4
- metadata +461 -141
- data/CHANGES +0 -748
- data/EXAMPLES.rd +0 -108
- data/README +0 -70
- data/UPGRADE +0 -31
- data/bin/spec_translator +0 -8
- data/examples/auto_spec_description_example.rb +0 -19
- data/examples/before_and_after_example.rb +0 -39
- data/examples/behave_as_example.rb +0 -45
- data/examples/dynamic_spec.rb +0 -9
- data/examples/helper_method_example.rb +0 -11
- data/examples/legacy_spec.rb +0 -10
- data/examples/not_yet_implemented_spec.rb +0 -12
- data/examples/priority.txt +0 -1
- data/examples/spec_helper.rb +0 -1
- data/examples/test_case_adapter_example.rb +0 -26
- data/examples/test_case_spec.rb +0 -65
- data/lib/spec/dsl/behaviour.rb +0 -204
- data/lib/spec/dsl/behaviour_callbacks.rb +0 -77
- data/lib/spec/dsl/behaviour_eval.rb +0 -177
- data/lib/spec/dsl/behaviour_factory.rb +0 -42
- data/lib/spec/dsl/composite_proc_builder.rb +0 -28
- data/lib/spec/dsl/configuration.rb +0 -119
- data/lib/spec/dsl/description.rb +0 -46
- data/lib/spec/dsl/example.rb +0 -127
- data/lib/spec/dsl/example_matcher.rb +0 -28
- data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
- data/lib/spec/expectations/differs/default.rb +0 -61
- data/lib/spec/expectations/extensions/object.rb +0 -66
- data/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
- data/lib/spec/extensions/object.rb +0 -6
- data/lib/spec/extensions.rb +0 -1
- data/lib/spec/matchers/raise_error.rb +0 -100
- data/lib/spec/mocks/argument_constraint_matchers.rb +0 -12
- data/lib/spec/mocks/spec_methods.rb +0 -30
- data/lib/spec/runner/behaviour_runner.rb +0 -102
- data/lib/spec/runner/extensions/object.rb +0 -32
- data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -25
- data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
- data/lib/spec/runner/formatter.rb +0 -9
- data/lib/spec/runner/spec_parser.rb +0 -50
- data/lib/spec/test_case_adapter.rb +0 -10
- data/lib/spec/translator.rb +0 -106
- data/plugins/mock_frameworks/flexmock.rb +0 -27
- data/plugins/mock_frameworks/rspec.rb +0 -18
- data/spec/spec/dsl/behaviour_factory_spec.rb +0 -30
- data/spec/spec/dsl/behaviour_spec.rb +0 -604
- data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -57
- data/spec/spec/dsl/configuration_spec.rb +0 -50
- data/spec/spec/dsl/description_spec.rb +0 -81
- data/spec/spec/dsl/example_class_spec.rb +0 -24
- data/spec/spec/dsl/example_instance_spec.rb +0 -162
- data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
- data/spec/spec/dsl/predicate_matcher_spec.rb +0 -21
- data/spec/spec/dsl/shared_behaviour_spec.rb +0 -208
- data/spec/spec/matchers/handler_spec.rb +0 -88
- data/spec/spec/matchers/matcher_methods_spec.rb +0 -78
- data/spec/spec/matchers/raise_error_spec.rb +0 -147
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +0 -73
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +0 -92
- data/spec/spec/runner/behaviour_runner_spec.rb +0 -118
- data/spec/spec/runner/context_matching_spec.rb +0 -27
- data/spec/spec/runner/execution_context_spec.rb +0 -31
- data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
- data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -27
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -21
- data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
- data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
- data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
- data/spec/spec/runner/object_ext_spec.rb +0 -11
- data/spec/spec/runner/spec_matcher_spec.rb +0 -102
- data/spec/spec/runner/spec_parser_spec.rb +0 -93
- data/spec/spec/translator_spec.rb +0 -216
- /data/examples/{custom_expectation_matchers.rb → passing/custom_matchers.rb} +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
class SharedExampleGroup < Module
|
|
4
|
+
module ClassMethods
|
|
5
|
+
def register(*args, &block)
|
|
6
|
+
new_example_group = new(*args, &block)
|
|
7
|
+
shared_example_groups << new_example_group unless already_registered?(new_example_group)
|
|
8
|
+
new_example_group
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def find(example_group_description)
|
|
12
|
+
shared_example_groups.find {|b| b.description == example_group_description}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def clear
|
|
16
|
+
shared_example_groups.clear
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def include?(group)
|
|
20
|
+
shared_example_groups.include?(group)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def count
|
|
24
|
+
shared_example_groups.length
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def shared_example_groups
|
|
30
|
+
@shared_example_groups ||= []
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def already_registered?(new_example_group)
|
|
34
|
+
existing_example_group = find(new_example_group.description)
|
|
35
|
+
return false unless existing_example_group
|
|
36
|
+
return true if new_example_group.equal?(existing_example_group)
|
|
37
|
+
return true if expanded_path(new_example_group) == expanded_path(existing_example_group)
|
|
38
|
+
raise ArgumentError.new("Shared Example '#{existing_example_group.description}' already exists")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def expanded_path(example_group)
|
|
42
|
+
File.expand_path(example_group.location)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
extend ClassMethods
|
|
47
|
+
include ExampleGroupMethods
|
|
48
|
+
|
|
49
|
+
def initialize(*args, &example_group_block)
|
|
50
|
+
set_description(*args)
|
|
51
|
+
@example_group_block = example_group_block
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def included(mod) # :nodoc:
|
|
55
|
+
mod.module_eval(&@example_group_block)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
module Subject
|
|
4
|
+
module ExampleGroupMethods
|
|
5
|
+
# Defines an explicit subject for an example group which can then be the
|
|
6
|
+
# implicit receiver (through delegation) of calls to +should+.
|
|
7
|
+
#
|
|
8
|
+
# == Examples
|
|
9
|
+
#
|
|
10
|
+
# describe CheckingAccount, "with $50" do
|
|
11
|
+
# subject { CheckingAccount.new(:amount => 50, :currency => :USD) }
|
|
12
|
+
# it { should have_a_balance_of(50, :USD) }
|
|
13
|
+
# it { should_not be_overdrawn }
|
|
14
|
+
# its(:currency) { should == :USD }
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# See +ExampleMethods#should+ for more information about this approach.
|
|
18
|
+
def subject(&block)
|
|
19
|
+
block.nil? ?
|
|
20
|
+
explicit_subject || implicit_subject : @explicit_subject_block = block
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def its(attribute, &block)
|
|
24
|
+
describe(attribute) do
|
|
25
|
+
example do
|
|
26
|
+
self.class.class_eval do
|
|
27
|
+
define_method(:subject) do
|
|
28
|
+
super().send(attribute)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
instance_eval(&block)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
attr_reader :explicit_subject_block # :nodoc:
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def explicit_subject
|
|
41
|
+
group = self
|
|
42
|
+
while group.respond_to?(:explicit_subject_block)
|
|
43
|
+
return group.explicit_subject_block if group.explicit_subject_block
|
|
44
|
+
group = group.superclass
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def implicit_subject
|
|
49
|
+
(described_class ? proc {described_class.new} : proc {description_args.first})
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
module ExampleMethods
|
|
54
|
+
|
|
55
|
+
alias_method :__should_for_example_group__, :should
|
|
56
|
+
alias_method :__should_not_for_example_group__, :should_not
|
|
57
|
+
|
|
58
|
+
# Returns the subject defined in ExampleGroupMethods#subject. The
|
|
59
|
+
# subject block is only executed once per example, the result of which
|
|
60
|
+
# is cached and returned by any subsequent calls to +subject+.
|
|
61
|
+
#
|
|
62
|
+
# If a class is passed to +describe+ and no subject is explicitly
|
|
63
|
+
# declared in the example group, then +subject+ will return a new
|
|
64
|
+
# instance of that class.
|
|
65
|
+
#
|
|
66
|
+
# == Examples
|
|
67
|
+
#
|
|
68
|
+
# # explicit subject defined by the subject method
|
|
69
|
+
# describe Person do
|
|
70
|
+
# subject { Person.new(:birthdate => 19.years.ago) }
|
|
71
|
+
# it "should be eligible to vote" do
|
|
72
|
+
# subject.should be_eligible_to_vote
|
|
73
|
+
# end
|
|
74
|
+
# end
|
|
75
|
+
#
|
|
76
|
+
# # implicit subject => { Person.new }
|
|
77
|
+
# describe Person do
|
|
78
|
+
# it "should be eligible to vote" do
|
|
79
|
+
# subject.should be_eligible_to_vote
|
|
80
|
+
# end
|
|
81
|
+
# end
|
|
82
|
+
def subject
|
|
83
|
+
@subject ||= instance_eval(&self.class.subject)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# When +should+ is called with no explicit receiver, the call is
|
|
87
|
+
# delegated to the object returned by +subject+. Combined with
|
|
88
|
+
# an implicit subject (see +subject+), this supports very concise
|
|
89
|
+
# expressions.
|
|
90
|
+
#
|
|
91
|
+
# == Examples
|
|
92
|
+
#
|
|
93
|
+
# describe Person do
|
|
94
|
+
# it { should be_eligible_to_vote }
|
|
95
|
+
# end
|
|
96
|
+
def should(matcher=nil, message=nil)
|
|
97
|
+
self == subject ? self.__should_for_example_group__(matcher) : subject.should(matcher,message)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Just like +should+, +should_not+ delegates to the subject (implicit or
|
|
101
|
+
# explicit) of the example group.
|
|
102
|
+
#
|
|
103
|
+
# == Examples
|
|
104
|
+
#
|
|
105
|
+
# describe Person do
|
|
106
|
+
# it { should_not be_eligible_to_vote }
|
|
107
|
+
# end
|
|
108
|
+
def should_not(matcher=nil, message=nil)
|
|
109
|
+
self == subject ? self.__should_not_for_example_group__(matcher) : subject.should_not(matcher,message)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
data/lib/spec/example.rb
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
# == Example Groups and Code Examples
|
|
3
|
+
#
|
|
4
|
+
# A Code Example is an executable example of how a bit of code is expected
|
|
5
|
+
# to behave.
|
|
6
|
+
#
|
|
7
|
+
# An Example Group is a group of code examples.
|
|
8
|
+
#
|
|
9
|
+
# RSpec exposes a DSL to describe groups of examples.
|
|
10
|
+
#
|
|
11
|
+
# describe Account do
|
|
12
|
+
# it "should have a balance of $0" do
|
|
13
|
+
# account = Account.new
|
|
14
|
+
# account.balance.should == Money.new(0, :dollars)
|
|
15
|
+
# end
|
|
16
|
+
# end
|
|
17
|
+
#
|
|
18
|
+
# == Before and After
|
|
19
|
+
#
|
|
20
|
+
# You can use the <tt>before()</tt> and <tt>after()</tt> methods to extract
|
|
21
|
+
# common code within an Example Group. Both methods take an optional scope
|
|
22
|
+
# argument so you can run the block before :each example or before :all
|
|
23
|
+
# examples
|
|
24
|
+
#
|
|
25
|
+
# describe "..." do
|
|
26
|
+
# before :all do
|
|
27
|
+
# ...
|
|
28
|
+
# end
|
|
29
|
+
#
|
|
30
|
+
# before :each do
|
|
31
|
+
# ...
|
|
32
|
+
# end
|
|
33
|
+
#
|
|
34
|
+
# it "should do something" do
|
|
35
|
+
# ...
|
|
36
|
+
# end
|
|
37
|
+
#
|
|
38
|
+
# it "should do something else" do
|
|
39
|
+
# ...
|
|
40
|
+
# end
|
|
41
|
+
#
|
|
42
|
+
# after :each do
|
|
43
|
+
# ...
|
|
44
|
+
# end
|
|
45
|
+
#
|
|
46
|
+
# after :all do
|
|
47
|
+
# ...
|
|
48
|
+
# end
|
|
49
|
+
#
|
|
50
|
+
# end
|
|
51
|
+
#
|
|
52
|
+
# The <tt>before :each</tt> block will run before each of the examples, once
|
|
53
|
+
# for each example. Likewise, the <tt>after :each</tt> block will run after
|
|
54
|
+
# each of the examples.
|
|
55
|
+
#
|
|
56
|
+
# It is also possible to specify a <tt>before :all</tt> and <tt>after
|
|
57
|
+
# :all</tt> block that will run only once for each example group, before the
|
|
58
|
+
# first <code>before :each</code> and after the last <code>after
|
|
59
|
+
# :each</code> respectively. The use of these is generally discouraged,
|
|
60
|
+
# because it introduces dependencies between the examples. Still, it might
|
|
61
|
+
# prove useful for very expensive operations if you know what you are doing.
|
|
62
|
+
#
|
|
63
|
+
# == Local helper methods
|
|
64
|
+
#
|
|
65
|
+
# You can include local helper methods by simply expressing them within an
|
|
66
|
+
# example group:
|
|
67
|
+
#
|
|
68
|
+
# describe "..." do
|
|
69
|
+
#
|
|
70
|
+
# it "..." do
|
|
71
|
+
# helper_method
|
|
72
|
+
# end
|
|
73
|
+
#
|
|
74
|
+
# def helper_method
|
|
75
|
+
# ...
|
|
76
|
+
# end
|
|
77
|
+
#
|
|
78
|
+
# end
|
|
79
|
+
#
|
|
80
|
+
# == Included helper methods
|
|
81
|
+
#
|
|
82
|
+
# You can include helper methods in multiple example groups by expressing
|
|
83
|
+
# them within a module, and then including that module in your example
|
|
84
|
+
# groups:
|
|
85
|
+
#
|
|
86
|
+
# module AccountExampleHelperMethods
|
|
87
|
+
# def helper_method
|
|
88
|
+
# ...
|
|
89
|
+
# end
|
|
90
|
+
# end
|
|
91
|
+
#
|
|
92
|
+
# describe "A new account" do
|
|
93
|
+
# include AccountExampleHelperMethods
|
|
94
|
+
# before do
|
|
95
|
+
# @account = Account.new
|
|
96
|
+
# end
|
|
97
|
+
#
|
|
98
|
+
# it "should have a balance of $0" do
|
|
99
|
+
# helper_method
|
|
100
|
+
# @account.balance.should eql(Money.new(0, :dollars))
|
|
101
|
+
# end
|
|
102
|
+
# end
|
|
103
|
+
#
|
|
104
|
+
# == Shared Example Groups
|
|
105
|
+
#
|
|
106
|
+
# You can define a shared example group, that may be used on other groups
|
|
107
|
+
#
|
|
108
|
+
# share_examples_for "All Editions" do
|
|
109
|
+
# it "all editions behaviour" ...
|
|
110
|
+
# end
|
|
111
|
+
#
|
|
112
|
+
# describe SmallEdition do
|
|
113
|
+
# it_should_behave_like "All Editions"
|
|
114
|
+
#
|
|
115
|
+
# it "should do small edition stuff" do
|
|
116
|
+
# ...
|
|
117
|
+
# end
|
|
118
|
+
# end
|
|
119
|
+
#
|
|
120
|
+
# You can also assign the shared group to a module and include that
|
|
121
|
+
#
|
|
122
|
+
# share_as :AllEditions do
|
|
123
|
+
# it "should do all editions stuff" ...
|
|
124
|
+
# end
|
|
125
|
+
#
|
|
126
|
+
# describe SmallEdition do
|
|
127
|
+
# it_should_behave_like AllEditions
|
|
128
|
+
#
|
|
129
|
+
# it "should do small edition stuff" do
|
|
130
|
+
# ...
|
|
131
|
+
# end
|
|
132
|
+
# end
|
|
133
|
+
#
|
|
134
|
+
# And, for those of you who prefer to use something more like Ruby, you can
|
|
135
|
+
# just include the module directly
|
|
136
|
+
#
|
|
137
|
+
# describe SmallEdition do
|
|
138
|
+
# include AllEditions
|
|
139
|
+
#
|
|
140
|
+
# it "should do small edition stuff" do
|
|
141
|
+
# ...
|
|
142
|
+
# end
|
|
143
|
+
# end
|
|
144
|
+
module Example
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
require 'timeout'
|
|
149
|
+
require 'spec/example/args_and_options'
|
|
150
|
+
require 'spec/example/predicate_matchers'
|
|
151
|
+
require 'spec/example/example_group_proxy'
|
|
152
|
+
require 'spec/example/example_proxy'
|
|
153
|
+
require 'spec/example/subject'
|
|
154
|
+
require 'spec/example/before_and_after_hooks'
|
|
155
|
+
require 'spec/example/pending'
|
|
156
|
+
require 'spec/example/module_reopening_fix'
|
|
157
|
+
require 'spec/example/example_group_hierarchy'
|
|
158
|
+
require 'spec/example/example_group_methods'
|
|
159
|
+
require 'spec/example/example_methods'
|
|
160
|
+
require 'spec/example/example_group'
|
|
161
|
+
require 'spec/example/shared_example_group'
|
|
162
|
+
require 'spec/example/example_group_factory'
|
|
163
|
+
require 'spec/example/errors'
|
|
164
|
+
require 'spec/example/example_matcher'
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
module Spec
|
|
2
2
|
module Expectations
|
|
3
|
-
|
|
3
|
+
# If Test::Unit is loaed, we'll use its error as baseclass, so that Test::Unit
|
|
4
|
+
# will report unmet RSpec expectations as failures rather than errors.
|
|
5
|
+
superclass = ['Test::Unit::AssertionFailedError', '::StandardError'].map do |c|
|
|
6
|
+
eval(c) rescue nil
|
|
7
|
+
end.compact.first
|
|
8
|
+
|
|
9
|
+
class ExpectationNotMetError < superclass
|
|
4
10
|
end
|
|
5
11
|
end
|
|
6
12
|
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module Kernel
|
|
2
|
+
# :call-seq:
|
|
3
|
+
# should(matcher)
|
|
4
|
+
# should == expected
|
|
5
|
+
# should === expected
|
|
6
|
+
# should =~ expected
|
|
7
|
+
#
|
|
8
|
+
# receiver.should(matcher)
|
|
9
|
+
# => Passes if matcher.matches?(receiver)
|
|
10
|
+
#
|
|
11
|
+
# receiver.should == expected #any value
|
|
12
|
+
# => Passes if (receiver == expected)
|
|
13
|
+
#
|
|
14
|
+
# receiver.should === expected #any value
|
|
15
|
+
# => Passes if (receiver === expected)
|
|
16
|
+
#
|
|
17
|
+
# receiver.should =~ regexp
|
|
18
|
+
# => Passes if (receiver =~ regexp)
|
|
19
|
+
#
|
|
20
|
+
# See Spec::Matchers for more information about matchers
|
|
21
|
+
#
|
|
22
|
+
# == Warning
|
|
23
|
+
#
|
|
24
|
+
# NOTE that this does NOT support receiver.should != expected.
|
|
25
|
+
# Instead, use receiver.should_not == expected
|
|
26
|
+
def should(matcher=nil, message=nil, &block)
|
|
27
|
+
Spec::Expectations::PositiveExpectationHandler.handle_matcher(self, matcher, message, &block)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# :call-seq:
|
|
31
|
+
# should_not(matcher)
|
|
32
|
+
# should_not == expected
|
|
33
|
+
# should_not === expected
|
|
34
|
+
# should_not =~ expected
|
|
35
|
+
#
|
|
36
|
+
# receiver.should_not(matcher)
|
|
37
|
+
# => Passes unless matcher.matches?(receiver)
|
|
38
|
+
#
|
|
39
|
+
# receiver.should_not == expected
|
|
40
|
+
# => Passes unless (receiver == expected)
|
|
41
|
+
#
|
|
42
|
+
# receiver.should_not === expected
|
|
43
|
+
# => Passes unless (receiver === expected)
|
|
44
|
+
#
|
|
45
|
+
# receiver.should_not =~ regexp
|
|
46
|
+
# => Passes unless (receiver =~ regexp)
|
|
47
|
+
#
|
|
48
|
+
# See Spec::Matchers for more information about matchers
|
|
49
|
+
def should_not(matcher=nil, message=nil, &block)
|
|
50
|
+
Spec::Expectations::NegativeExpectationHandler.handle_matcher(self, matcher, message, &block)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
require 'spec/expectations/extensions/
|
|
2
|
-
require 'spec/expectations/extensions/string_and_symbol'
|
|
1
|
+
require 'spec/expectations/extensions/kernel'
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Expectations
|
|
3
|
+
class << self
|
|
4
|
+
attr_accessor :differ
|
|
5
|
+
|
|
6
|
+
# raises a Spec::Expectations::ExpectationNotMetError with message
|
|
7
|
+
#
|
|
8
|
+
# When a differ has been assigned and fail_with is passed
|
|
9
|
+
# <code>expected</code> and <code>target</code>, passes them
|
|
10
|
+
# to the differ to append a diff message to the failure message.
|
|
11
|
+
def fail_with(message, expected=nil, target=nil) # :nodoc:
|
|
12
|
+
if message.nil?
|
|
13
|
+
raise ArgumentError, "Failure message is nil. Does your matcher define the " +
|
|
14
|
+
"appropriate failure_message_for_* method to return a string?"
|
|
15
|
+
end
|
|
16
|
+
if (Array === message) & (message.length == 3)
|
|
17
|
+
::Spec.warn(<<-NOTICE
|
|
18
|
+
|
|
19
|
+
*****************************************************************
|
|
20
|
+
DEPRECATION WARNING: you are using deprecated behaviour that will
|
|
21
|
+
be removed from a future version of RSpec.
|
|
22
|
+
|
|
23
|
+
* Support for matchers that return arrays from failure message
|
|
24
|
+
methods is deprecated.
|
|
25
|
+
* Instead, the matcher should return a string, and expose methods
|
|
26
|
+
for the expected() and actual() values.
|
|
27
|
+
*****************************************************************
|
|
28
|
+
NOTICE
|
|
29
|
+
)
|
|
30
|
+
message, expected, target = message[0], message[1], message[2]
|
|
31
|
+
end
|
|
32
|
+
unless (differ.nil? || expected.nil? || target.nil?)
|
|
33
|
+
if expected.is_a?(String)
|
|
34
|
+
message << "\n\n Diff:" << self.differ.diff_as_string(target.to_s, expected)
|
|
35
|
+
elsif expected.is_a?(Hash) && target.is_a?(Hash)
|
|
36
|
+
message << "\n\n Diff:" << self.differ.diff_as_hash(target, expected)
|
|
37
|
+
elsif !target.is_a?(Proc)
|
|
38
|
+
message << "\n\n Diff:" << self.differ.diff_as_object(target, expected)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
Kernel::raise(Spec::Expectations::ExpectationNotMetError.new(message))
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -1,43 +1,50 @@
|
|
|
1
1
|
module Spec
|
|
2
2
|
module Expectations
|
|
3
|
+
class InvalidMatcherError < ArgumentError; end
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
def
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
5
|
+
class PositiveExpectationHandler
|
|
6
|
+
def self.handle_matcher(actual, matcher, message=nil, &block)
|
|
7
|
+
::Spec::Matchers.last_should = :should
|
|
8
|
+
::Spec::Matchers.last_matcher = matcher
|
|
9
|
+
return ::Spec::Matchers::PositiveOperatorMatcher.new(actual) if matcher.nil?
|
|
10
|
+
|
|
11
|
+
match = matcher.matches?(actual, &block)
|
|
12
|
+
return match if match
|
|
13
|
+
|
|
14
|
+
message ||= matcher.respond_to?(:failure_message_for_should) ?
|
|
15
|
+
matcher.failure_message_for_should :
|
|
16
|
+
matcher.failure_message
|
|
17
|
+
|
|
18
|
+
if matcher.respond_to?(:diffable?) && matcher.diffable?
|
|
19
|
+
::Spec::Expectations.fail_with message, matcher.expected.first, matcher.actual
|
|
20
|
+
else
|
|
21
|
+
::Spec::Expectations.fail_with message
|
|
17
22
|
end
|
|
18
23
|
end
|
|
19
24
|
end
|
|
20
25
|
|
|
21
|
-
class
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
class NegativeExpectationHandler
|
|
27
|
+
def self.handle_matcher(actual, matcher, message=nil, &block)
|
|
28
|
+
::Spec::Matchers.last_should = :should_not
|
|
29
|
+
::Spec::Matchers.last_matcher = matcher
|
|
30
|
+
return ::Spec::Matchers::NegativeOperatorMatcher.new(actual) if matcher.nil?
|
|
31
|
+
|
|
32
|
+
match = matcher.respond_to?(:does_not_match?) ?
|
|
33
|
+
!matcher.does_not_match?(actual, &block) :
|
|
34
|
+
matcher.matches?(actual, &block)
|
|
35
|
+
return match unless match
|
|
36
|
+
|
|
37
|
+
message ||= matcher.respond_to?(:failure_message_for_should_not) ?
|
|
38
|
+
matcher.failure_message_for_should_not :
|
|
39
|
+
matcher.negative_failure_message
|
|
40
|
+
|
|
41
|
+
if matcher.respond_to?(:diffable?) && matcher.diffable?
|
|
42
|
+
::Spec::Expectations.fail_with message, matcher.expected.first, matcher.actual
|
|
43
|
+
else
|
|
44
|
+
::Spec::Expectations.fail_with message
|
|
37
45
|
end
|
|
38
46
|
end
|
|
39
47
|
end
|
|
40
|
-
|
|
41
48
|
end
|
|
42
49
|
end
|
|
43
50
|
|
data/lib/spec/expectations.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'spec/matchers'
|
|
2
|
+
require 'spec/expectations/fail_with'
|
|
2
3
|
require 'spec/expectations/errors'
|
|
3
4
|
require 'spec/expectations/extensions'
|
|
4
5
|
require 'spec/expectations/handler'
|
|
@@ -30,27 +31,5 @@ module Spec
|
|
|
30
31
|
# RSpec ships with a standard set of useful matchers, and writing your own
|
|
31
32
|
# matchers is quite simple. See Spec::Matchers for details.
|
|
32
33
|
module Expectations
|
|
33
|
-
class << self
|
|
34
|
-
attr_accessor :differ
|
|
35
|
-
|
|
36
|
-
# raises a Spec::Expectations::ExpectationNotMetError with message
|
|
37
|
-
#
|
|
38
|
-
# When a differ has been assigned and fail_with is passed
|
|
39
|
-
# <code>expected</code> and <code>target</code>, passes them
|
|
40
|
-
# to the differ to append a diff message to the failure message.
|
|
41
|
-
def fail_with(message, expected=nil, target=nil) # :nodoc:
|
|
42
|
-
if Array === message && message.length == 3
|
|
43
|
-
message, expected, target = message[0], message[1], message[2]
|
|
44
|
-
end
|
|
45
|
-
unless (differ.nil? || expected.nil? || target.nil?)
|
|
46
|
-
if expected.is_a?(String)
|
|
47
|
-
message << "\nDiff:" << self.differ.diff_as_string(target.to_s, expected)
|
|
48
|
-
elsif !target.is_a?(Proc)
|
|
49
|
-
message << "\nDiff:" << self.differ.diff_as_object(target, expected)
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
Kernel::raise(Spec::Expectations::ExpectationNotMetError.new(message))
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
34
|
end
|
|
56
|
-
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Matchers
|
|
3
|
+
module InstanceExec
|
|
4
|
+
unless respond_to?(:instance_exec)
|
|
5
|
+
# based on Bounded Spec InstanceExec (Mauricio Fernandez)
|
|
6
|
+
# http://eigenclass.org/hiki/bounded+space+instance_exec
|
|
7
|
+
# - uses singleton_class of matcher instead of global
|
|
8
|
+
# InstanceExecHelper module
|
|
9
|
+
# - this keeps it scoped to this class only, which is the
|
|
10
|
+
# only place we need it
|
|
11
|
+
# - only necessary for ruby 1.8.6
|
|
12
|
+
def instance_exec(*args, &block)
|
|
13
|
+
singleton_class = (class << self; self; end)
|
|
14
|
+
begin
|
|
15
|
+
orig_critical, Thread.critical = Thread.critical, true
|
|
16
|
+
n = 0
|
|
17
|
+
n += 1 while respond_to?(method_name="__instance_exec#{n}")
|
|
18
|
+
singleton_class.module_eval{ define_method(:__instance_exec, &block) }
|
|
19
|
+
ensure
|
|
20
|
+
Thread.critical = orig_critical
|
|
21
|
+
end
|
|
22
|
+
begin
|
|
23
|
+
return send(:__instance_exec, *args)
|
|
24
|
+
ensure
|
|
25
|
+
singleton_class.module_eval{ remove_method(:__instance_exec) } rescue nil
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'test/unit/testcase'
|
|
2
|
+
|
|
3
|
+
module Test
|
|
4
|
+
module Unit
|
|
5
|
+
# This extension of the standard Test::Unit::TestCase makes RSpec
|
|
6
|
+
# available from within, so that you can do things like:
|
|
7
|
+
#
|
|
8
|
+
# require 'spec/test/unit'
|
|
9
|
+
#
|
|
10
|
+
# class MyTest < Test::Unit::TestCase
|
|
11
|
+
# it "should work with Test::Unit assertions" do
|
|
12
|
+
# assert_equal 4, 2+1
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
# def test_should_work_with_rspec_expectations
|
|
16
|
+
# (3+1).should == 5
|
|
17
|
+
# end
|
|
18
|
+
# end
|
|
19
|
+
#
|
|
20
|
+
# See also Spec::Example::ExampleGroup
|
|
21
|
+
class TestCase
|
|
22
|
+
extend Spec::Example::ExampleGroupMethods
|
|
23
|
+
include Spec::Example::ExampleMethods
|
|
24
|
+
|
|
25
|
+
def self.suite
|
|
26
|
+
Test::Unit::TestSuiteAdapter.new(self)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.example_method?(method_name)
|
|
30
|
+
should_method?(method_name) || test_method?(method_name)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.test_method?(method_name)
|
|
34
|
+
method_name =~ /^test./ && (
|
|
35
|
+
instance_method(method_name).arity == 0 ||
|
|
36
|
+
instance_method(method_name).arity == -1
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
before(:each) {setup}
|
|
41
|
+
after(:each) {teardown}
|
|
42
|
+
|
|
43
|
+
def initialize(description, &implementation)
|
|
44
|
+
super
|
|
45
|
+
# Some Test::Unit extensions depend on @method_name being present.
|
|
46
|
+
@method_name = description.description
|
|
47
|
+
@_result = ::Test::Unit::TestResult.new
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def run(ignore_this_argument=nil)
|
|
51
|
+
super()
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|