rspec 1.1.11 → 1.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.autotest +4 -0
- data/History.txt +55 -0
- data/Manifest.txt +102 -122
- data/README.txt +30 -12
- data/Rakefile +10 -10
- data/TODO.txt +10 -2
- data/{failing_examples → examples/failing}/README.txt +0 -0
- data/{failing_examples → examples/failing}/diffing_spec.rb +0 -0
- data/{failing_examples → examples/failing}/failing_autogenerated_docstrings_example.rb +0 -0
- data/{failing_examples/failure_in_teardown.rb → examples/failing/failure_in_after.rb} +1 -1
- data/{failing_examples/failure_in_setup.rb → examples/failing/failure_in_before.rb} +1 -1
- data/{failing_examples → examples/failing}/mocking_example.rb +0 -0
- data/{failing_examples → examples/failing}/mocking_with_flexmock.rb +0 -0
- data/{failing_examples → examples/failing}/mocking_with_mocha.rb +0 -0
- data/{failing_examples → examples/failing}/mocking_with_rr.rb +0 -0
- data/{failing_examples → examples/failing}/partial_mock_example.rb +0 -0
- data/{failing_examples → examples/failing}/predicate_example.rb +5 -0
- data/{failing_examples → examples/failing}/raising_example.rb +0 -0
- data/{failing_examples → examples/failing}/spec_helper.rb +1 -1
- data/{failing_examples → examples/failing}/syntax_error_example.rb +0 -0
- data/{failing_examples → examples/failing}/team_spec.rb +0 -0
- data/{failing_examples → examples/failing}/timeout_behaviour.rb +0 -0
- data/examples/{pure → passing}/autogenerated_docstrings_example.rb +6 -0
- data/examples/{pure → passing}/before_and_after_example.rb +0 -0
- data/examples/{pure → passing}/behave_as_example.rb +0 -0
- data/examples/{pure → passing}/custom_expectation_matchers.rb +0 -0
- data/examples/{pure → passing}/custom_formatter.rb +1 -1
- data/examples/{pure → passing}/dynamic_spec.rb +2 -2
- data/examples/{pure → passing}/file_accessor.rb +0 -0
- data/examples/{pure → passing}/file_accessor_spec.rb +0 -0
- data/examples/{pure → passing}/greeter_spec.rb +0 -0
- data/examples/{pure → passing}/helper_method_example.rb +0 -0
- data/examples/{pure → passing}/io_processor.rb +0 -0
- data/examples/{pure → passing}/io_processor_spec.rb +0 -0
- data/examples/{pure → passing}/legacy_spec.rb +0 -0
- data/examples/{pure → passing}/mocking_example.rb +0 -0
- data/examples/{pure/multi_threaded_behaviour_runner.rb → passing/multi_threaded_example_group_runner.rb} +1 -3
- data/examples/{pure → passing}/nested_classes_example.rb +0 -0
- data/examples/{pure → passing}/partial_mock_example.rb +0 -0
- data/examples/{pure → passing}/pending_example.rb +0 -0
- data/examples/{pure → passing}/predicate_example.rb +0 -0
- data/examples/{pure → passing}/priority.txt +0 -0
- data/examples/{pure → passing}/shared_example_group_example.rb +0 -0
- data/examples/{pure → passing}/shared_stack_examples.rb +1 -3
- data/examples/passing/simple_matcher_example.rb +31 -0
- data/examples/{pure → passing}/spec_helper.rb +0 -0
- data/examples/{pure → passing}/stack.rb +0 -0
- data/examples/{pure → passing}/stack_spec.rb +3 -2
- data/examples/{pure → passing}/stack_spec_with_nested_example_groups.rb +0 -0
- data/examples/{pure → passing}/stubbing_example.rb +0 -0
- data/examples/{pure → passing}/yielding_example.rb +0 -0
- data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +86 -0
- data/features/before_and_after_blocks/before_and_after_blocks.feature +168 -0
- data/{stories/example_groups/autogenerated_docstrings → features/example_groups/autogenerated_docstrings.feature} +5 -5
- data/{stories/example_groups/example_group_with_should_methods → features/example_groups/example_group_with_should_methods.feature} +3 -3
- data/{stories/example_groups/nested_groups → features/example_groups/nested_groups.feature} +4 -4
- data/{stories/example_groups/output → features/example_groups/output.feature} +3 -8
- data/{stories/interop/examples_and_tests_together → features/interop/examples_and_tests_together.feature} +5 -4
- data/features/interop/test_but_not_test_unit.feature +14 -0
- data/{stories/interop/test_case_with_should_methods → features/interop/test_case_with_should_methods.feature} +2 -2
- data/{stories/mock_framework_integration/use_flexmock.story → features/mock_framework_integration/use_flexmock.feature} +1 -1
- data/features/step_definitions/running_rspec.rb +54 -0
- data/features/support/env.rb +26 -0
- data/{stories/resources → features/support}/helpers/cmdline.rb +0 -0
- data/{stories/resources → features/support}/helpers/story_helper.rb +1 -1
- data/{stories/resources → features/support}/matchers/smart_match.rb +0 -0
- data/{plugins → lib/adapters}/mock_frameworks/flexmock.rb +1 -1
- data/{plugins → lib/adapters}/mock_frameworks/mocha.rb +1 -1
- data/{plugins → lib/adapters}/mock_frameworks/rr.rb +1 -1
- data/{plugins → lib/adapters}/mock_frameworks/rspec.rb +2 -2
- data/lib/autotest/rspec.rb +4 -3
- data/lib/spec.rb +2 -27
- data/lib/spec/dsl.rb +1 -0
- data/lib/spec/{extensions → dsl}/main.rb +10 -10
- data/lib/spec/example.rb +175 -1
- data/lib/spec/example/before_and_after_hooks.rb +30 -24
- data/lib/spec/example/example_group.rb +1 -0
- data/lib/spec/example/example_group_factory.rb +26 -9
- data/lib/spec/example/example_group_methods.rb +138 -113
- data/lib/spec/example/example_methods.rb +88 -25
- data/lib/spec/example/shared_example_group.rb +28 -21
- data/lib/spec/expectations.rb +22 -18
- data/lib/spec/expectations/handler.rb +16 -36
- data/lib/spec/interop/test/unit/testcase.rb +19 -17
- data/lib/spec/interop/test/unit/testresult.rb +1 -1
- data/lib/spec/interop/test/unit/testsuite_adapter.rb +1 -1
- data/lib/spec/matchers.rb +7 -28
- data/lib/spec/matchers/be.rb +103 -116
- data/lib/spec/matchers/be_close.rb +6 -22
- data/lib/spec/matchers/eql.rb +7 -25
- data/lib/spec/matchers/equal.rb +7 -25
- data/lib/spec/matchers/errors.rb +5 -0
- data/lib/spec/matchers/exist.rb +8 -14
- data/lib/spec/matchers/generated_descriptions.rb +48 -0
- data/lib/spec/matchers/has.rb +12 -28
- data/lib/spec/matchers/include.rb +12 -9
- data/lib/spec/matchers/match.rb +8 -27
- data/lib/spec/matchers/match_array.rb +79 -0
- data/lib/spec/matchers/method_missing.rb +9 -0
- data/lib/spec/matchers/operator_matcher.rb +39 -48
- data/lib/spec/matchers/raise_error.rb +4 -8
- data/lib/spec/matchers/respond_to.rb +33 -8
- data/lib/spec/matchers/throw_symbol.rb +49 -17
- data/lib/spec/matchers/wrap_expectation.rb +55 -0
- data/lib/spec/mocks/argument_constraints.rb +77 -5
- data/lib/spec/mocks/message_expectation.rb +7 -7
- data/lib/spec/mocks/proxy.rb +14 -12
- data/lib/spec/rake/spectask.rb +4 -6
- data/lib/spec/ruby.rb +9 -0
- data/lib/spec/runner.rb +37 -162
- data/lib/spec/runner/backtrace_tweaker.rb +5 -3
- data/lib/spec/runner/class_and_arguments_parser.rb +7 -9
- data/lib/spec/runner/command_line.rb +6 -8
- data/lib/spec/{example → runner}/configuration.rb +46 -47
- data/lib/spec/runner/example_group_runner.rb +15 -4
- data/lib/spec/runner/formatter/base_text_formatter.rb +4 -3
- data/lib/spec/runner/formatter/html_formatter.rb +14 -11
- data/lib/spec/runner/formatter/nested_text_formatter.rb +2 -2
- data/lib/spec/runner/heckle_runner.rb +58 -56
- data/lib/spec/runner/option_parser.rb +8 -4
- data/lib/spec/runner/options.rb +29 -14
- data/lib/spec/runner/reporter.rb +1 -1
- data/lib/spec/runner/spec_parser.rb +11 -9
- data/lib/spec/story/runner.rb +40 -42
- data/lib/spec/story/runner/story_runner.rb +10 -6
- data/lib/spec/story/world.rb +66 -70
- data/lib/spec/version.rb +4 -2
- data/{rake_tasks → resources/rake}/examples.rake +0 -0
- data/{rake_tasks → resources/rake}/examples_with_rcov.rake +0 -0
- data/{rake_tasks → resources/rake}/failing_examples_with_html.rake +0 -0
- data/{rake_tasks → resources/rake}/verify_rcov.rake +0 -0
- data/{stories/resources → resources}/spec/example_group_with_should_methods.rb +1 -1
- data/{stories/resources → resources}/spec/simple_spec.rb +1 -1
- data/resources/spec/spec_with_flexmock.rb +19 -0
- data/{stories/resources → resources}/test/spec_and_test_together.rb +1 -1
- data/resources/test/spec_including_test_but_not_unit.rb +11 -0
- data/{stories/resources → resources}/test/test_case_with_should_methods.rb +2 -2
- data/rspec.gemspec +16 -6
- data/spec/autotest/autotest_helper.rb +2 -2
- data/spec/autotest/discover_spec.rb +4 -15
- data/spec/autotest/failed_results_re_spec.rb +24 -0
- data/spec/autotest/rspec_spec.rb +2 -38
- data/spec/spec/dsl/main_spec.rb +88 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +6 -2
- data/spec/spec/example/example_group_factory_spec.rb +50 -10
- data/spec/spec/example/example_group_methods_spec.rb +210 -160
- data/spec/spec/example/example_group_spec.rb +44 -52
- data/spec/spec/example/example_matcher_spec.rb +6 -23
- data/spec/spec/example/example_methods_spec.rb +176 -54
- data/spec/spec/example/helper_method_spec.rb +24 -0
- data/spec/spec/example/pending_module_spec.rb +2 -8
- data/spec/spec/example/shared_example_group_spec.rb +56 -80
- data/spec/spec/expectations/extensions/object_spec.rb +0 -50
- data/spec/spec/expectations/wrap_expectation_spec.rb +30 -0
- data/spec/spec/interop/test/unit/spec_spec.rb +1 -5
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +4 -0
- data/spec/spec/matchers/be_close_spec.rb +12 -10
- data/spec/spec/matchers/be_spec.rb +62 -7
- data/spec/spec/matchers/description_generation_spec.rb +19 -0
- data/spec/spec/matchers/eql_spec.rb +7 -6
- data/spec/spec/matchers/equal_spec.rb +7 -6
- data/spec/spec/matchers/handler_spec.rb +4 -43
- data/spec/spec/matchers/has_spec.rb +1 -1
- data/spec/spec/matchers/have_spec.rb +23 -18
- data/spec/spec/matchers/include_spec.rb +24 -0
- data/spec/spec/matchers/match_array_spec.rb +83 -0
- data/spec/spec/matchers/matcher_methods_spec.rb +1 -13
- data/spec/spec/matchers/raise_error_spec.rb +18 -0
- data/spec/spec/matchers/respond_to_spec.rb +71 -9
- data/spec/spec/matchers/throw_symbol_spec.rb +85 -43
- data/spec/spec/mocks/bug_report_11545_spec.rb +4 -5
- data/spec/spec/mocks/bug_report_496.rb +11 -9
- data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
- data/spec/spec/mocks/hash_including_matcher_spec.rb +39 -2
- data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
- data/spec/spec/mocks/mock_spec.rb +5 -6
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +2 -2
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +18 -3
- data/spec/spec/mocks/stub_spec.rb +6 -0
- data/spec/spec/mocks/stubbed_message_expectations_spec.rb +14 -0
- data/spec/spec/runner/command_line_spec.rb +4 -4
- data/spec/spec/runner/configuration_spec.rb +301 -0
- data/spec/spec/runner/drb_command_line_spec.rb +4 -4
- data/spec/spec/runner/example_group_runner_spec.rb +33 -0
- data/spec/spec/runner/formatter/base_formatter_spec.rb +13 -102
- data/spec/spec/runner/formatter/base_text_formatter_spec.rb +23 -0
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +5 -5
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +3 -3
- data/spec/spec/runner/formatter/html_formatted-1.8.4.html +6 -6
- data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +9 -9
- data/spec/spec/runner/formatter/html_formatted-1.8.5.html +6 -6
- data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +10 -10
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +39 -30
- data/spec/spec/runner/formatter/html_formatted-1.8.7.html +379 -0
- data/spec/spec/runner/formatter/html_formatted-1.9.1.html +379 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +14 -13
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +5 -5
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +7 -17
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +18 -17
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +5 -5
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +6 -6
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +33 -30
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +373 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +373 -0
- data/spec/spec/runner/heckler_spec.rb +16 -9
- data/spec/spec/runner/option_parser_spec.rb +3 -18
- data/spec/spec/runner/options_spec.rb +27 -8
- data/spec/spec/runner/reporter_spec.rb +5 -5
- data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
- data/spec/spec/runner/resources/utf8_encoded.rb +7 -0
- data/spec/spec/runner/spec_parser_spec.rb +85 -79
- data/spec/spec/spec_spec.rb +21 -0
- data/spec/spec_helper.rb +9 -1
- data/story_server/prototype/javascripts/prototype.js +1 -1
- metadata +119 -131
- data/examples/stories/adder.rb +0 -13
- data/examples/stories/addition +0 -34
- data/examples/stories/addition.rb +0 -9
- data/examples/stories/calculator.rb +0 -65
- data/examples/stories/game-of-life/.loadpath +0 -5
- data/examples/stories/game-of-life/README.txt +0 -21
- data/examples/stories/game-of-life/behaviour/everything.rb +0 -6
- data/examples/stories/game-of-life/behaviour/examples/examples.rb +0 -3
- data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +0 -35
- data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +0 -66
- data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +0 -21
- data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +0 -21
- data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +0 -42
- data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +0 -42
- data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +0 -17
- data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +0 -53
- data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +0 -52
- data/examples/stories/game-of-life/behaviour/stories/helper.rb +0 -6
- data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +0 -26
- data/examples/stories/game-of-life/behaviour/stories/steps.rb +0 -5
- data/examples/stories/game-of-life/behaviour/stories/stories.rb +0 -3
- data/examples/stories/game-of-life/behaviour/stories/stories.txt +0 -22
- data/examples/stories/game-of-life/life.rb +0 -3
- data/examples/stories/game-of-life/life/game.rb +0 -23
- data/examples/stories/game-of-life/life/grid.rb +0 -43
- data/examples/stories/helper.rb +0 -9
- data/examples/stories/steps/addition_steps.rb +0 -18
- data/lib/spec/adapters.rb +0 -1
- data/lib/spec/adapters/ruby_engine.rb +0 -26
- data/lib/spec/adapters/ruby_engine/mri.rb +0 -8
- data/lib/spec/adapters/ruby_engine/rubinius.rb +0 -8
- data/lib/spec/extensions.rb +0 -4
- data/lib/spec/extensions/class.rb +0 -24
- data/lib/spec/extensions/metaclass.rb +0 -7
- data/lib/spec/extensions/object.rb +0 -6
- data/spec/spec/adapters/ruby_engine_spec.rb +0 -16
- data/spec/spec/example/configuration_spec.rb +0 -296
- data/spec/spec/example/example_runner_spec.rb +0 -194
- data/spec/spec/extensions/main_spec.rb +0 -71
- data/stories/all.rb +0 -5
- data/stories/configuration/before_blocks.story +0 -21
- data/stories/configuration/stories.rb +0 -7
- data/stories/example_groups/stories.rb +0 -7
- data/stories/helper.rb +0 -6
- data/stories/interop/stories.rb +0 -7
- data/stories/mock_framework_integration/stories.rb +0 -7
- data/stories/pending_stories/README +0 -3
- data/stories/resources/spec/before_blocks_example.rb +0 -32
- data/stories/resources/spec/spec_with_flexmock.rb +0 -18
- data/stories/resources/steps/running_rspec.rb +0 -50
- data/stories/resources/stories/failing_story.rb +0 -15
- data/stories/stories/multiline_steps.story +0 -23
- data/stories/stories/steps/multiline_steps.rb +0 -13
- data/stories/stories/stories.rb +0 -6
| @@ -10,6 +10,10 @@ module Spec | |
| 10 10 | 
             
                      parser.parse(args)
         | 
| 11 11 | 
             
                      parser.options
         | 
| 12 12 | 
             
                    end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    def spec_command?
         | 
| 15 | 
            +
                      $0.split('/').last == 'spec'
         | 
| 16 | 
            +
                    end
         | 
| 13 17 | 
             
                  end
         | 
| 14 18 |  | 
| 15 19 | 
             
                  attr_reader :options
         | 
| @@ -34,8 +38,8 @@ module Spec | |
| 34 38 | 
             
                                                                      "an example name directly, causing RSpec to run just the example",
         | 
| 35 39 | 
             
                                                                      "matching that name"],
         | 
| 36 40 | 
             
                    :specification => ["-s", "--specification [NAME]", "DEPRECATED - use -e instead", "(This will be removed when autotest works with -e)"],
         | 
| 37 | 
            -
                    :line => ["-l", "--line LINE_NUMBER", Integer, "Execute  | 
| 38 | 
            -
                                                                   "(does not work for dynamically generated  | 
| 41 | 
            +
                    :line => ["-l", "--line LINE_NUMBER", Integer, "Execute example group or example at given line.",
         | 
| 42 | 
            +
                                                                   "(does not work for dynamically generated examples)"],
         | 
| 39 43 | 
             
                    :format => ["-f", "--format FORMAT[:WHERE]","Specifies what format to use for output. Specify WHERE to tell",
         | 
| 40 44 | 
             
                                                                "the formatter where to write the output. All built-in formats",
         | 
| 41 45 | 
             
                                                                "expect WHERE to be a file name, and will write to $stdout if it's",
         | 
| @@ -115,10 +119,10 @@ module Spec | |
| 115 119 | 
             
                    on(*OPTIONS[:version])          {parse_version}
         | 
| 116 120 | 
             
                    on_tail(*OPTIONS[:help])        {parse_help}
         | 
| 117 121 | 
             
                  end
         | 
| 118 | 
            -
             | 
| 122 | 
            +
                  
         | 
| 119 123 | 
             
                  def order!(argv, &blk)
         | 
| 120 124 | 
             
                    @argv = argv.dup
         | 
| 121 | 
            -
                    @argv = (@argv.empty? &&  | 
| 125 | 
            +
                    @argv = (@argv.empty? && self.class.spec_command?) ? ['--help'] : @argv 
         | 
| 122 126 | 
             
                    @options.argv = @argv.dup
         | 
| 123 127 | 
             
                    return if parse_generate_options
         | 
| 124 128 | 
             
                    return if parse_drb
         | 
    
        data/lib/spec/runner/options.rb
    CHANGED
    
    | @@ -40,7 +40,6 @@ module Spec | |
| 40 40 | 
             
                    :diff_format,
         | 
| 41 41 | 
             
                    :dry_run,
         | 
| 42 42 | 
             
                    :profile,
         | 
| 43 | 
            -
                    :examples,
         | 
| 44 43 | 
             
                    :heckle_runner,
         | 
| 45 44 | 
             
                    :line_number,
         | 
| 46 45 | 
             
                    :loadby,
         | 
| @@ -51,12 +50,10 @@ module Spec | |
| 51 50 | 
             
                    :user_input_for_runner,
         | 
| 52 51 | 
             
                    :error_stream,
         | 
| 53 52 | 
             
                    :output_stream,
         | 
| 54 | 
            -
                    :before_suite_parts,
         | 
| 55 | 
            -
                    :after_suite_parts,
         | 
| 56 53 | 
             
                    # TODO: BT - Figure out a better name
         | 
| 57 54 | 
             
                    :argv
         | 
| 58 55 | 
             
                  )
         | 
| 59 | 
            -
                  attr_reader :colour, :differ_class, :files, :example_groups
         | 
| 56 | 
            +
                  attr_reader :colour, :differ_class, :files, :examples, :example_groups
         | 
| 60 57 |  | 
| 61 58 | 
             
                  def initialize(error_stream, output_stream)
         | 
| 62 59 | 
             
                    @error_stream = error_stream
         | 
| @@ -76,7 +73,6 @@ module Spec | |
| 76 73 | 
             
                    @examples_run = false
         | 
| 77 74 | 
             
                    @examples_should_be_run = nil
         | 
| 78 75 | 
             
                    @user_input_for_runner = nil
         | 
| 79 | 
            -
                    @before_suite_parts = []
         | 
| 80 76 | 
             
                    @after_suite_parts = []
         | 
| 81 77 | 
             
                  end
         | 
| 82 78 |  | 
| @@ -123,6 +119,14 @@ module Spec | |
| 123 119 | 
             
                      end
         | 
| 124 120 | 
             
                    end
         | 
| 125 121 | 
             
                  end
         | 
| 122 | 
            +
                  
         | 
| 123 | 
            +
                  def before_suite_parts
         | 
| 124 | 
            +
                    Spec::Example::BeforeAndAfterHooks.before_suite_parts
         | 
| 125 | 
            +
                  end
         | 
| 126 | 
            +
                  
         | 
| 127 | 
            +
                  def after_suite_parts
         | 
| 128 | 
            +
                    Spec::Example::BeforeAndAfterHooks.after_suite_parts
         | 
| 129 | 
            +
                  end
         | 
| 126 130 |  | 
| 127 131 | 
             
                  def examples_run?
         | 
| 128 132 | 
             
                    @examples_run
         | 
| @@ -130,7 +134,17 @@ module Spec | |
| 130 134 |  | 
| 131 135 | 
             
                  def examples_should_not_be_run
         | 
| 132 136 | 
             
                    @examples_should_be_run = false
         | 
| 133 | 
            -
                  end | 
| 137 | 
            +
                  end
         | 
| 138 | 
            +
                  
         | 
| 139 | 
            +
                  def predicate_matchers
         | 
| 140 | 
            +
                    # TODO - don't like this dependency - perhaps store these in here instead?
         | 
| 141 | 
            +
                    Spec::Runner.configuration.predicate_matchers
         | 
| 142 | 
            +
                  end
         | 
| 143 | 
            +
                  
         | 
| 144 | 
            +
                  def mock_framework
         | 
| 145 | 
            +
                    # TODO - don't like this dependency - perhaps store this in here instead?
         | 
| 146 | 
            +
                    Spec::Runner.configuration.mock_framework
         | 
| 147 | 
            +
                  end
         | 
| 134 148 |  | 
| 135 149 | 
             
                  def colour=(colour)
         | 
| 136 150 | 
             
                    @colour = colour
         | 
| @@ -163,7 +177,7 @@ module Spec | |
| 163 177 |  | 
| 164 178 | 
             
                  def parse_example(example)
         | 
| 165 179 | 
             
                    if(File.file?(example))
         | 
| 166 | 
            -
                      @examples = File.open(example).read.split("\n")
         | 
| 180 | 
            +
                      @examples = [File.open(example).read.split("\n")].flatten
         | 
| 167 181 | 
             
                    else
         | 
| 168 182 | 
             
                      @examples = [example]
         | 
| 169 183 | 
             
                    end
         | 
| @@ -209,11 +223,8 @@ module Spec | |
| 209 223 | 
             
                  end
         | 
| 210 224 |  | 
| 211 225 | 
             
                  def number_of_examples
         | 
| 212 | 
            -
                     | 
| 213 | 
            -
                    @example_groups. | 
| 214 | 
            -
                      total += example_group.number_of_examples
         | 
| 215 | 
            -
                    end
         | 
| 216 | 
            -
                    total
         | 
| 226 | 
            +
                    return examples.size unless examples.empty?
         | 
| 227 | 
            +
                    @example_groups.inject(0) {|sum, group| sum + group.number_of_examples}
         | 
| 217 228 | 
             
                  end
         | 
| 218 229 |  | 
| 219 230 | 
             
                  def files_to_load
         | 
| @@ -232,6 +243,10 @@ module Spec | |
| 232 243 | 
             
                    result
         | 
| 233 244 | 
             
                  end
         | 
| 234 245 |  | 
| 246 | 
            +
                  def dry_run?
         | 
| 247 | 
            +
                    @dry_run == true
         | 
| 248 | 
            +
                  end
         | 
| 249 | 
            +
                  
         | 
| 235 250 | 
             
                  protected
         | 
| 236 251 | 
             
                  def examples_should_be_run?
         | 
| 237 252 | 
             
                    return @examples_should_be_run unless @examples_should_be_run.nil?
         | 
| @@ -265,7 +280,7 @@ module Spec | |
| 265 280 | 
             
                  def custom_runner
         | 
| 266 281 | 
             
                    return nil unless custom_runner?
         | 
| 267 282 | 
             
                    klass_name, arg = ClassAndArgumentsParser.parse(user_input_for_runner)
         | 
| 268 | 
            -
                    runner_type = load_class(klass_name, ' | 
| 283 | 
            +
                    runner_type = load_class(klass_name, 'example group runner', '--runner')
         | 
| 269 284 | 
             
                    return runner_type.new(self, arg)
         | 
| 270 285 | 
             
                  end
         | 
| 271 286 |  | 
| @@ -299,7 +314,7 @@ module Spec | |
| 299 314 | 
             
                          error_stream.puts "You must specify one file, not a directory when using the --line option"
         | 
| 300 315 | 
             
                          exit(1) if stderr?
         | 
| 301 316 | 
             
                        else
         | 
| 302 | 
            -
                          example = SpecParser.new.spec_name_for(files[0], line_number)
         | 
| 317 | 
            +
                          example = SpecParser.new(self).spec_name_for(files[0], line_number)
         | 
| 303 318 | 
             
                          @examples = [example]
         | 
| 304 319 | 
             
                        end
         | 
| 305 320 | 
             
                      else
         | 
    
        data/lib/spec/runner/reporter.rb
    CHANGED
    
    
| @@ -4,15 +4,16 @@ module Spec | |
| 4 4 | 
             
                class SpecParser
         | 
| 5 5 | 
             
                  attr_reader :best_match
         | 
| 6 6 |  | 
| 7 | 
            -
                  def initialize
         | 
| 7 | 
            +
                  def initialize(run_options)
         | 
| 8 8 | 
             
                    @best_match = {}
         | 
| 9 | 
            +
                    @run_options = run_options
         | 
| 9 10 | 
             
                  end
         | 
| 10 11 |  | 
| 11 12 | 
             
                  def spec_name_for(file, line_number)
         | 
| 12 13 | 
             
                    best_match.clear
         | 
| 13 14 | 
             
                    file = File.expand_path(file)
         | 
| 14 | 
            -
                     | 
| 15 | 
            -
                       | 
| 15 | 
            +
                    @run_options.example_groups.each do |example_group|
         | 
| 16 | 
            +
                      consider_example_group_for_best_match example_group, file, line_number
         | 
| 16 17 |  | 
| 17 18 | 
             
                      example_group.examples.each do |example|
         | 
| 18 19 | 
             
                        consider_example_for_best_match example, example_group, file, line_number
         | 
| @@ -31,8 +32,8 @@ module Spec | |
| 31 32 |  | 
| 32 33 | 
             
                protected
         | 
| 33 34 |  | 
| 34 | 
            -
                  def  | 
| 35 | 
            -
                    parsed_backtrace = parse_backtrace(example_group. | 
| 35 | 
            +
                  def consider_example_group_for_best_match(example_group, file, line_number)
         | 
| 36 | 
            +
                    parsed_backtrace = parse_backtrace(example_group.backtrace)
         | 
| 36 37 | 
             
                    parsed_backtrace.each do |example_file, example_line|
         | 
| 37 38 | 
             
                      if is_best_match?(file, line_number, example_file, example_line)
         | 
| 38 39 | 
             
                        best_match.clear
         | 
| @@ -43,7 +44,7 @@ module Spec | |
| 43 44 | 
             
                  end
         | 
| 44 45 |  | 
| 45 46 | 
             
                  def consider_example_for_best_match(example, example_group, file, line_number)
         | 
| 46 | 
            -
                    parsed_backtrace = parse_backtrace(example. | 
| 47 | 
            +
                    parsed_backtrace = parse_backtrace(example.backtrace)
         | 
| 47 48 | 
             
                    parsed_backtrace.each do |example_file, example_line|
         | 
| 48 49 | 
             
                      if is_best_match?(file, line_number, example_file, example_line)
         | 
| 49 50 | 
             
                        best_match.clear
         | 
| @@ -61,9 +62,10 @@ module Spec | |
| 61 62 | 
             
                  end
         | 
| 62 63 |  | 
| 63 64 | 
             
                  def parse_backtrace(backtrace)
         | 
| 64 | 
            -
                    backtrace.collect do |trace_line|
         | 
| 65 | 
            -
                       | 
| 66 | 
            -
                       | 
| 65 | 
            +
                    Array(backtrace).collect do |trace_line|
         | 
| 66 | 
            +
                      trace_line =~ /(.*)\:(\d*)(\:|$)/
         | 
| 67 | 
            +
                      file, number = $1, $2
         | 
| 68 | 
            +
                      [file, Integer(number)]
         | 
| 67 69 | 
             
                    end
         | 
| 68 70 | 
             
                  end
         | 
| 69 71 | 
             
                end
         | 
    
        data/lib/spec/story/runner.rb
    CHANGED
    
    | @@ -8,52 +8,50 @@ require 'spec/story/runner/plain_text_story_runner.rb' | |
| 8 8 | 
             
            module Spec
         | 
| 9 9 | 
             
              module Story
         | 
| 10 10 | 
             
                module Runner
         | 
| 11 | 
            -
                   | 
| 12 | 
            -
                     | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
                     | 
| 17 | 
            -
                       | 
| 18 | 
            -
             | 
| 19 | 
            -
                         | 
| 20 | 
            -
                          register_listener(formatter)
         | 
| 21 | 
            -
                        end
         | 
| 22 | 
            -
                        self.register_exit_hook
         | 
| 23 | 
            -
                      end
         | 
| 24 | 
            -
                      @story_runner
         | 
| 25 | 
            -
                    end
         | 
| 26 | 
            -
                    
         | 
| 27 | 
            -
                    def scenario_runner # :nodoc:
         | 
| 28 | 
            -
                      @scenario_runner ||= ScenarioRunner.new
         | 
| 29 | 
            -
                    end
         | 
| 30 | 
            -
                    
         | 
| 31 | 
            -
                    def world_creator # :nodoc:
         | 
| 32 | 
            -
                      @world_creator ||= World
         | 
| 33 | 
            -
                    end
         | 
| 34 | 
            -
                    
         | 
| 35 | 
            -
                    def create_story_runner
         | 
| 36 | 
            -
                      Runner::StoryRunner.new(scenario_runner, world_creator)
         | 
| 37 | 
            -
                    end
         | 
| 38 | 
            -
                    
         | 
| 39 | 
            -
                    # Use this to register a customer output formatter.
         | 
| 40 | 
            -
                    def register_listener(listener)
         | 
| 41 | 
            -
                      story_runner.add_listener(listener) # run_started, story_started, story_ended, #run_ended
         | 
| 42 | 
            -
                      world_creator.add_listener(listener) # found_scenario, step_succeeded, step_failed, step_failed
         | 
| 43 | 
            -
                      scenario_runner.add_listener(listener) # scenario_started, scenario_succeeded, scenario_pending, scenario_failed
         | 
| 44 | 
            -
                    end
         | 
| 45 | 
            -
                    
         | 
| 46 | 
            -
                    def register_exit_hook # :nodoc:
         | 
| 47 | 
            -
                      at_exit do
         | 
| 48 | 
            -
                        exit Runner.story_runner.run_stories unless $!
         | 
| 11 | 
            +
                  def self.run_options # :nodoc:
         | 
| 12 | 
            +
                    Spec::Runner.options
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                  
         | 
| 15 | 
            +
                  def self.story_runner # :nodoc:
         | 
| 16 | 
            +
                    unless @story_runner
         | 
| 17 | 
            +
                      @story_runner = create_story_runner
         | 
| 18 | 
            +
                      run_options.story_formatters.each do |formatter|
         | 
| 19 | 
            +
                        register_listener(formatter)
         | 
| 49 20 | 
             
                      end
         | 
| 21 | 
            +
                      self.register_exit_hook
         | 
| 50 22 | 
             
                    end
         | 
| 51 | 
            -
                    
         | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 23 | 
            +
                    @story_runner
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                  
         | 
| 26 | 
            +
                  def self.scenario_runner # :nodoc:
         | 
| 27 | 
            +
                    @scenario_runner ||= ScenarioRunner.new
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                  
         | 
| 30 | 
            +
                  def self.world_creator # :nodoc:
         | 
| 31 | 
            +
                    @world_creator ||= World
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                  
         | 
| 34 | 
            +
                  def self.create_story_runner
         | 
| 35 | 
            +
                    Runner::StoryRunner.new(scenario_runner, world_creator)
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                  
         | 
| 38 | 
            +
                  # Use this to register a customer output formatter.
         | 
| 39 | 
            +
                  def self.register_listener(listener)
         | 
| 40 | 
            +
                    story_runner.add_listener(listener) # run_started, story_started, story_ended, #run_ended
         | 
| 41 | 
            +
                    world_creator.add_listener(listener) # found_scenario, step_succeeded, step_failed, step_failed
         | 
| 42 | 
            +
                    scenario_runner.add_listener(listener) # scenario_started, scenario_succeeded, scenario_pending, scenario_failed
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
                  
         | 
| 45 | 
            +
                  def self.register_exit_hook # :nodoc:
         | 
| 46 | 
            +
                    at_exit do
         | 
| 47 | 
            +
                      exit Runner.story_runner.run_stories unless $!
         | 
| 54 48 | 
             
                    end
         | 
| 55 | 
            -
                    
         | 
| 56 49 | 
             
                  end
         | 
| 50 | 
            +
                  
         | 
| 51 | 
            +
                  def self.dry_run
         | 
| 52 | 
            +
                    run_options.dry_run
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
                  
         | 
| 57 55 | 
             
                end
         | 
| 58 56 | 
             
              end
         | 
| 59 57 | 
             
            end
         | 
| @@ -2,12 +2,16 @@ module Spec | |
| 2 2 | 
             
              module Story
         | 
| 3 3 | 
             
                module Runner
         | 
| 4 4 | 
             
                  class StoryRunner
         | 
| 5 | 
            -
                     | 
| 6 | 
            -
                       | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
                       | 
| 5 | 
            +
                    def self.current_story_runner
         | 
| 6 | 
            +
                      @current_story_runner
         | 
| 7 | 
            +
                    end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    def self.current_story_runner=(current_story_runner)
         | 
| 10 | 
            +
                      @current_story_runner = current_story_runner
         | 
| 11 | 
            +
                    end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    def self.scenario_from_current_story(scenario_name)
         | 
| 14 | 
            +
                      current_story_runner.scenario_from_current_story(scenario_name)
         | 
| 11 15 | 
             
                    end
         | 
| 12 16 |  | 
| 13 17 | 
             
                    attr_accessor :stories, :scenarios, :current_story
         | 
    
        data/lib/spec/story/world.rb
    CHANGED
    
    | @@ -15,82 +15,78 @@ module Spec | |
| 15 15 | 
             
                module World
         | 
| 16 16 | 
             
                  include ::Spec::Example::Pending
         | 
| 17 17 | 
             
                  include ::Spec::Matchers
         | 
| 18 | 
            -
                  # store steps and listeners in the singleton metaclass.
         | 
| 19 | 
            -
                  # This serves both to keep them out of the way of runtime Worlds
         | 
| 20 | 
            -
                  # and to make them available to all instances.
         | 
| 21 | 
            -
                  class << self
         | 
| 22 | 
            -
                    def create(cls = Object, *args)
         | 
| 23 | 
            -
                      cls.new(*args).extend(World)
         | 
| 24 | 
            -
                    end
         | 
| 25 | 
            -
                    
         | 
| 26 | 
            -
                    def listeners
         | 
| 27 | 
            -
                      @listeners ||= []
         | 
| 28 | 
            -
                    end
         | 
| 29 | 
            -
                    
         | 
| 30 | 
            -
                    def add_listener(listener)
         | 
| 31 | 
            -
                      listeners() << listener
         | 
| 32 | 
            -
                    end
         | 
| 33 | 
            -
                    
         | 
| 34 | 
            -
                    def step_mother
         | 
| 35 | 
            -
                      @step_mother ||= StepMother.new
         | 
| 36 | 
            -
                    end
         | 
| 37 | 
            -
                            
         | 
| 38 | 
            -
                    def use(steps)
         | 
| 39 | 
            -
                      step_mother.use(steps)
         | 
| 40 | 
            -
                    end
         | 
| 41 | 
            -
                    
         | 
| 42 | 
            -
                    def step_names
         | 
| 43 | 
            -
                      @step_names ||= []
         | 
| 44 | 
            -
                    end
         | 
| 45 18 |  | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
                     | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 19 | 
            +
                  def self.create(cls = Object, *args)
         | 
| 20 | 
            +
                    cls.new(*args).extend(World)
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                  
         | 
| 23 | 
            +
                  def self.listeners
         | 
| 24 | 
            +
                    @listeners ||= []
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                  
         | 
| 27 | 
            +
                  def self.add_listener(listener)
         | 
| 28 | 
            +
                    listeners() << listener
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                  
         | 
| 31 | 
            +
                  def self.step_mother
         | 
| 32 | 
            +
                    @step_mother ||= StepMother.new
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
                          
         | 
| 35 | 
            +
                  def self.use(steps)
         | 
| 36 | 
            +
                    step_mother.use(steps)
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                  
         | 
| 39 | 
            +
                  def self.step_names
         | 
| 40 | 
            +
                    @step_names ||= []
         | 
| 41 | 
            +
                  end
         | 
| 62 42 |  | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
                       | 
| 67 | 
            -
                       | 
| 68 | 
            -
                       | 
| 69 | 
            -
             | 
| 70 | 
            -
                       | 
| 71 | 
            -
                      begin
         | 
| 72 | 
            -
                        listeners.each { |l| l.step_upcoming(type, step_name, *args) }
         | 
| 73 | 
            -
                        step.perform(world, *args) unless dry_run
         | 
| 74 | 
            -
                        listeners.each { |l| l.step_succeeded(type, step_name, *args) }
         | 
| 75 | 
            -
                      rescue Exception => e
         | 
| 76 | 
            -
                        case e
         | 
| 77 | 
            -
                        when Spec::Example::ExamplePendingError
         | 
| 78 | 
            -
                          @listeners.each { |l| l.step_pending(type, step_name, *args) }
         | 
| 79 | 
            -
                        else
         | 
| 80 | 
            -
                          @listeners.each { |l| l.step_failed(type, step_name, *args) }
         | 
| 81 | 
            -
                        end
         | 
| 82 | 
            -
                        errors << e
         | 
| 83 | 
            -
                      end
         | 
| 43 | 
            +
                  def self.run_given_scenario_with_suspended_listeners(world, type, name, scenario)
         | 
| 44 | 
            +
                    current_listeners = Array.new(listeners)
         | 
| 45 | 
            +
                    begin
         | 
| 46 | 
            +
                      listeners.each { |l| l.found_scenario(type, name) }
         | 
| 47 | 
            +
                      @listeners.clear
         | 
| 48 | 
            +
                      scenario.perform(world, name) unless dry_run
         | 
| 49 | 
            +
                    ensure
         | 
| 50 | 
            +
                      @listeners.replace(current_listeners)
         | 
| 84 51 | 
             
                    end
         | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
                  
         | 
| 54 | 
            +
                  def self.store_and_call(world, type, name, *args, &block)
         | 
| 55 | 
            +
                    if block_given?
         | 
| 56 | 
            +
                      step_mother.store(type, Step.new(name, &block))
         | 
| 88 57 | 
             
                    end
         | 
| 58 | 
            +
                    step = step_mother.find(type, name)
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                    step_name = step.name
         | 
| 61 | 
            +
                    step_names << step_name
         | 
| 89 62 |  | 
| 90 | 
            -
                     | 
| 91 | 
            -
             | 
| 63 | 
            +
                    # It's important to have access to the parsed args here, so
         | 
| 64 | 
            +
                    # we can give them to the listeners. The HTML reporter needs
         | 
| 65 | 
            +
                    # the args so it can style them. See the generated output in
         | 
| 66 | 
            +
                    # story_server/prototype/rspec_stories.html (generated by rake stories)
         | 
| 67 | 
            +
                    args = step.parse_args(name) if args.empty?
         | 
| 68 | 
            +
                    begin
         | 
| 69 | 
            +
                      listeners.each { |l| l.step_upcoming(type, step_name, *args) }
         | 
| 70 | 
            +
                      step.perform(world, *args) unless dry_run
         | 
| 71 | 
            +
                      listeners.each { |l| l.step_succeeded(type, step_name, *args) }
         | 
| 72 | 
            +
                    rescue Exception => e
         | 
| 73 | 
            +
                      case e
         | 
| 74 | 
            +
                      when Spec::Example::ExamplePendingError
         | 
| 75 | 
            +
                        @listeners.each { |l| l.step_pending(type, step_name, *args) }
         | 
| 76 | 
            +
                      else
         | 
| 77 | 
            +
                        @listeners.each { |l| l.step_failed(type, step_name, *args) }
         | 
| 78 | 
            +
                      end
         | 
| 79 | 
            +
                      errors << e
         | 
| 92 80 | 
             
                    end
         | 
| 93 | 
            -
                  end | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
                  
         | 
| 83 | 
            +
                  def self.errors
         | 
| 84 | 
            +
                    @errors ||= []
         | 
| 85 | 
            +
                  end
         | 
| 86 | 
            +
                  
         | 
| 87 | 
            +
                  def self.dry_run
         | 
| 88 | 
            +
                    ::Spec::Story::Runner.dry_run
         | 
| 89 | 
            +
                  end
         | 
| 94 90 |  | 
| 95 91 | 
             
                  def start_collecting_errors
         | 
| 96 92 | 
             
                    errors.clear
         |