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,287 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
|
|
4
|
+
module ExampleGroupMethods
|
|
5
|
+
class << self
|
|
6
|
+
attr_accessor :matcher_class
|
|
7
|
+
|
|
8
|
+
def build_description_from(*args)
|
|
9
|
+
text = args.inject("") do |description, arg|
|
|
10
|
+
description << " " unless (description == "" || arg.to_s =~ /^(\s|\.|#)/)
|
|
11
|
+
description << arg.to_s
|
|
12
|
+
end
|
|
13
|
+
text == "" ? nil : text
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
include Spec::Example::BeforeAndAfterHooks
|
|
18
|
+
include Spec::Example::Subject::ExampleGroupMethods
|
|
19
|
+
include Spec::Example::PredicateMatchers
|
|
20
|
+
include Spec::Example::ArgsAndOptions
|
|
21
|
+
|
|
22
|
+
attr_reader :location
|
|
23
|
+
|
|
24
|
+
def options # :nodoc:
|
|
25
|
+
@options ||= {}
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def inherited(klass) # :nodoc:
|
|
29
|
+
super
|
|
30
|
+
ExampleGroupFactory.register_example_group(klass)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Makes the describe/it syntax available from a class. For example:
|
|
34
|
+
#
|
|
35
|
+
# class StackSpec < Spec::ExampleGroup
|
|
36
|
+
# describe Stack, "with no elements"
|
|
37
|
+
#
|
|
38
|
+
# before
|
|
39
|
+
# @stack = Stack.new
|
|
40
|
+
# end
|
|
41
|
+
#
|
|
42
|
+
# it "should raise on pop" do
|
|
43
|
+
# lambda{ @stack.pop }.should raise_error
|
|
44
|
+
# end
|
|
45
|
+
# end
|
|
46
|
+
#
|
|
47
|
+
def describe(*args, &example_group_block)
|
|
48
|
+
raise Spec::Example::NoDescriptionError.new("example group", caller(0)[1]) if args.empty?
|
|
49
|
+
if example_group_block
|
|
50
|
+
options = add_options(args)
|
|
51
|
+
set_location(options, caller(0)[1])
|
|
52
|
+
if options[:shared]
|
|
53
|
+
ExampleGroupFactory.create_shared_example_group(*args, &example_group_block)
|
|
54
|
+
else
|
|
55
|
+
subclass(*args, &example_group_block)
|
|
56
|
+
end
|
|
57
|
+
else
|
|
58
|
+
set_description(*args)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
alias :context :describe
|
|
62
|
+
|
|
63
|
+
# Use this to pull in examples from shared example groups.
|
|
64
|
+
def it_should_behave_like(*shared_example_groups)
|
|
65
|
+
shared_example_groups.each do |group|
|
|
66
|
+
include_shared_example_group(group)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Creates an instance of the current example group class and adds it to
|
|
71
|
+
# a collection of examples of the current example group.
|
|
72
|
+
def example(description=nil, options={}, backtrace=nil, &implementation)
|
|
73
|
+
example_proxy = ExampleProxy.new(description, options, backtrace || caller(0)[1])
|
|
74
|
+
example_proxies << example_proxy
|
|
75
|
+
example_implementations[example_proxy] = implementation || pending_implementation
|
|
76
|
+
example_proxy
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def pending_implementation
|
|
80
|
+
lambda {|*args| raise(Spec::Example::NotYetImplementedError) }
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
alias_method :it, :example
|
|
84
|
+
alias_method :specify, :example
|
|
85
|
+
|
|
86
|
+
# Use this to temporarily disable an example.
|
|
87
|
+
def xexample(description=nil, opts={}, &block)
|
|
88
|
+
Kernel.warn("Example disabled: #{description}")
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
alias_method :xit, :xexample
|
|
92
|
+
alias_method :xspecify, :xexample
|
|
93
|
+
|
|
94
|
+
def run(run_options)
|
|
95
|
+
examples = examples_to_run(run_options)
|
|
96
|
+
notify(run_options.reporter) unless examples.empty?
|
|
97
|
+
return true if examples.empty?
|
|
98
|
+
return dry_run(examples, run_options) if run_options.dry_run?
|
|
99
|
+
|
|
100
|
+
define_methods_from_predicate_matchers
|
|
101
|
+
|
|
102
|
+
success, before_all_instance_variables = run_before_all(run_options)
|
|
103
|
+
success, after_all_instance_variables = run_examples(success, before_all_instance_variables, examples, run_options)
|
|
104
|
+
success = run_after_all(success, after_all_instance_variables, run_options)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def set_description(*args)
|
|
108
|
+
@description_args, @options = args_and_options(*args)
|
|
109
|
+
@backtrace = caller(1)
|
|
110
|
+
@location = File.expand_path(options[:location]) if options[:location]
|
|
111
|
+
self
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def notify(reporter) # :nodoc:
|
|
115
|
+
reporter.example_group_started(ExampleGroupProxy.new(self))
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def description
|
|
119
|
+
@description ||= ExampleGroupMethods.build_description_from(*description_parts) || to_s
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def described_type
|
|
123
|
+
@described_type ||= description_parts.reverse.find {|part| part.is_a?(Module)}
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def described_class
|
|
127
|
+
@described_class ||= Class === described_type ? described_type : nil
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def description_args
|
|
131
|
+
@description_args ||= []
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def description_parts #:nodoc:
|
|
135
|
+
@description_parts ||= example_group_hierarchy.inject([]) do |parts, example_group_class|
|
|
136
|
+
[parts << example_group_class.description_args].flatten
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def example_proxies # :nodoc:
|
|
141
|
+
@example_proxies ||= []
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def example_implementations # :nodoc:
|
|
145
|
+
@example_implementations ||= {}
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def examples(run_options=nil) #:nodoc:
|
|
149
|
+
(run_options && run_options.reverse) ? example_proxies.reverse : example_proxies
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def number_of_examples #:nodoc:
|
|
153
|
+
example_proxies.length
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def example_group_hierarchy
|
|
157
|
+
@example_group_hierarchy ||= ExampleGroupHierarchy.new(self)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def nested_descriptions
|
|
161
|
+
example_group_hierarchy.nested_descriptions
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def include_constants_in(mod)
|
|
165
|
+
include mod if (Spec::Ruby.version.to_f >= 1.9) & (Module === mod) & !(Class === mod)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def let(name, &block)
|
|
169
|
+
define_method name do
|
|
170
|
+
@assignments ||= {}
|
|
171
|
+
@assignments[name] ||= instance_eval(&block)
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def let!(name, &block)
|
|
176
|
+
let(name, &block)
|
|
177
|
+
before { __send__(name) }
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
private
|
|
181
|
+
|
|
182
|
+
def subclass(*args, &example_group_block)
|
|
183
|
+
@class_count ||= 0
|
|
184
|
+
@class_count += 1
|
|
185
|
+
klass = const_set("Subclass_#{@class_count}", Class.new(self))
|
|
186
|
+
klass.set_description(*args)
|
|
187
|
+
klass.include_constants_in(args.last[:scope])
|
|
188
|
+
klass.module_eval(&example_group_block)
|
|
189
|
+
klass
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def dry_run(examples, run_options)
|
|
193
|
+
examples.each do |example|
|
|
194
|
+
run_options.reporter.example_started(example)
|
|
195
|
+
run_options.reporter.example_finished(example)
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def run_before_all(run_options)
|
|
200
|
+
return [true,{}] if example_group_hierarchy.before_all_parts.empty?
|
|
201
|
+
example_proxy = ExampleProxy.new("before(:all)")
|
|
202
|
+
before_all = new(example_proxy)
|
|
203
|
+
begin
|
|
204
|
+
example_group_hierarchy.run_before_all(before_all)
|
|
205
|
+
return [true, before_all.instance_variable_hash]
|
|
206
|
+
rescue Exception => e
|
|
207
|
+
run_options.reporter.example_failed(example_proxy, e)
|
|
208
|
+
return [false, before_all.instance_variable_hash]
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def run_examples(success, instance_variables, examples, run_options)
|
|
213
|
+
return [success, instance_variables] unless success
|
|
214
|
+
|
|
215
|
+
after_all_instance_variables = instance_variables
|
|
216
|
+
|
|
217
|
+
examples.each do |example|
|
|
218
|
+
example_group_instance = new(example, &example_implementations[example])
|
|
219
|
+
success &= example_group_instance.execute(run_options, instance_variables)
|
|
220
|
+
after_all_instance_variables = example_group_instance.instance_variable_hash
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
return [success, after_all_instance_variables]
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def run_after_all(success, instance_variables, run_options)
|
|
227
|
+
return success if example_group_hierarchy.after_all_parts.empty?
|
|
228
|
+
example_proxy = ExampleProxy.new("after(:all)")
|
|
229
|
+
after_all = new(example_proxy)
|
|
230
|
+
after_all.set_instance_variables_from_hash(instance_variables)
|
|
231
|
+
example_group_hierarchy.run_after_all(after_all)
|
|
232
|
+
success
|
|
233
|
+
rescue Exception => e
|
|
234
|
+
run_options.reporter.example_failed(example_proxy, e)
|
|
235
|
+
false
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def examples_to_run(run_options)
|
|
239
|
+
return example_proxies unless examples_were_specified?(run_options)
|
|
240
|
+
if run_options.line_number_requested?
|
|
241
|
+
if location =~ /:#{run_options.example_line}:?/
|
|
242
|
+
example_proxies
|
|
243
|
+
else
|
|
244
|
+
example_proxies.select {|proxy| proxy.location =~ /:#{run_options.example_line}:?/}
|
|
245
|
+
end
|
|
246
|
+
else
|
|
247
|
+
example_proxies.reject do |proxy|
|
|
248
|
+
matcher = ExampleGroupMethods.matcher_class.
|
|
249
|
+
new(description.to_s, proxy.description)
|
|
250
|
+
!matcher.matches?(run_options.examples)
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def examples_were_specified?(run_options)
|
|
256
|
+
!run_options.examples.empty?
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
def method_added(name) # :nodoc:
|
|
260
|
+
example(name.to_s, {}, caller(0)[1]) {__send__ name.to_s} if example_method?(name.to_s)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def example_method?(method_name)
|
|
264
|
+
should_method?(method_name)
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def should_method?(method_name)
|
|
268
|
+
!(method_name =~ /^should(_not)?$/) &&
|
|
269
|
+
method_name =~ /^should/ &&
|
|
270
|
+
instance_method(method_name).arity < 1
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def include_shared_example_group(shared_example_group)
|
|
274
|
+
case shared_example_group
|
|
275
|
+
when SharedExampleGroup
|
|
276
|
+
include shared_example_group
|
|
277
|
+
else
|
|
278
|
+
unless example_group = SharedExampleGroup.find(shared_example_group)
|
|
279
|
+
raise RuntimeError.new("Shared Example Group '#{shared_example_group}' can not be found")
|
|
280
|
+
end
|
|
281
|
+
include(example_group)
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
end
|
|
287
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
# Lightweight proxy for an example group. This is the object that is passed
|
|
4
|
+
# to Spec::Runner::Formatter::BaseFormatter#example_group_started
|
|
5
|
+
class ExampleGroupProxy
|
|
6
|
+
|
|
7
|
+
def initialize(example_group) # :nodoc:
|
|
8
|
+
@description = example_group.description
|
|
9
|
+
@nested_descriptions = example_group.nested_descriptions
|
|
10
|
+
@examples = example_group.example_proxies
|
|
11
|
+
@location = example_group.location
|
|
12
|
+
@backtrace = example_group.location # deprecated - see the backtrace method below
|
|
13
|
+
@options = example_group.options.dup
|
|
14
|
+
@options.delete(:location)
|
|
15
|
+
@options.delete(:scope)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Optional hash passed to the example group declaration. Note that RSpec uses
|
|
19
|
+
# this hash internally and reserves the keys :location and :scope for its own
|
|
20
|
+
# use (and removes them from this hash)
|
|
21
|
+
attr_reader :options
|
|
22
|
+
|
|
23
|
+
# This is the description passed to the <tt>describe()</tt> method or any
|
|
24
|
+
# of its aliases
|
|
25
|
+
attr_reader :description
|
|
26
|
+
|
|
27
|
+
# Used by Spec::Runner::Formatter::NestedTextFormatter to access the
|
|
28
|
+
# description of each example group in a nested group separately.
|
|
29
|
+
attr_reader :nested_descriptions
|
|
30
|
+
|
|
31
|
+
# A collection of ExampleGroupProxy objects, one for each example
|
|
32
|
+
# declared in this group.
|
|
33
|
+
attr_reader :examples
|
|
34
|
+
|
|
35
|
+
# The file and line number at which the proxied example group
|
|
36
|
+
# was declared. This is extracted from <tt>caller</tt>, and is therefore
|
|
37
|
+
# formatted as an individual line in a backtrace.
|
|
38
|
+
attr_reader :location
|
|
39
|
+
|
|
40
|
+
# Deprecated - use location() instead
|
|
41
|
+
def backtrace
|
|
42
|
+
Spec::deprecate("ExampleGroupProxy#backtrace","ExampleGroupProxy#location")
|
|
43
|
+
@backtrace
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Deprecated - just use gsub on the description instead.
|
|
47
|
+
def filtered_description(regexp)
|
|
48
|
+
Spec::deprecate("ExampleGroupProxy#filtered_description","gsub (or similar) to modify ExampleGroupProxy#description")
|
|
49
|
+
ExampleGroupMethods.build_description_from(
|
|
50
|
+
*nested_descriptions.collect do |description|
|
|
51
|
+
description =~ regexp ? description.gsub($1, "") : description
|
|
52
|
+
end
|
|
53
|
+
)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def ==(other) # :nodoc:
|
|
57
|
+
other.description == description
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
class ExampleMatcher
|
|
4
|
+
def initialize(example_group_description, example_name)
|
|
5
|
+
@example_group_description = example_group_description
|
|
6
|
+
@example_name = example_name
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def matches?(specified_examples)
|
|
10
|
+
specified_examples.any? do |specified_example|
|
|
11
|
+
matches_literal_example?(specified_example) || matches_example_not_considering_modules?(specified_example)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
protected
|
|
16
|
+
def matches_literal_example?(specified_example)
|
|
17
|
+
specified_example =~ /(^#{example_group_regex} #{example_regexp}$|^#{example_group_regex}$|^#{example_group_with_before_all_regexp}$|^#{example_regexp}$)/
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def matches_example_not_considering_modules?(specified_example)
|
|
21
|
+
specified_example =~ /(^#{example_group_regex_not_considering_modules} #{example_regexp}$|^#{example_group_regex_not_considering_modules}$|^#{example_regexp}$)/
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def example_group_regex
|
|
25
|
+
Regexp.escape(@example_group_description)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def example_group_with_before_all_regexp
|
|
29
|
+
Regexp.escape("#{@example_group_description} before(:all)")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def example_group_regex_not_considering_modules
|
|
33
|
+
Regexp.escape(@example_group_description.split('::').last)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def example_regexp
|
|
37
|
+
Regexp.escape(@example_name) if @example_name
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
ExampleGroupMethods.matcher_class = ExampleMatcher
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Example
|
|
3
|
+
module ExampleMethods
|
|
4
|
+
|
|
5
|
+
extend Spec::Example::ModuleReopeningFix
|
|
6
|
+
include Spec::Example::Subject::ExampleMethods
|
|
7
|
+
|
|
8
|
+
def violated(message="")
|
|
9
|
+
raise Spec::Expectations::ExpectationNotMetError.new(message)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Declared description for this example:
|
|
13
|
+
#
|
|
14
|
+
# describe Account do
|
|
15
|
+
# it "should start with a balance of 0" do
|
|
16
|
+
# ...
|
|
17
|
+
#
|
|
18
|
+
# description
|
|
19
|
+
# => "should start with a balance of 0"
|
|
20
|
+
def description
|
|
21
|
+
if description = @_proxy.description || ::Spec::Matchers.generated_description
|
|
22
|
+
description
|
|
23
|
+
else
|
|
24
|
+
Spec.warn Spec::Example::NoDescriptionError.message("example", @_proxy.location)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def options # :nodoc:
|
|
29
|
+
@_proxy.options
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def execute(run_options, instance_variables) # :nodoc:
|
|
33
|
+
run_options.reporter.example_started(@_proxy)
|
|
34
|
+
set_instance_variables_from_hash(instance_variables)
|
|
35
|
+
|
|
36
|
+
execution_error = nil
|
|
37
|
+
Timeout.timeout(run_options.timeout) do
|
|
38
|
+
begin
|
|
39
|
+
before_each_example
|
|
40
|
+
instance_eval(&@_implementation)
|
|
41
|
+
rescue Interrupt
|
|
42
|
+
exit 1
|
|
43
|
+
rescue Exception => e
|
|
44
|
+
execution_error ||= e
|
|
45
|
+
end
|
|
46
|
+
begin
|
|
47
|
+
after_each_example
|
|
48
|
+
rescue Interrupt
|
|
49
|
+
exit 1
|
|
50
|
+
rescue Exception => e
|
|
51
|
+
execution_error ||= e
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
run_options.reporter.example_finished(@_proxy.update(description), execution_error)
|
|
56
|
+
success = execution_error.nil? || ExamplePendingError === execution_error
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
module BlockAliases
|
|
60
|
+
alias_method :to, :should
|
|
61
|
+
alias_method :to_not, :should_not
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Extends the submitted block with aliases to and to_not
|
|
65
|
+
# for should and should_not. Allows expectations like this:
|
|
66
|
+
#
|
|
67
|
+
# expect { this_block }.to change{this.expression}.from(old_value).to(new_value)
|
|
68
|
+
# expect { this_block }.to raise_error
|
|
69
|
+
def expect(&block)
|
|
70
|
+
block.extend BlockAliases
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def eval_each_fail_fast(blocks) # :nodoc:
|
|
74
|
+
blocks.each {|block| instance_eval(&block)}
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def eval_each_fail_slow(blocks) # :nodoc:
|
|
78
|
+
first_exception = nil
|
|
79
|
+
blocks.each do |block|
|
|
80
|
+
begin
|
|
81
|
+
instance_eval(&block)
|
|
82
|
+
rescue Exception => e
|
|
83
|
+
first_exception ||= e
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
raise first_exception if first_exception
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def instance_variable_hash # :nodoc:
|
|
90
|
+
instance_variables.inject({}) do |variable_hash, variable_name|
|
|
91
|
+
variable_hash[variable_name] = instance_variable_get(variable_name)
|
|
92
|
+
variable_hash
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def set_instance_variables_from_hash(ivars) # :nodoc:
|
|
97
|
+
ivars.each do |variable_name, value|
|
|
98
|
+
# Ruby 1.9 requires variable.to_s on the next line
|
|
99
|
+
unless ['@_proxy', '@_implementation', '@method_name'].include?(variable_name.to_s)
|
|
100
|
+
instance_variable_set variable_name, value
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Run all the before(:each) blocks for this example
|
|
106
|
+
def run_before_each
|
|
107
|
+
example_group_hierarchy.run_before_each(self)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Run all the after(:each) blocks for this example
|
|
111
|
+
def run_after_each
|
|
112
|
+
example_group_hierarchy.run_after_each(self)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def initialize(example_proxy, &implementation)
|
|
116
|
+
@_proxy = example_proxy
|
|
117
|
+
@_implementation = implementation
|
|
118
|
+
@_backtrace = caller
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
private
|
|
122
|
+
|
|
123
|
+
include Matchers
|
|
124
|
+
include Pending
|
|
125
|
+
|
|
126
|
+
def before_each_example
|
|
127
|
+
setup_mocks_for_rspec
|
|
128
|
+
run_before_each
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def after_each_example
|
|
132
|
+
run_after_each
|
|
133
|
+
verify_mocks_for_rspec
|
|
134
|
+
ensure
|
|
135
|
+
teardown_mocks_for_rspec
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def described_class
|
|
139
|
+
self.class.described_class
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def description_args
|
|
143
|
+
self.class.description_args
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def example_group_hierarchy
|
|
147
|
+
self.class.example_group_hierarchy
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|