rspec 1.0.8 → 1.1.0
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/CHANGES +122 -2
 - data/README +10 -9
 - data/Rakefile +22 -49
 - data/TODO +2 -0
 - data/bin/spec +1 -1
 - data/bin/spec_translator +8 -8
 - data/examples/{auto_spec_description_example.rb → pure/autogenerated_docstrings_example.rb} +0 -0
 - data/examples/{before_and_after_example.rb → pure/before_and_after_example.rb} +1 -0
 - data/examples/{behave_as_example.rb → pure/behave_as_example.rb} +0 -0
 - data/examples/{custom_expectation_matchers.rb → pure/custom_expectation_matchers.rb} +0 -0
 - data/examples/{custom_formatter.rb → pure/custom_formatter.rb} +1 -0
 - data/examples/{dynamic_spec.rb → pure/dynamic_spec.rb} +0 -0
 - data/examples/{file_accessor.rb → pure/file_accessor.rb} +1 -0
 - data/examples/{file_accessor_spec.rb → pure/file_accessor_spec.rb} +0 -0
 - data/examples/{greeter_spec.rb → pure/greeter_spec.rb} +1 -0
 - data/examples/{helper_method_example.rb → pure/helper_method_example.rb} +0 -0
 - data/examples/{io_processor.rb → pure/io_processor.rb} +0 -0
 - data/examples/{io_processor_spec.rb → pure/io_processor_spec.rb} +0 -0
 - data/examples/{legacy_spec.rb → pure/legacy_spec.rb} +1 -0
 - data/examples/{mocking_example.rb → pure/mocking_example.rb} +0 -0
 - data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
 - data/examples/pure/nested_classes_example.rb +36 -0
 - data/examples/{partial_mock_example.rb → pure/partial_mock_example.rb} +0 -0
 - data/examples/{pending_example.rb → pure/pending_example.rb} +0 -0
 - data/examples/{predicate_example.rb → pure/predicate_example.rb} +0 -0
 - data/examples/{priority.txt → pure/priority.txt} +0 -0
 - data/examples/pure/shared_example_group_example.rb +66 -0
 - data/examples/pure/shared_stack_examples.rb +38 -0
 - data/examples/pure/spec_helper.rb +3 -0
 - data/examples/{stack.rb → pure/stack.rb} +0 -0
 - data/examples/{stack_spec.rb → pure/stack_spec.rb} +1 -35
 - data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
 - data/examples/{stubbing_example.rb → pure/stubbing_example.rb} +0 -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/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.rb +3 -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/helper.rb +9 -0
 - data/examples/stories/steps/addition_steps.rb +18 -0
 - data/lib/autotest/rspec.rb +1 -2
 - data/lib/spec.rb +30 -6
 - data/lib/spec/example.rb +12 -0
 - data/lib/spec/{dsl → example}/configuration.rb +48 -39
 - data/lib/spec/{dsl → example}/errors.rb +2 -2
 - data/lib/spec/example/example_group.rb +16 -0
 - data/lib/spec/example/example_group_factory.rb +62 -0
 - data/lib/spec/example/example_group_methods.rb +412 -0
 - data/lib/spec/example/example_matcher.rb +42 -0
 - data/lib/spec/example/example_methods.rb +101 -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 +58 -0
 - data/lib/spec/expectations/differs/default.rb +15 -10
 - data/lib/spec/expectations/errors.rb +7 -1
 - data/lib/spec/expectations/extensions/object.rb +12 -7
 - data/lib/spec/expectations/handler.rb +13 -4
 - data/lib/spec/extensions.rb +2 -0
 - data/lib/spec/extensions/class.rb +24 -0
 - data/lib/spec/extensions/main.rb +54 -0
 - data/lib/spec/extensions/object.rb +5 -1
 - data/lib/spec/interop/test.rb +10 -0
 - data/lib/spec/interop/test/unit/autorunner.rb +6 -0
 - data/lib/spec/interop/test/unit/testcase.rb +61 -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 +60 -0
 - data/lib/spec/matchers.rb +11 -15
 - data/lib/spec/matchers/be.rb +23 -6
 - data/lib/spec/matchers/change.rb +25 -1
 - data/lib/spec/matchers/exist.rb +17 -0
 - data/lib/spec/matchers/operator_matcher.rb +1 -0
 - data/lib/spec/matchers/simple_matcher.rb +29 -0
 - data/lib/spec/matchers/throw_symbol.rb +2 -0
 - data/lib/spec/mocks.rb +5 -2
 - data/lib/spec/mocks/argument_expectation.rb +1 -1
 - data/lib/spec/mocks/message_expectation.rb +62 -44
 - data/lib/spec/mocks/methods.rb +2 -2
 - data/lib/spec/mocks/mock.rb +24 -3
 - data/lib/spec/mocks/proxy.rb +26 -23
 - data/lib/spec/mocks/space.rb +1 -1
 - data/lib/spec/mocks/spec_methods.rb +20 -12
 - data/lib/spec/rake/spectask.rb +19 -1
 - data/lib/spec/rake/verify_rcov.rb +1 -1
 - data/lib/spec/runner.rb +33 -10
 - data/lib/spec/runner/backtrace_tweaker.rb +3 -3
 - data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
 - data/lib/spec/runner/command_line.rb +18 -12
 - data/lib/spec/runner/drb_command_line.rb +4 -5
 - data/lib/spec/runner/example_group_runner.rb +59 -0
 - data/lib/spec/runner/formatter/base_formatter.rb +10 -8
 - data/lib/spec/runner/formatter/base_text_formatter.rb +18 -18
 - data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +31 -0
 - data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -5
 - data/lib/spec/runner/formatter/html_formatter.rb +37 -27
 - data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
 - data/lib/spec/runner/formatter/progress_bar_formatter.rb +3 -4
 - data/lib/spec/runner/formatter/specdoc_formatter.rb +27 -13
 - data/lib/spec/runner/formatter/story/html_formatter.rb +124 -0
 - data/lib/spec/runner/formatter/story/plain_text_formatter.rb +123 -0
 - data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
 - data/lib/spec/runner/heckle_runner.rb +9 -9
 - data/lib/spec/runner/option_parser.rb +140 -138
 - data/lib/spec/runner/options.rb +168 -90
 - data/lib/spec/runner/reporter.rb +58 -40
 - data/lib/spec/runner/spec_parser.rb +11 -8
 - data/lib/spec/story.rb +10 -0
 - data/lib/spec/story/extensions.rb +1 -0
 - data/lib/spec/story/extensions/main.rb +86 -0
 - data/lib/spec/story/given_scenario.rb +14 -0
 - data/lib/spec/story/runner.rb +58 -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 +46 -0
 - data/lib/spec/story/runner/story_mediator.rb +123 -0
 - data/lib/spec/story/runner/story_parser.rb +227 -0
 - data/lib/spec/story/runner/story_runner.rb +67 -0
 - data/lib/spec/story/scenario.rb +14 -0
 - data/lib/spec/story/step.rb +48 -0
 - data/lib/spec/story/step_group.rb +89 -0
 - data/lib/spec/story/step_mother.rb +37 -0
 - data/lib/spec/story/story.rb +42 -0
 - data/lib/spec/story/world.rb +124 -0
 - data/lib/spec/version.rb +4 -5
 - data/plugins/mock_frameworks/rspec.rb +1 -1
 - data/spec/autotest/rspec_spec.rb +13 -7
 - data/spec/autotest_helper.rb +4 -3
 - data/spec/rspec_suite.rb +7 -0
 - data/spec/ruby_forker.rb +13 -0
 - data/spec/spec/example/configuration_spec.rb +290 -0
 - data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
 - data/spec/spec/example/example_group_factory_spec.rb +129 -0
 - data/spec/spec/example/example_group_methods_spec.rb +465 -0
 - data/spec/spec/example/example_group_spec.rb +711 -0
 - data/spec/spec/{dsl → example}/example_matcher_spec.rb +23 -18
 - data/spec/spec/example/example_methods_spec.rb +75 -0
 - data/spec/spec/example/example_runner_spec.rb +194 -0
 - data/spec/spec/example/example_spec.rb +53 -0
 - data/spec/spec/example/nested_example_group_spec.rb +59 -0
 - data/spec/spec/example/pending_module_spec.rb +31 -0
 - data/spec/spec/{dsl → example}/predicate_matcher_spec.rb +1 -1
 - data/spec/spec/example/shared_example_group_spec.rb +265 -0
 - data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
 - data/spec/spec/expectations/differs/default_spec.rb +5 -3
 - data/spec/spec/expectations/extensions/object_spec.rb +63 -2
 - data/spec/spec/extensions/main_spec.rb +50 -0
 - data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
 - data/spec/spec/interop/test/unit/testcase_spec.rb +10 -0
 - data/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb +20 -0
 - data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
 - data/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb +34 -0
 - data/spec/spec/matchers/be_spec.rb +15 -0
 - data/spec/spec/matchers/change_spec.rb +87 -0
 - data/spec/spec/matchers/description_generation_spec.rb +31 -37
 - data/spec/spec/matchers/exist_spec.rb +31 -22
 - data/spec/spec/matchers/handler_spec.rb +42 -1
 - data/spec/spec/matchers/have_spec.rb +1 -1
 - data/spec/spec/matchers/mock_constraint_matchers_spec.rb +1 -1
 - data/spec/spec/matchers/operator_matcher_spec.rb +1 -1
 - data/spec/spec/matchers/simple_matcher_spec.rb +31 -0
 - data/spec/spec/matchers/throw_symbol_spec.rb +4 -1
 - data/spec/spec/mocks/bug_report_10263.rb +24 -0
 - data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
 - data/spec/spec/mocks/bug_report_8165_spec.rb +2 -2
 - data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +1 -0
 - data/spec/spec/mocks/mock_spec.rb +200 -102
 - data/spec/spec/mocks/multiple_return_value_spec.rb +1 -1
 - data/spec/spec/mocks/options_hash_spec.rb +19 -7
 - data/spec/spec/mocks/partial_mock_spec.rb +31 -9
 - data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +6 -0
 - data/spec/spec/mocks/stub_spec.rb +120 -98
 - data/spec/spec/package/bin_spec_spec.rb +7 -5
 - data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
 - data/spec/spec/runner/command_line_spec.rb +140 -27
 - data/spec/spec/runner/drb_command_line_spec.rb +39 -31
 - data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +44 -0
 - data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +16 -11
 - data/spec/spec/runner/formatter/html_formatter_spec.rb +60 -50
 - data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
 - data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +29 -13
 - data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
 - data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
 - data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +103 -39
 - data/spec/spec/runner/formatter/story/html_formatter_spec.rb +56 -0
 - data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +289 -0
 - data/spec/spec/runner/heckle_runner_spec.rb +29 -14
 - data/spec/spec/runner/heckler_spec.rb +4 -5
 - data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +5 -5
 - data/spec/spec/runner/option_parser_spec.rb +86 -58
 - data/spec/spec/runner/options_spec.rb +239 -120
 - 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 +6 -6
 - data/spec/spec/runner/reporter_spec.rb +147 -163
 - data/spec/spec/runner/spec_parser_spec.rb +31 -0
 - data/spec/spec/runner_spec.rb +11 -0
 - data/spec/spec/spec_classes.rb +12 -5
 - 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 +92 -0
 - data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
 - data/spec/spec/story/runner/scenario_runner_spec.rb +142 -0
 - data/spec/spec/story/runner/story_mediator_spec.rb +133 -0
 - data/spec/spec/story/runner/story_parser_spec.rb +384 -0
 - data/spec/spec/story/runner/story_runner_spec.rb +219 -0
 - data/spec/spec/story/runner_spec.rb +106 -0
 - data/spec/spec/story/scenario_spec.rb +20 -0
 - data/spec/spec/story/step_group_spec.rb +157 -0
 - data/spec/spec/story/step_mother_spec.rb +72 -0
 - data/spec/spec/story/step_spec.rb +147 -0
 - data/spec/spec/story/story_helper.rb +2 -0
 - data/spec/spec/story/story_spec.rb +86 -0
 - data/spec/spec/story/world_spec.rb +416 -0
 - data/spec/spec/translator_spec.rb +2 -1
 - data/spec/spec_helper.rb +59 -2
 - data/stories/all.rb +5 -0
 - data/stories/example_groups/autogenerated_docstrings +26 -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 +20 -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/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/example_group_with_should_methods.rb +12 -0
 - data/stories/resources/spec/simple_spec.rb +8 -0
 - data/stories/resources/steps/running_rspec.rb +50 -0
 - data/stories/resources/test/spec_and_test_together.rb +57 -0
 - data/stories/resources/test/test_case_with_should_methods.rb +30 -0
 - metadata +232 -106
 - data/EXAMPLES.rd +0 -111
 - data/examples/multi_threaded_behaviour_runner.rb +0 -25
 - data/examples/shared_behaviours_example.rb +0 -39
 - data/examples/spec_helper.rb +0 -1
 - data/examples/test_case_adapter_example.rb +0 -26
 - data/examples/test_case_spec.rb +0 -65
 - data/lib/spec/dsl.rb +0 -11
 - data/lib/spec/dsl/behaviour.rb +0 -220
 - data/lib/spec/dsl/behaviour_callbacks.rb +0 -82
 - data/lib/spec/dsl/behaviour_eval.rb +0 -231
 - data/lib/spec/dsl/behaviour_factory.rb +0 -42
 - data/lib/spec/dsl/composite_proc_builder.rb +0 -33
 - data/lib/spec/dsl/description.rb +0 -76
 - data/lib/spec/dsl/example.rb +0 -135
 - data/lib/spec/dsl/example_matcher.rb +0 -40
 - data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
 - data/lib/spec/runner/behaviour_runner.rb +0 -123
 - data/lib/spec/runner/extensions/kernel.rb +0 -50
 - data/lib/spec/runner/extensions/object.rb +0 -32
 - data/lib/spec/runner/formatter.rb +0 -9
 - data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -29
 - data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
 - data/lib/spec/test_case_adapter.rb +0 -10
 - data/spec/spec/dsl/behaviour_eval_spec.rb +0 -79
 - data/spec/spec/dsl/behaviour_factory_spec.rb +0 -48
 - data/spec/spec/dsl/behaviour_spec.rb +0 -661
 - data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -44
 - data/spec/spec/dsl/configuration_spec.rb +0 -55
 - data/spec/spec/dsl/description_spec.rb +0 -89
 - data/spec/spec/dsl/example_class_spec.rb +0 -24
 - data/spec/spec/dsl/example_instance_spec.rb +0 -160
 - data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
 - data/spec/spec/dsl/shared_behaviour_spec.rb +0 -252
 - data/spec/spec/runner/behaviour_runner_spec.rb +0 -229
 - data/spec/spec/runner/context_matching_spec.rb +0 -27
 - data/spec/spec/runner/extensions/bug_report_10577_spec.rb +0 -35
 - data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
 - data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -40
 - data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -20
 - data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
 - data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
 - data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
 - data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
 - data/spec/spec/runner/object_ext_spec.rb +0 -11
 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Spec
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Matchers
         
     | 
| 
      
 3 
     | 
    
         
            +
                class SimpleMatcher
         
     | 
| 
      
 4 
     | 
    
         
            +
                  attr_reader :description
         
     | 
| 
      
 5 
     | 
    
         
            +
                  
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(description, &match_block)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @description = description
         
     | 
| 
      
 8 
     | 
    
         
            +
                    @match_block = match_block
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def matches?(actual)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @actual = actual
         
     | 
| 
      
 13 
     | 
    
         
            +
                    return @match_block.call(@actual)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def failure_message()
         
     | 
| 
      
 17 
     | 
    
         
            +
                    return %[expected #{@description.inspect} but got #{@actual.inspect}]
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
                    
         
     | 
| 
      
 20 
     | 
    
         
            +
                  def negative_failure_message()
         
     | 
| 
      
 21 
     | 
    
         
            +
                    return %[expected not to get #{@description.inspect}, but got #{@actual.inspect}]
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
                
         
     | 
| 
      
 25 
     | 
    
         
            +
                def simple_matcher(message, &match_block)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  SimpleMatcher.new(message, &match_block)
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -4,12 +4,14 @@ module Spec 
     | 
|
| 
       4 
4 
     | 
    
         
             
                class ThrowSymbol #:nodoc:
         
     | 
| 
       5 
5 
     | 
    
         
             
                  def initialize(expected=nil)
         
     | 
| 
       6 
6 
     | 
    
         
             
                    @expected = expected
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @actual = nil
         
     | 
| 
       7 
8 
     | 
    
         
             
                  end
         
     | 
| 
       8 
9 
     | 
    
         | 
| 
       9 
10 
     | 
    
         
             
                  def matches?(proc)
         
     | 
| 
       10 
11 
     | 
    
         
             
                    begin
         
     | 
| 
       11 
12 
     | 
    
         
             
                      proc.call
         
     | 
| 
       12 
13 
     | 
    
         
             
                    rescue NameError => e
         
     | 
| 
      
 14 
     | 
    
         
            +
                      raise e unless e.message =~ /uncaught throw/
         
     | 
| 
       13 
15 
     | 
    
         
             
                      @actual = e.name.to_sym
         
     | 
| 
       14 
16 
     | 
    
         
             
                    ensure
         
     | 
| 
       15 
17 
     | 
    
         
             
                      if @expected.nil?
         
     | 
    
        data/lib/spec/mocks.rb
    CHANGED
    
    | 
         @@ -170,7 +170,9 @@ module Spec 
     | 
|
| 
       170 
170 
     | 
    
         
             
              #     #error can be an instantiated object or a class
         
     | 
| 
       171 
171 
     | 
    
         
             
              #     #if it is a class, it must be instantiable with no args
         
     | 
| 
       172 
172 
     | 
    
         
             
              #   my_mock.should_receive(:sym).and_throw(:sym)
         
     | 
| 
       173 
     | 
    
         
            -
              #   my_mock.should_receive(:sym).and_yield( 
     | 
| 
      
 173 
     | 
    
         
            +
              #   my_mock.should_receive(:sym).and_yield(values,to,yield)
         
     | 
| 
      
 174 
     | 
    
         
            +
              #   my_mock.should_receive(:sym).and_yield(values,to,yield).and_yield(some,other,values,this,time)
         
     | 
| 
      
 175 
     | 
    
         
            +
              #     # for methods that yield to a block multiple times
         
     | 
| 
       174 
176 
     | 
    
         
             
              #
         
     | 
| 
       175 
177 
     | 
    
         
             
              # Any of these responses can be applied to a stub as well, but stubs do
         
     | 
| 
       176 
178 
     | 
    
         
             
              # not support any qualifiers about the message received (i.e. you can't specify arguments
         
     | 
| 
         @@ -180,7 +182,8 @@ module Spec 
     | 
|
| 
       180 
182 
     | 
    
         
             
              #   my_mock.stub!(:sym).and_return(value1, value2, value3)
         
     | 
| 
       181 
183 
     | 
    
         
             
              #   my_mock.stub!(:sym).and_raise(error)
         
     | 
| 
       182 
184 
     | 
    
         
             
              #   my_mock.stub!(:sym).and_throw(:sym)
         
     | 
| 
       183 
     | 
    
         
            -
              #   my_mock.stub!(:sym).and_yield( 
     | 
| 
      
 185 
     | 
    
         
            +
              #   my_mock.stub!(:sym).and_yield(values,to,yield)
         
     | 
| 
      
 186 
     | 
    
         
            +
              #   my_mock.stub!(:sym).and_yield(values,to,yield).and_yield(some,other,values,this,time)
         
     | 
| 
       184 
187 
     | 
    
         
             
              #
         
     | 
| 
       185 
188 
     | 
    
         
             
              # == Arbitrary Handling
         
     | 
| 
       186 
189 
     | 
    
         
             
              #
         
     | 
| 
         @@ -138,7 +138,7 @@ module Spec 
     | 
|
| 
       138 
138 
     | 
    
         
             
                  end
         
     | 
| 
       139 
139 
     | 
    
         | 
| 
       140 
140 
     | 
    
         
             
                  def warn_deprecated(deprecated_method, instead)
         
     | 
| 
       141 
     | 
    
         
            -
                     
     | 
| 
      
 141 
     | 
    
         
            +
                    Kernel.warn "The #{deprecated_method} constraint is deprecated. Use #{instead} instead."
         
     | 
| 
       142 
142 
     | 
    
         
             
                  end
         
     | 
| 
       143 
143 
     | 
    
         | 
| 
       144 
144 
     | 
    
         
             
                  def convert_constraint(constraint)
         
     | 
| 
         @@ -10,8 +10,8 @@ module Spec 
     | 
|
| 
       10 
10 
     | 
    
         
             
                    @expected_from = expected_from
         
     | 
| 
       11 
11 
     | 
    
         
             
                    @sym = sym
         
     | 
| 
       12 
12 
     | 
    
         
             
                    @method_block = method_block
         
     | 
| 
       13 
     | 
    
         
            -
                    @return_block =  
     | 
| 
       14 
     | 
    
         
            -
                    @ 
     | 
| 
      
 13 
     | 
    
         
            +
                    @return_block = nil
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @actual_received_count = 0
         
     | 
| 
       15 
15 
     | 
    
         
             
                    @expected_received_count = expected_received_count
         
     | 
| 
       16 
16 
     | 
    
         
             
                    @args_expectation = ArgumentExpectation.new([AnyArgsConstraint.new])
         
     | 
| 
       17 
17 
     | 
    
         
             
                    @consecutive = false
         
     | 
| 
         @@ -20,7 +20,7 @@ module Spec 
     | 
|
| 
       20 
20 
     | 
    
         
             
                    @order_group = expectation_ordering
         
     | 
| 
       21 
21 
     | 
    
         
             
                    @at_least = nil
         
     | 
| 
       22 
22 
     | 
    
         
             
                    @at_most = nil
         
     | 
| 
       23 
     | 
    
         
            -
                    @args_to_yield =  
     | 
| 
      
 23 
     | 
    
         
            +
                    @args_to_yield = []
         
     | 
| 
       24 
24 
     | 
    
         
             
                  end
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                  def expected_args
         
     | 
| 
         @@ -29,14 +29,13 @@ module Spec 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  def and_return(*values, &return_block)
         
     | 
| 
       31 
31 
     | 
    
         
             
                    Kernel::raise AmbiguousReturnError unless @method_block.nil?
         
     | 
| 
       32 
     | 
    
         
            -
                     
     | 
| 
       33 
     | 
    
         
            -
                      value = nil
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                      value = values[0]
         
     | 
| 
      
 32 
     | 
    
         
            +
                    case values.size
         
     | 
| 
      
 33 
     | 
    
         
            +
                      when 0 then value = nil
         
     | 
| 
      
 34 
     | 
    
         
            +
                      when 1 then value = values[0]
         
     | 
| 
       36 
35 
     | 
    
         
             
                    else
         
     | 
| 
       37 
36 
     | 
    
         
             
                      value = values
         
     | 
| 
       38 
37 
     | 
    
         
             
                      @consecutive = true
         
     | 
| 
       39 
     | 
    
         
            -
                      @expected_received_count = values.size if  
     | 
| 
      
 38 
     | 
    
         
            +
                      @expected_received_count = values.size if !ignoring_args? &&
         
     | 
| 
       40 
39 
     | 
    
         
             
                                                                @expected_received_count < values.size
         
     | 
| 
       41 
40 
     | 
    
         
             
                    end
         
     | 
| 
       42 
41 
     | 
    
         
             
                    @return_block = block_given? ? return_block : lambda { value }
         
     | 
| 
         @@ -62,7 +61,8 @@ module Spec 
     | 
|
| 
       62 
61 
     | 
    
         
             
                  end
         
     | 
| 
       63 
62 
     | 
    
         | 
| 
       64 
63 
     | 
    
         
             
                  def and_yield(*args)
         
     | 
| 
       65 
     | 
    
         
            -
                    @args_to_yield  
     | 
| 
      
 64 
     | 
    
         
            +
                    @args_to_yield << args
         
     | 
| 
      
 65 
     | 
    
         
            +
                    self
         
     | 
| 
       66 
66 
     | 
    
         
             
                  end
         
     | 
| 
       67 
67 
     | 
    
         | 
| 
       68 
68 
     | 
    
         
             
                  def matches(sym, args)
         
     | 
| 
         @@ -73,25 +73,26 @@ module Spec 
     | 
|
| 
       73 
73 
     | 
    
         
             
                    @order_group.handle_order_constraint self
         
     | 
| 
       74 
74 
     | 
    
         | 
| 
       75 
75 
     | 
    
         
             
                    begin
         
     | 
| 
       76 
     | 
    
         
            -
                      if @exception_to_raise.class == Class
         
     | 
| 
       77 
     | 
    
         
            -
                        @exception_instance_to_raise = @exception_to_raise.new
         
     | 
| 
       78 
     | 
    
         
            -
                      else 
         
     | 
| 
       79 
     | 
    
         
            -
                        @exception_instance_to_raise = @exception_to_raise
         
     | 
| 
       80 
     | 
    
         
            -
                      end
         
     | 
| 
       81 
76 
     | 
    
         
             
                      Kernel::raise @exception_to_raise unless @exception_to_raise.nil?
         
     | 
| 
       82 
77 
     | 
    
         
             
                      Kernel::throw @symbol_to_throw unless @symbol_to_throw.nil?
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
      
 78 
     | 
    
         
            +
                      
         
     | 
| 
       84 
79 
     | 
    
         
             
                      if !@method_block.nil?
         
     | 
| 
       85 
     | 
    
         
            -
                         
     | 
| 
       86 
     | 
    
         
            -
                      elsif  
     | 
| 
       87 
     | 
    
         
            -
                         
     | 
| 
       88 
     | 
    
         
            -
                      elsif @consecutive
         
     | 
| 
       89 
     | 
    
         
            -
                        return invoke_consecutive_return_block(args, block)
         
     | 
| 
      
 80 
     | 
    
         
            +
                        default_return_val = invoke_method_block(args)
         
     | 
| 
      
 81 
     | 
    
         
            +
                      elsif @args_to_yield.size > 0
         
     | 
| 
      
 82 
     | 
    
         
            +
                        default_return_val = invoke_with_yield(block)
         
     | 
| 
       90 
83 
     | 
    
         
             
                      else
         
     | 
| 
      
 84 
     | 
    
         
            +
                        default_return_val = nil
         
     | 
| 
      
 85 
     | 
    
         
            +
                      end
         
     | 
| 
      
 86 
     | 
    
         
            +
                      
         
     | 
| 
      
 87 
     | 
    
         
            +
                      if @consecutive
         
     | 
| 
      
 88 
     | 
    
         
            +
                        return invoke_consecutive_return_block(args, block)
         
     | 
| 
      
 89 
     | 
    
         
            +
                      elsif @return_block
         
     | 
| 
       91 
90 
     | 
    
         
             
                        return invoke_return_block(args, block)
         
     | 
| 
      
 91 
     | 
    
         
            +
                      else
         
     | 
| 
      
 92 
     | 
    
         
            +
                        return default_return_val
         
     | 
| 
       92 
93 
     | 
    
         
             
                      end
         
     | 
| 
       93 
94 
     | 
    
         
             
                    ensure
         
     | 
| 
       94 
     | 
    
         
            -
                      @ 
     | 
| 
      
 95 
     | 
    
         
            +
                      @actual_received_count += 1
         
     | 
| 
       95 
96 
     | 
    
         
             
                    end
         
     | 
| 
       96 
97 
     | 
    
         
             
                  end
         
     | 
| 
       97 
98 
     | 
    
         | 
| 
         @@ -109,17 +110,19 @@ module Spec 
     | 
|
| 
       109 
110 
     | 
    
         
             
                    if block.nil?
         
     | 
| 
       110 
111 
     | 
    
         
             
                      @error_generator.raise_missing_block_error @args_to_yield
         
     | 
| 
       111 
112 
     | 
    
         
             
                    end
         
     | 
| 
       112 
     | 
    
         
            -
                     
     | 
| 
       113 
     | 
    
         
            -
                       
     | 
| 
      
 113 
     | 
    
         
            +
                    @args_to_yield.each do |args_to_yield_this_time|
         
     | 
| 
      
 114 
     | 
    
         
            +
                      if block.arity > -1 && args_to_yield_this_time.length != block.arity
         
     | 
| 
      
 115 
     | 
    
         
            +
                        @error_generator.raise_wrong_arity_error args_to_yield_this_time, block.arity
         
     | 
| 
      
 116 
     | 
    
         
            +
                      end
         
     | 
| 
      
 117 
     | 
    
         
            +
                      block.call(*args_to_yield_this_time)
         
     | 
| 
       114 
118 
     | 
    
         
             
                    end
         
     | 
| 
       115 
     | 
    
         
            -
                    block.call(*@args_to_yield)
         
     | 
| 
       116 
119 
     | 
    
         
             
                  end
         
     | 
| 
       117 
120 
     | 
    
         | 
| 
       118 
121 
     | 
    
         
             
                  def invoke_consecutive_return_block(args, block)
         
     | 
| 
       119 
122 
     | 
    
         
             
                    args << block unless block.nil?
         
     | 
| 
       120 
123 
     | 
    
         
             
                    value = @return_block.call(*args)
         
     | 
| 
       121 
124 
     | 
    
         | 
| 
       122 
     | 
    
         
            -
                    index = [@ 
     | 
| 
      
 125 
     | 
    
         
            +
                    index = [@actual_received_count, value.size-1].min
         
     | 
| 
       123 
126 
     | 
    
         
             
                    value[index]
         
     | 
| 
       124 
127 
     | 
    
         
             
                  end
         
     | 
| 
       125 
128 
     | 
    
         | 
| 
         @@ -138,17 +141,33 @@ module Spec 
     | 
|
| 
       138 
141 
     | 
    
         
             
                  end
         
     | 
| 
       139 
142 
     | 
    
         | 
| 
       140 
143 
     | 
    
         
             
                  def verify_messages_received        
         
     | 
| 
       141 
     | 
    
         
            -
                    return if  
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
                    return if (@at_most) && (@received_count <= @expected_received_count)
         
     | 
| 
       144 
     | 
    
         
            -
                    return if @expected_received_count == @received_count
         
     | 
| 
      
 144 
     | 
    
         
            +
                    return if ignoring_args? || matches_exact_count? ||
         
     | 
| 
      
 145 
     | 
    
         
            +
                       matches_at_least_count? || matches_at_most_count?
         
     | 
| 
       145 
146 
     | 
    
         | 
| 
       146 
     | 
    
         
            -
                     
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
                     
     | 
| 
       149 
     | 
    
         
            -
             
     | 
| 
       150 
     | 
    
         
            -
             
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
      
 147 
     | 
    
         
            +
                    generate_error
         
     | 
| 
      
 148 
     | 
    
         
            +
                  rescue Spec::Mocks::MockExpectationError => error
         
     | 
| 
      
 149 
     | 
    
         
            +
                    error.backtrace.insert(0, @expected_from)
         
     | 
| 
      
 150 
     | 
    
         
            +
                    Kernel::raise error
         
     | 
| 
      
 151 
     | 
    
         
            +
                  end
         
     | 
| 
      
 152 
     | 
    
         
            +
                  
         
     | 
| 
      
 153 
     | 
    
         
            +
                  def ignoring_args?
         
     | 
| 
      
 154 
     | 
    
         
            +
                    @expected_received_count == :any
         
     | 
| 
      
 155 
     | 
    
         
            +
                  end
         
     | 
| 
      
 156 
     | 
    
         
            +
                  
         
     | 
| 
      
 157 
     | 
    
         
            +
                  def matches_at_least_count?
         
     | 
| 
      
 158 
     | 
    
         
            +
                    @at_least && @actual_received_count >= @expected_received_count
         
     | 
| 
      
 159 
     | 
    
         
            +
                  end
         
     | 
| 
      
 160 
     | 
    
         
            +
                  
         
     | 
| 
      
 161 
     | 
    
         
            +
                  def matches_at_most_count?
         
     | 
| 
      
 162 
     | 
    
         
            +
                    @at_most && @actual_received_count <= @expected_received_count
         
     | 
| 
      
 163 
     | 
    
         
            +
                  end
         
     | 
| 
      
 164 
     | 
    
         
            +
                  
         
     | 
| 
      
 165 
     | 
    
         
            +
                  def matches_exact_count?
         
     | 
| 
      
 166 
     | 
    
         
            +
                    @expected_received_count == @actual_received_count
         
     | 
| 
      
 167 
     | 
    
         
            +
                  end
         
     | 
| 
      
 168 
     | 
    
         
            +
                  
         
     | 
| 
      
 169 
     | 
    
         
            +
                  def generate_error
         
     | 
| 
      
 170 
     | 
    
         
            +
                    @error_generator.raise_expectation_error(@sym, @expected_received_count, @actual_received_count, *@args_expectation.args)
         
     | 
| 
       152 
171 
     | 
    
         
             
                  end
         
     | 
| 
       153 
172 
     | 
    
         | 
| 
       154 
173 
     | 
    
         
             
                  def with(*args, &block)
         
     | 
| 
         @@ -215,9 +234,14 @@ module Spec 
     | 
|
| 
       215 
234 
     | 
    
         
             
                    def set_expected_received_count(relativity, n)
         
     | 
| 
       216 
235 
     | 
    
         
             
                      @at_least = (relativity == :at_least)
         
     | 
| 
       217 
236 
     | 
    
         
             
                      @at_most = (relativity == :at_most)
         
     | 
| 
       218 
     | 
    
         
            -
                      @expected_received_count =  
     | 
| 
       219 
     | 
    
         
            -
             
     | 
| 
       220 
     | 
    
         
            -
             
     | 
| 
      
 237 
     | 
    
         
            +
                      @expected_received_count = case n
         
     | 
| 
      
 238 
     | 
    
         
            +
                        when Numeric
         
     | 
| 
      
 239 
     | 
    
         
            +
                          n
         
     | 
| 
      
 240 
     | 
    
         
            +
                        when :once
         
     | 
| 
      
 241 
     | 
    
         
            +
                          1
         
     | 
| 
      
 242 
     | 
    
         
            +
                        when :twice
         
     | 
| 
      
 243 
     | 
    
         
            +
                          2
         
     | 
| 
      
 244 
     | 
    
         
            +
                      end
         
     | 
| 
       221 
245 
     | 
    
         
             
                    end
         
     | 
| 
       222 
246 
     | 
    
         | 
| 
       223 
247 
     | 
    
         
             
                end
         
     | 
| 
         @@ -232,11 +256,5 @@ module Spec 
     | 
|
| 
       232 
256 
     | 
    
         
             
                  end
         
     | 
| 
       233 
257 
     | 
    
         
             
                end
         
     | 
| 
       234 
258 
     | 
    
         | 
| 
       235 
     | 
    
         
            -
                class MethodStub < BaseExpectation
         
     | 
| 
       236 
     | 
    
         
            -
                  def initialize(message, expectation_ordering, expected_from, sym, method_block)
         
     | 
| 
       237 
     | 
    
         
            -
                    super(message, expectation_ordering, expected_from, sym, method_block, 0)
         
     | 
| 
       238 
     | 
    
         
            -
                    @expected_received_count = :any
         
     | 
| 
       239 
     | 
    
         
            -
                  end
         
     | 
| 
       240 
     | 
    
         
            -
                end
         
     | 
| 
       241 
259 
     | 
    
         
             
              end
         
     | 
| 
       242 
260 
     | 
    
         
             
            end
         
     | 
    
        data/lib/spec/mocks/methods.rb
    CHANGED
    
    | 
         @@ -9,8 +9,8 @@ module Spec 
     | 
|
| 
       9 
9 
     | 
    
         
             
                    __mock_proxy.add_negative_message_expectation(caller(1)[0], sym.to_sym, &block)
         
     | 
| 
       10 
10 
     | 
    
         
             
                  end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                  def stub!(sym)
         
     | 
| 
       13 
     | 
    
         
            -
                    __mock_proxy.add_stub(caller(1)[0], sym.to_sym)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  def stub!(sym, opts={})
         
     | 
| 
      
 13 
     | 
    
         
            +
                    __mock_proxy.add_stub(caller(1)[0], sym.to_sym, opts)
         
     | 
| 
       14 
14 
     | 
    
         
             
                  end
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                  def received_message?(sym, *args, &block) #:nodoc:
         
     | 
    
        data/lib/spec/mocks/mock.rb
    CHANGED
    
    | 
         @@ -6,9 +6,18 @@ module Spec 
     | 
|
| 
       6 
6 
     | 
    
         
             
                  # Creates a new mock with a +name+ (that will be used in error messages only)
         
     | 
| 
       7 
7 
     | 
    
         
             
                  # == Options:
         
     | 
| 
       8 
8 
     | 
    
         
             
                  # * <tt>:null_object</tt> - if true, the mock object acts as a forgiving null object allowing any message to be sent to it.
         
     | 
| 
       9 
     | 
    
         
            -
                  def initialize(name,  
     | 
| 
      
 9 
     | 
    
         
            +
                  def initialize(name, stubs_and_options={})
         
     | 
| 
       10 
10 
     | 
    
         
             
                    @name = name
         
     | 
| 
       11 
     | 
    
         
            -
                    @options =  
     | 
| 
      
 11 
     | 
    
         
            +
                    @options = parse_options(stubs_and_options)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    assign_stubs(stubs_and_options)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
                  
         
     | 
| 
      
 15 
     | 
    
         
            +
                  # This allows for comparing the mock to other objects that proxy
         
     | 
| 
      
 16 
     | 
    
         
            +
                  #  such as ActiveRecords belongs_to proxy objects
         
     | 
| 
      
 17 
     | 
    
         
            +
                  #  By making the other object run the comparison, we're sure the call gets delegated to the proxy target
         
     | 
| 
      
 18 
     | 
    
         
            +
                  # This is an unfortunate side effect from ActiveRecord, but this should be safe unless the RHS redefines == in a nonsensical manner
         
     | 
| 
      
 19 
     | 
    
         
            +
                  def ==(other)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    other == __mock_proxy
         
     | 
| 
       12 
21 
     | 
    
         
             
                  end
         
     | 
| 
       13 
22 
     | 
    
         | 
| 
       14 
23 
     | 
    
         
             
                  def method_missing(sym, *args, &block)
         
     | 
| 
         @@ -16,7 +25,7 @@ module Spec 
     | 
|
| 
       16 
25 
     | 
    
         
             
                    begin
         
     | 
| 
       17 
26 
     | 
    
         
             
                      return self if __mock_proxy.null_object?
         
     | 
| 
       18 
27 
     | 
    
         
             
                      super(sym, *args, &block)
         
     | 
| 
       19 
     | 
    
         
            -
                    rescue  
     | 
| 
      
 28 
     | 
    
         
            +
                    rescue NameError
         
     | 
| 
       20 
29 
     | 
    
         
             
                      __mock_proxy.raise_unexpected_message_error sym, *args
         
     | 
| 
       21 
30 
     | 
    
         
             
                    end
         
     | 
| 
       22 
31 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -24,6 +33,18 @@ module Spec 
     | 
|
| 
       24 
33 
     | 
    
         
             
                  def inspect
         
     | 
| 
       25 
34 
     | 
    
         
             
                    "#<#{self.class}:#{sprintf '0x%x', self.object_id} @name=#{@name.inspect}>"
         
     | 
| 
       26 
35 
     | 
    
         
             
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
                  
         
     | 
| 
      
 37 
     | 
    
         
            +
                  private
         
     | 
| 
      
 38 
     | 
    
         
            +
                  
         
     | 
| 
      
 39 
     | 
    
         
            +
                    def parse_options(options)
         
     | 
| 
      
 40 
     | 
    
         
            +
                      options.has_key?(:null_object) ? {:null_object => options.delete(:null_object)} : {}
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
                    
         
     | 
| 
      
 43 
     | 
    
         
            +
                    def assign_stubs(stubs)
         
     | 
| 
      
 44 
     | 
    
         
            +
                      stubs.each_pair do |message, response|
         
     | 
| 
      
 45 
     | 
    
         
            +
                        stub!(message).and_return(response)
         
     | 
| 
      
 46 
     | 
    
         
            +
                      end
         
     | 
| 
      
 47 
     | 
    
         
            +
                    end
         
     | 
| 
       27 
48 
     | 
    
         
             
                end
         
     | 
| 
       28 
49 
     | 
    
         
             
              end
         
     | 
| 
       29 
50 
     | 
    
         
             
            end
         
     | 
    
        data/lib/spec/mocks/proxy.rb
    CHANGED
    
    | 
         @@ -22,29 +22,27 @@ module Spec 
     | 
|
| 
       22 
22 
     | 
    
         
             
                  end
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
24 
     | 
    
         
             
                  def add_message_expectation(expected_from, sym, opts={}, &block)
         
     | 
| 
       25 
     | 
    
         
            -
                    __add sym 
     | 
| 
      
 25 
     | 
    
         
            +
                    __add sym
         
     | 
| 
       26 
26 
     | 
    
         
             
                    @expectations << MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil, 1, opts)
         
     | 
| 
       27 
27 
     | 
    
         
             
                    @expectations.last
         
     | 
| 
       28 
28 
     | 
    
         
             
                  end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  def add_negative_message_expectation(expected_from, sym, &block)
         
     | 
| 
       31 
     | 
    
         
            -
                    __add sym 
     | 
| 
      
 31 
     | 
    
         
            +
                    __add sym
         
     | 
| 
       32 
32 
     | 
    
         
             
                    @expectations << NegativeMessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil)
         
     | 
| 
       33 
33 
     | 
    
         
             
                    @expectations.last
         
     | 
| 
       34 
34 
     | 
    
         
             
                  end
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
                  def add_stub(expected_from, sym)
         
     | 
| 
       37 
     | 
    
         
            -
                    __add sym 
     | 
| 
       38 
     | 
    
         
            -
                    @stubs.unshift  
     | 
| 
      
 36 
     | 
    
         
            +
                  def add_stub(expected_from, sym, opts={})
         
     | 
| 
      
 37 
     | 
    
         
            +
                    __add sym
         
     | 
| 
      
 38 
     | 
    
         
            +
                    @stubs.unshift MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, nil, :any, opts)
         
     | 
| 
       39 
39 
     | 
    
         
             
                    @stubs.first
         
     | 
| 
       40 
40 
     | 
    
         
             
                  end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                  def verify #:nodoc:
         
     | 
| 
       43 
     | 
    
         
            -
                     
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                     
     | 
| 
       46 
     | 
    
         
            -
                      reset
         
     | 
| 
       47 
     | 
    
         
            -
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
                    verify_expectations
         
     | 
| 
      
 44 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 45 
     | 
    
         
            +
                    reset
         
     | 
| 
       48 
46 
     | 
    
         
             
                  end
         
     | 
| 
       49 
47 
     | 
    
         | 
| 
       50 
48 
     | 
    
         
             
                  def reset
         
     | 
| 
         @@ -55,8 +53,7 @@ module Spec 
     | 
|
| 
       55 
53 
     | 
    
         
             
                  end
         
     | 
| 
       56 
54 
     | 
    
         | 
| 
       57 
55 
     | 
    
         
             
                  def received_message?(sym, *args, &block)
         
     | 
| 
       58 
     | 
    
         
            -
                     
     | 
| 
       59 
     | 
    
         
            -
                    return false
         
     | 
| 
      
 56 
     | 
    
         
            +
                    @messages_received.any? {|array| array == [sym, args, block]}
         
     | 
| 
       60 
57 
     | 
    
         
             
                  end
         
     | 
| 
       61 
58 
     | 
    
         | 
| 
       62 
59 
     | 
    
         
             
                  def has_negative_expectation?(sym)
         
     | 
| 
         @@ -66,7 +63,7 @@ module Spec 
     | 
|
| 
       66 
63 
     | 
    
         
             
                  def message_received(sym, *args, &block)
         
     | 
| 
       67 
64 
     | 
    
         
             
                    if expectation = find_matching_expectation(sym, *args)
         
     | 
| 
       68 
65 
     | 
    
         
             
                      expectation.invoke(args, block)
         
     | 
| 
       69 
     | 
    
         
            -
                    elsif stub = find_matching_method_stub(sym)
         
     | 
| 
      
 66 
     | 
    
         
            +
                    elsif stub = find_matching_method_stub(sym, *args)
         
     | 
| 
       70 
67 
     | 
    
         
             
                      stub.invoke([], block)
         
     | 
| 
       71 
68 
     | 
    
         
             
                    elsif expectation = find_almost_matching_expectation(sym, *args)
         
     | 
| 
       72 
69 
     | 
    
         
             
                      raise_unexpected_message_args_error(expectation, *args) unless has_negative_expectation?(sym) unless null_object?
         
     | 
| 
         @@ -85,14 +82,17 @@ module Spec 
     | 
|
| 
       85 
82 
     | 
    
         | 
| 
       86 
83 
     | 
    
         
             
                private
         
     | 
| 
       87 
84 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
                  def __add(sym 
     | 
| 
      
 85 
     | 
    
         
            +
                  def __add(sym)
         
     | 
| 
       89 
86 
     | 
    
         
             
                    $rspec_mocks.add(@target) unless $rspec_mocks.nil?
         
     | 
| 
       90 
87 
     | 
    
         
             
                    define_expected_method(sym)
         
     | 
| 
       91 
88 
     | 
    
         
             
                  end
         
     | 
| 
       92 
89 
     | 
    
         | 
| 
       93 
90 
     | 
    
         
             
                  def define_expected_method(sym)
         
     | 
| 
       94 
     | 
    
         
            -
                    if target_responds_to?(sym) &&  
     | 
| 
       95 
     | 
    
         
            -
                       
     | 
| 
      
 91 
     | 
    
         
            +
                    if target_responds_to?(sym) && !metaclass.method_defined?(munge(sym))
         
     | 
| 
      
 92 
     | 
    
         
            +
                      munged_sym = munge(sym)
         
     | 
| 
      
 93 
     | 
    
         
            +
                      metaclass.instance_eval do
         
     | 
| 
      
 94 
     | 
    
         
            +
                        alias_method munged_sym, sym if method_defined?(sym.to_s)
         
     | 
| 
      
 95 
     | 
    
         
            +
                      end
         
     | 
| 
       96 
96 
     | 
    
         
             
                      @proxied_methods << sym
         
     | 
| 
       97 
97 
     | 
    
         
             
                    end
         
     | 
| 
       98 
98 
     | 
    
         | 
| 
         @@ -141,11 +141,14 @@ module Spec 
     | 
|
| 
       141 
141 
     | 
    
         | 
| 
       142 
142 
     | 
    
         
             
                  def reset_proxied_methods
         
     | 
| 
       143 
143 
     | 
    
         
             
                    @proxied_methods.each do |sym|
         
     | 
| 
       144 
     | 
    
         
            -
                       
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
                         
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
      
 144 
     | 
    
         
            +
                      munged_sym = munge(sym)
         
     | 
| 
      
 145 
     | 
    
         
            +
                      metaclass.instance_eval do
         
     | 
| 
      
 146 
     | 
    
         
            +
                        if method_defined?(munged_sym.to_s)
         
     | 
| 
      
 147 
     | 
    
         
            +
                          alias_method sym, munged_sym
         
     | 
| 
      
 148 
     | 
    
         
            +
                          undef_method munged_sym
         
     | 
| 
      
 149 
     | 
    
         
            +
                        else
         
     | 
| 
      
 150 
     | 
    
         
            +
                          undef_method sym
         
     | 
| 
      
 151 
     | 
    
         
            +
                        end
         
     | 
| 
       149 
152 
     | 
    
         
             
                      end
         
     | 
| 
       150 
153 
     | 
    
         
             
                    end
         
     | 
| 
       151 
154 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -158,8 +161,8 @@ module Spec 
     | 
|
| 
       158 
161 
     | 
    
         
             
                    @expectations.find {|expectation| expectation.matches_name_but_not_args(sym, args)}
         
     | 
| 
       159 
162 
     | 
    
         
             
                  end
         
     | 
| 
       160 
163 
     | 
    
         | 
| 
       161 
     | 
    
         
            -
                  def find_matching_method_stub(sym)
         
     | 
| 
       162 
     | 
    
         
            -
                    @stubs.find {|stub| stub.matches(sym,  
     | 
| 
      
 164 
     | 
    
         
            +
                  def find_matching_method_stub(sym, *args)
         
     | 
| 
      
 165 
     | 
    
         
            +
                    @stubs.find {|stub| stub.matches(sym, args)}
         
     | 
| 
       163 
166 
     | 
    
         
             
                  end
         
     | 
| 
       164 
167 
     | 
    
         | 
| 
       165 
168 
     | 
    
         
             
                end
         
     | 
    
        data/lib/spec/mocks/space.rb
    CHANGED
    
    
| 
         @@ -1,30 +1,38 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Spec
         
     | 
| 
       2 
2 
     | 
    
         
             
              module Mocks
         
     | 
| 
       3 
     | 
    
         
            -
                module  
     | 
| 
      
 3 
     | 
    
         
            +
                module ExampleMethods
         
     | 
| 
       4 
4 
     | 
    
         
             
                  include Spec::Mocks::ArgumentConstraintMatchers
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
                  # Shortcut for creating an instance of Spec::Mocks::Mock.
         
     | 
| 
       7 
     | 
    
         
            -
                   
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                   
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                  #  
     | 
| 
       12 
     | 
    
         
            -
                  #  
     | 
| 
      
 7 
     | 
    
         
            +
                  #
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # +name+ is used for failure reporting, so you should use the
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # role that the mock 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.
         
     | 
| 
       13 
14 
     | 
    
         
             
                  #
         
     | 
| 
       14 
15 
     | 
    
         
             
                  # == Examples
         
     | 
| 
       15 
16 
     | 
    
         
             
                  #
         
     | 
| 
       16 
     | 
    
         
            -
                  #   stub_thing =  
     | 
| 
      
 17 
     | 
    
         
            +
                  #   stub_thing = mock("thing", :a => "A")
         
     | 
| 
       17 
18 
     | 
    
         
             
                  #   stub_thing.a == "A" => true
         
     | 
| 
       18 
19 
     | 
    
         
             
                  #
         
     | 
| 
       19 
20 
     | 
    
         
             
                  #   stub_person = stub("thing", :name => "Joe", :email => "joe@domain.com")
         
     | 
| 
       20 
21 
     | 
    
         
             
                  #   stub_person.name => "Joe"
         
     | 
| 
       21 
22 
     | 
    
         
             
                  #   stub_person.email => "joe@domain.com"
         
     | 
| 
       22 
     | 
    
         
            -
                  def  
     | 
| 
       23 
     | 
    
         
            -
                     
     | 
| 
       24 
     | 
    
         
            -
                    stubs.each { |key, value| object_stub.stub!(key).and_return(value) }
         
     | 
| 
       25 
     | 
    
         
            -
                    object_stub
         
     | 
| 
      
 23 
     | 
    
         
            +
                  def mock(name, stubs_and_options={})
         
     | 
| 
      
 24 
     | 
    
         
            +
                    Spec::Mocks::Mock.new(name, stubs_and_options)
         
     | 
| 
       26 
25 
     | 
    
         
             
                  end
         
     | 
| 
       27 
26 
     | 
    
         | 
| 
      
 27 
     | 
    
         
            +
                  alias :stub :mock
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  # Shortcut for creating a mock object that will return itself in response
         
     | 
| 
      
 30 
     | 
    
         
            +
                  # to any message it receives that it hasn't been explicitly instructed
         
     | 
| 
      
 31 
     | 
    
         
            +
                  # to respond to.
         
     | 
| 
      
 32 
     | 
    
         
            +
                  def stub_everything(name = 'stub')
         
     | 
| 
      
 33 
     | 
    
         
            +
                    mock(name, :null_object => true)
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
       28 
36 
     | 
    
         
             
                end
         
     | 
| 
       29 
37 
     | 
    
         
             
              end
         
     | 
| 
       30 
38 
     | 
    
         
             
            end
         
     |