dchelimsky-rspec 1.1.10
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/History.txt +1192 -0
- data/License.txt +22 -0
- data/Manifest.txt +403 -0
- data/README.txt +39 -0
- data/Rakefile +90 -0
- data/TODO.txt +10 -0
- data/bin/autospec +4 -0
- data/bin/spec +4 -0
- data/examples/pure/autogenerated_docstrings_example.rb +19 -0
- data/examples/pure/before_and_after_example.rb +40 -0
- data/examples/pure/behave_as_example.rb +45 -0
- data/examples/pure/custom_expectation_matchers.rb +54 -0
- data/examples/pure/custom_formatter.rb +12 -0
- data/examples/pure/dynamic_spec.rb +9 -0
- data/examples/pure/file_accessor.rb +19 -0
- data/examples/pure/file_accessor_spec.rb +38 -0
- data/examples/pure/greeter_spec.rb +31 -0
- data/examples/pure/helper_method_example.rb +14 -0
- data/examples/pure/io_processor.rb +8 -0
- data/examples/pure/io_processor_spec.rb +21 -0
- data/examples/pure/legacy_spec.rb +11 -0
- data/examples/pure/mocking_example.rb +27 -0
- data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
- data/examples/pure/nested_classes_example.rb +36 -0
- data/examples/pure/partial_mock_example.rb +29 -0
- data/examples/pure/pending_example.rb +20 -0
- data/examples/pure/predicate_example.rb +27 -0
- data/examples/pure/priority.txt +1 -0
- data/examples/pure/shared_example_group_example.rb +81 -0
- data/examples/pure/shared_stack_examples.rb +38 -0
- data/examples/pure/spec_helper.rb +3 -0
- data/examples/pure/stack.rb +36 -0
- data/examples/pure/stack_spec.rb +63 -0
- data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
- data/examples/pure/stubbing_example.rb +69 -0
- data/examples/pure/yielding_example.rb +33 -0
- data/examples/stories/adder.rb +13 -0
- data/examples/stories/addition +34 -0
- data/examples/stories/addition.rb +9 -0
- data/examples/stories/calculator.rb +65 -0
- data/examples/stories/game-of-life/.loadpath +5 -0
- data/examples/stories/game-of-life/README.txt +21 -0
- data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
- data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
- data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
- data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
- data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
- data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
- data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
- data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
- data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
- data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
- data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
- data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
- data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
- data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
- data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
- data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
- data/examples/stories/game-of-life/life/game.rb +23 -0
- data/examples/stories/game-of-life/life/grid.rb +43 -0
- data/examples/stories/game-of-life/life.rb +3 -0
- data/examples/stories/helper.rb +9 -0
- data/examples/stories/steps/addition_steps.rb +18 -0
- data/failing_examples/README.txt +7 -0
- data/failing_examples/diffing_spec.rb +36 -0
- data/failing_examples/failing_autogenerated_docstrings_example.rb +19 -0
- data/failing_examples/failure_in_setup.rb +10 -0
- data/failing_examples/failure_in_teardown.rb +10 -0
- data/failing_examples/mocking_example.rb +40 -0
- data/failing_examples/mocking_with_flexmock.rb +26 -0
- data/failing_examples/mocking_with_mocha.rb +25 -0
- data/failing_examples/mocking_with_rr.rb +27 -0
- data/failing_examples/partial_mock_example.rb +20 -0
- data/failing_examples/predicate_example.rb +29 -0
- data/failing_examples/raising_example.rb +47 -0
- data/failing_examples/spec_helper.rb +3 -0
- data/failing_examples/syntax_error_example.rb +7 -0
- data/failing_examples/team_spec.rb +44 -0
- data/failing_examples/timeout_behaviour.rb +7 -0
- data/init.rb +9 -0
- data/lib/autotest/discover.rb +3 -0
- data/lib/autotest/rspec.rb +46 -0
- data/lib/spec/adapters/ruby_engine/mri.rb +8 -0
- data/lib/spec/adapters/ruby_engine/rubinius.rb +8 -0
- data/lib/spec/adapters/ruby_engine.rb +26 -0
- data/lib/spec/adapters.rb +1 -0
- data/lib/spec/example/before_and_after_hooks.rb +93 -0
- data/lib/spec/example/configuration.rb +167 -0
- data/lib/spec/example/errors.rb +30 -0
- data/lib/spec/example/example_group.rb +25 -0
- data/lib/spec/example/example_group_factory.rb +81 -0
- data/lib/spec/example/example_group_methods.rb +368 -0
- data/lib/spec/example/example_matcher.rb +44 -0
- data/lib/spec/example/example_methods.rb +105 -0
- data/lib/spec/example/module_reopening_fix.rb +21 -0
- data/lib/spec/example/pending.rb +18 -0
- data/lib/spec/example/shared_example_group.rb +52 -0
- data/lib/spec/example.rb +12 -0
- data/lib/spec/expectations/differs/default.rb +66 -0
- data/lib/spec/expectations/errors.rb +12 -0
- data/lib/spec/expectations/extensions/object.rb +63 -0
- data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
- data/lib/spec/expectations/extensions.rb +2 -0
- data/lib/spec/expectations/handler.rb +52 -0
- data/lib/spec/expectations.rb +56 -0
- data/lib/spec/extensions/class.rb +24 -0
- data/lib/spec/extensions/main.rb +87 -0
- data/lib/spec/extensions/metaclass.rb +7 -0
- data/lib/spec/extensions/object.rb +6 -0
- data/lib/spec/extensions.rb +4 -0
- data/lib/spec/interop/test/unit/autorunner.rb +6 -0
- data/lib/spec/interop/test/unit/testcase.rb +71 -0
- data/lib/spec/interop/test/unit/testresult.rb +6 -0
- data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
- data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
- data/lib/spec/interop/test.rb +12 -0
- data/lib/spec/matchers/be.rb +221 -0
- data/lib/spec/matchers/be_close.rb +37 -0
- data/lib/spec/matchers/change.rb +148 -0
- data/lib/spec/matchers/eql.rb +43 -0
- data/lib/spec/matchers/equal.rb +43 -0
- data/lib/spec/matchers/exist.rb +22 -0
- data/lib/spec/matchers/has.rb +34 -0
- data/lib/spec/matchers/have.rb +150 -0
- data/lib/spec/matchers/include.rb +77 -0
- data/lib/spec/matchers/match.rb +41 -0
- data/lib/spec/matchers/operator_matcher.rb +79 -0
- data/lib/spec/matchers/raise_error.rb +132 -0
- data/lib/spec/matchers/respond_to.rb +46 -0
- data/lib/spec/matchers/satisfy.rb +47 -0
- data/lib/spec/matchers/simple_matcher.rb +132 -0
- data/lib/spec/matchers/throw_symbol.rb +74 -0
- data/lib/spec/matchers.rb +162 -0
- data/lib/spec/mocks/argument_constraints.rb +165 -0
- data/lib/spec/mocks/argument_expectation.rb +49 -0
- data/lib/spec/mocks/error_generator.rb +84 -0
- data/lib/spec/mocks/errors.rb +10 -0
- data/lib/spec/mocks/extensions/object.rb +3 -0
- data/lib/spec/mocks/extensions.rb +1 -0
- data/lib/spec/mocks/framework.rb +15 -0
- data/lib/spec/mocks/message_expectation.rb +331 -0
- data/lib/spec/mocks/methods.rb +51 -0
- data/lib/spec/mocks/mock.rb +56 -0
- data/lib/spec/mocks/order_group.rb +29 -0
- data/lib/spec/mocks/proxy.rb +224 -0
- data/lib/spec/mocks/space.rb +28 -0
- data/lib/spec/mocks/spec_methods.rb +46 -0
- data/lib/spec/mocks.rb +200 -0
- data/lib/spec/rake/spectask.rb +227 -0
- data/lib/spec/rake/verify_rcov.rb +52 -0
- data/lib/spec/runner/backtrace_tweaker.rb +56 -0
- data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
- data/lib/spec/runner/command_line.rb +17 -0
- data/lib/spec/runner/drb_command_line.rb +20 -0
- data/lib/spec/runner/example_group_runner.rb +59 -0
- data/lib/spec/runner/formatter/base_formatter.rb +79 -0
- data/lib/spec/runner/formatter/base_text_formatter.rb +126 -0
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
- data/lib/spec/runner/formatter/html_formatter.rb +337 -0
- data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
- data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
- data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
- data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
- data/lib/spec/runner/formatter/story/html_formatter.rb +174 -0
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +194 -0
- data/lib/spec/runner/formatter/story/progress_bar_formatter.rb +42 -0
- data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
- data/lib/spec/runner/heckle_runner.rb +72 -0
- data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
- data/lib/spec/runner/option_parser.rb +205 -0
- data/lib/spec/runner/options.rb +320 -0
- data/lib/spec/runner/reporter.rb +167 -0
- data/lib/spec/runner/spec_parser.rb +71 -0
- data/lib/spec/runner.rb +213 -0
- data/lib/spec/story/extensions/main.rb +86 -0
- data/lib/spec/story/extensions/regexp.rb +9 -0
- data/lib/spec/story/extensions/string.rb +9 -0
- data/lib/spec/story/extensions.rb +3 -0
- data/lib/spec/story/given_scenario.rb +14 -0
- data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
- data/lib/spec/story/runner/scenario_collector.rb +18 -0
- data/lib/spec/story/runner/scenario_runner.rb +54 -0
- data/lib/spec/story/runner/story_mediator.rb +137 -0
- data/lib/spec/story/runner/story_parser.rb +247 -0
- data/lib/spec/story/runner/story_runner.rb +70 -0
- data/lib/spec/story/runner.rb +59 -0
- data/lib/spec/story/scenario.rb +14 -0
- data/lib/spec/story/step.rb +70 -0
- data/lib/spec/story/step_group.rb +89 -0
- data/lib/spec/story/step_mother.rb +38 -0
- data/lib/spec/story/story.rb +39 -0
- data/lib/spec/story/world.rb +128 -0
- data/lib/spec/story.rb +10 -0
- data/lib/spec/version.rb +13 -0
- data/lib/spec.rb +32 -0
- data/plugins/mock_frameworks/flexmock.rb +23 -0
- data/plugins/mock_frameworks/mocha.rb +19 -0
- data/plugins/mock_frameworks/rr.rb +21 -0
- data/plugins/mock_frameworks/rspec.rb +20 -0
- data/rake_tasks/examples.rake +7 -0
- data/rake_tasks/examples_with_rcov.rake +9 -0
- data/rake_tasks/failing_examples_with_html.rake +9 -0
- data/rake_tasks/verify_rcov.rake +7 -0
- data/rspec.gemspec +42 -0
- data/spec/README.jruby +15 -0
- data/spec/autotest/autotest_helper.rb +6 -0
- data/spec/autotest/autotest_matchers.rb +47 -0
- data/spec/autotest/discover_spec.rb +19 -0
- data/spec/autotest/rspec_spec.rb +150 -0
- data/spec/rspec_suite.rb +6 -0
- data/spec/ruby_forker.rb +13 -0
- data/spec/spec/adapters/ruby_engine_spec.rb +16 -0
- data/spec/spec/example/configuration_spec.rb +296 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
- data/spec/spec/example/example_group_factory_spec.rb +165 -0
- data/spec/spec/example/example_group_methods_spec.rb +584 -0
- data/spec/spec/example/example_group_spec.rb +683 -0
- data/spec/spec/example/example_matcher_spec.rb +96 -0
- data/spec/spec/example/example_methods_spec.rb +169 -0
- data/spec/spec/example/example_runner_spec.rb +194 -0
- data/spec/spec/example/nested_example_group_spec.rb +71 -0
- data/spec/spec/example/pending_module_spec.rb +145 -0
- data/spec/spec/example/predicate_matcher_spec.rb +21 -0
- data/spec/spec/example/shared_example_group_spec.rb +281 -0
- data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
- data/spec/spec/expectations/differs/default_spec.rb +127 -0
- data/spec/spec/expectations/extensions/object_spec.rb +95 -0
- data/spec/spec/expectations/fail_with_spec.rb +71 -0
- data/spec/spec/extensions/main_spec.rb +71 -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/testsuite_adapter_spec_with_test_unit.rb +38 -0
- data/spec/spec/interop/test/unit/spec_spec.rb +52 -0
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
- data/spec/spec/interop/test/unit/testcase_spec.rb +49 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
- data/spec/spec/matchers/be_close_spec.rb +39 -0
- data/spec/spec/matchers/be_spec.rb +248 -0
- data/spec/spec/matchers/change_spec.rb +329 -0
- data/spec/spec/matchers/description_generation_spec.rb +153 -0
- data/spec/spec/matchers/eql_spec.rb +28 -0
- data/spec/spec/matchers/equal_spec.rb +28 -0
- data/spec/spec/matchers/exist_spec.rb +57 -0
- data/spec/spec/matchers/handler_spec.rb +150 -0
- data/spec/spec/matchers/has_spec.rb +63 -0
- data/spec/spec/matchers/have_spec.rb +394 -0
- data/spec/spec/matchers/include_spec.rb +64 -0
- data/spec/spec/matchers/match_spec.rb +37 -0
- data/spec/spec/matchers/matcher_methods_spec.rb +78 -0
- data/spec/spec/matchers/mock_constraint_matchers_spec.rb +24 -0
- data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
- data/spec/spec/matchers/raise_error_spec.rb +315 -0
- data/spec/spec/matchers/respond_to_spec.rb +54 -0
- data/spec/spec/matchers/satisfy_spec.rb +36 -0
- data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +54 -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/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 +24 -0
- data/spec/spec/mocks/bug_report_11545_spec.rb +33 -0
- data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
- data/spec/spec/mocks/bug_report_496.rb +17 -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/failing_mock_argument_constraints_spec.rb +95 -0
- data/spec/spec/mocks/hash_including_matcher_spec.rb +53 -0
- data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
- data/spec/spec/mocks/mock_space_spec.rb +54 -0
- data/spec/spec/mocks/mock_spec.rb +555 -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 +149 -0
- data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +130 -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_spec.rb +188 -0
- data/spec/spec/mocks/twice_counts_spec.rb +67 -0
- data/spec/spec/package/bin_spec_spec.rb +22 -0
- data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
- data/spec/spec/runner/command_line_spec.rb +141 -0
- data/spec/spec/runner/drb_command_line_spec.rb +97 -0
- data/spec/spec/runner/empty_file.txt +0 -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 +112 -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.4.html +365 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +370 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +61 -0
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +318 -0
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +155 -0
- data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
- data/spec/spec/runner/formatter/story/html_formatter_spec.rb +135 -0
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +600 -0
- data/spec/spec/runner/formatter/story/progress_bar_formatter_spec.rb +82 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +370 -0
- data/spec/spec/runner/heckle_runner_spec.rb +78 -0
- data/spec/spec/runner/heckler_spec.rb +13 -0
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
- data/spec/spec/runner/option_parser_spec.rb +421 -0
- data/spec/spec/runner/options_spec.rb +450 -0
- data/spec/spec/runner/output_one_time_fixture.rb +7 -0
- data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
- data/spec/spec/runner/output_one_time_spec.rb +16 -0
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +62 -0
- data/spec/spec/runner/reporter_spec.rb +238 -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/spec.opts +2 -0
- data/spec/spec/runner/spec_drb.opts +1 -0
- data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
- data/spec/spec/runner/spec_parser_spec.rb +85 -0
- data/spec/spec/runner/spec_spaced.opts +2 -0
- data/spec/spec/runner_spec.rb +11 -0
- data/spec/spec/spec_classes.rb +133 -0
- data/spec/spec/story/builders.rb +46 -0
- data/spec/spec/story/extensions/main_spec.rb +161 -0
- data/spec/spec/story/extensions_spec.rb +14 -0
- data/spec/spec/story/given_scenario_spec.rb +27 -0
- data/spec/spec/story/runner/plain_text_story_runner_spec.rb +90 -0
- data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
- data/spec/spec/story/runner/scenario_runner_spec.rb +214 -0
- data/spec/spec/story/runner/story_mediator_spec.rb +143 -0
- data/spec/spec/story/runner/story_parser_spec.rb +401 -0
- data/spec/spec/story/runner/story_runner_spec.rb +294 -0
- data/spec/spec/story/runner_spec.rb +93 -0
- data/spec/spec/story/scenario_spec.rb +18 -0
- data/spec/spec/story/step_group_spec.rb +157 -0
- data/spec/spec/story/step_mother_spec.rb +84 -0
- data/spec/spec/story/step_spec.rb +272 -0
- data/spec/spec/story/story_helper.rb +2 -0
- data/spec/spec/story/story_spec.rb +84 -0
- data/spec/spec/story/world_spec.rb +423 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +77 -0
- data/stories/all.rb +5 -0
- data/stories/configuration/before_blocks.story +21 -0
- data/stories/configuration/stories.rb +7 -0
- data/stories/example_groups/autogenerated_docstrings +45 -0
- data/stories/example_groups/example_group_with_should_methods +17 -0
- data/stories/example_groups/nested_groups +17 -0
- data/stories/example_groups/output +25 -0
- data/stories/example_groups/stories.rb +7 -0
- data/stories/helper.rb +6 -0
- data/stories/interop/examples_and_tests_together +30 -0
- data/stories/interop/stories.rb +7 -0
- data/stories/interop/test_case_with_should_methods +17 -0
- data/stories/mock_framework_integration/stories.rb +7 -0
- data/stories/mock_framework_integration/use_flexmock.story +9 -0
- data/stories/pending_stories/README +3 -0
- data/stories/resources/helpers/cmdline.rb +9 -0
- data/stories/resources/helpers/story_helper.rb +16 -0
- data/stories/resources/matchers/smart_match.rb +37 -0
- data/stories/resources/spec/before_blocks_example.rb +32 -0
- data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
- data/stories/resources/spec/simple_spec.rb +8 -0
- data/stories/resources/spec/spec_with_flexmock.rb +18 -0
- data/stories/resources/steps/running_rspec.rb +50 -0
- data/stories/resources/stories/failing_story.rb +15 -0
- data/stories/resources/test/spec_and_test_together.rb +57 -0
- data/stories/resources/test/test_case_with_should_methods.rb +30 -0
- data/stories/stories/multiline_steps.story +23 -0
- data/stories/stories/steps/multiline_steps.rb +13 -0
- data/stories/stories/stories.rb +6 -0
- data/story_server/prototype/javascripts/builder.js +136 -0
- data/story_server/prototype/javascripts/controls.js +972 -0
- data/story_server/prototype/javascripts/dragdrop.js +976 -0
- data/story_server/prototype/javascripts/effects.js +1117 -0
- data/story_server/prototype/javascripts/prototype.js +4140 -0
- data/story_server/prototype/javascripts/rspec.js +149 -0
- data/story_server/prototype/javascripts/scriptaculous.js +58 -0
- data/story_server/prototype/javascripts/slider.js +276 -0
- data/story_server/prototype/javascripts/sound.js +55 -0
- data/story_server/prototype/javascripts/unittest.js +568 -0
- data/story_server/prototype/lib/server.rb +24 -0
- data/story_server/prototype/stories.html +176 -0
- data/story_server/prototype/stylesheets/rspec.css +136 -0
- data/story_server/prototype/stylesheets/test.css +90 -0
- metadata +495 -0
@@ -0,0 +1,77 @@
|
|
1
|
+
module Spec
|
2
|
+
module Matchers
|
3
|
+
|
4
|
+
class Include #:nodoc:
|
5
|
+
|
6
|
+
def initialize(*expecteds)
|
7
|
+
@expecteds = expecteds
|
8
|
+
end
|
9
|
+
|
10
|
+
def matches?(given)
|
11
|
+
@given = given
|
12
|
+
@expecteds.each do |expected|
|
13
|
+
case given
|
14
|
+
when Hash
|
15
|
+
expected.each_pair do |k,v|
|
16
|
+
return false unless given[k] == v
|
17
|
+
end
|
18
|
+
else
|
19
|
+
return false unless given.include?(expected)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
def failure_message
|
26
|
+
_message
|
27
|
+
end
|
28
|
+
|
29
|
+
def negative_failure_message
|
30
|
+
_message("not ")
|
31
|
+
end
|
32
|
+
|
33
|
+
def description
|
34
|
+
"include #{_pretty_print(@expecteds)}"
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
def _message(maybe_not="")
|
39
|
+
"expected #{@given.inspect} #{maybe_not}to include #{_pretty_print(@expecteds)}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def _pretty_print(array)
|
43
|
+
result = ""
|
44
|
+
array.each_with_index do |item, index|
|
45
|
+
if index < (array.length - 2)
|
46
|
+
result << "#{item.inspect}, "
|
47
|
+
elsif index < (array.length - 1)
|
48
|
+
result << "#{item.inspect} and "
|
49
|
+
else
|
50
|
+
result << "#{item.inspect}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
result
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# :call-seq:
|
58
|
+
# should include(expected)
|
59
|
+
# should_not include(expected)
|
60
|
+
#
|
61
|
+
# Passes if given includes expected. This works for
|
62
|
+
# collections and Strings. You can also pass in multiple args
|
63
|
+
# and it will only pass if all args are found in collection.
|
64
|
+
#
|
65
|
+
# == Examples
|
66
|
+
#
|
67
|
+
# [1,2,3].should include(3)
|
68
|
+
# [1,2,3].should include(2,3) #would pass
|
69
|
+
# [1,2,3].should include(2,3,4) #would fail
|
70
|
+
# [1,2,3].should_not include(4)
|
71
|
+
# "spread".should include("read")
|
72
|
+
# "spread".should_not include("red")
|
73
|
+
def include(*expected)
|
74
|
+
Matchers::Include.new(*expected)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Spec
|
2
|
+
module Matchers
|
3
|
+
|
4
|
+
class Match #:nodoc:
|
5
|
+
def initialize(regexp)
|
6
|
+
@regexp = regexp
|
7
|
+
end
|
8
|
+
|
9
|
+
def matches?(given)
|
10
|
+
@given = given
|
11
|
+
return true if given =~ @regexp
|
12
|
+
return false
|
13
|
+
end
|
14
|
+
|
15
|
+
def failure_message
|
16
|
+
return "expected #{@given.inspect} to match #{@regexp.inspect}", @regexp, @given
|
17
|
+
end
|
18
|
+
|
19
|
+
def negative_failure_message
|
20
|
+
return "expected #{@given.inspect} not to match #{@regexp.inspect}", @regexp, @given
|
21
|
+
end
|
22
|
+
|
23
|
+
def description
|
24
|
+
"match #{@regexp.inspect}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# :call-seq:
|
29
|
+
# should match(regexp)
|
30
|
+
# should_not match(regexp)
|
31
|
+
#
|
32
|
+
# Given a Regexp, passes if given =~ regexp
|
33
|
+
#
|
34
|
+
# == Examples
|
35
|
+
#
|
36
|
+
# email.should match(/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i)
|
37
|
+
def match(regexp)
|
38
|
+
Matchers::Match.new(regexp)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Spec
|
2
|
+
module Matchers
|
3
|
+
class BaseOperatorMatcher
|
4
|
+
attr_reader :generated_description
|
5
|
+
|
6
|
+
def initialize(given)
|
7
|
+
@given = given
|
8
|
+
end
|
9
|
+
|
10
|
+
def ==(expected)
|
11
|
+
@expected = expected
|
12
|
+
__delegate_method_missing_to_given("==", expected)
|
13
|
+
end
|
14
|
+
|
15
|
+
def ===(expected)
|
16
|
+
@expected = expected
|
17
|
+
__delegate_method_missing_to_given("===", expected)
|
18
|
+
end
|
19
|
+
|
20
|
+
def =~(expected)
|
21
|
+
@expected = expected
|
22
|
+
__delegate_method_missing_to_given("=~", expected)
|
23
|
+
end
|
24
|
+
|
25
|
+
def >(expected)
|
26
|
+
@expected = expected
|
27
|
+
__delegate_method_missing_to_given(">", expected)
|
28
|
+
end
|
29
|
+
|
30
|
+
def >=(expected)
|
31
|
+
@expected = expected
|
32
|
+
__delegate_method_missing_to_given(">=", expected)
|
33
|
+
end
|
34
|
+
|
35
|
+
def <(expected)
|
36
|
+
@expected = expected
|
37
|
+
__delegate_method_missing_to_given("<", expected)
|
38
|
+
end
|
39
|
+
|
40
|
+
def <=(expected)
|
41
|
+
@expected = expected
|
42
|
+
__delegate_method_missing_to_given("<=", expected)
|
43
|
+
end
|
44
|
+
|
45
|
+
def fail_with_message(message)
|
46
|
+
Spec::Expectations.fail_with(message, @expected, @given)
|
47
|
+
end
|
48
|
+
|
49
|
+
def description
|
50
|
+
"#{@operator} #{@expected.inspect}"
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
class PositiveOperatorMatcher < BaseOperatorMatcher #:nodoc:
|
56
|
+
|
57
|
+
def __delegate_method_missing_to_given(operator, expected)
|
58
|
+
@operator = operator
|
59
|
+
::Spec::Matchers.last_matcher = self
|
60
|
+
return true if @given.__send__(operator, expected)
|
61
|
+
return fail_with_message("expected: #{expected.inspect},\n got: #{@given.inspect} (using #{operator})") if ['==','===', '=~'].include?(operator)
|
62
|
+
return fail_with_message("expected: #{operator} #{expected.inspect},\n got: #{operator.gsub(/./, ' ')} #{@given.inspect}")
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
class NegativeOperatorMatcher < BaseOperatorMatcher #:nodoc:
|
68
|
+
|
69
|
+
def __delegate_method_missing_to_given(operator, expected)
|
70
|
+
@operator = operator
|
71
|
+
::Spec::Matchers.last_matcher = self
|
72
|
+
return true unless @given.__send__(operator, expected)
|
73
|
+
return fail_with_message("expected not: #{operator} #{expected.inspect},\n got: #{operator.gsub(/./, ' ')} #{@given.inspect}")
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
module Spec
|
2
|
+
module Matchers
|
3
|
+
class RaiseError #:nodoc:
|
4
|
+
def initialize(expected_error_or_message=Exception, expected_message=nil, &block)
|
5
|
+
@block = block
|
6
|
+
case expected_error_or_message
|
7
|
+
when String, Regexp
|
8
|
+
@expected_error, @expected_message = Exception, expected_error_or_message
|
9
|
+
else
|
10
|
+
@expected_error, @expected_message = expected_error_or_message, expected_message
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def matches?(given_proc)
|
15
|
+
@raised_expected_error = false
|
16
|
+
@with_expected_message = false
|
17
|
+
@eval_block = false
|
18
|
+
@eval_block_passed = false
|
19
|
+
begin
|
20
|
+
given_proc.call
|
21
|
+
rescue @expected_error => @given_error
|
22
|
+
@raised_expected_error = true
|
23
|
+
@with_expected_message = verify_message
|
24
|
+
rescue Exception => @given_error
|
25
|
+
# This clause should be empty, but rcov will not report it as covered
|
26
|
+
# unless something (anything) is executed within the clause
|
27
|
+
rcov_error_report = "http://eigenclass.org/hiki.rb?rcov-0.8.0"
|
28
|
+
end
|
29
|
+
|
30
|
+
unless negative_expectation?
|
31
|
+
eval_block if @raised_expected_error && @with_expected_message && @block
|
32
|
+
end
|
33
|
+
ensure
|
34
|
+
return (@raised_expected_error && @with_expected_message) ? (@eval_block ? @eval_block_passed : true) : false
|
35
|
+
end
|
36
|
+
|
37
|
+
def eval_block
|
38
|
+
@eval_block = true
|
39
|
+
begin
|
40
|
+
@block[@given_error]
|
41
|
+
@eval_block_passed = true
|
42
|
+
rescue Exception => err
|
43
|
+
@given_error = err
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def verify_message
|
48
|
+
case @expected_message
|
49
|
+
when nil
|
50
|
+
return true
|
51
|
+
when Regexp
|
52
|
+
return @expected_message =~ @given_error.message
|
53
|
+
else
|
54
|
+
return @expected_message == @given_error.message
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def failure_message
|
59
|
+
if @eval_block
|
60
|
+
return @given_error.message
|
61
|
+
else
|
62
|
+
return "expected #{expected_error}#{given_error}"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def negative_failure_message
|
67
|
+
"expected no #{expected_error}#{given_error}"
|
68
|
+
end
|
69
|
+
|
70
|
+
def description
|
71
|
+
"raise #{expected_error}"
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
def expected_error
|
76
|
+
case @expected_message
|
77
|
+
when nil
|
78
|
+
@expected_error
|
79
|
+
when Regexp
|
80
|
+
"#{@expected_error} with message matching #{@expected_message.inspect}"
|
81
|
+
else
|
82
|
+
"#{@expected_error} with #{@expected_message.inspect}"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def given_error
|
87
|
+
@given_error.nil? ? " but nothing was raised" : ", got #{@given_error.inspect}"
|
88
|
+
end
|
89
|
+
|
90
|
+
def negative_expectation?
|
91
|
+
# YES - I'm a bad person... help me find a better way - ryand
|
92
|
+
caller.first(3).find { |s| s =~ /should_not/ }
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# :call-seq:
|
97
|
+
# should raise_error()
|
98
|
+
# should raise_error(NamedError)
|
99
|
+
# should raise_error(NamedError, String)
|
100
|
+
# should raise_error(NamedError, Regexp)
|
101
|
+
# should raise_error() { |error| ... }
|
102
|
+
# should raise_error(NamedError) { |error| ... }
|
103
|
+
# should raise_error(NamedError, String) { |error| ... }
|
104
|
+
# should raise_error(NamedError, Regexp) { |error| ... }
|
105
|
+
# should_not raise_error()
|
106
|
+
# should_not raise_error(NamedError)
|
107
|
+
# should_not raise_error(NamedError, String)
|
108
|
+
# should_not raise_error(NamedError, Regexp)
|
109
|
+
#
|
110
|
+
# With no args, matches if any error is raised.
|
111
|
+
# With a named error, matches only if that specific error is raised.
|
112
|
+
# With a named error and messsage specified as a String, matches only if both match.
|
113
|
+
# With a named error and messsage specified as a Regexp, matches only if both match.
|
114
|
+
# Pass an optional block to perform extra verifications on the exception matched
|
115
|
+
#
|
116
|
+
# == Examples
|
117
|
+
#
|
118
|
+
# lambda { do_something_risky }.should raise_error
|
119
|
+
# lambda { do_something_risky }.should raise_error(PoorRiskDecisionError)
|
120
|
+
# lambda { do_something_risky }.should raise_error(PoorRiskDecisionError) { |error| error.data.should == 42 }
|
121
|
+
# lambda { do_something_risky }.should raise_error(PoorRiskDecisionError, "that was too risky")
|
122
|
+
# lambda { do_something_risky }.should raise_error(PoorRiskDecisionError, /oo ri/)
|
123
|
+
#
|
124
|
+
# lambda { do_something_risky }.should_not raise_error
|
125
|
+
# lambda { do_something_risky }.should_not raise_error(PoorRiskDecisionError)
|
126
|
+
# lambda { do_something_risky }.should_not raise_error(PoorRiskDecisionError, "that was too risky")
|
127
|
+
# lambda { do_something_risky }.should_not raise_error(PoorRiskDecisionError, /oo ri/)
|
128
|
+
def raise_error(error=Exception, message=nil, &block)
|
129
|
+
Matchers::RaiseError.new(error, message, &block)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Spec
|
2
|
+
module Matchers
|
3
|
+
|
4
|
+
class RespondTo #:nodoc:
|
5
|
+
def initialize(*names)
|
6
|
+
@names = names
|
7
|
+
@names_not_responded_to = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def matches?(given)
|
11
|
+
@given = given
|
12
|
+
@names.each do |name|
|
13
|
+
unless given.respond_to?(name)
|
14
|
+
@names_not_responded_to << name
|
15
|
+
end
|
16
|
+
end
|
17
|
+
return @names_not_responded_to.empty?
|
18
|
+
end
|
19
|
+
|
20
|
+
def failure_message
|
21
|
+
"expected #{@given.inspect} to respond to #{@names_not_responded_to.collect {|name| name.inspect }.join(', ')}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def negative_failure_message
|
25
|
+
"expected #{@given.inspect} not to respond to #{@names.collect {|name| name.inspect }.join(', ')}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def description
|
29
|
+
"respond to ##{@names.to_s}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# :call-seq:
|
34
|
+
# should respond_to(*names)
|
35
|
+
# should_not respond_to(*names)
|
36
|
+
#
|
37
|
+
# Matches if the target object responds to all of the names
|
38
|
+
# provided. Names can be Strings or Symbols.
|
39
|
+
#
|
40
|
+
# == Examples
|
41
|
+
#
|
42
|
+
def respond_to(*names)
|
43
|
+
Matchers::RespondTo.new(*names)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Spec
|
2
|
+
module Matchers
|
3
|
+
|
4
|
+
class Satisfy #:nodoc:
|
5
|
+
def initialize(&block)
|
6
|
+
@block = block
|
7
|
+
end
|
8
|
+
|
9
|
+
def matches?(given, &block)
|
10
|
+
@block = block if block
|
11
|
+
@given = given
|
12
|
+
@block.call(given)
|
13
|
+
end
|
14
|
+
|
15
|
+
def failure_message
|
16
|
+
"expected #{@given} to satisfy block"
|
17
|
+
end
|
18
|
+
|
19
|
+
def negative_failure_message
|
20
|
+
"expected #{@given} not to satisfy block"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# :call-seq:
|
25
|
+
# should satisfy {}
|
26
|
+
# should_not satisfy {}
|
27
|
+
#
|
28
|
+
# Passes if the submitted block returns true. Yields target to the
|
29
|
+
# block.
|
30
|
+
#
|
31
|
+
# Generally speaking, this should be thought of as a last resort when
|
32
|
+
# you can't find any other way to specify the behaviour you wish to
|
33
|
+
# specify.
|
34
|
+
#
|
35
|
+
# If you do find yourself in such a situation, you could always write
|
36
|
+
# a custom matcher, which would likely make your specs more expressive.
|
37
|
+
#
|
38
|
+
# == Examples
|
39
|
+
#
|
40
|
+
# 5.should satisfy { |n|
|
41
|
+
# n > 3
|
42
|
+
# }
|
43
|
+
def satisfy(&block)
|
44
|
+
Matchers::Satisfy.new(&block)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
module Spec
|
2
|
+
module Matchers
|
3
|
+
class SimpleMatcher
|
4
|
+
attr_writer :failure_message, :negative_failure_message, :description
|
5
|
+
|
6
|
+
def initialize(description, &match_block)
|
7
|
+
@description = description
|
8
|
+
@match_block = match_block
|
9
|
+
end
|
10
|
+
|
11
|
+
def matches?(given)
|
12
|
+
@given = given
|
13
|
+
case @match_block.arity
|
14
|
+
when 2
|
15
|
+
@match_block.call(@given, self)
|
16
|
+
else
|
17
|
+
@match_block.call(@given)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def description
|
22
|
+
@description || explanation
|
23
|
+
end
|
24
|
+
|
25
|
+
def failure_message
|
26
|
+
@failure_message || (@description.nil? ? explanation : %[expected #{@description.inspect} but got #{@given.inspect}])
|
27
|
+
end
|
28
|
+
|
29
|
+
def negative_failure_message
|
30
|
+
@negative_failure_message || (@description.nil? ? explanation : %[expected not to get #{@description.inspect}, but got #{@given.inspect}])
|
31
|
+
end
|
32
|
+
|
33
|
+
def explanation
|
34
|
+
"No description provided. See RDoc for simple_matcher()"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# simple_matcher makes it easy for you to create your own custom matchers
|
39
|
+
# in just a few lines of code when you don't need all the power of a
|
40
|
+
# completely custom matcher object.
|
41
|
+
#
|
42
|
+
# The <tt>description</tt> argument will appear as part of any failure
|
43
|
+
# message, and is also the source for auto-generated descriptions.
|
44
|
+
#
|
45
|
+
# The <tt>match_block</tt> can have an arity of 1 or 2. The first block
|
46
|
+
# argument will be the given value. The second, if the block accepts it
|
47
|
+
# will be the matcher itself, giving you access to set custom failure
|
48
|
+
# messages in favor of the defaults.
|
49
|
+
#
|
50
|
+
# The <tt>match_block</tt> should return a boolean: <tt>true</tt>
|
51
|
+
# indicates a match, which will pass if you use <tt>should</tt> and fail
|
52
|
+
# if you use <tt>should_not</tt>. false (or nil) indicates no match,
|
53
|
+
# which will do the reverse: fail if you use <tt>should</tt> and pass if
|
54
|
+
# you use <tt>should_not</tt>.
|
55
|
+
#
|
56
|
+
# An error in the <tt>match_block</tt> will bubble up, resulting in a
|
57
|
+
# failure.
|
58
|
+
#
|
59
|
+
# == Example with default messages
|
60
|
+
#
|
61
|
+
# def be_even
|
62
|
+
# simple_matcher("an even number") { |given| given % 2 == 0 }
|
63
|
+
# end
|
64
|
+
#
|
65
|
+
# describe 2 do
|
66
|
+
# it "should be even" do
|
67
|
+
# 2.should be_even
|
68
|
+
# end
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# Given an odd number, this example would produce an error message stating:
|
72
|
+
# expected "an even number", got 3.
|
73
|
+
#
|
74
|
+
# Unfortunately, if you're a fan of auto-generated descriptions, this will
|
75
|
+
# produce "should an even number." Not the most desirable result. You can
|
76
|
+
# control that using custom messages:
|
77
|
+
#
|
78
|
+
# == Example with custom messages
|
79
|
+
#
|
80
|
+
# def rhyme_with(expected)
|
81
|
+
# simple_matcher("rhyme with #{expected.inspect}") do |given, matcher|
|
82
|
+
# matcher.failure_message = "expected #{given.inspect} to rhyme with #{expected.inspect}"
|
83
|
+
# matcher.negative_failure_message = "expected #{given.inspect} not to rhyme with #{expected.inspect}"
|
84
|
+
# given.rhymes_with? expected
|
85
|
+
# end
|
86
|
+
# end
|
87
|
+
#
|
88
|
+
# # OR
|
89
|
+
#
|
90
|
+
# def rhyme_with(expected)
|
91
|
+
# simple_matcher do |given, matcher|
|
92
|
+
# matcher.description = "rhyme with #{expected.inspect}"
|
93
|
+
# matcher.failure_message = "expected #{given.inspect} to rhyme with #{expected.inspect}"
|
94
|
+
# matcher.negative_failure_message = "expected #{given.inspect} not to rhyme with #{expected.inspect}"
|
95
|
+
# given.rhymes_with? expected
|
96
|
+
# end
|
97
|
+
# end
|
98
|
+
#
|
99
|
+
# describe "pecan" do
|
100
|
+
# it "should rhyme with 'be gone'" do
|
101
|
+
# nut = "pecan"
|
102
|
+
# nut.extend Rhymer
|
103
|
+
# nut.should rhyme_with("be gone")
|
104
|
+
# end
|
105
|
+
# end
|
106
|
+
#
|
107
|
+
# The resulting messages would be:
|
108
|
+
# description: rhyme with "be gone"
|
109
|
+
# failure_message: expected "pecan" to rhyme with "be gone"
|
110
|
+
# negative failure_message: expected "pecan" not to rhyme with "be gone"
|
111
|
+
#
|
112
|
+
# == Wrapped Expectations
|
113
|
+
#
|
114
|
+
# Because errors will bubble up, it is possible to wrap other expectations
|
115
|
+
# in a SimpleMatcher.
|
116
|
+
#
|
117
|
+
# def be_even
|
118
|
+
# simple_matcher("an even number") { |given| (given % 2).should == 0 }
|
119
|
+
# end
|
120
|
+
#
|
121
|
+
# BE VERY CAREFUL when you do this. Only use wrapped expectations for
|
122
|
+
# matchers that will always be used in only the positive
|
123
|
+
# (<tt>should</tt>) or negative (<tt>should_not</tt>), but not both.
|
124
|
+
# The reason is that is you wrap a <tt>should</tt> and call the wrapper
|
125
|
+
# with <tt>should_not</tt>, the correct result (the <tt>should</tt>
|
126
|
+
# failing), will fail when you want it to pass.
|
127
|
+
#
|
128
|
+
def simple_matcher(description=nil, &match_block)
|
129
|
+
SimpleMatcher.new(description, &match_block)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|