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
|
@@ -35,11 +35,11 @@ module RCov
|
|
|
35
35
|
def define
|
|
36
36
|
desc "Verify that rcov coverage is at least #{threshold}%"
|
|
37
37
|
task @name do
|
|
38
|
-
total_coverage =
|
|
38
|
+
total_coverage = 0
|
|
39
39
|
|
|
40
40
|
File.open(index_html).each_line do |line|
|
|
41
|
-
if line =~ /<tt
|
|
42
|
-
total_coverage =
|
|
41
|
+
if line =~ /<tt class='coverage_total'>\s*(\d+\.\d+)%\s*<\/tt>/
|
|
42
|
+
total_coverage = $1.to_f
|
|
43
43
|
break
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -49,4 +49,4 @@ module RCov
|
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
|
-
end
|
|
52
|
+
end
|
data/lib/spec/ruby.rb
ADDED
|
@@ -1,56 +1,78 @@
|
|
|
1
1
|
module Spec
|
|
2
2
|
module Runner
|
|
3
3
|
class BacktraceTweaker
|
|
4
|
+
def initialize(*patterns)
|
|
5
|
+
@ignore_patterns = []
|
|
6
|
+
end
|
|
7
|
+
|
|
4
8
|
def clean_up_double_slashes(line)
|
|
5
9
|
line.gsub!('//','/')
|
|
6
10
|
end
|
|
7
|
-
end
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
|
|
12
|
+
def ignore_patterns(*patterns)
|
|
13
|
+
# do nothing. Only QuietBacktraceTweaker ignores patterns.
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def ignored_patterns
|
|
17
|
+
[]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def tweak_backtrace(error)
|
|
11
21
|
return if error.backtrace.nil?
|
|
12
|
-
error.backtrace.
|
|
13
|
-
clean_up_double_slashes(
|
|
22
|
+
tweaked = error.backtrace.collect do |message|
|
|
23
|
+
clean_up_double_slashes(message)
|
|
24
|
+
kept_lines = message.split("\n").select do |line|
|
|
25
|
+
ignored_patterns.each do |ignore|
|
|
26
|
+
break if line =~ ignore
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
kept_lines.empty?? nil : kept_lines.join("\n")
|
|
14
30
|
end
|
|
31
|
+
error.set_backtrace(tweaked.select {|line| line})
|
|
15
32
|
end
|
|
16
33
|
end
|
|
17
34
|
|
|
35
|
+
class NoisyBacktraceTweaker < BacktraceTweaker
|
|
36
|
+
end
|
|
37
|
+
|
|
18
38
|
# Tweaks raised Exceptions to mask noisy (unneeded) parts of the backtrace
|
|
19
39
|
class QuietBacktraceTweaker < BacktraceTweaker
|
|
20
40
|
unless defined?(IGNORE_PATTERNS)
|
|
21
41
|
root_dir = File.expand_path(File.join(__FILE__, '..', '..', '..', '..'))
|
|
22
|
-
spec_files = Dir["#{root_dir}/lib
|
|
42
|
+
spec_files = Dir["#{root_dir}/lib/*"].map do |path|
|
|
23
43
|
subpath = path[root_dir.length..-1]
|
|
24
44
|
/#{subpath}/
|
|
25
45
|
end
|
|
26
46
|
IGNORE_PATTERNS = spec_files + [
|
|
47
|
+
/\/rspec-[^\/]*\/lib\/spec\//,
|
|
48
|
+
/\/spork-[^\/]*\/lib\/spork\//,
|
|
27
49
|
/\/lib\/ruby\//,
|
|
28
50
|
/bin\/spec:/,
|
|
51
|
+
/bin\/spork:/,
|
|
29
52
|
/bin\/rcov:/,
|
|
30
|
-
/lib\/
|
|
53
|
+
/lib\/rspec-rails/,
|
|
31
54
|
/vendor\/rails/,
|
|
32
55
|
# TextMate's Ruby and RSpec plugins
|
|
33
56
|
/Ruby\.tmbundle\/Support\/tmruby.rb:/,
|
|
34
57
|
/RSpec\.tmbundle\/Support\/lib/,
|
|
35
58
|
/temp_textmate\./,
|
|
36
|
-
/mock_frameworks\/rspec
|
|
59
|
+
/mock_frameworks\/rspec/,
|
|
60
|
+
/spec_server/
|
|
37
61
|
]
|
|
38
62
|
end
|
|
39
|
-
|
|
40
|
-
def
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
end
|
|
52
|
-
error.backtrace.compact!
|
|
63
|
+
|
|
64
|
+
def initialize(*patterns)
|
|
65
|
+
super
|
|
66
|
+
ignore_patterns(*patterns)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def ignore_patterns(*patterns)
|
|
70
|
+
@ignore_patterns += patterns.flatten.map { |pattern| Regexp.new(pattern) }
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def ignored_patterns
|
|
74
|
+
IGNORE_PATTERNS + @ignore_patterns
|
|
53
75
|
end
|
|
54
76
|
end
|
|
55
77
|
end
|
|
56
|
-
end
|
|
78
|
+
end
|
|
@@ -2,21 +2,14 @@ require 'spec/runner/option_parser'
|
|
|
2
2
|
|
|
3
3
|
module Spec
|
|
4
4
|
module Runner
|
|
5
|
-
# Facade to run specs without having to fork a new ruby process (using `spec ...`)
|
|
6
5
|
class CommandLine
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
old_behaviour_runner = defined?($behaviour_runner) ? $behaviour_runner : nil
|
|
14
|
-
$behaviour_runner = OptionParser.new.create_behaviour_runner(argv, err, out, warn_if_no_files)
|
|
15
|
-
return if $behaviour_runner.nil? # This is the case if we use --drb
|
|
16
|
-
|
|
17
|
-
$behaviour_runner.run(argv, exit)
|
|
18
|
-
$behaviour_runner = old_behaviour_runner
|
|
6
|
+
def self.run(tmp_options=Spec::Runner.options)
|
|
7
|
+
orig_options = Spec::Runner.options
|
|
8
|
+
Spec::Runner.use tmp_options
|
|
9
|
+
tmp_options.run_examples
|
|
10
|
+
ensure
|
|
11
|
+
Spec::Runner.use orig_options
|
|
19
12
|
end
|
|
20
13
|
end
|
|
21
14
|
end
|
|
22
|
-
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Runner
|
|
3
|
+
class Configuration
|
|
4
|
+
include Spec::Example::ArgsAndOptions
|
|
5
|
+
|
|
6
|
+
# Chooses what mock framework to use. Example:
|
|
7
|
+
#
|
|
8
|
+
# Spec::Runner.configure do |config|
|
|
9
|
+
# config.mock_with :rspec, :mocha, :flexmock, or :rr
|
|
10
|
+
# end
|
|
11
|
+
#
|
|
12
|
+
# To use any other mock framework, you'll have to provide your own
|
|
13
|
+
# adapter. This is simply a module that responds to the following
|
|
14
|
+
# methods:
|
|
15
|
+
#
|
|
16
|
+
# setup_mocks_for_rspec
|
|
17
|
+
# verify_mocks_for_rspec
|
|
18
|
+
# teardown_mocks_for_rspec.
|
|
19
|
+
#
|
|
20
|
+
# These are your hooks into the lifecycle of a given example. RSpec will
|
|
21
|
+
# call setup_mocks_for_rspec before running anything else in each
|
|
22
|
+
# Example. After executing the #after methods, RSpec will then call
|
|
23
|
+
# verify_mocks_for_rspec and teardown_mocks_for_rspec (this is
|
|
24
|
+
# guaranteed to run even if there are failures in
|
|
25
|
+
# verify_mocks_for_rspec).
|
|
26
|
+
#
|
|
27
|
+
# Once you've defined this module, you can pass that to mock_with:
|
|
28
|
+
#
|
|
29
|
+
# Spec::Runner.configure do |config|
|
|
30
|
+
# config.mock_with MyMockFrameworkAdapter
|
|
31
|
+
# end
|
|
32
|
+
#
|
|
33
|
+
def mock_with(mock_framework)
|
|
34
|
+
@mock_framework = case mock_framework
|
|
35
|
+
when Symbol
|
|
36
|
+
mock_framework_path(mock_framework.to_s)
|
|
37
|
+
else
|
|
38
|
+
mock_framework
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def mock_framework # :nodoc:
|
|
43
|
+
@mock_framework ||= mock_framework_path("rspec")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# :call-seq:
|
|
47
|
+
# include(Some::Helpers)
|
|
48
|
+
# include(Some::Helpers, More::Helpers)
|
|
49
|
+
# include(My::Helpers, :type => :key)
|
|
50
|
+
#
|
|
51
|
+
# Declares modules to be included in multiple example groups
|
|
52
|
+
# (<tt>describe</tt> blocks). With no <tt>:type</tt>, the modules listed
|
|
53
|
+
# will be included in all example groups.
|
|
54
|
+
#
|
|
55
|
+
# Use <tt>:type</tt> to restrict
|
|
56
|
+
# the inclusion to a subset of example groups. The value assigned to
|
|
57
|
+
# <tt>:type</tt> should be a key that maps to a class that is either a
|
|
58
|
+
# subclass of Spec::Example::ExampleGroup or extends
|
|
59
|
+
# Spec::Example::ExampleGroupMethods and includes
|
|
60
|
+
# Spec::Example::ExampleMethods.
|
|
61
|
+
#
|
|
62
|
+
# For example, the rspec-rails gem/plugin extends Test::Unit::TestCase
|
|
63
|
+
# with Spec::Example::ExampleGroupMethods and includes
|
|
64
|
+
# Spec::Example::ExampleMethods in it. So if you have a module of helper
|
|
65
|
+
# methods for controller examples, you could do this:
|
|
66
|
+
#
|
|
67
|
+
# config.include(ControllerExampleHelpers, :type => :controller)
|
|
68
|
+
#
|
|
69
|
+
# Only example groups that have that type will get the modules included:
|
|
70
|
+
#
|
|
71
|
+
# describe Account, :type => :model do
|
|
72
|
+
# # Will *not* include ControllerExampleHelpers
|
|
73
|
+
# end
|
|
74
|
+
#
|
|
75
|
+
# describe AccountsController, :type => :controller do
|
|
76
|
+
# # *Will* include ControllerExampleHelpers
|
|
77
|
+
# end
|
|
78
|
+
#
|
|
79
|
+
def include(*modules_and_options)
|
|
80
|
+
include_or_extend(:include, *modules_and_options)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# :call-seq:
|
|
84
|
+
# extend(Some::Helpers)
|
|
85
|
+
# extend(Some::Helpers, More::Helpers)
|
|
86
|
+
# extend(My::Helpers, :type => :key)
|
|
87
|
+
#
|
|
88
|
+
# Works just like #include, but extends the example groups
|
|
89
|
+
# with the modules rather than including them.
|
|
90
|
+
def extend(*modules_and_options)
|
|
91
|
+
include_or_extend(:extend, *modules_and_options)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Appends a global <tt>before</tt> block to all example groups.
|
|
95
|
+
# <tt>scope</tt> can be any of <tt>:each</tt> (default), <tt>:all</tt>, or
|
|
96
|
+
# <tt>:suite</tt>. When <tt>:each</tt>, the block is executed before each
|
|
97
|
+
# example. When <tt>:all</tt>, the block is executed once per example
|
|
98
|
+
# group, before any of its examples are run. When <tt>:suite</tt> the
|
|
99
|
+
# block is run once before the entire suite is run.
|
|
100
|
+
def append_before(scope = :each, options={}, &proc)
|
|
101
|
+
add_callback(:append_before, scope, options, &proc)
|
|
102
|
+
end
|
|
103
|
+
alias_method :before, :append_before
|
|
104
|
+
|
|
105
|
+
# Prepends a global <tt>before</tt> block to all example groups.
|
|
106
|
+
#
|
|
107
|
+
# See <tt>append_before</tt> for scoping semantics.
|
|
108
|
+
def prepend_before(scope = :each, options={}, &proc)
|
|
109
|
+
add_callback(:prepend_before, scope, options, &proc)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Prepends a global <tt>after</tt> block to all example groups.
|
|
113
|
+
#
|
|
114
|
+
# See <tt>append_before</tt> for scoping semantics.
|
|
115
|
+
def prepend_after(scope = :each, options={}, &proc)
|
|
116
|
+
add_callback(:prepend_after, scope, options, &proc)
|
|
117
|
+
end
|
|
118
|
+
alias_method :after, :prepend_after
|
|
119
|
+
|
|
120
|
+
# Appends a global <tt>after</tt> block to all example groups.
|
|
121
|
+
#
|
|
122
|
+
# See <tt>append_before</tt> for scoping semantics.
|
|
123
|
+
def append_after(scope = :each, options={}, &proc)
|
|
124
|
+
add_callback(:append_after, scope, options, &proc)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# DEPRECATED - use Spec::Matchers::DSL instead
|
|
128
|
+
#
|
|
129
|
+
# Defines global predicate matchers. Example:
|
|
130
|
+
#
|
|
131
|
+
# config.predicate_matchers[:swim] = :can_swim?
|
|
132
|
+
#
|
|
133
|
+
# This makes it possible to say:
|
|
134
|
+
#
|
|
135
|
+
# person.should swim # passes if person.can_swim? returns true
|
|
136
|
+
#
|
|
137
|
+
def predicate_matchers
|
|
138
|
+
@predicate_matchers ||= Spec::HashWithDeprecationNotice.new("predicate_matchers", "the new Matcher DSL")
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Adds patterns to the list of patterns ignored in the backtrace when a
|
|
142
|
+
# failure is output by rspec. Example:
|
|
143
|
+
#
|
|
144
|
+
# config.ignore_backtrace_patterns /spork/, /shoulda/, "/some/weird/path/"
|
|
145
|
+
#
|
|
146
|
+
# When quiet backtraces are turned on (default), this will exclude any
|
|
147
|
+
# lines that match any of the Regexps and Strings passed.
|
|
148
|
+
#
|
|
149
|
+
def ignore_backtrace_patterns(*patterns)
|
|
150
|
+
@ignored_backtrace_patterns ||= []
|
|
151
|
+
@ignored_backtrace_patterns += patterns
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def ignored_backtrace_patterns # :nodoc:
|
|
155
|
+
@ignored_backtrace_patterns ||= []
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def suppress_deprecation_warnings!
|
|
159
|
+
@suppress_deprecation_warnings = true
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def suppress_deprecation_warnings?
|
|
163
|
+
@suppress_deprecation_warnings ||= false
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
private
|
|
167
|
+
|
|
168
|
+
def include_or_extend(action, *args)
|
|
169
|
+
modules, options = args_and_options(*args)
|
|
170
|
+
[get_type_from_options(options)].flatten.each do |required_example_group|
|
|
171
|
+
required_example_group = required_example_group.to_sym if required_example_group
|
|
172
|
+
modules.each do |mod|
|
|
173
|
+
Spec::Example::ExampleGroupFactory[required_example_group].__send__(action, mod)
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def add_callback(sym, *args, &proc)
|
|
179
|
+
scope, options = scope_and_options(*args)
|
|
180
|
+
example_group = Spec::Example::ExampleGroupFactory[get_type_from_options(options)]
|
|
181
|
+
example_group.__send__(sym, scope, &proc)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def get_type_from_options(options)
|
|
185
|
+
options[:type] || options[:behaviour_type]
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def mock_framework_path(framework_name)
|
|
189
|
+
"spec/adapters/mock_frameworks/#{framework_name}"
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def scope_and_options(*args) # :nodoc:
|
|
193
|
+
args, options = args_and_options(*args)
|
|
194
|
+
return scope_from(*args), options
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def scope_from(*args) # :nodoc:
|
|
198
|
+
args[0] || :each
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'spec/runner/differs/load-diff-lcs'
|
|
2
|
+
require 'pp'
|
|
3
|
+
|
|
4
|
+
module Spec
|
|
5
|
+
module Expectations
|
|
6
|
+
module Differs
|
|
7
|
+
unless defined?(Spec::Expectations::Differs::Default)
|
|
8
|
+
class Default
|
|
9
|
+
def initialize(options)
|
|
10
|
+
@options = options
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)
|
|
14
|
+
def diff_as_string(data_new, data_old)
|
|
15
|
+
data_old = data_old.split(/\n/).map! { |e| e.chomp }
|
|
16
|
+
data_new = data_new.split(/\n/).map! { |e| e.chomp }
|
|
17
|
+
output = ""
|
|
18
|
+
diffs = Diff::LCS.diff(data_old, data_new)
|
|
19
|
+
return output if diffs.empty?
|
|
20
|
+
oldhunk = hunk = nil
|
|
21
|
+
file_length_difference = 0
|
|
22
|
+
diffs.each do |piece|
|
|
23
|
+
begin
|
|
24
|
+
hunk = Diff::LCS::Hunk.new(data_old, data_new, piece, context_lines,
|
|
25
|
+
file_length_difference)
|
|
26
|
+
file_length_difference = hunk.file_length_difference
|
|
27
|
+
next unless oldhunk
|
|
28
|
+
# Hunks may overlap, which is why we need to be careful when our
|
|
29
|
+
# diff includes lines of context. Otherwise, we might print
|
|
30
|
+
# redundant lines.
|
|
31
|
+
if (context_lines > 0) and hunk.overlaps?(oldhunk)
|
|
32
|
+
hunk.unshift(oldhunk)
|
|
33
|
+
else
|
|
34
|
+
output << oldhunk.diff(format)
|
|
35
|
+
end
|
|
36
|
+
ensure
|
|
37
|
+
oldhunk = hunk
|
|
38
|
+
output << "\n"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
#Handle the last remaining hunk
|
|
42
|
+
output << oldhunk.diff(format) << "\n"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def diff_as_object(target,expected)
|
|
46
|
+
diff_as_string(PP.pp(target,""), PP.pp(expected,""))
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def diff_as_hash(target, expected)
|
|
50
|
+
contains_hash = false
|
|
51
|
+
contains_array = false
|
|
52
|
+
|
|
53
|
+
extra_expected_keys = expected.keys - target.keys
|
|
54
|
+
extra_target_keys = target.keys - expected.keys
|
|
55
|
+
|
|
56
|
+
o = "\n"
|
|
57
|
+
|
|
58
|
+
o << "Expected hash contains keys that target hash does not: " << extra_expected_keys.inspect << "\n" if !extra_expected_keys.empty?
|
|
59
|
+
o << "Target hash contains keys that expected hash does not: " << extra_target_keys.inspect << "\n" if !extra_target_keys.empty?
|
|
60
|
+
|
|
61
|
+
expected.delete_if do |key, value|
|
|
62
|
+
contains_hash = true if value.is_a?(Hash)
|
|
63
|
+
contains_array = true if value.is_a?(Array)
|
|
64
|
+
target[key] == value
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
expected.keys.sort { |a,b| a.to_s <=> b.to_s }.each do |key|
|
|
68
|
+
o << "Expected the key #{key.inspect} to be #{expected[key].inspect}, but was #{target[key].inspect}\n"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
o << "\n"
|
|
72
|
+
|
|
73
|
+
if contains_hash || contains_array
|
|
74
|
+
o << diff_as_object(target, expected)
|
|
75
|
+
else
|
|
76
|
+
o
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
protected
|
|
81
|
+
def format
|
|
82
|
+
@options.diff_format
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def context_lines
|
|
86
|
+
@options.context_lines
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -4,18 +4,29 @@ module Spec
|
|
|
4
4
|
module Runner
|
|
5
5
|
# Facade to run specs by connecting to a DRB server
|
|
6
6
|
class DrbCommandLine
|
|
7
|
+
|
|
8
|
+
def self.port(options)
|
|
9
|
+
(options.drb_port || ENV["RSPEC_DRB"] || 8989).to_i
|
|
10
|
+
end
|
|
11
|
+
|
|
7
12
|
# Runs specs on a DRB server. Note that this API is similar to that of
|
|
8
13
|
# CommandLine - making it possible for clients to use both interchangeably.
|
|
9
|
-
def self.run(
|
|
14
|
+
def self.run(options)
|
|
10
15
|
begin
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
begin; \
|
|
17
|
+
DRb.start_service("druby://localhost:0"); \
|
|
18
|
+
rescue SocketError, Errno::EADDRNOTAVAIL; \
|
|
19
|
+
DRb.start_service("druby://:0"); \
|
|
20
|
+
end
|
|
21
|
+
spec_server = DRbObject.new_with_uri("druby://127.0.0.1:#{port(options)}")
|
|
22
|
+
spec_server.run(options.argv, options.error_stream, options.output_stream)
|
|
23
|
+
true
|
|
14
24
|
rescue DRb::DRbConnError
|
|
15
|
-
|
|
16
|
-
|
|
25
|
+
options.error_stream.puts "No server is running"
|
|
26
|
+
false
|
|
17
27
|
end
|
|
18
28
|
end
|
|
29
|
+
|
|
19
30
|
end
|
|
20
31
|
end
|
|
21
|
-
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Runner
|
|
3
|
+
class ExampleGroupRunner
|
|
4
|
+
def initialize(options)
|
|
5
|
+
@options = options
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def load_files(files)
|
|
9
|
+
$KCODE = 'u' if RUBY_VERSION.to_f < 1.9
|
|
10
|
+
# It's important that loading files (or choosing not to) stays the
|
|
11
|
+
# responsibility of the ExampleGroupRunner. Some implementations (like)
|
|
12
|
+
# the one using DRb may choose *not* to load files, but instead tell
|
|
13
|
+
# someone else to do it over the wire.
|
|
14
|
+
files.each do |file|
|
|
15
|
+
load file
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def run
|
|
20
|
+
prepare
|
|
21
|
+
success = true
|
|
22
|
+
example_groups.each do |example_group|
|
|
23
|
+
success = success & example_group.run(@options)
|
|
24
|
+
end
|
|
25
|
+
finish
|
|
26
|
+
success
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
protected
|
|
30
|
+
|
|
31
|
+
def prepare
|
|
32
|
+
reporter.start(number_of_examples)
|
|
33
|
+
example_groups.reverse! if reverse
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def finish
|
|
37
|
+
reporter.end
|
|
38
|
+
reporter.dump
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def reporter
|
|
42
|
+
@options.reporter
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def reverse
|
|
46
|
+
@options.reverse
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def example_groups
|
|
50
|
+
@options.example_groups
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def number_of_examples
|
|
54
|
+
@options.number_of_examples
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -1,50 +1,9 @@
|
|
|
1
1
|
module Kernel
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
#
|
|
8
|
-
# It is also possible to override autodiscovery of the behaviour class
|
|
9
|
-
# with an options Hash as the last argument:
|
|
10
|
-
#
|
|
11
|
-
# describe "name", :behaviour_type => :something_special do ...
|
|
12
|
-
#
|
|
13
|
-
# The reason for using different behaviour classes is to have
|
|
14
|
-
# different matcher methods available from within the <tt>describe</tt>
|
|
15
|
-
# block.
|
|
16
|
-
#
|
|
17
|
-
# See Spec::DSL::BehaviourFactory#add_behaviour_class for details about
|
|
18
|
-
# how to register special Spec::DSL::Behaviour implementations.
|
|
19
|
-
#
|
|
20
|
-
def describe(*args, &block)
|
|
21
|
-
raise ArgumentError if args.empty?
|
|
22
|
-
args << {} unless Hash === args.last
|
|
23
|
-
args.last[:spec_path] = caller(0)[1]
|
|
24
|
-
register_behaviour(Spec::DSL::BehaviourFactory.create(*args, &block))
|
|
25
|
-
end
|
|
26
|
-
alias :context :describe
|
|
27
|
-
|
|
28
|
-
def respond_to(*names)
|
|
29
|
-
Spec::Matchers::RespondTo.new(*names)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
def register_behaviour(behaviour)
|
|
35
|
-
if behaviour.shared?
|
|
36
|
-
Spec::DSL::Behaviour.add_shared_behaviour(behaviour)
|
|
37
|
-
else
|
|
38
|
-
behaviour_runner.add_behaviour(behaviour)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def behaviour_runner
|
|
43
|
-
# TODO: Figure out a better way to get this considered "covered" and keep this statement on multiple lines
|
|
44
|
-
unless $behaviour_runner; \
|
|
45
|
-
$behaviour_runner = ::Spec::Runner::OptionParser.new.create_behaviour_runner(ARGV.dup, STDERR, STDOUT, false); \
|
|
46
|
-
at_exit { $behaviour_runner.run(nil, false) }; \
|
|
2
|
+
unless respond_to?(:debugger)
|
|
3
|
+
# Start a debugging session if ruby-debug is loaded with the -u/--debugger option
|
|
4
|
+
def debugger(steps=1)
|
|
5
|
+
# If not then just comment and proceed
|
|
6
|
+
$stderr.puts "debugger statement ignored, use -u or --debugger option on rspec to enable debugging"
|
|
47
7
|
end
|
|
48
|
-
$behaviour_runner
|
|
49
8
|
end
|
|
50
9
|
end
|