rspec-instructure 1.3.3
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/.autotest +5 -0
- data/.document +7 -0
- data/.gitignore +15 -0
- data/Gemfile +20 -0
- data/History.rdoc +1565 -0
- data/License.txt +22 -0
- data/README.rdoc +44 -0
- data/Rakefile +110 -0
- 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 -0
- data/cucumber.yml +5 -0
- data/example_spec.rb +4 -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/passing/custom_formatter.rb +11 -0
- data/examples/passing/custom_matchers.rb +54 -0
- data/examples/passing/dynamic_spec.rb +7 -0
- data/examples/passing/file_accessor.rb +18 -0
- data/examples/passing/file_accessor_spec.rb +37 -0
- data/examples/passing/filtered_formatter.rb +17 -0
- data/examples/passing/filtered_formatter_example.rb +31 -0
- data/examples/passing/greeter_spec.rb +30 -0
- data/examples/passing/helper_method_example.rb +12 -0
- data/examples/passing/implicit_docstrings_example.rb +16 -0
- data/examples/passing/io_processor.rb +8 -0
- data/examples/passing/io_processor_spec.rb +20 -0
- data/examples/passing/mocking_example.rb +25 -0
- data/examples/passing/multi_threaded_example_group_runner.rb +26 -0
- 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/passing/partial_mock_example.rb +27 -0
- data/examples/passing/pending_example.rb +18 -0
- data/examples/passing/predicate_example.rb +25 -0
- data/examples/passing/shared_example_group_example.rb +43 -0
- data/examples/passing/shared_stack_examples.rb +36 -0
- data/examples/passing/simple_matcher_example.rb +29 -0
- data/examples/passing/stack.rb +36 -0
- data/examples/passing/stack_spec.rb +63 -0
- data/examples/passing/stack_spec_with_nested_example_groups.rb +66 -0
- data/examples/passing/stubbing_example.rb +67 -0
- data/examples/passing/yielding_example.rb +31 -0
- data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +85 -0
- data/features-pending/cli/conditional_exclusion.feature +39 -0
- data/features-pending/heckle/heckle.feature +56 -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 +37 -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/init.rb +9 -0
- data/lib/autotest/discover.rb +3 -0
- data/lib/autotest/rspec.rb +54 -0
- data/lib/spec.rb +8 -0
- data/lib/spec/adapters/mock_frameworks/flexmock.rb +24 -0
- data/lib/spec/adapters/mock_frameworks/mocha.rb +25 -0
- 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.rb +1 -0
- data/lib/spec/dsl/main.rb +93 -0
- data/lib/spec/example.rb +164 -0
- 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/expectations.rb +35 -0
- data/lib/spec/expectations/errors.rb +12 -0
- data/lib/spec/expectations/extensions.rb +1 -0
- data/lib/spec/expectations/extensions/kernel.rb +52 -0
- data/lib/spec/expectations/fail_with.rb +45 -0
- data/lib/spec/expectations/handler.rb +50 -0
- data/lib/spec/extensions/instance_exec.rb +31 -0
- data/lib/spec/interop/test.rb +44 -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/matchers.rb +214 -0
- data/lib/spec/matchers/be.rb +249 -0
- data/lib/spec/matchers/be_close.rb +32 -0
- 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 +151 -0
- data/lib/spec/matchers/compatibility.rb +14 -0
- data/lib/spec/matchers/dsl.rb +20 -0
- data/lib/spec/matchers/eql.rb +42 -0
- data/lib/spec/matchers/equal.rb +53 -0
- 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 +35 -0
- data/lib/spec/matchers/have.rb +152 -0
- data/lib/spec/matchers/include.rb +44 -0
- data/lib/spec/matchers/match.rb +21 -0
- 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 +83 -0
- data/lib/spec/matchers/pretty.rb +37 -0
- data/lib/spec/matchers/raise_exception.rb +131 -0
- data/lib/spec/matchers/respond_to.rb +71 -0
- data/lib/spec/matchers/satisfy.rb +47 -0
- data/lib/spec/matchers/simple_matcher.rb +134 -0
- data/lib/spec/matchers/throw_symbol.rb +100 -0
- data/lib/spec/matchers/wrap_expectation.rb +55 -0
- data/lib/spec/mocks.rb +200 -0
- data/lib/spec/mocks/argument_expectation.rb +51 -0
- data/lib/spec/mocks/argument_matchers.rb +237 -0
- data/lib/spec/mocks/error_generator.rb +92 -0
- data/lib/spec/mocks/errors.rb +10 -0
- data/lib/spec/mocks/example_methods.rb +69 -0
- data/lib/spec/mocks/extensions.rb +1 -0
- data/lib/spec/mocks/extensions/object.rb +3 -0
- data/lib/spec/mocks/framework.rb +15 -0
- data/lib/spec/mocks/message_expectation.rb +344 -0
- data/lib/spec/mocks/methods.rb +94 -0
- data/lib/spec/mocks/mock.rb +71 -0
- data/lib/spec/mocks/order_group.rb +29 -0
- data/lib/spec/mocks/proxy.rb +254 -0
- data/lib/spec/mocks/space.rb +28 -0
- data/lib/spec/rake/spectask.rb +230 -0
- data/lib/spec/rake/verify_rcov.rb +52 -0
- data/lib/spec/ruby.rb +9 -0
- data/lib/spec/runner.rb +66 -0
- data/lib/spec/runner/backtrace_tweaker.rb +78 -0
- data/lib/spec/runner/class_and_arguments_parser.rb +14 -0
- data/lib/spec/runner/command_line.rb +15 -0
- 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 +32 -0
- data/lib/spec/runner/example_group_runner.rb +62 -0
- data/lib/spec/runner/extensions/kernel.rb +9 -0
- data/lib/spec/runner/formatter/base_formatter.rb +139 -0
- data/lib/spec/runner/formatter/base_text_formatter.rb +142 -0
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +25 -0
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
- data/lib/spec/runner/formatter/html_formatter.rb +338 -0
- 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 +33 -0
- data/lib/spec/runner/formatter/silent_formatter.rb +10 -0
- data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
- data/lib/spec/runner/formatter/specdoc_formatter.rb +33 -0
- data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
- data/lib/spec/runner/heckle_runner.rb +77 -0
- data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
- data/lib/spec/runner/line_number_query.rb +78 -0
- data/lib/spec/runner/option_parser.rb +225 -0
- data/lib/spec/runner/options.rb +406 -0
- data/lib/spec/runner/reporter.rb +171 -0
- data/lib/spec/stubs/cucumber.rb +5 -0
- data/lib/spec/test/unit.rb +10 -0
- data/lib/spec/version.rb +14 -0
- 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/rspec.gemspec +26 -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.opts +6 -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/example/nested_example_group_spec.rb +71 -0
- 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 +194 -0
- data/spec/spec/expectations/extensions/kernel_spec.rb +45 -0
- data/spec/spec/expectations/fail_with_spec.rb +96 -0
- 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 +50 -0
- 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 +460 -0
- data/spec/spec/matchers/change_spec.rb +349 -0
- data/spec/spec/matchers/compatibility_spec.rb +28 -0
- data/spec/spec/matchers/description_generation_spec.rb +160 -0
- data/spec/spec/matchers/dsl_spec.rb +34 -0
- data/spec/spec/matchers/eql_spec.rb +33 -0
- data/spec/spec/matchers/equal_spec.rb +57 -0
- data/spec/spec/matchers/exist_spec.rb +65 -0
- data/spec/spec/matchers/has_spec.rb +190 -0
- data/spec/spec/matchers/have_spec.rb +381 -0
- data/spec/spec/matchers/include_spec.rb +88 -0
- data/spec/spec/matchers/match_array_spec.rb +115 -0
- data/spec/spec/matchers/match_spec.rb +57 -0
- 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 +191 -0
- data/spec/spec/matchers/pretty_spec.rb +22 -0
- data/spec/spec/matchers/raise_exception_spec.rb +345 -0
- data/spec/spec/matchers/respond_to_spec.rb +116 -0
- data/spec/spec/matchers/satisfy_spec.rb +36 -0
- data/spec/spec/matchers/simple_matcher_spec.rb +100 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +121 -0
- data/spec/spec/mocks/and_yield_spec.rb +117 -0
- data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
- data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
- data/spec/spec/mocks/argument_matchers_spec.rb +19 -0
- data/spec/spec/mocks/at_least_spec.rb +97 -0
- data/spec/spec/mocks/at_most_spec.rb +93 -0
- data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
- data/spec/spec/mocks/bug_report_10263_spec.rb +27 -0
- data/spec/spec/mocks/bug_report_1049_spec.rb +30 -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 +19 -0
- data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
- data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
- data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
- data/spec/spec/mocks/bug_report_830_spec.rb +21 -0
- data/spec/spec/mocks/bug_report_957_spec.rb +22 -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 +94 -0
- data/spec/spec/mocks/mock_space_spec.rb +54 -0
- data/spec/spec/mocks/mock_spec.rb +601 -0
- data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
- data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
- data/spec/spec/mocks/once_counts_spec.rb +53 -0
- data/spec/spec/mocks/options_hash_spec.rb +35 -0
- data/spec/spec/mocks/partial_mock_spec.rb +164 -0
- data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
- data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
- data/spec/spec/mocks/precise_counts_spec.rb +52 -0
- data/spec/spec/mocks/record_messages_spec.rb +26 -0
- 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 +203 -0
- data/spec/spec/mocks/stubbed_message_expectations_spec.rb +26 -0
- data/spec/spec/mocks/twice_counts_spec.rb +67 -0
- data/spec/spec/mocks/unstub_spec.rb +127 -0
- data/spec/spec/package/bin_spec_spec.rb +16 -0
- 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 +162 -0
- data/spec/spec/runner/configuration_spec.rb +320 -0
- data/spec/spec/runner/drb_command_line_spec.rb +146 -0
- 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 +33 -0
- 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_formatted-1.9.2.html +377 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +118 -0
- 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 +149 -0
- data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
- 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_formatted-1.9.2.html +371 -0
- data/spec/spec/runner/formatter/text_mate_formatter_spec.rb +106 -0
- data/spec/spec/runner/heckle_runner_spec.rb +78 -0
- data/spec/spec/runner/heckler_spec.rb +20 -0
- 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 +51 -0
- data/spec/spec/runner/option_parser_spec.rb +552 -0
- data/spec/spec/runner/options_spec.rb +554 -0
- 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 +123 -0
- data/spec/spec/runner/reporter_spec.rb +244 -0
- 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_helper.rb +113 -0
- data/spec/support/macros.rb +29 -0
- data/spec/support/spec_classes.rb +133 -0
- metadata +727 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Mocks
|
|
3
|
+
|
|
4
|
+
class ArgumentExpectation
|
|
5
|
+
attr_reader :args
|
|
6
|
+
|
|
7
|
+
def initialize(args, &block)
|
|
8
|
+
@args = args
|
|
9
|
+
@matchers_block = block
|
|
10
|
+
@match_any_args = false
|
|
11
|
+
@matchers = nil
|
|
12
|
+
|
|
13
|
+
if ArgumentMatchers::AnyArgsMatcher === args.first
|
|
14
|
+
@match_any_args = true
|
|
15
|
+
elsif ArgumentMatchers::NoArgsMatcher === args.first
|
|
16
|
+
@matchers = []
|
|
17
|
+
else
|
|
18
|
+
@matchers = args.collect {|arg| matcher_for(arg)}
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def matcher_for(arg)
|
|
23
|
+
return ArgumentMatchers::MatcherMatcher.new(arg) if is_matcher?(arg)
|
|
24
|
+
return ArgumentMatchers::RegexpMatcher.new(arg) if arg.is_a?(Regexp)
|
|
25
|
+
return ArgumentMatchers::EqualityProxy.new(arg)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def is_matcher?(obj)
|
|
29
|
+
return obj.respond_to?(:matches?) & obj.respond_to?(:description)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def args_match?(given_args)
|
|
33
|
+
match_any_args? || matchers_block_matches?(given_args) || matchers_match?(given_args)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def matchers_block_matches?(given_args)
|
|
37
|
+
@matchers_block ? @matchers_block.call(*given_args) : nil
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def matchers_match?(given_args)
|
|
41
|
+
@matchers == given_args
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def match_any_args?
|
|
45
|
+
@match_any_args
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Mocks
|
|
3
|
+
|
|
4
|
+
# ArgumentMatchers are messages that you can include in message
|
|
5
|
+
# expectations to match arguments against a broader check than simple
|
|
6
|
+
# equality.
|
|
7
|
+
#
|
|
8
|
+
# With the exception of any_args() and no_args(), the matchers
|
|
9
|
+
# are all positional - they match against the arg in the given position.
|
|
10
|
+
module ArgumentMatchers
|
|
11
|
+
|
|
12
|
+
class AnyArgsMatcher
|
|
13
|
+
def description
|
|
14
|
+
"any args"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class NoArgsMatcher
|
|
19
|
+
def description
|
|
20
|
+
"no args"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class AnyArgMatcher
|
|
25
|
+
def initialize(ignore)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def ==(other)
|
|
29
|
+
true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def description
|
|
33
|
+
"anything"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class RegexpMatcher
|
|
38
|
+
def initialize(regexp)
|
|
39
|
+
@regexp = regexp
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def ==(value)
|
|
43
|
+
return value =~ @regexp unless value.is_a?(Regexp)
|
|
44
|
+
value == @regexp
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
class BooleanMatcher
|
|
49
|
+
def initialize(ignore)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def ==(value)
|
|
53
|
+
TrueClass === value || FalseClass === value
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
class HashIncludingMatcher
|
|
58
|
+
def initialize(expected)
|
|
59
|
+
@expected = expected
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def ==(actual)
|
|
63
|
+
@expected.each do | key, value |
|
|
64
|
+
return false unless actual.has_key?(key) && value == actual[key]
|
|
65
|
+
end
|
|
66
|
+
true
|
|
67
|
+
rescue NoMethodError => ex
|
|
68
|
+
return false
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def description
|
|
72
|
+
"hash_including(#{@expected.inspect.sub(/^\{/,"").sub(/\}$/,"")})"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
class HashNotIncludingMatcher
|
|
77
|
+
def initialize(expected)
|
|
78
|
+
@expected = expected
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def ==(actual)
|
|
82
|
+
@expected.each do | key, value |
|
|
83
|
+
return false if actual.has_key?(key) && value == actual[key]
|
|
84
|
+
end
|
|
85
|
+
true
|
|
86
|
+
rescue NoMethodError => ex
|
|
87
|
+
return false
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def description
|
|
91
|
+
"hash_not_including(#{@expected.inspect.sub(/^\{/,"").sub(/\}$/,"")})"
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
class DuckTypeMatcher
|
|
96
|
+
def initialize(*methods_to_respond_to)
|
|
97
|
+
@methods_to_respond_to = methods_to_respond_to
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def ==(value)
|
|
101
|
+
@methods_to_respond_to.all? { |sym| value.respond_to?(sym) }
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
class MatcherMatcher
|
|
106
|
+
def initialize(matcher)
|
|
107
|
+
@matcher = matcher
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def ==(value)
|
|
111
|
+
@matcher.matches?(value)
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
class EqualityProxy
|
|
116
|
+
def initialize(given)
|
|
117
|
+
@given = given
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def ==(expected)
|
|
121
|
+
@given == expected
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
class InstanceOf
|
|
126
|
+
def initialize(klass)
|
|
127
|
+
@klass = klass
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def ==(actual)
|
|
131
|
+
actual.instance_of?(@klass)
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
class KindOf
|
|
136
|
+
def initialize(klass)
|
|
137
|
+
@klass = klass
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def ==(actual)
|
|
141
|
+
actual.kind_of?(@klass)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# :call-seq:
|
|
146
|
+
# object.should_receive(:message).with(no_args())
|
|
147
|
+
#
|
|
148
|
+
# Passes if no arguments are passed along with the message
|
|
149
|
+
def no_args
|
|
150
|
+
NoArgsMatcher.new
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# :call-seq:
|
|
154
|
+
# object.should_receive(:message).with(any_args())
|
|
155
|
+
#
|
|
156
|
+
# Passes if object receives :message with any args at all. This is
|
|
157
|
+
# really a more explicit variation of object.should_receive(:message)
|
|
158
|
+
def any_args
|
|
159
|
+
AnyArgsMatcher.new
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# :call-seq:
|
|
163
|
+
# object.should_receive(:message).with(anything())
|
|
164
|
+
#
|
|
165
|
+
# Passes as long as there is an argument.
|
|
166
|
+
def anything
|
|
167
|
+
AnyArgMatcher.new(nil)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# :call-seq:
|
|
171
|
+
# object.should_receive(:message).with(duck_type(:hello))
|
|
172
|
+
# object.should_receive(:message).with(duck_type(:hello, :goodbye))
|
|
173
|
+
#
|
|
174
|
+
# Passes if the argument responds to the specified messages.
|
|
175
|
+
#
|
|
176
|
+
# == Examples
|
|
177
|
+
#
|
|
178
|
+
# array = []
|
|
179
|
+
# display = mock('display')
|
|
180
|
+
# display.should_receive(:present_names).with(duck_type(:length, :each))
|
|
181
|
+
# => passes
|
|
182
|
+
def duck_type(*args)
|
|
183
|
+
DuckTypeMatcher.new(*args)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# :call-seq:
|
|
187
|
+
# object.should_receive(:message).with(boolean())
|
|
188
|
+
#
|
|
189
|
+
# Passes if the argument is boolean.
|
|
190
|
+
def boolean
|
|
191
|
+
BooleanMatcher.new(nil)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# :call-seq:
|
|
195
|
+
# object.should_receive(:message).with(hash_including(:key => val))
|
|
196
|
+
# object.should_receive(:message).with(hash_including(:key))
|
|
197
|
+
# object.should_receive(:message).with(hash_including(:key, :key2 => val2))
|
|
198
|
+
# Passes if the argument is a hash that includes the specified key(s) or key/value
|
|
199
|
+
# pairs. If the hash includes other keys, it will still pass.
|
|
200
|
+
def hash_including(*args)
|
|
201
|
+
HashIncludingMatcher.new(anythingize_lonely_keys(*args))
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# :call-seq:
|
|
205
|
+
# object.should_receive(:message).with(hash_not_including(:key => val))
|
|
206
|
+
# object.should_receive(:message).with(hash_not_including(:key))
|
|
207
|
+
# object.should_receive(:message).with(hash_not_including(:key, :key2 => :val2))
|
|
208
|
+
#
|
|
209
|
+
# Passes if the argument is a hash that doesn't include the specified key(s) or key/value
|
|
210
|
+
def hash_not_including(*args)
|
|
211
|
+
HashNotIncludingMatcher.new(anythingize_lonely_keys(*args))
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Passes if arg.instance_of?(klass)
|
|
215
|
+
def instance_of(klass)
|
|
216
|
+
InstanceOf.new(klass)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
alias_method :an_instance_of, :instance_of
|
|
220
|
+
|
|
221
|
+
# Passes if arg.kind_of?(klass)
|
|
222
|
+
def kind_of(klass)
|
|
223
|
+
KindOf.new(klass)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
alias_method :a_kind_of, :kind_of
|
|
227
|
+
|
|
228
|
+
private
|
|
229
|
+
|
|
230
|
+
def anythingize_lonely_keys(*args)
|
|
231
|
+
hash = args.last.class == Hash ? args.delete_at(-1) : {}
|
|
232
|
+
args.each { | arg | hash[arg] = anything }
|
|
233
|
+
hash
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Mocks
|
|
3
|
+
class ErrorGenerator
|
|
4
|
+
attr_writer :opts
|
|
5
|
+
|
|
6
|
+
def initialize(target, name, options={})
|
|
7
|
+
@declared_as = options[:__declared_as] || 'Mock'
|
|
8
|
+
@target = target
|
|
9
|
+
@name = name
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def opts
|
|
13
|
+
@opts ||= {}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def raise_unexpected_message_error(sym, *args)
|
|
17
|
+
__raise "#{intro} received unexpected message :#{sym}#{arg_message(*args)}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def raise_unexpected_message_args_error(expectation, *args)
|
|
21
|
+
expected_args = format_args(*expectation.expected_args)
|
|
22
|
+
actual_args = args.empty? ? "(no args)" : format_args(*args)
|
|
23
|
+
__raise "#{intro} received #{expectation.sym.inspect} with unexpected arguments\n expected: #{expected_args}\n got: #{actual_args}"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def raise_expectation_error(sym, expected_received_count, actual_received_count, *args)
|
|
27
|
+
__raise "#{intro} expected :#{sym}#{arg_message(*args)} #{count_message(expected_received_count)}, but received it #{count_message(actual_received_count)}"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def raise_out_of_order_error(sym)
|
|
31
|
+
__raise "#{intro} received :#{sym} out of order"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def raise_block_failed_error(sym, detail)
|
|
35
|
+
__raise "#{intro} received :#{sym} but passed block failed with: #{detail}"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def raise_missing_block_error(args_to_yield)
|
|
39
|
+
__raise "#{intro} asked to yield |#{arg_list(*args_to_yield)}| but no block was passed"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def raise_wrong_arity_error(args_to_yield, arity)
|
|
43
|
+
__raise "#{intro} yielded |#{arg_list(*args_to_yield)}| to block with arity of #{arity}"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
|
|
48
|
+
def intro
|
|
49
|
+
if @name
|
|
50
|
+
"#{@declared_as} #{@name.inspect}"
|
|
51
|
+
elsif Mock === @target
|
|
52
|
+
@declared_as
|
|
53
|
+
elsif Class === @target
|
|
54
|
+
"<#{@target.inspect} (class)>"
|
|
55
|
+
elsif @target
|
|
56
|
+
@target
|
|
57
|
+
else
|
|
58
|
+
"nil"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def __raise(message)
|
|
63
|
+
message = opts[:message] unless opts[:message].nil?
|
|
64
|
+
Kernel::raise(Spec::Mocks::MockExpectationError, message)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def arg_message(*args)
|
|
68
|
+
" with " + format_args(*args)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def format_args(*args)
|
|
72
|
+
args.empty? ? "(no args)" : "(" + arg_list(*args) + ")"
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def arg_list(*args)
|
|
76
|
+
args.collect {|arg| arg.respond_to?(:description) ? arg.description : arg.inspect}.join(", ")
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def count_message(count)
|
|
80
|
+
return "at least #{pretty_print(count.abs)}" if count < 0
|
|
81
|
+
return pretty_print(count)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def pretty_print(count)
|
|
85
|
+
return "once" if count == 1
|
|
86
|
+
return "twice" if count == 2
|
|
87
|
+
return "#{count} times"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Mocks
|
|
3
|
+
module ExampleMethods
|
|
4
|
+
include Spec::Mocks::ArgumentMatchers
|
|
5
|
+
|
|
6
|
+
# Shortcut for creating an instance of Spec::Mocks::Mock.
|
|
7
|
+
#
|
|
8
|
+
# +name+ is used for failure reporting, so you should use the
|
|
9
|
+
# role that the double is playing in the example.
|
|
10
|
+
#
|
|
11
|
+
# +stubs_and_options+ lets you assign options and stub values
|
|
12
|
+
# at the same time. The only option available is :null_object.
|
|
13
|
+
# Anything else is treated as a stub value.
|
|
14
|
+
#
|
|
15
|
+
# == Examples
|
|
16
|
+
#
|
|
17
|
+
# thing = double("thing", :a => "A")
|
|
18
|
+
# thing.a == "A" => true
|
|
19
|
+
#
|
|
20
|
+
# person = double("thing", :name => "Joe", :email => "joe@domain.com")
|
|
21
|
+
# person.name => "Joe"
|
|
22
|
+
# person.email => "joe@domain.com"
|
|
23
|
+
def double(*args)
|
|
24
|
+
__declare_double('Double', *args)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Alias for double
|
|
28
|
+
def mock(*args)
|
|
29
|
+
__declare_double('Mock', *args)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Alias for double
|
|
33
|
+
def stub(*args)
|
|
34
|
+
__declare_double('Stub', *args)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def __declare_double(declared_as, *args) # :nodoc:
|
|
38
|
+
args << {} unless Hash === args.last
|
|
39
|
+
args.last[:__declared_as] = declared_as
|
|
40
|
+
Spec::Mocks::Mock.new(*args)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# DEPRECATED - use double('name').as_null_object instead
|
|
44
|
+
#
|
|
45
|
+
# Shortcut for creating a mock object that will return itself in response
|
|
46
|
+
# to any message it receives that it hasn't been explicitly instructed
|
|
47
|
+
# to respond to.
|
|
48
|
+
def stub_everything(name = 'stub')
|
|
49
|
+
Spec.warn(<<-WARNING)
|
|
50
|
+
|
|
51
|
+
DEPRECATION: stub_everything('#{name}') is deprecated and will be removed
|
|
52
|
+
from a future version of rspec. Please use double('#{name}').as_null_object
|
|
53
|
+
(or stub('#{name}').as_null_object or mock('#{name}').as_null_object instead.
|
|
54
|
+
|
|
55
|
+
WARNING
|
|
56
|
+
mock(name, :null_object => true)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Disables warning messages about expectations being set on nil.
|
|
60
|
+
#
|
|
61
|
+
# By default warning messages are issued when expectations are set on nil. This is to
|
|
62
|
+
# prevent false-positives and to catch potential bugs early on.
|
|
63
|
+
def allow_message_expectations_on_nil
|
|
64
|
+
Proxy.allow_message_expectations_on_nil
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|