aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/plugins/rspec
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/plugins/rspec')
-rw-r--r--vendor/plugins/rspec/.autotest4
-rw-r--r--vendor/plugins/rspec/.gitignore7
-rw-r--r--vendor/plugins/rspec/CHANGES1080
-rw-r--r--vendor/plugins/rspec/MIT-LICENSE20
-rw-r--r--vendor/plugins/rspec/README36
-rw-r--r--vendor/plugins/rspec/Rakefile307
-rw-r--r--vendor/plugins/rspec/TODO1
-rw-r--r--vendor/plugins/rspec/UPGRADE7
-rwxr-xr-xvendor/plugins/rspec/bin/spec7
-rwxr-xr-xvendor/plugins/rspec/bin/spec_translator8
-rw-r--r--vendor/plugins/rspec/examples/pure/autogenerated_docstrings_example.rb19
-rw-r--r--vendor/plugins/rspec/examples/pure/before_and_after_example.rb40
-rw-r--r--vendor/plugins/rspec/examples/pure/behave_as_example.rb45
-rw-r--r--vendor/plugins/rspec/examples/pure/custom_expectation_matchers.rb54
-rw-r--r--vendor/plugins/rspec/examples/pure/custom_formatter.rb12
-rw-r--r--vendor/plugins/rspec/examples/pure/dynamic_spec.rb9
-rw-r--r--vendor/plugins/rspec/examples/pure/file_accessor.rb19
-rw-r--r--vendor/plugins/rspec/examples/pure/file_accessor_spec.rb38
-rw-r--r--vendor/plugins/rspec/examples/pure/greeter_spec.rb31
-rw-r--r--vendor/plugins/rspec/examples/pure/helper_method_example.rb14
-rw-r--r--vendor/plugins/rspec/examples/pure/io_processor.rb8
-rw-r--r--vendor/plugins/rspec/examples/pure/io_processor_spec.rb21
-rw-r--r--vendor/plugins/rspec/examples/pure/legacy_spec.rb11
-rw-r--r--vendor/plugins/rspec/examples/pure/mocking_example.rb27
-rw-r--r--vendor/plugins/rspec/examples/pure/multi_threaded_behaviour_runner.rb28
-rw-r--r--vendor/plugins/rspec/examples/pure/nested_classes_example.rb36
-rw-r--r--vendor/plugins/rspec/examples/pure/partial_mock_example.rb29
-rw-r--r--vendor/plugins/rspec/examples/pure/pending_example.rb20
-rw-r--r--vendor/plugins/rspec/examples/pure/predicate_example.rb27
-rw-r--r--vendor/plugins/rspec/examples/pure/priority.txt1
-rw-r--r--vendor/plugins/rspec/examples/pure/shared_example_group_example.rb81
-rw-r--r--vendor/plugins/rspec/examples/pure/shared_stack_examples.rb38
-rw-r--r--vendor/plugins/rspec/examples/pure/spec_helper.rb3
-rw-r--r--vendor/plugins/rspec/examples/pure/stack.rb36
-rw-r--r--vendor/plugins/rspec/examples/pure/stack_spec.rb63
-rw-r--r--vendor/plugins/rspec/examples/pure/stack_spec_with_nested_example_groups.rb67
-rw-r--r--vendor/plugins/rspec/examples/pure/stubbing_example.rb69
-rw-r--r--vendor/plugins/rspec/examples/stories/adder.rb13
-rw-r--r--vendor/plugins/rspec/examples/stories/addition34
-rw-r--r--vendor/plugins/rspec/examples/stories/addition.rb9
-rw-r--r--vendor/plugins/rspec/examples/stories/calculator.rb65
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/.loadpath5
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/README.txt21
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/everything.rb6
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/examples.rb3
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb35
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb66
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story21
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story21
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story42
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story42
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story17
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story53
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb52
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/helper.rb6
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb26
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/steps.rb5
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/stories.rb3
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/stories.txt22
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/life.rb3
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/life/game.rb23
-rw-r--r--vendor/plugins/rspec/examples/stories/game-of-life/life/grid.rb43
-rw-r--r--vendor/plugins/rspec/examples/stories/helper.rb9
-rw-r--r--vendor/plugins/rspec/examples/stories/steps/addition_steps.rb18
-rw-r--r--vendor/plugins/rspec/failing_examples/README.txt7
-rw-r--r--vendor/plugins/rspec/failing_examples/diffing_spec.rb36
-rw-r--r--vendor/plugins/rspec/failing_examples/failing_autogenerated_docstrings_example.rb19
-rw-r--r--vendor/plugins/rspec/failing_examples/failure_in_setup.rb10
-rw-r--r--vendor/plugins/rspec/failing_examples/failure_in_teardown.rb10
-rw-r--r--vendor/plugins/rspec/failing_examples/mocking_example.rb40
-rw-r--r--vendor/plugins/rspec/failing_examples/mocking_with_flexmock.rb26
-rw-r--r--vendor/plugins/rspec/failing_examples/mocking_with_mocha.rb25
-rw-r--r--vendor/plugins/rspec/failing_examples/mocking_with_rr.rb27
-rw-r--r--vendor/plugins/rspec/failing_examples/partial_mock_example.rb20
-rw-r--r--vendor/plugins/rspec/failing_examples/predicate_example.rb29
-rw-r--r--vendor/plugins/rspec/failing_examples/raising_example.rb47
-rw-r--r--vendor/plugins/rspec/failing_examples/spec_helper.rb3
-rw-r--r--vendor/plugins/rspec/failing_examples/syntax_error_example.rb7
-rw-r--r--vendor/plugins/rspec/failing_examples/team_spec.rb44
-rw-r--r--vendor/plugins/rspec/failing_examples/timeout_behaviour.rb7
-rw-r--r--vendor/plugins/rspec/lib/autotest/discover.rb2
-rw-r--r--vendor/plugins/rspec/lib/autotest/rspec.rb47
-rw-r--r--vendor/plugins/rspec/lib/spec.rb30
-rw-r--r--vendor/plugins/rspec/lib/spec/example.rb156
-rw-r--r--vendor/plugins/rspec/lib/spec/example/configuration.rb158
-rw-r--r--vendor/plugins/rspec/lib/spec/example/errors.rb20
-rw-r--r--vendor/plugins/rspec/lib/spec/example/example_group.rb7
-rw-r--r--vendor/plugins/rspec/lib/spec/example/example_group_factory.rb60
-rw-r--r--vendor/plugins/rspec/lib/spec/example/example_group_methods.rb453
-rw-r--r--vendor/plugins/rspec/lib/spec/example/example_matcher.rb13
-rw-r--r--vendor/plugins/rspec/lib/spec/example/example_methods.rb142
-rw-r--r--vendor/plugins/rspec/lib/spec/example/module_inclusion_warnings.rb37
-rw-r--r--vendor/plugins/rspec/lib/spec/example/module_reopening_fix.rb26
-rw-r--r--vendor/plugins/rspec/lib/spec/example/pending.rb4
-rw-r--r--vendor/plugins/rspec/lib/spec/example/shared_example_group.rb67
-rw-r--r--vendor/plugins/rspec/lib/spec/expectations.rb23
-rw-r--r--vendor/plugins/rspec/lib/spec/expectations/differs/default.rb66
-rw-r--r--vendor/plugins/rspec/lib/spec/expectations/extensions.rb3
-rw-r--r--vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb63
-rw-r--r--vendor/plugins/rspec/lib/spec/expectations/extensions/string_and_symbol.rb17
-rw-r--r--vendor/plugins/rspec/lib/spec/expectations/handler.rb78
-rwxr-xr-xvendor/plugins/rspec/lib/spec/extensions.rb4
-rw-r--r--vendor/plugins/rspec/lib/spec/extensions/class.rb24
-rw-r--r--vendor/plugins/rspec/lib/spec/extensions/main.rb102
-rw-r--r--vendor/plugins/rspec/lib/spec/extensions/metaclass.rb7
-rwxr-xr-xvendor/plugins/rspec/lib/spec/extensions/object.rb6
-rw-r--r--vendor/plugins/rspec/lib/spec/interop/test.rb32
-rw-r--r--vendor/plugins/rspec/lib/spec/interop/test/unit/testcase.rb45
-rw-r--r--vendor/plugins/rspec/lib/spec/interop/test/unit/testresult.rb2
-rw-r--r--vendor/plugins/rspec/lib/spec/interop/test/unit/testsuite_adapter.rb2
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers.rb107
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/be.rb254
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/be_close.rb39
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/change.rb91
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/eql.rb49
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/equal.rb58
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/exist.rb21
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/has.rb33
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/have.rb34
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/include.rb70
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/match.rb42
-rw-r--r--[-rwxr-xr-x]vendor/plugins/rspec/lib/spec/matchers/operator_matcher.rb93
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/raise_error.rb35
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/respond_to.rb44
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/satisfy.rb4
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/simple_matcher.rb128
-rw-r--r--vendor/plugins/rspec/lib/spec/matchers/throw_symbol.rb70
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks.rb17
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks/argument_constraint_matchers.rb31
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks/argument_expectation.rb210
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks/error_generator.rb28
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks/errors.rb2
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks/framework.rb4
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks/message_expectation.rb106
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks/methods.rb56
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks/mock.rb61
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks/proxy.rb139
-rw-r--r--vendor/plugins/rspec/lib/spec/mocks/spec_methods.rb38
-rw-r--r--vendor/plugins/rspec/lib/spec/rake/spectask.rb63
-rw-r--r--vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb6
-rw-r--r--vendor/plugins/rspec/lib/spec/runner.rb204
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/backtrace_tweaker.rb62
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/class_and_arguments_parser.rb16
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/command_line.rb25
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/drb_command_line.rb12
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/example_group_runner.rb10
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/base_formatter.rb106
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/base_text_formatter.rb80
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/failing_example_groups_formatter.rb8
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/html_formatter.rb37
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/nested_text_formatter.rb36
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/profile_formatter.rb4
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb13
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/snippet_extractor.rb2
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/specdoc_formatter.rb12
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/story/html_formatter.rb128
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/formatter/story/plain_text_formatter.rb142
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/heckle_runner.rb112
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/heckle_runner_unsupported.rb2
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/option_parser.rb142
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/options.rb189
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/reporter.rb132
-rw-r--r--vendor/plugins/rspec/lib/spec/runner/spec_parser.rb71
-rw-r--r--vendor/plugins/rspec/lib/spec/story.rb10
-rw-r--r--vendor/plugins/rspec/lib/spec/story/extensions.rb3
-rw-r--r--vendor/plugins/rspec/lib/spec/story/extensions/main.rb86
-rw-r--r--vendor/plugins/rspec/lib/spec/story/extensions/regexp.rb9
-rw-r--r--vendor/plugins/rspec/lib/spec/story/extensions/string.rb9
-rw-r--r--vendor/plugins/rspec/lib/spec/story/given_scenario.rb14
-rw-r--r--vendor/plugins/rspec/lib/spec/story/runner.rb60
-rw-r--r--vendor/plugins/rspec/lib/spec/story/runner/plain_text_story_runner.rb48
-rw-r--r--vendor/plugins/rspec/lib/spec/story/runner/scenario_collector.rb18
-rw-r--r--vendor/plugins/rspec/lib/spec/story/runner/scenario_runner.rb54
-rw-r--r--vendor/plugins/rspec/lib/spec/story/runner/story_mediator.rb123
-rw-r--r--vendor/plugins/rspec/lib/spec/story/runner/story_parser.rb227
-rw-r--r--vendor/plugins/rspec/lib/spec/story/runner/story_runner.rb70
-rw-r--r--vendor/plugins/rspec/lib/spec/story/scenario.rb14
-rw-r--r--vendor/plugins/rspec/lib/spec/story/step.rb58
-rw-r--r--vendor/plugins/rspec/lib/spec/story/step_group.rb89
-rw-r--r--vendor/plugins/rspec/lib/spec/story/step_mother.rb37
-rw-r--r--vendor/plugins/rspec/lib/spec/story/story.rb39
-rw-r--r--vendor/plugins/rspec/lib/spec/story/world.rb124
-rw-r--r--vendor/plugins/rspec/lib/spec/translator.rb114
-rw-r--r--vendor/plugins/rspec/lib/spec/version.rb36
-rw-r--r--vendor/plugins/rspec/plugins/mock_frameworks/flexmock.rb23
-rw-r--r--vendor/plugins/rspec/plugins/mock_frameworks/mocha.rb19
-rw-r--r--vendor/plugins/rspec/plugins/mock_frameworks/rr.rb21
-rw-r--r--vendor/plugins/rspec/plugins/mock_frameworks/rspec.rb20
-rw-r--r--vendor/plugins/rspec/rake_tasks/examples.rake7
-rw-r--r--vendor/plugins/rspec/rake_tasks/examples_with_rcov.rake9
-rw-r--r--vendor/plugins/rspec/rake_tasks/failing_examples_with_html.rake9
-rw-r--r--vendor/plugins/rspec/rake_tasks/verify_rcov.rake7
-rw-r--r--vendor/plugins/rspec/spec.opts6
-rw-r--r--vendor/plugins/rspec/spec/autotest/discover_spec.rb23
-rw-r--r--vendor/plugins/rspec/spec/autotest/rspec_spec.rb182
-rw-r--r--vendor/plugins/rspec/spec/autotest_helper.rb6
-rw-r--r--vendor/plugins/rspec/spec/autotest_matchers.rb47
-rw-r--r--vendor/plugins/rspec/spec/rspec_suite.rb7
-rw-r--r--vendor/plugins/rspec/spec/spec/example/configuration_spec.rb282
-rw-r--r--vendor/plugins/rspec/spec/spec/example/example_group/described_module_spec.rb20
-rw-r--r--vendor/plugins/rspec/spec/spec/example/example_group/warning_messages_spec.rb76
-rw-r--r--vendor/plugins/rspec/spec/spec/example/example_group_class_definition_spec.rb37
-rw-r--r--vendor/plugins/rspec/spec/spec/example/example_group_factory_spec.rb126
-rw-r--r--vendor/plugins/rspec/spec/spec/example/example_group_methods_spec.rb987
-rw-r--r--vendor/plugins/rspec/spec/spec/example/example_group_spec.rb1000
-rw-r--r--vendor/plugins/rspec/spec/spec/example/example_matcher_spec.rb54
-rw-r--r--vendor/plugins/rspec/spec/spec/example/example_methods_spec.rb226
-rw-r--r--vendor/plugins/rspec/spec/spec/example/example_runner_spec.rb194
-rw-r--r--vendor/plugins/rspec/spec/spec/example/example_spec.rb53
-rw-r--r--vendor/plugins/rspec/spec/spec/example/nested_example_group_spec.rb10
-rw-r--r--vendor/plugins/rspec/spec/spec/example/pending_module_spec.rb65
-rw-r--r--vendor/plugins/rspec/spec/spec/example/predicate_matcher_spec.rb28
-rw-r--r--vendor/plugins/rspec/spec/spec/example/shared_example_group_spec.rb414
-rw-r--r--vendor/plugins/rspec/spec/spec/example/subclassing_example_group_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/expectations/differs/default_spec.rb69
-rw-r--r--vendor/plugins/rspec/spec/spec/expectations/extensions/object_spec.rb107
-rw-r--r--vendor/plugins/rspec/spec/spec/expectations/fail_with_spec.rb55
-rw-r--r--vendor/plugins/rspec/spec/spec/extensions/main_spec.rb76
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb4
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb4
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb4
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb4
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb4
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb4
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb4
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/spec_spec.rb27
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb8
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/testcase_spec.rb9
-rw-r--r--vendor/plugins/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/be_close_spec.rb53
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/be_spec.rb83
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/change_spec.rb192
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/description_generation_spec.rb33
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/eql_spec.rb23
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/equal_spec.rb57
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/exist_spec.rb20
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/handler_spec.rb129
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/has_spec.rb30
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/have_spec.rb129
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/include_spec.rb47
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/match_spec.rb26
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/matcher_methods_spec.rb17
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb24
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/operator_matcher_spec.rb41
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/raise_error_spec.rb24
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/respond_to_spec.rb92
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/satisfy_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/simple_matcher_spec.rb68
-rw-r--r--vendor/plugins/rspec/spec/spec/matchers/throw_symbol_spec.rb130
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/any_number_of_times_spec.rb9
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/argument_expectation_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/at_least_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/at_most_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/bug_report_10260_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/bug_report_10263_spec.rb7
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/bug_report_11545_spec.rb11
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/bug_report_15719_spec.rb6
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/bug_report_7611_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/bug_report_7805_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/bug_report_8165_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/bug_report_8302_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb123
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/hash_including_matcher_spec.rb108
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/mock_ordering_spec.rb18
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/mock_space_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/mock_spec.rb318
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/multiple_return_value_spec.rb16
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/null_object_mock_spec.rb16
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/once_counts_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/options_hash_spec.rb48
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/partial_mock_spec.rb40
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb160
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/precise_counts_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/record_messages_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/stub_spec.rb46
-rw-r--r--vendor/plugins/rspec/spec/spec/mocks/twice_counts_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/package/bin_spec_spec.rb14
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/class_and_argument_parser_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/command_line_spec.rb212
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/drb_command_line_spec.rb155
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/execution_context_spec.rb37
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb20
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb14
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html365
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html387
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html371
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html148
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html133
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/html_formatter_spec.rb155
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/nested_text_formatter_spec.rb474
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb15
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb52
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb103
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb221
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb61
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb439
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html365
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html127
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/heckle_runner_spec.rb20
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/heckler_spec.rb25
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb38
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/option_parser_spec.rb287
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/options_spec.rb143
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/output_one_time_fixture.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/output_one_time_fixture_runner.rb7
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/output_one_time_spec.rb13
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb87
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/reporter_spec.rb192
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/spec_drb.opts1
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb70
-rw-r--r--vendor/plugins/rspec/spec/spec/runner/spec_parser_spec.rb85
-rw-r--r--vendor/plugins/rspec/spec/spec/runner_spec.rb14
-rw-r--r--vendor/plugins/rspec/spec/spec/spec_classes.rb133
-rw-r--r--vendor/plugins/rspec/spec/spec/story/builders.rb46
-rw-r--r--vendor/plugins/rspec/spec/spec/story/extensions/main_spec.rb161
-rw-r--r--vendor/plugins/rspec/spec/spec/story/extensions_spec.rb14
-rw-r--r--vendor/plugins/rspec/spec/spec/story/given_scenario_spec.rb27
-rw-r--r--vendor/plugins/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb93
-rw-r--r--vendor/plugins/rspec/spec/spec/story/runner/scenario_collector_spec.rb27
-rw-r--r--vendor/plugins/rspec/spec/spec/story/runner/scenario_runner_spec.rb214
-rw-r--r--vendor/plugins/rspec/spec/spec/story/runner/story_mediator_spec.rb133
-rw-r--r--vendor/plugins/rspec/spec/spec/story/runner/story_parser_spec.rb384
-rw-r--r--vendor/plugins/rspec/spec/spec/story/runner/story_runner_spec.rb294
-rw-r--r--vendor/plugins/rspec/spec/spec/story/runner_spec.rb93
-rw-r--r--vendor/plugins/rspec/spec/spec/story/scenario_spec.rb20
-rw-r--r--vendor/plugins/rspec/spec/spec/story/step_group_spec.rb157
-rw-r--r--vendor/plugins/rspec/spec/spec/story/step_mother_spec.rb72
-rw-r--r--vendor/plugins/rspec/spec/spec/story/step_spec.rb219
-rw-r--r--vendor/plugins/rspec/spec/spec/story/story_helper.rb2
-rw-r--r--vendor/plugins/rspec/spec/spec/story/story_spec.rb86
-rw-r--r--vendor/plugins/rspec/spec/spec/story/world_spec.rb423
-rw-r--r--vendor/plugins/rspec/spec/spec/translator_spec.rb265
-rw-r--r--vendor/plugins/rspec/spec/spec_helper.rb147
-rw-r--r--vendor/plugins/rspec/stories/all.rb5
-rw-r--r--vendor/plugins/rspec/stories/example_groups/autogenerated_docstrings45
-rw-r--r--vendor/plugins/rspec/stories/example_groups/example_group_with_should_methods17
-rw-r--r--vendor/plugins/rspec/stories/example_groups/nested_groups17
-rw-r--r--vendor/plugins/rspec/stories/example_groups/output25
-rw-r--r--vendor/plugins/rspec/stories/example_groups/stories.rb8
-rw-r--r--vendor/plugins/rspec/stories/helper.rb6
-rw-r--r--vendor/plugins/rspec/stories/interop/examples_and_tests_together30
-rw-r--r--vendor/plugins/rspec/stories/interop/stories.rb7
-rw-r--r--vendor/plugins/rspec/stories/interop/test_case_with_should_methods17
-rw-r--r--vendor/plugins/rspec/stories/mock_framework_integration/stories.rb7
-rw-r--r--vendor/plugins/rspec/stories/mock_framework_integration/use_flexmock.story9
-rw-r--r--vendor/plugins/rspec/stories/pending_stories/README3
-rw-r--r--vendor/plugins/rspec/stories/resources/helpers/cmdline.rb9
-rw-r--r--vendor/plugins/rspec/stories/resources/helpers/story_helper.rb16
-rw-r--r--vendor/plugins/rspec/stories/resources/matchers/smart_match.rb37
-rw-r--r--vendor/plugins/rspec/stories/resources/spec/example_group_with_should_methods.rb12
-rw-r--r--vendor/plugins/rspec/stories/resources/spec/simple_spec.rb8
-rw-r--r--vendor/plugins/rspec/stories/resources/spec/spec_with_flexmock.rb18
-rw-r--r--vendor/plugins/rspec/stories/resources/steps/running_rspec.rb50
-rw-r--r--vendor/plugins/rspec/stories/resources/stories/failing_story.rb15
-rw-r--r--vendor/plugins/rspec/stories/resources/test/spec_and_test_together.rb57
-rw-r--r--vendor/plugins/rspec/stories/resources/test/test_case_with_should_methods.rb30
-rw-r--r--vendor/plugins/rspec/story_server/prototype/javascripts/builder.js136
-rw-r--r--vendor/plugins/rspec/story_server/prototype/javascripts/controls.js972
-rw-r--r--vendor/plugins/rspec/story_server/prototype/javascripts/dragdrop.js976
-rw-r--r--vendor/plugins/rspec/story_server/prototype/javascripts/effects.js1117
-rw-r--r--vendor/plugins/rspec/story_server/prototype/javascripts/prototype.js4140
-rw-r--r--vendor/plugins/rspec/story_server/prototype/javascripts/rspec.js149
-rw-r--r--vendor/plugins/rspec/story_server/prototype/javascripts/scriptaculous.js58
-rw-r--r--vendor/plugins/rspec/story_server/prototype/javascripts/slider.js276
-rw-r--r--vendor/plugins/rspec/story_server/prototype/javascripts/sound.js55
-rw-r--r--vendor/plugins/rspec/story_server/prototype/javascripts/unittest.js568
-rw-r--r--vendor/plugins/rspec/story_server/prototype/lib/server.rb24
-rw-r--r--vendor/plugins/rspec/story_server/prototype/stories.html176
-rw-r--r--vendor/plugins/rspec/story_server/prototype/stylesheets/rspec.css136
-rw-r--r--vendor/plugins/rspec/story_server/prototype/stylesheets/test.css90
372 files changed, 7018 insertions, 26443 deletions
diff --git a/vendor/plugins/rspec/.autotest b/vendor/plugins/rspec/.autotest
index 6ca66a445..8a863e46f 100644
--- a/vendor/plugins/rspec/.autotest
+++ b/vendor/plugins/rspec/.autotest
@@ -1,3 +1,5 @@
Autotest.add_hook :initialize do |at|
at.add_exception("spec/interop/test/unit/resources")
-end \ No newline at end of file
+ at.add_exception("spec/spec/runner/drb_command_line_spec.rb")
+end
+
diff --git a/vendor/plugins/rspec/.gitignore b/vendor/plugins/rspec/.gitignore
deleted file mode 100644
index 8e5fb3a88..000000000
--- a/vendor/plugins/rspec/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-pkg
-doc
-tmtags
-story_server/prototype/rspec_stories.html
-.DS_Store
-.emacs-project
-*~
diff --git a/vendor/plugins/rspec/CHANGES b/vendor/plugins/rspec/CHANGES
deleted file mode 100644
index 0ac5b62f9..000000000
--- a/vendor/plugins/rspec/CHANGES
+++ /dev/null
@@ -1,1080 +0,0 @@
-== Version 1.1.4
-
-Maintenance release.
-
-Note: we've removed the metaclass method from Object. There were some
-generated specs that used it, and they will now break. Just replace the
-metaclass call with (class << self; self; end) and all will be well.
-
-* pending steps print out yellow in stories (patch from Kyle Hargraves)
-* Deprecation warnings for specs that assume auto-inclusion of modules. Closes #326 (patch from Scott Taylor)
-* mock.should_not_receive(:anything) fails fast (once again)
-* Patch from Antti Tarvainen to stop files from being loaded repeatedly when running heckle. Closes #333.
-* Fixed bug in which session object in example was not the same instance used in the controller. Closes #331.
-* Applied patch from Antti Tarvainen to fix bug where heckle runs rspec runs heckle runs rspec etc. Closes #280.
-* Applied patch from Zach Dennis to merge :steps functionality to :steps_for. Closes #324.
-* Applied patch from Ryan Davis to add eval of block passed to raise_error matcher. Closes #321.
-* alias :context :describe in example_group_methods. Closes #312.
-* Applied patch from Ben Mabey to make the Story runner exit with a non-0 exit code on failing stories. Closes #228.
-* Applied patch from Coda Hale to get the :red hook called in autotest. Closes #279.
-* Applied patch from Patrick Ritchie to support --drb in spec.opts. Closes #274, #293.
-* Moved metaclass method from Object to an internal module which gets included where it is needed.
-* Applied patch from Dayo Esho: and_yield clobbers return value from block. Closes #217.
-* Applied patch from Bob Cotton: ExampleGroupFactory.default resets previously registered types. Closes #222.
-* Applied patch from Mike Williams to support the lib directory in rails apps with the Textmate Alternate File command. Closes #276.
-* ExampleGroupMethods#xspecify aliases #xit
-* A SharedExampleGroup can be created within another ExampleGroup.
-* Applied patch from Bob Cotton: Nested ExampleGroups do not have a spec_path. Closes #224.
-* Add before_suite and after_suite callbacks to ExampleGroupMethods and Options. Closes #210.
-* The after(:suite) callback lambda is passed a boolean representing whether the suite passed or failed
-* Added NestedTextFormatter. Closes #366.
-* decoupled mock framework from global extensions used by rspec - supports use of flexmock or mocha w/ rails
-* Applied patch from Roman Chernyatchik to allow the user to pass in the rails version into spectask. Closes #325, #370
-
-== Version 1.1.3
-
-Maintenance release.
-Notice to autotest users: you must also upgrade to ZenTest-3.9.0.
-
-* Tightened up exceptions list in autotest/rails_spec. Closes #264.
-* Applied patch from Ryan Davis for ZenTest-3.9.0 compatibility
-* Applied patch from Kero to add step_upcoming to story listeners. Closes #253.
-* Fixed bug where the wrong named error was not always caught by "should raise_error"
-* Applied patch from Luis Lavena: No coloured output on Windows due missing RUBYOPT. Closes #244.
-* Applied patch from Craig Demyanovich to add support for "should_not render_template" to rspec_on_rails. Closes #241.
-* Added --pattern (-p for short) option to control what files get loaded. Defaults to '**/*_spec.rb'
-* Exit with non-0 exit code if examples *or tests* (in test/unit interop mode) fail. Closes #203.
-* Moved at_exit hook to a method in Spec::Runner which only runs if specs get loaded. Closes #242.
-* Applied patch from kakutani ensuring that base_view_path gets cleared after each view example. Closes #235.
-* More tweaks to regexp step names
-* Fixed focused specs in nested ExampleGroups. Closes #225.
-
-== Version 1.1.2
-
-Minor bug fixes/enhancements.
-Notice to autotest users: you must also upgrade to ZenTest-3.8.0.
-
-* RSpec's Autotest subclasses compatible with ZenTest-3.8.0 (thanks to Ryan Davis for making it easier on Autotest subs).
-* Applied patch from idl to add spec/lib to rake stats. Closes #226.
-* calling setup_fixtures and teardown_fixtures for Rails >= r8570. Closes #219.
-* Applied patch from Josh Knowles using ActiveSupport's Inflector (when available) to make 'should have' read a bit better. Closes #197.
-* Fixed regression in 1.1 that caused failing examples to fail to generate their own names. Closes #209.
-* Applied doc patch from Jens Krämer for capturing content_for
-* Applied patch from Alexander Lang to clean up story steps after each story. Closes #198.
-* Applied patch from Josh Knowles to support 'string_or_response.should have_text(...)'. Closes #193.
-* Applied patch from Ian Dees to quiet the Story Runner backtrace. Closes #183.
-* Complete support for defining steps with regexp 'names'.
-
-== Version 1.1.1
-
-Bug fix release.
-
-* Fix regression in 1.1.0 that caused transactions to not get rolled back between examples.
-* Applied patch from Bob Cotton to reintroduce ExampleGroup.description_options. Closes LH[#186]
-
-== Version 1.1.0
-
-The "tell me a story and go nest yourself" release.
-
-* Applied patch from Mike Vincent to handle generators rails > 2.0.1. Closes LH[#181]
-* Formatter.pending signature changed so it gets passed an ExampleGroup instance instead of the name ( LH[#180])
-* Fixed LH[#180] Spec::Rails::Example::ModelExampleGroup and friends show up in rspec/rails output
-* Spec::Rails no longer loads ActiveRecord extensions if it's disabled in config/boot.rb
-* Applied LH[#178] small annoyances running specs with warnings enabled (Patch from Mikko Lehtonen)
-* Tighter integration with Rails fixtures. Take advantage of fixture caching to get performance improvements (Thanks to Pat Maddox, Nick Kallen, Jonathan Barnes, and Curtis)
-
-== Version 1.1.0-RC1
-
-Textmate Bundle users - this release adds a new RSpec bundle that highlights describe, it, before and after and
-provides navigation to descriptions and examples (rather than classes and methods). When you first install this,
-it is going to try to hijack all of your .rb files. All you need to do is open a .rb file that does not end with
-'spec.rb' and change the bundle selection from RSpec to Ruby. TextMate will do the right thing from then on.
-
-Shortcuts for tab-activated snippets all follow the TextMate convention of 2 or 3 letters of the first word, followed by the first letter of each subsequent word. So "should have_at_least" would be triggered by shhal.
-
-We reduced the scope for running spec directories, files, a single file or individual spec in TextMate to source.ruby.rspec. This allowed us to restore the standard Ruby shortcuts:
-
-CMD-R runs all the specs in one file
-CMD-SHIFT-R runs an individual spec
-CMD-OPT-R runs any files or directories selected in the TextMate drawer
-
-rspec_on_rails users - don't forget to run script/generate rspec
-
-* Added shared_examples_for method, which you can (should) use instead of describe Foo, :shared => true
-* Applied LH[#168] Fix describe Object, "description contains a # in it" (Patch from Martin Emde)
-* Applied LH[#15] Reverse loading of ActionView::Base helper modules (Patch from Mark Van Holstyn)
-* Applied LH[#149] Update contribute page to point towards lighthouse (Patch from Josh Knowles)
-* Applied LH[#142] verify_rcov fails with latest rcov (Patch from Kyle Hargraves)
-* Applied LH[#10] Allow stubs to yield and return values (Patch from Pat Maddox)
-* Fixed LH[#139] version.rb in trunk missing svn last changed number
-* Applied LH[#14] Adding support for by_at_least/by_at_most in Change matcher (Patch from Saimon Moore)
-* Applied LH[#12] Fix for TM when switching to alternate file (Patch from Trevor Squires)
-* Applied LH[#133] ExampleMatcher should match against before(:all) (Patch from Bob Cotton)
-* Applied LH[#134] Only load spec inside spec_helper.rb (Patch from Mark Van Holstyn)
-* RSpec now bails immediately if there are examples with identical names.
-* Applied LH[#132] Plain Text stories should support Given and Given: (Patch from Jarkko Laine)
-* Applied patch from Pat Maddox: Story Mediator - the glue that binds the plain text story parser with the rest of the system
-* Applied LH[#16] Have SimpleMatchers expose their description for specdocs (Patch from Bryan Helmkamp)
-* Stories now support --colour
-* Changed the DSL modules to Example (i.e. Spec::Example instead of Spec::DSL)
-* Applied [#15608] Story problem if parenthesis used in Given, When, Then or And (Patch from Sinclair Bain)
-* Applied [#15659] GivenScenario fails when it is a RailsStory (Patch from Nathan Sutton)
-* Fixed [#15639] rcov exclusion configuration. (Spec::Rails projects can configure rcov with spec/rcov.opts)
-* The rdoc formatter (--format rdoc) is gone. It was buggy and noone was using it.
-* Changed Spec::DSL::Behaviour to Spec::DSL::ExampleGroup
-* Changed Spec::DSL::SharedBehaviour to Spec::DSL::SharedExampleGroup
-* Applied [#14023] Small optimization for heavily proxied objects. (Patch from Ian Leitch)
-* Applied [#13943] ProfileFormatter (Top 10 slowest examples) (Patch from Ian Leitch)
-* Fixed [#15232] heckle is not working correctly in trunk (as of r2801)
-* Applied [#14399] Show pending reasons in HTML report (Patch from Bryan Helmkamp)
-* Discovered fixed: [#10263] mock "leak" when setting an expectation in a block passed to mock#should_receive
-* Fixed [#14671] Spec::DSL::ExampleRunner gives "NO NAME because of --dry-run" for every example for 'rake spec:doc'
-* Fixed [#14543] rspec_scaffold broken with Rails 2.0
-* Removed Patch [#10577] Rails with Oracle breaks 0.9.2 - was no longer necessary since we moved describe to the Main object (instead of Object)
-* Fixed [#14527] specs run twice on rails 1.2.4 and rspec/rspec_on_rails trunk
-* Applied [#14043] Change output ordering to show pending before errors (Patch from Mike Mangino)
-* Applied [#14095] Don't have ./script/generate rspec create previous_failures.txt (Patch from Bryan Helmkamp)
-* Applied [#14254] Improved error handling for Object#should and Object#should_not (Patch from Antti Tarvainen)
-* Applied [#14186] Remove dead code from message_expecation.rb (Patch from Antti Tarvainen)
-* Applied [#14183] Tiny improvement on mock_spec.rb (Patch from Antti Tarvainen)
-* Applied [#14208] Fix to Mock#method_missing raising NameErrors instead of MockExpectationErrors (Patch from Antti Tarvainen)
-* Applied [#14255] Fixed examples in mock_spec.rb and shared_behaviour_spec.rb (Patch from Antti Tarvainen)
-* Applied [#14362] partially mocking objects that define == can blow up (Patch from Pat Maddox)
-* test_ methods with an arity of 0 defined in a describe block or Example object will be run as an Example, providing a seamless transition from Test::Unit
-* Removed BehaviourRunner
-* Fixed [#13969] Spec Failures on Trunk w/ Autotest
-* Applied [#14156] False positives with should_not (Patch from Antti Tarvainen)
-* Applied [#14170] route_for and params_from internal specs fixed (Patch from Antti Tarvainen)
-* Fixed [#14166] Cannot build trunk
-* Applied [#14142] Fix for bug #11602: Nested #have_tag specifications fails on the wrong line number (Patch from Antti Tarvainen)
-* Removed warn_if_no_files argument and feature
-* Steps (Given/When/Then) with no blocks are treated as pending
-* Applied [#13913] Scenario should treat no code block as pending (Patch from Evan Light)
-* Fixed [#13370] Weird mock expectation error (Patch from Mike Mangino)
-* Applied [#13952] Fix for performance regression introduced in r2096 (Patch from Ian Leitch)
-* Applied [#13881] Dynamically include Helpers that are included on ActionView::Base (Patch from Brandon Keepers)
-* Applied [#13833] ActionView::Helpers::JavaScriptMacrosHelper removed after 1.2.3 (Patch from Yurii Rashkovskii)
-* Applied [#13814] RSpec on Rails w/ fixture-scenarios (Patch from Shintaro Kakutani)
-* Add ability to define Example subclass instead of using describe
-* Applied Patch from James Edward Gray II to improve syntax highlighting in TextMate
-* Fixed [#13579] NoMethodError not raised for missing helper methods
-* Fixed [#13713] form helper method 'select' can not be called when calling custom helper methods from specs
-* Example subclasses Test::Unit::TestCase
-* Added stub_everything method to create a stub that will return itself for any message it doesn't understand
-* Added stories directory with stories/all.rb and stories/helper.rb when you script/generate rspec
-* Applied [#13554] Add "And" so you can say Given... And... When... Then... And...
-* Applied [#11254] RSpec syntax coloring and function pop-up integration in TextMate (Patch from Wincent Colaiuta)
-* Applied [#13143] ActionView::Helpers::RecordIdentificationHelper should be included if present (Patch from Jay Levitt)
-* Applied [#13567] patch to allow stubs to yield consecutive values (Patch from Rupert Voelcker)
-* Applied [#13559] reverse version of route_for (Patch from Rupert Voelcker)
-* Added [#13532] /lib specs should get base EvalContext
-* Applied [#13451] Add a null_object option to mock_model (Patch from James Deville)
-* Applied [#11919] Making non-implemented specs easy in textmate (Patch from Scott Taylor)
-* Applied [#13274] ThrowSymbol recognized a NameError triggered by Kernel#method_missing as a thrown Symbol
-* Applied [#12722] the alternate file command does not work in rails views due to scope (Patch from Carl Porth)
-* Behaviour is now a Module that is used by Example class methods and SharedBehaviour
-* Added ExampleDefinition
-* Added story runner framework based on rbehave [#12628]
-* Applied [#13336] Helper directory incorrect for rake stats in statsetup task (Patch from Curtis Miller)
-* Applied [#13339] Add the ability for spec_parser to parse describes with :behaviour_type set (Patch from Will Leinweber and Dav Yaginuma)
-* Fixed [#13271] incorrect behaviour with expect_render and stub_render
-* Applied [#13129] Fix failing specs in spec_distributed (Patch from Bob Cotton)
-* Applied [#13118] Rinda support for Spec::Distributed (Patch from Bob Cotton)
-* Removed BehaviourEval
-* Removed Behaviour#inherit
-* Moved implementation of install_dependencies to example_rails_app
-* Renamed RSPEC_DEPS to VENDOR_DEPS
-* Added Example#not_implemented?
-* You can now stub!(:msg).with(specific args)
-* describe("A", Hash, "with one element") will generate description "A Hash with one element" (Tip from Ola Bini)
-* Applied [#13016] [DOC] Point out that view specs render, well, a view (Patch from Jay Levitt)
-* Applied [#13078] Develop rspec with autotest (Patch from Scott Taylor)
-* Fixed [#13065] Named routes throw a NoMethodError in Helper specs (Patches from James Deville and Mike Mangino)
-* Added (back) the verbose attribute in Spec::Rake::SpecTask
-* Changed documentation to point at the new http svn URL, which is more accessible.
-
-== Version 1.0.8
-
-Another bugfix release - this time to resolve the version mismatch
-
-== Version 1.0.7
-
-Quick bugfix release to ensure that you don't have to have the rspec gem installed
-in order to use autotest with rspec_on_rails.
-
-* Fixed [#13015] autotest gives failure in 'spec_command' after upgrade 1.0.5 to 1.0.6
-
-== Version 1.0.6
-
-The "holy cow, batman, it's been a long time since we released and there are a ton of bug
-fixes, patches and even new features" release.
-
-Warning: Spec::Rails users: In fixing 11508, we've removed the raise_controller_errors method. As long as you
-follow the upgrade instructions and run 'script/generate rspec' you'll be fine, but if you skip this
-step you need to manually go into spec_helper.rb and remove the call to that method (if present - it
-might not be if you haven't upgraded in a while).
-
-Warning: Implementors of custom formatters. Formatters will now be sent an Example object instead of just a
-String for #example_started, #example_passed and #example_failed. In certain scenarios
-(Spec::Ui with Spec::Distributed), the formatter must ask the Example for its sequence number instead of
-keeping track of a sequence number internal to the formatter. Most of you shouldn't need to upgrade
-your formatters though - the Example#to_s method returns the example name/description, so you should be
-able to use the passed Example instance as if it were a String.
-
-* Applied [#12986] Autotest Specs + Refactoring (Patch from Scott Tayler)
-* Added a #close method to formatters, which allows them to gracefully close streams.
-* Applied [#12935] Remove requirement that mocha must be installed as a gem when used as mocking framework. (Patch from Ryan Kinderman).
-* Fixed [#12893] RSpec's Autotest should work with rspec's trunk
-* Fixed [#12865] Partial mock error when object has an @options instance var
-* Applied [#12701] Allow checking of content captured with content_for in view specs (Patch from Jens Kr�mer)
-* Applied [#12817] Cannot include same shared behaviour when required with absolute paths (Patch from Ian Leitch)
-* Applied [#12719] rspec_on_rails should not include pagination helper (Patch from Matthijs Langenberg)
-* Fixed [#12714] helper spec not finding rails core helpers
-* Applied [#12611] should_not redirect_to implementation (Patch from Yurii Rashkovskii)
-* Applied [#12682] Not correctly aliasing original 'stub!' and 'should_receive' methods for ApplicationController (Patch from Matthijs Langenberg)
-* Disabled controller.should_receive(:render) and controller.stub!(:render). Use expect_render or stub_render instead.
-* Applied [#12484] Allow a Behaviour's Description to flow through to the Formatter (Patch from Bob Cotton)
-* Fixed [#12448] The spec:plugins rake task from rspec_on_rails should ignore specs from the rspec_on_rails plugin
-* Applied [#12300] rr integration (patch from Kyle Hargraves)
-* Implemented [#12284] mock_with :rr (integration with RR mock framework: http://rubyforge.org/projects/pivotalrb/)
-* Applied [#12237] (tiny) added full path to mate in switch_command (Patch from Carl Porth)
-* Formatters will now be sent an Example object instead of just a String for certain methods
-* All Spec::Rake::SpecTask attributes can now be procs, which allows for lazy evaluation.
-* Changed the Spec::Ui interfaces slightly. See examples.
-* Applied [#12174] mishandling of paths with spaces in spec_mate switch_command (Patch from Carl Porth)
-* Implemented [#8315] File "Go to..." functionality
-* Applied [#11917] Cleaner Spec::Ui error for failed Selenium connection (Patch from Ian Dees)
-* Applied [#11888] rspec_on_rails spews out warnings when assert_select is used with an XML response (Patch from Ian Leitch)
-* Applied [#12010] Nicer failure message formatting (Patch from Wincent Colaiuta)
-* Applied [#12156] smooth open mate patch (Patch from Ienaga Eiji)
-* Applied [#10577] Rails with Oracle breaks 0.9.2. (Patch from Sinclair Bain)
-* Fixed [#12079] auto-generated example name incomplete: should have 1 error on ....]
-* Applied [#12066] Docfix for mocks/mocks.page (Patch from Kyle Hargraves)
-* Fixed [#11891] script/generate rspec_controller fails to create appropriate views (from templates) on edge rails
-* Applied [#11921] Adds the correct controller_name from derived_controller_name() to the ViewExampleGroupController (Patch from Eloy Duran)
-* Fixed [#11903] config.include with behaviour_type 'hash' does not work
-* Examples without blocks and pending is now reported with a P instead of a *
-* Pending blocks that now pass are rendered blue
-* New behaviour for after: If an after block raises an error, the other ones will still run instead of bailing at the first.
-* Made it possible to run spec from RSpec.tmbundle with --drb against a Rails spec_server.
-* Applied [#11868] Add ability for pending to optionally hold a failing block and to fail when it passes (Patch from Bob Cotton)
-* Fixed [#11843] watir_behaviour missing from spec_ui gem
-* Added 'switch between source and spec file' command in Spec::Mate (based on code from Ruy Asan)
-* Applied [#11509] Documentation - RSpec requires hpricot
-* Applied [#11807] Daemonize spec_server and rake tasks to manage them. (patch from Kyosuke MOROHASHI)
-* Added pending(message) method
-* Fixed [#11777] should render_template doesn't check paths correctly
-* Fixed [#11749] Use of 'rescue => e' does not catch all exceptions
-* Fixed [#11793] should raise_error('with a message') does not work correctly
-* Fixed [#11774] Mocks should respond to :kind_of? in the same way they respond to :is_a?
-* Fixed [#11508] Exceptions are not raised for Controller Specs (removed experimental raise_controller_errors)
-* Applied [#11615] Partial mock methods give ambiguous failures when given a method name as a String (Patch from Jay Phillips)
-* Fixed [#11545] Rspec doesn't handle should_receive on ActiveRecord associations (Patch from Ian White)
-* Fixed [#11514] configuration.use_transactional_fixtures is ALWAYS true, regardless of assignment
-* Improved generated RESTful controller examples to cover both successful and unsuccessful POST and PUT
-* Changed TextMate snippets for controllers to pass controller class names to #describe rather than controller_name.
-* Changed TextMate snippets for mocks to use no_args() and any_args() instead of the deprecated Symbols.
-* Applied [#11500] Documentation: no rails integration specs in 1.0
-* Renamed SpecMate's shortcuts for running all examples and focused examples to avoid conflicts (CMD-d and CMD-i)
-* Added a TextMate snippet for custom matchers, lifted from Geoffrey Grosenbach's RSpec peepcode show.
-* The translator translates mock constraints to the new matchers that were introduced in 1.0.4
-* Documented environment variables for Spec::Rake::SpecTask. Renamed SPECOPTS and RCOVOPTS to SPEC_OPTS and RCOV_OPTS.
-* Fixed [#10534] Windows: undefined method 'controller_name'
-
-== Version 1.0.5
-Bug fixes. Autotest plugin tweaks.
-
-* Fixed [#11378] fix to 10814 broke drb (re-opened #10814)
-* Fixed [#11223] Unable to access flash from rails helper specs
-* Fixed [#11337] autotest runs specs redundantly
-* Fixed [#11258] windows: autotest won't run
-* Applied [#11253] Tweaks to autotest file mappings (Patch from Wincent Colaiuta)
-* Applied [#11252] Should be able to re-load file containing shared behaviours without raising an exception (Patch from Wincent Colaiuta)
-* Fixed [#11247] standalone autotest doesn't work because of unneeded autotest.rb
-* Applied [#11221] Autotest support does not work w/o Rails Gem installed (Patch from Josh Knowles)
-
-== Version 1.0.4
-The getting ready for JRuby release.
-
-* Fixed [#11181] behaviour_type scoping of config.before(:each) is not working
-* added mock argument constraint matchers (anything(), boolean(), an_instance_of(Type)) which work with rspec or mocha
-* added mock argument constraint matchers (any_args(), no_args()) which only work with rspec
-* deprecated rspec's symbol mock argument constraint matchers (:any_args, :no_args, :anything, :boolean, :numeric, :string)
-* Added tarball of rspec_on_rails to the release build to support folks working behind a firewall that blocks svn access.
-* Fixed [#11137] rspec incorrectly handles flash after resetting the session
-* Fixed [#11143] Views code for ActionController::Base#render broke between 1.0.0 and 1.0.3 on Rails Edge r6731
-* Added raise_controller_errors for controller examples in Spec::Rails
-
-== Version 1.0.3
-Bug fixes.
-
-* Fixed [#11104] Website uses old specify notation
-* Applied [#11101] StringHelpers.starts_with?(prefix) assumes a string parameter for _prefix_
-* Removed 'rescue nil' which was hiding errors in controller examples.
-* Fixed [#11075] controller specs fail when using mocha without integrated_views
-* Fixed problem with redirect_to failing incorrectly against edge rails.
-* Fixed [#11082] RspecResourceGenerator should be RspecScaffoldGenerator
-* Fixed [#10959] Focused Examples do not work for Behaviour defined with constant with modules
-
-== Version 1.0.2
-This is just to align the version numbers in rspec and rspec_on_rails.
-
-== Version 1.0.1
-This is a maintenance release with mostly cleaning up, and one minor enhancement -
-Modules are automatically included when described directly.
-
-* Renamed Spec::Rails' rspec_resource generator to rspec_scaffold.
-* Removed Spec::Rails' be_feed matcher since it's based on assert_select_feed which is not part of Rails (despite that docs for assert_select_encoded says it is).
-* describe(SomeModule) will include that module in the examples. Like for Spec::Rails helpers, but now also in core.
-* Header in HTML report will be yellow instead of red if there is one failed example
-* Applied [#10951] Odd instance variable name in rspec_model template (patch from Kyle Hargraves)
-* Improved integration with autotest (Patches from Ryan Davis and David Goodland)
-* Some small fixes to make all specs run on JRuby.
-
-== Version 1.0.0
-The stake in the ground release. This represents a commitment to the API as it is. No significant
-backwards compatibility changes in the API are expected after this release.
-
-* Fixed [#10923] have_text matcher does not support should_not
-* Fixed [#10673] should > and should >= broken
-* Applied [#10921] Allow verify_rcov to accept greater than threshold coverage %'s via configuration
-* Applied [#10920] Added support for not implemented examples (Patch from Chad Humphries and Ken Barker)
-* Patch to allow not implemented examples. This works by not providing a block to the example. (Patch from Chad Humphries, Ken Barker)
-* Yanked support for Rails 1.1.6 in Spec::Rails
-* RSpec.tmbundle uses CMD-SHIFT-R to run focused examples now.
-* Spec::Rails now bundles a spec:rcov task by default (suggestion from Kurt Schrader)
-* Fixed [#10814] Runner loads shared code, test cases require them again
-* Fixed [#10753] Global before and after
-* Fixed [#10774] Allow before and after to be specified in config II
-* Refactored Spec::Ui examples to use new global before and after blocks.
-* Added instructions about how to get Selenium working with Spec::Ui (spec_ui/examples/selenium/README.txt)
-* Fixed [#10805] selenium.rb missing from gem?
-* Added rdocs explaining how to deal with errors in Rails' controller actions
-* Applied [#10770] Finer grained includes.
-* Fixed [#10747] Helper methods defined in shared specs are not visible when shared spec is used
-* Fixed [#10748] Shared descriptions in separate files causes 'already exists' error
-* Applied [#10698] Running with --drb executes specs twice (patch from Ruy Asan)
-* Fixed [#10871] 0.9.4 - Focussed spec runner fails to run specs in descriptions with type and string when there is no leading space in the string
-
-== Version 0.9.4
-This release introduces massive improvements to Spec::Ui - the user interface functional testing
-extension to RSpec. There are also some minor bug fixes to the RSpec core.
-
-* Massive improvements to Spec::Ui. Complete support for all Watir's ie.xxx(how, what) methods. Inline screenshots and HTML.
-* Reactivated --timeout, which had mysteriously been deactivated in a recent release.
-* Fixed [#10669] Kernel#describe override does not cover Kernel#context
-* Applied [#10636] Added spec for OptionParser in Runner (Patch from Scott Taylor)
-* Added [#10516] should_include should be able to accept multiple items
-* Applied [#10631] redirect_to matcher doesn't respect request.host (Patch from Tim Lucas)
-* Each formatter now flushes their own IO. This is to avoid buffering of output.
-* Fixed [#10670] IVarProxy#delete raises exception when instance variable does not exist
-
-== Version 0.9.3
-This is a bugfix release.
-
-* Fixed [#10594] Failing Custom Matcher show NAME NOT GENERATED description
-* describe(SomeType, "#message") will not add a space: "SomeType#message" (likewise for '.')
-* describe(SomeType, "message") will have a decription with a space: "SomeType message"
-* Applied [#10566] prepend_before and prepend_after callbacks
-* Applied [#10567] Call setup and teardown using before and after callbacks
-
-== Version 0.9.2
-This is a quick maintenance release.
-
-* Added some website love
-* Fixed [#10542] reverse predicate matcher syntax
-* Added a spec:translate Rake task to make 0.9 translation easier with Spec:Rails
-* Better translation of should_redirect_to
-* Fixed --colour support for Windows. This is a regression that was introduced in 0.9.1
-* Applied [#10460] Make SpecRunner easier to instantiate without using commandline args
-
-== Version 0.9.1
-
-This release introduces #describe and #it (aliased as #context and #specify for
-backwards compatibility). This allows you to express specs like this:
-
- describe SomeClass do # Creates a Behaviour
- it "should do something" do # Creates an Example
- end
- end
-
-The command line features four new options that give you more control over what specs
-are being run and in what order. This can be used to verify that your specs are
-independent (by running in opposite order with --reverse). It can also be used to cut
-down feedback time by running the most recently modified specs first (--loadby mtime --reverse).
-
-Further, --example replaces the old --spec option, and it can now take a file name of
-spec names as an alternative to just a spec name. The --format failing_examples:file.txt
-option allows you to output an --example compatible file, which makes it possible to only
-rerun the specs that failed in the last run. Spec::Rails uses all of these four options
-by default to optimise your RSpec experience.
-
-There is now a simple configuration model. For Spec::Rails, you do something like this:
-
- Spec::Runner.configure do |config|
- config.use_transactional_fixtures = true
- config.use_instantiated_fixtures = false
- config.fixture_path = RAILS_ROOT + '/spec/fixtures'
- end
-
-You can now use mocha or flexmock with RSpec if you prefer either to
-RSpec's own mock framework. Just put this:
-
- Spec::Runner.configure do |config|
- config.mock_with :mocha
- end
-
-or this:
-
- Spec::Runner.configure do |config|
- config.mock_with :flexmock
- end
-
-in a file that is loaded before your specs. You can also
-configure included modules and predicate_matchers:
-
- Spec::Runner.configure do |config|
- config.include SomeModule
- config.predicate_matchers[:does_something?] = :do_something
- end
-
-See Spec::DSL::Behaviour for more on predicate_matchers
-
-* Sugar FREE!
-* Added [10434 ] Please Make -s synonymous with -e for autotest compat. This is temporary until autotest uses -e instead of -s.
-* Fixed [#10133] custom predicate matchers
-* Applied [#10473] Add should exist (new matcher) - Patch from Bret Pettichord
-* Added another formatter: failing_behaviours. Writes the names of the failing behaviours for use with --example.
-* Applied [#10315] Patch to fix pre_commit bug 10313 - pre_commit_rails: doesn't always build correctly (Patch from Antii Tarvainen)
-* Applied [#10245] Patch to HTML escape the behavior name when using HTML Formatter (Patch from Josh Knowles)
-* Applied [#10410] redirect_to does not behave consistently with regards to query string parameter ordering (Patch from Nicholas Evans)
-* Applied [#9605] Patch for ER 9472, shared behaviour (Patch by Bob Cotton)
-* The '--format rdoc' option no longer causes a dry-run by default. --dry-run must be used explicitly.
-* It's possible to specify the output file in the --format option (See explanation in --help)
-* Several --format options may be specified to output several formats in one run.
-* The --out option is gone. Use --format html:path/to/my.html instead (or similar).
-* Spec::Runner::Formatter::BaseTextFormatter#initialize only takes one argument - an IO. dry_run and color are setters.
-* Made Spec::Ui *much* easier to install. It will be released separately. Check out trunk/spec_ui/examples
-* HTML reports now include a syntax highlighted snippet of the source code where the spec failed (needs the syntax gem)
-* Added [#10262] Better Helper testing of Erb evaluation block helpers
-* Added [#9735] support flexmock (thanks to Jim Weirich for his modifications to flexmock to support this)
-* Spec::Rails controller specs will no longer let mock exception ripple through to the response.
-* Fixed [#9260] IvarProxy does not act like a hash.
-* Applied [#9458] The rspec_scaffold generator does not take into account class nesting (Patch from Steve Tendon)
-* Applied [#9132] Rakefile spec:doc can fail without preparing database (Patch from Steve Ross)
-* Applied [#9678] Custom runner command line switch, and multi-threaded runner (Patch from Bob Cotton)
-* Applied [#9926] Rakefile - RSPEC_DEPS constant as an Array of Hashes instead of an Array of Arrays (Patch from Scott Taylor)
-* Applied [#9925] Changed ".rhtml" to "template" in REST spec generator (Patch from Scott Taylor)
-* Applied [#9852] Patch for RSpec's Website using Webgen 0.4.2 (Patch from Scott Taylor)
-* Fixed [#6523] Run rspec on rails without a db
-* Fixed [#9295] rake spec should run anything in the spec directory (not just rspec's standard dirs)
-* Added [#9786] infer controller and helper names from the described type
-* Fixed [#7795] form_tag renders action='/view_spec' in view specs
-* Fixed [#9767] rspec_on_rails should not define rescue_action on controllers
-* Fixed [#9421] --line doesn't work with behaviours that use class names
-* Fixed [#9760] rspec generators incompatible with changes to edge rails
-* Added [#9786] infer controller and helper names from the described type
-* Applied a simplified version of [#9282] Change to allow running specs from textmate with rspec installed as a rails plugin (and no rspec gem installed)
-* Applied [#9700] Make Spec::DSL::Example#name public / Add a --timeout switch. A great way to prevent specs from getting slow.
-* In Rails, script/generate rspec will generate a spec.opts file that optimises faster/more efficient running of specs.
-* Added [#9522] support using rspec's expectations with test/unit
-* Moved rspec_on_rails up to the project root, simplifying the download url
-* Fixed [#8103] RSpec not installing spec script correctly.
-* The --spec option is replaced by the --example option.
-* The --loadby option no longer supports a file argument. Use --example file_name instead.
-* The --example option can now take a file name as an argument. The file should contain example names.
-* Internal classes are named Behaviour/Example (rather than Context/Specification).
-* You can now use mocha by saying config.mock_with :mocha in a spec_helper
-* before_context_eval is replaced by before_eval.
-* Applied [#9509] allow spaced options in spec.opts
-* Applied [#9510] Added File for Ruby 1.8.6
-* Applied [#9511] Clarification to README file in spec/
-* Moved all of the Spec::Rails specs down to the plugins directory - now you can run the specs after you install.
-* Updated RSpec.tmbundle to the 0.9 syntax and replaced context/specify with describe/it.
-* Applied [#9232] ActionController::Base#render is sometimes protected (patch from Dan Manges)
-* Added --reverse option, allowing contexts/specs to be run in reverse order.
-* Added --loadby option, allowing better control over load order for spec files. mtime and file.txt supported.
-* Implemented [#8696] --order option (see --reverse and --loadby)
-* Added describe/it as aliases for context/specify - suggestion from Dan North.
-* Applied [#7637] [PATCH] add skip-migration option to rspec_scaffold generator
-* Added [#9167] string.should have_tag
-* Changed script/rails_spec_server to script/spec_server and added script/spec (w/ path to vendor/plugins/rspec)
-* Fixed [#8897] Error when mixing controller spec with/without integrated views and using template system other than rhtml
-* Updated sample app specs to 0.9 syntax
-* Updated generated specs to 0.9 syntax
-* Applied [#8994] trunk: generated names for be_ specs (Multiple patches from Yurii Rashkovskii)
-* Applied [#9983]: Allow before and after to be called in BehaviourEval. This is useful for shared examples.
-
-== Version 0.8.2
-
-Replaced assert_select fork with an assert_select wrapper for have_tag. This means that "should have_rjs" no longer supports :hide or :effect, but you can still use should_have_rjs for those.
-
-== Version 0.8.1
-
-Quick "in house" bug-fix
-
-== Version 0.8.0
-
-This release introduces a new approach to handling expectations using Expression Matchers.
-
-See Upgrade[http://rspec.rubyforge.org/upgrade.html], Spec::Expectations, Spec::Matchers and RELEASE-PLAN for more info.
-
-This release also improves the spec command line by adding DRb support and making it possible to
-store command line options in a file. This means a more flexible RSpec experience with Rails,
-Rake and editor plugins like TextMate.
-
-It also sports myriad new features, bug fixes, patches and general goodness:
-
-* Fixed [#8928] rspec_on_rails 0.8.0-RC1 controller tests make double call to setup_with_fixtures
-* Fixed [#8925] Documentation bug in 0.8.0RC1 rspec website
-* Applied [#8132] [PATCH] RSpec breaks "rake db:sessions:create" in a rails project that has the rspec_on_rails plugin (Patch from Erik Kastner)
-* Fixed [#8789] --line and --spec not working when the context has parenhesis in the name
-* Added [#8783] auto generate spec names from last expectation
-* --heckle now fails if the heckled class or module is not found.
-* Fixed [#8771] Spec::Mocks::BaseExpectation#with converts hash params to array of arrays with #collect
-* Fixed [#8750] should[_not]_include backwards compatibility between 0.8.0-RC1 and 0.7.5.1 broken
-* Fixed [#8646] Context Runner does not report on Non standard exceptions and return a 0 return code
-* RSpec on Rails' spec_helper.rb will only force RAILS_ENV to test if it was not specified on the command line.
-* Fixed [#5485] proc#should_raise and proc#should_not_raise output
-* Added [#8484] should_receive with blocks
-* Applied [#8218] heckle_runner.rb doesn't work with heckle >= 1.2.0 (Patch from Michal Kwiatkowski)
-* Fixed [#8240] Cryptic error message when no controller_name
-* Applied [#7461] [PATCH] Contexts don't call Module::included when they include a module
-* Removed unintended block of test/unit assertions in rspec_on_rails - they should all, in theory, now be accessible
-* Added mock_model method to RSpec on Rails, which stubs common methods. Based on http://metaclass.org/2006/12/22/making-a-mockery-of-activerecord
-* Fixed [#8165] Partial Mock Errors when respond_to? is true but the method is not in the object
-* Fixed [#7611] Partial Mocks override Subclass methods
-* Fixed [#8302] Strange side effect when mocking a class method
-* Applied [#8316] to_param should return a stringified key in resource generator's controller spec (Patch from Chris Anderson)
-* Applied [#8216] shortcut for creating object stub
-* Applied [#8008] Correct generated specs for view when calling resource generator (Patch from Jonathan Tron)
-* Fixed [#7754] Command-R fails to run spec in TextMate (added instruction from Luke Redpath to the website)
-* Fixed [#7826] RSpect.tmbundle web page out of date.
-* RSpec on Rails specs are now running against RoR 1.2.1 and 1.2.2
-* rspec_scaffold now generates specs for views
-* In a Rails app, RSpec core is only loaded when RAILS_ENV==test (init.rb)
-* Added support for target.should arbitrary_expectation_handler and target.should_not arbitrary_expectation_handler
-* Fixed [#7533] Spec suite fails and the process exits with a code 0
-* Fixed [#7565] Subsequent stub! calls for method fail to override the first call to method
-* Applied [#7524] Incorrect Documentation for 'pattern' in Rake task (patch from Stephen Duncan)
-* Fixed [#7409] default fixtures do not appear to run.
-* Fixed [#7507] "render..and return" doesn't return
-* Fixed [#7509] rcov/rspec incorrectly includes boot.rb (Patch from Courtenay)
-* Fixed [#7506] unnecessary complex output on failure of response.should be_redirect
-* Applied [#6098] Make scaffold_resource generator. Based on code from Pat Maddox.
-* The drbspec command is gone. Use spec --drb instead.
-* The drb option is gone from the Rake task. Pass --drb to spec_opts instead.
-* New -X/--drb option for running specs against a server like spec/rails' script/rails_spec_server
-* New -O/--options and -G/--generate flags for file-based options (handy for spec/rails)
-* Applied [#7339] Turn off caching in HTML reports
-* Applied [#7419] "c option for colorizing output does not work with rails_spec" (Patch from Shintaro Kakutani)
-* Applied [#7406] [PATCH] 0.7.5 rspec_on_rails loads fixtures into development database (Patch from Wilson Bilkovich)
-* Applied [#7387] Allow stubs to return consecutive values (Patch from Pat Maddox)
-* Applied [#7393] Fix for rake task (Patch from Pat Maddox)
-* Reinstated support for response.should_render (in addition to controller.should_render)
-
-== Version 0.7.5.1
-
-Bug fix release to allow downloads of rspec gem using rubygems 0.9.1.
-
-== Version 0.7.5
-This release adds support for Heckle - Seattle'rb's code mutation tool.
-There are also several bug fixes to the RSpec core and the RSpec on Rails plugin.
-
-* Removed svn:externals on rails versions and plugins
-* Applied [#7345] Adding context_setup and context_teardown, with specs and 100% rcov
-* Applied [#7320] [PATCH] Allow XHR requests in controller specs to render RJS templates
-* Applied [#7319] Migration code uses drop_column when it should use remove_column (patch from Pat Maddox)
-* Added support for Heckle
-* Applied [#7282] dump results even if spec is interrupted (patch from Kouhei Sutou)
-* Applied [#7277] model.should_have(n).errors_on(:attribute) (patch from Wilson Bilkovich)
-* Applied [#7270] RSpec render_partial colliding with simply_helpful (patch from David Goodlad)
-* Added [#7250] stubs should support throwing
-* Added [#7249] stubs should support yielding
-* Fixed [#6760] fatal error when accessing nested finders in rspec
-* Fixed [#7179] script/generate rspec_scaffold generates incorrect helper name
-* Added preliminary support for assert_select (response.should_have)
-* Fixed [#6971] and_yield does not work when the arity is -1
-* Fixed [#6898] Can we separate rspec from the plugins?
-* Added [#7025] should_change should accept a block
-* Applied [#6989] partials with locals (patch from Micah Martin)
-* Applied [#7023] Typo in team.page
-
-== Version 0.7.4
-
-This release features a complete redesign of the reports generated with --format html.
-As usual there are many bug fixes - mostly related to spec/rails.
-
-* Applied [#7010] Fixes :spacer_template does not work w/ view spec (patch from Shintaro Kakutani)
-* Applied [#6798] ensure two ':' in the first backtrace line for Emacs's 'next-error' command (patch from Kouhei Sutou)
-* Added Much nicer reports to generated website
-* Much nicer reports with --format --html (patch from Luke Redpath)
-* Applied [#6959] Calls to render and redirect in controllers should return true
-* Fixed [#6981] helper method is not available in partial template.
-* Added [#6978] mock should tell you the expected and actual args when receiving the right message with the wrong args
-* Added the possibility to tweak the output of the HtmlFormatter (by overriding extra_failure_content).
-* Fixed [#6936] View specs don't include ApplicationHelper by default
-* Fixed [#6903] Rendering a partial in a view makes the view spec blow up
-* Added callback library from Brian Takita
-* Added [#6925] support controller.should_render :action_name
-* Fixed [#6884] intermittent errors related to method binding
-* Fixed [#6870] rspec on edge rails spec:controller fixture loading fails
-* Using obj.inspect for all messages
-* Improved performance by getting rid of instance_exec (instance_eval is good enough because we never need to pass it args)
-
-== Version 0.7.3
-
-Almost normal bug fix/new feature release.
-
-A couple of things you need to change in your rails specs:
-# spec_helper.rb is a little different (see http://rspec.rubyforge.org/upgrade.html)
-# use controller.should_render before OR after the action (controller.should_have_rendered is deprecated)
-
-* Applied [#6577] messy mock backtrace when frozen to edge rails (patch from Jay Levitt)
-* Fixed [#6674] rspec_on_rails fails on @session deprecation warning
-* Fixed [#6780] routing() was failing...fix included - works for 1.1.6 and edge (1.2)
-* Fixed [#6835] bad message with arbitrary predicate
-* Added [#6731] Partial templates rendered
-* Fixed [#6713] helper methods not rendered in view tests?
-* Fixed [#6707] cannot run controller / helper tests via rails_spec or spec only works with rake
-* Applied [#6417] lambda {...}.should_change(receiver, :message) (patch from Wilson Bilkovich)
-* Eliminated dependency on ZenTest
-* Fixed [#6650] Reserved characters in the TextMate bundle break svn on Win32
-* Fixed [#6643] script/generate rspec_controller: invalid symbol generation for 'controller_name' for *modularized* controllers
-* The script/rails_spec command has been moved to bin/drbspec in RSpec core (installed by the gem)
-
-== Version 0.7.2
-
-This release introduces a brand new RSpec bundle for TextMate, plus some small bugfixes.
-
-* Packaged RSpec.tmbundle.tgz as part of the distro
-* Fixed [#6593] Add moving progress bar to HtmlFormatter using Javascript
-* Applied [#6265] should_raise should accept an Exception object
-* Fixed [#6616] Can't run Rails specs with RSpec.tmbundle
-* Fixed [#6411] Can't run Rails specs with ruby
-* Added [#6589] New -l --line option. This is useful for IDE/editor runners/extensions.
-* Fixed [#6615] controller.should_render_rjs should support :partial => 'path/to/template'
-
-== Version 0.7.1
-
-Bug fixes and a couple o' new features.
-
-* Fixed [#6575] Parse error in aliasing the partial mock original method (patch by Brian Takita)
-* Fixed [#6277] debris left by stubbing (trunk) [submitted by dastels] (fixed by fix to [#6575])
-* Fixed [#6575] Parse error in aliasing the partial mock original method
-* Fixed [#6555] should_have_tag does not match documentation
-* Fixed [#6567] SyntaxError should not stop entire run
-* Fixed [#6558] integrated views look for template even when redirected
-* Fixed [#6547] response.should be_redirect broken in 0.7.0
-* Applied [#6471] Easy way to spec routes
-* Applied [#6587] Rspec on Rails displays "Spec::Rails::ContextFactory" as context name
-* Applied [#6514] Document has trivial typos.
-* Added [#6560] controller.session should be available before the action
-* Added support for should_have_rjs :visual_effect
-* Different printing and colours for unmet expectations (red) and other exceptions (magenta)
-* Simplified method_missing on mock_methods to make it less invasive on partial mocks.
-
-== Version 0.7.0
-
-This is the "Grow up and eat your own dog food release". RSpec is now used on itself and
-we're no longer using Test::Unit to test it. Although, we are still extending Test::Unit
-for the rails plugin (indirectly - through ZenTest)
-
-IMPORTANT NOTE: THIS RELEASE IS NOT 100% BACKWARDS COMPATIBLE TO 0.6.x
-
-There are a few changes that will require that you change your existing specs.
-
-RSpec now handles equality exactly like ruby does:
-
-# actual.should_equal(expected) will pass if actual.equal?(expected) returns true
-# actual.should eql(expected) will pass if actual.eql?(expected) returns true
-# actual.should == expected will pass if actual == expected) returns true
-
-At the high level, eql? implies equivalence, while equal? implies object identity. For more
-information on how ruby deals w/ equality, you should do this:
-
-ri equal?
-
-or look at this:
-
-http://www.ruby-doc.org/core/classes/Object.html#M001057
-
-Also, we left in should_be as a synonym for should_equal, so the only specs that should break are the
-ones using should_equal (which used to use <code>==</code> instead of <code>.equal?</code>).
-
-Lastly, should_be used to handle true and false differently from any other values. We've removed
-this special handling, so now actual.should_be true will fail for any value other than true (it
-used to pass for any non-nil, non-false value), and actual.should_be false will fail for any
-value other than false (it used to pass for nil or false).
-
-Here's what you'll need to do to update your specs:
-# search for "should_equal" and replace with "should_eql"
-# run specs
-
-If any specs still fail, they are probably related to should be_true or should_be_false using
-non-boolean values. Those you'll just have to inspect manually and adjust appropriately (sorry!).
-
---------------------------------------------------
-Specifying multiple return values in mocks now works like this:
-
-mock.should_receive(:message).and_return(1,2,3)
-
-It used to work like this:
-
-mock.should_receive(:message).and_return([1,2,3])
-
-but we decided that was counter intuitive and otherwise lame.
-
-Here's what you'll need to do to update your specs:
-# search for "and_return(["
-# get rid of the "[" and "]"
-
---------------------------------------------------
-RSpec on Rails now supports the following (thanks to ZenTest upon which it is built):
-
-# Separate specs for models, views, controllers and helpers
-# Controller specs are completely decoupled from the views by default (though you can tell them to couple themselves if you prefer)
-# View specs are completely decoupled from app-specific controllers
-
-See http://rspec.rubyforge.org/documentation/rails/index.html for more information
---------------------------------------------------
-As usual, there are also other new features and bug fixes:
-
-* Added lots of documentation on mocks/stubs and the rails plugin.
-* Added support for assigns[key] syntax for controller specs (to align w/ pre-existing syntax for view specs)
-* Added support for controller.should_redirect_to
-* RSpec on Rails automatically checks whether it's compatible with the installed RSpec
-* Applied [#6393] rspec_on_rails uses deprecated '@response' instead of the accessor
-* RSpec now has 100% spec coverage(!)
-* Added support for stubbing and partial mocking
-* Progress (....F..F.) is now coloured. Tweaked patch from KAKUTANI Shintaro.
-* Backtrace now excludes the rcov runner (/usr/local/bin/rcov)
-* Fixed [#5539] predicates do not work w/ rails
-* Added [#6091] support for Regexp matching messages sent to should_raise
-* Added [#6333] support for Regexp matching in mock arguments
-* Applied [#6283] refactoring of diff support to allow selectable formats and custom differs
-* Fixed [#5564] "ruby spec_file.rb" doesn't work the same way as "spec spec_file.rb"
-* Fixed [#6056] Multiple output of failing-spec notice
-* Fixed [#6233] Colours in specdoc
-* Applied [#6207] Allows --diff option to diff target and expected's #inspect output (Patch by Lachie Cox)
-* Fixed [#6203] Failure messages are misleading - consider using inspect.
-* Added [#6334] subject.should_have_xyz will try to call subject.has_xyz? - use this for hash.should_have_key(key)
-* Fixed [#6017] Rake task should ignore empty or non-existent spec-dirs
-
-== Version 0.6.4
-
-In addition to a number of bug fixes and patches, this release begins to formalize the support for
-RSpec on Rails.
-
-* Added Christopher Petrilli's TextMate bundle to vendor/textmate/RSpec.tmbundle
-* Fixed [#5909], once again supporting multi_word_predicates
-* Applied [#5873] - response.should_have_rjs (initial patch from Jake Howerton, based on ARTS by Kevin Clark)
-* Added generation of view specs for rspec_on_rails
-* Applied [#5815] active_record_subclass.should_have(3).records
-* Added support in "rake stats" for view specs (in spec/views)
-* Applied [#5801] QuickRef.pdf should say RSpec, not rSpec
-* Applied [#5728] rails_spec_runner fails on Windows (Patch from Lindsay Evans).
-* Applied [#5708] RSpec Rails plugin rspec_controller generator makes specs that do not parse.
-* Cleaned up RSpec on Rails so it doesn't pollute as much during bootstrapping.
-* Added support for response.should_have_tag and response.should_not_have_tag (works just like assert_tag in rails)
-* Added new -c, --colour, --color option for colourful (red/green) output. Inspired from Pat Eyler's Redgreen gem.
-* Added examples for Watir and Selenium under the gem's vendor directory.
-* Renamed rails_spec_runner to rails_spec_server (as referred to in the docs)
-* Added support for trying a plural for arbitrary predicates. E.g. Album.should_exist(:name => "Hey Jude") will call Album.exists?(:name => "Hey Jude")
-* Added support for should_have to work with methods taking args returning a collection. E.g. @dave.should_have(3).albums_i_have_that_this_guy_doesnt(@aslak)
-* Added [#5570] should_not_receive(:msg).with(:specific, "args")
-* Applied [#5065] to support using define_method rather than method_missing to capture expected messages on mocks. Thanks to Eero Saynatkari for the tip that made it work.
-* Restructured directories and Modules in order to separate rspec into three distinct Modules: Spec::Expectations, Spec::Runner and Spec::Mocks. This will allow us to more easily integrate other mock frameworks and/or allow test/unit users to take advantage of the expectation API.
-* Applied [#5620] support any boolean method and arbitrary comparisons (5.should_be < 6) (Patch from Mike Williams)
-
-== Version 0.6.3
-
-This release fixes some minor bugs related to RSpec on Rails
-Note that if you upgrade a rails app with this version of the rspec_on_rails plugin
-you should remove your lib/tasks/rspec.rake if it exists.
-
-* Backtraces from drb (and other standard ruby libraries) are now stripped from backtraces.
-* Applied [#5557] Put rspec.rake into the task directory of the RSpec on Rails plugin (Patch from Daniel Siemssen)
-* Applied [#5556] rails_spec_server loads environment.rb twice (Patch from Daniel Siemssen)
-
-== Version 0.6.2
-This release fixes a couple of regressions with the rake task that were introduced in the previous version (0.6.1)
-
-* Fixed [#5518] ruby -w: warnings in 0.6.1
-* Applied [#5525] fix rake task path to spec tool for gem-installed rspec (patch from Riley Lynch)
-* Fixed a teensey regression with the rake task - introduced in 0.6.1. The spec command is now quoted so it works on windows.
-
-== Version 0.6.1
-This is the "fix the most annoying bugs release" of RSpec. There are 9 bugfixes this time.
-Things that may break backwards compatibility:
-1) Spec::Rake::SpecTask no longer has the options attribute. Use ruby_opts, spec_opts and rcov_opts instead.
-
-* Fixed [#4891] RCOV task failing on windows
-* Fixed [#4896] Shouldn't modify user's $LOAD_PATH (Tip from Gavin Sinclair)
-* Fixed [#5369] ruby -w: warnings in RSpec 0.5.16 (Tip from Suraj Kurapati)
-* Applied [#5141] ExampleMatcher doesn't escape strings before matching (Patch from Nikolai Weibull).
-* Fixed [#5224] Move 'require diff-lcs' from test_helper.rb to diff_test.rb (Tip from Chris Roos)
-* Applied [#5449] Rake stats for specs (Patch from Nick Sieger)
-* Applied [#5468, #5058] Fix spec runner to correctly run controller specs (Patch from Daniel Siemssen)
-* Applied fixes to rails_spec_server to improve its ability to run several times. (Patch from Daniel Siemssen)
-* Changed RCov::VerifyTask to fail if the coverage is above the threshold. This is to ensure it gets bumped when coverage improves.
-
-== Version 0.6.0
-This release makes an official commitment to underscore_syntax (with no more support for dot.syntax)
-
-* Fixed bug (5292) that caused mock argument matching to fail
-* Converted ALL tests to use underscore syntax
-* Fixed all remaining problems with underscores revealed by converting all the tests to underscores
-* Enhanced sugar to support combinations of methods (i.e. once.and_return)
-* Simplified helper structure taking advantage of dot/underscore combos (i.e. should.be.an_instance_of, which can be expressed as should be_an_instance_of)
-* Added support for at_most in mocks
-* Added support for should_not_receive(:msg) (will be removing should_receive(:msg).never some time soon)
-* Added support for should_have_exactly(5).items_in_collection
-
-== Version 0.5.16
-This release improves Rails support and test2spec translation.
-
-* Fixed underscore problems that occurred when RSpec was used in Rails
-* Simplified the Rails support by packaging it as a plugin instead of a generator gem.
-* Fixed [#5063] 'rspec_on_rails' require line in spec_helper.rb
-* Added pre_commit rake task to reduce risk of regressions. Useful for RSpec developers and patchers.
-* Added failure_message to RSpec Rake task
-* test2spec now defines converted helper methods outside of the setup block (bug #5057).
-
-== Version 0.5.15
-This release removes a prematurely added feature that shouldn't have been added.
-
-* Removed support for differences that was added in 0.5.14. The functionality is not aligned with RSpec's vision.
-
-== Version 0.5.14
-This release introduces better ways to extend specs, improves some of the core API and
-a experimental support for faster rails specs.
-
-* Added proc methods for specifying differences (increments and decrements). See difference_test.rb
-* Methods can now be defined alongside specs. This obsoletes the need for defining methods in setup. (Patch #5002 from Brian Takita)
-* Sugar (underscores) now works correctly with should be_a_kind_of and should be_an_instance_of
-* Added support for include and inherit in contexts. (Patch #4971 from Brian Takita)
-* Added rails_spec and rails_spec_server for faster specs on rails (still buggy - help needed)
-* Fixed bug that caused should_render to break if given a :symbol (in Rails)
-* Added support for comparing exception message in should_raise and should_not_raise
-
-== Version 0.5.13
-This release fixes some subtle bugs in the mock API.
-
-* Use fully-qualified class name of Exceptions in failure message. Easier to debug that way.
-* Fixed a bug that caused mocks to yield a one-element array (rather than the element) when one yield arg specified.
-* Mocks not raise AmbiguousReturnError if an explicit return is used at the same time as an expectation block.
-* Blocks passed to yielding mocks can now raise without causing mock verification to fail.
-
-== Version 0.5.12
-This release adds diff support for failure messages, a HTML formatter plus some other
-minor enhancements.
-
-* Added HTML formatter.
-* Added fail_on_error option to spectask.
-* Added support for diffing, using the diff-lcs Rubygem (#2648).
-* Remove RSpec on Rails files from backtrace (#4694).
-* All of RSpec's own tests run successfully after translation with test2spec.
-* Added --verbose mode for test2spec - useful for debugging when classes fail to translate.
-* Output of various formatters is now flushed - to get more continuous output.
-
-== Version 0.5.11
-This release makes test2spec usable with Rails (with some manual steps).
-See http://rspec.rubyforge.org/tools/rails.html for more details
-
-* test2spec now correctly translates bodies of helper methods (non- test_*, setup and teardown ones).
-* Added more documentation about how to get test2spec to work with Rails.
-
-== Version 0.5.10
-This version features a second rewrite of test2spec - hopefully better than the previous one.
-
-* Improved test2spec's internals. It now transforms the syntax tree before writing out the code.
-
-== Version 0.5.9
-This release improves test2spec by allowing more control over the output
-
-* Added --template option to test2spec, which allows for custom output driven by ERB
-* Added --quiet option to test2spec
-* Removed unnecessary dependency on RubyToC
-
-== Version 0.5.8
-This release features a new Test::Unit to RSpec translation tool.
-Also note that the RubyGem of the previous release (0.5.7) was corrupt.
-We're close to being able to translate all of RSpec's own Test::Unit
-tests and have them run successfully!
-
-* Updated test2spec documentation.
-* Replaced old test2rspec with a new test2spec, which is based on ParseTree and RubyInline.
-
-== Version 0.5.7
-This release changes examples and documentation to recommend underscores rather than dots,
-and addresses some bugfixes and changes to the spec commandline.
-
-* spec DIR now works correctly, recursing down and slurping all *.rb files
-* All documentation and examples are now using '_' instead of '.'
-* Custom external formatters can now be specified via --require and --format.
-
-== Version 0.5.6
-This release fixes a bug in the Rails controller generator
-
-* The controller generator did not write correct source code (missing 'do'). Fixed.
-
-== Version 0.5.5
-This release adds initial support for Ruby on Rails in the rspec_generator gem.
-
-* [Rails] Reorganised Lachie's original code to be a generator packaged as a gem rather than a plugin.
-* [Rails] Imported code from http://lachie.info/svn/projects/rails_plugins/rspec_on_rails (Written by Lachie Cox)
-* Remove stack trace lines from TextMate's Ruby bundle
-* Better error message from spectask when no spec files are found.
-
-== Version 0.5.4
-The "the tutorial is ahead of the gem" release
-
-* Support for running a single spec with --spec
-* Exitcode is now 1 unless all specs pass, in which case it's 0.
-* -v, --version now both mean the same thing
-* For what was verbose output (-v), use --format specdoc or -f s
-* --format rdoc always runs in dry-run mode
-* Removed --doc and added --format and --dry-run
-* Refactored towards more pluggable formatters
-* Use webgen's execute tag when generating website (more accurate)
-* Fixed incorrect quoting of spec_opts in SpecTask
-* Added patch to enable underscored shoulds like 1.should_equal(1) - patch from Rich Kilmer
-* Removed most inherited instance method from Mock, making more methods mockable.
-* Made the RCovVerify task part of the standard toolset.
-* Documented Rake task and how to use it with Rcov
-* Implemented <ruby></ruby> tags for website (hooking into ERB, RedCloth and syntax)
-* RSpec Rake task now takes spec_opts and out params so it can be used for doc generation
-* RCov integration for RSpec Rake task (#4058)
-* Group all results instead of printing them several times (#4057)
-* Mocks can now yield
-* Various improvements to error reporting (including #4191)
-* backtrace excludes rspec code - use -b to include it
-* split examples into examples (passing) and failing_examples
-
-== Version 0.5.3
-The "hurry up, CoR is in two days" release.
-
-* Don't run rcov by default
-* Make separate task for running tests with RCov
-* Added Rake task to fail build if coverage drops below a certain threshold
-* Even more failure output cleanup (simplification)
-* Added duck_type constraint for mocks
-
-== Version 0.5.2
-This release has minor improvements to the commandline and fixes some gem warnings
-
-* Readded README to avoid RDoc warnings
-* Added --version switch to commandline
-* More changes to the mock API
-
-== Version 0.5.1
-This release is the first release of RSpec with a new website. It will look better soon.
-
-* Added initial documentation for API
-* Added website based on webgen
-* Modified test task to use rcov
-* Deleted unused code (thanks, rcov!)
-* Various changes to the mock API,
-* Various improvements to failure reporting
-
-== Version 0.5.0
-This release introduces a new API and obsolesces previous versions.
-
-* Moved source code to separate subfolders
-* Added new DSL runner based on instance_exec
-* Added spike for testdox/rdoc generation
-* merge Astels' and Chelimsky's work on ShouldHelper
-* this would be 0.5.0 if I updated the documentation
-* it breaks all of your existing specifications. We're not sorry.
-
-== Version 0.3.2
-
-The "srbaker is an idiot" release.
-
-* also forgot to update the path to the actual Subversion repository
-* this should be it
-
-== Version 0.3.1
-
-This is just 0.3.0, but with the TUTORIAL added to the documentation list.
-
-* forgot to include TUTORIAL in the documentation
-
-== Version 0.3.0
-
-It's been a while since last release, lots of new stuff is available. For instance:
-
-* improvements to the runners
-* addition of should_raise expectation (thanks to Brian Takita)
-* some documentation improvements
-* RSpec usable as a DSL
-
-== Version 0.2.0
-
-This release provides a tutorial for new users wishing to get started with
-RSpec, and many improvements.
-
-* improved reporting in the spec runner output
-* update the examples to the new mock api
-* added TUTORIAL, a getting started document for new users of RSpec
-
-== Version 0.1.7
-
-This release improves installation and documentation, mock integration and error reporting.
-
-* Comparison errors now print the class name too.
-* Mocks now take an optional +options+ parameter to specify behaviour.
-* Removed __expects in favour of should_receive
-* Added line number reporting in mock error messages for unreceived message expectations.
-* Added should_match and should_not_match.
-* Added a +mock+ method to Spec::Context which will create mocks that autoverify (no need to call __verify).
-* Mocks now require names in the constructor to ensure sensible error messages.
-* Made 'spec' executable and updated usage instructions in README accordingly.
-* Made more parts of the Spec::Context API private to avoid accidental usage.
-* Added more RDoc to Spec::Context.
-
-== Version 0.1.6
-
-More should methods.
-
-* Added should_match and should_not_match.
-
-== Version 0.1.5
-
-Included examples and tests in gem.
-
-== Version 0.1.4
-
-More tests on block based Mock expectations.
-
-== Version 0.1.3
-
-Improved mocking:
-
-* block based Mock expectations.
-
-== Version 0.1.2
-
-This release adds some improvements to the mock API and minor syntax improvements
-
-* Added Mock.should_expect for a more consistent DSL.
-* Added MockExpectation.and_returns for a better DSL.
-* Made Mock behave as a null object after a call to Mock.ignore_missing
-* Internal syntax improvements.
-* Improved exception trace by adding exception class name to error message.
-* Renamed some tests for better consistency.
-
-== Version 0.1.1
-
-This release adds some shoulds and improves error reporting
-
-* Added should be_same_as and should_not be_same_as.
-* Improved error reporting for comparison expectations.
-
-== Version 0.1.0
-
-This is the first preview release of RSpec, a Behaviour-Driven Development library for Ruby
-
-* Added Rake script with tasks for gems, rdoc etc.
-* Added an XForge task to make release go easier.
diff --git a/vendor/plugins/rspec/MIT-LICENSE b/vendor/plugins/rspec/MIT-LICENSE
deleted file mode 100644
index 336e52c94..000000000
--- a/vendor/plugins/rspec/MIT-LICENSE
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2005-2008 The RSpec Development Team
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/plugins/rspec/README b/vendor/plugins/rspec/README
deleted file mode 100644
index a532dca93..000000000
--- a/vendor/plugins/rspec/README
+++ /dev/null
@@ -1,36 +0,0 @@
-== RSpec
-
-RSpec is a Behaviour Driven Development framework with tools to express User Stories
-with Executable Scenarios and Executable Examples at the code level.
-
-RSpec ships with several modules:
-
-Spec::Story provides a framework for expressing User Stories and Scenarios
-
-Spec::Example provides a framework for expressing Isolated Examples
-
-Spec::Matchers provides Expression Matchers for use with Spec::Expectations
-and Spec::Mocks.
-
-Spec::Expectations supports setting expectations on your objects so you
-can do things like:
-
- result.should equal(expected_result)
-
-Spec::Mocks supports creating Mock Objects, Stubs, and adding Mock/Stub
-behaviour to your existing objects.
-
-== Installation
-
-The simplest approach is to install the gem (as root in some environments):
-
- gem install -r rspec
-
-== Building the RSpec gem
-
-If you prefer to build the gem locally:
-
- git clone git://github.com/dchelimsky/rspec.git
- cd rspec
- rake gem
- gem install pkg/rspec-0.x.x.gem #as root
diff --git a/vendor/plugins/rspec/Rakefile b/vendor/plugins/rspec/Rakefile
index 9405e30bf..1a0a7cfe6 100644
--- a/vendor/plugins/rspec/Rakefile
+++ b/vendor/plugins/rspec/Rakefile
@@ -1,105 +1,101 @@
-$:.unshift('lib')
-require 'rubygems'
-require 'rake/gempackagetask'
-require 'rake/contrib/rubyforgepublisher'
-require 'rake/clean'
-require 'rake/rdoctask'
-require 'rake/testtask'
+# -*- ruby -*-
+gem 'hoe', '>=2.0.0'
+require 'hoe'
+
+$:.unshift 'lib'
+
require 'spec/version'
-dir = File.dirname(__FILE__)
+require 'spec/rake/spectask'
+require 'spec/ruby'
+require 'cucumber/rake/task'
-# Some of the tasks are in separate files since they are also part of the website documentation
-load File.dirname(__FILE__) + '/rake_tasks/examples.rake'
-load File.dirname(__FILE__) + '/rake_tasks/examples_with_rcov.rake'
-load File.dirname(__FILE__) + '/rake_tasks/failing_examples_with_html.rake'
-load File.dirname(__FILE__) + '/rake_tasks/verify_rcov.rake'
+Hoe.spec 'rspec' do
+ self.version = Spec::VERSION::STRING
+ self.summary = Spec::VERSION::SUMMARY
+ self.description = "Behaviour Driven Development for Ruby."
+ self.rubyforge_name = 'rspec'
+ self.developer('RSpec Development Team', 'rspec-devel@rubyforge.org')
+ self.extra_dev_deps << ["cucumber",">=0.3"] << ["bmabey-fakefs",">=0.1.1"] << ["syntax",">=1.0"] << ["diff-lcs",">=1.1.2"]
+ self.extra_dev_deps << ["heckle",">=1.4.3"] unless Spec::Ruby.version >= "1.9"
+ self.remote_rdoc_dir = "rspec/#{Spec::VERSION::STRING}"
+ self.rspec_options = ['--options', 'spec/spec.opts']
+ self.history_file = 'History.rdoc'
+ self.readme_file = 'README.rdoc'
+ self.post_install_message = <<-POST_INSTALL_MESSAGE
+#{'*'*50}
-PKG_NAME = "rspec"
-PKG_VERSION = Spec::VERSION::STRING
-PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
-PKG_FILES = FileList[
- '[A-Z]*',
- 'lib/**/*.rb',
- 'spec/**/*',
- 'examples/**/*',
- 'failing_examples/**/*',
- 'plugins/**/*',
- 'stories/**/*',
- 'rake_tasks/**/*'
-]
+ Thank you for installing rspec-#{Spec::VERSION::STRING}
-task :default => [:verify_rcov]
-task :verify_rcov => [:spec, :stories]
+ Please be sure to read History.rdoc and Upgrade.rdoc
+ for useful information about this release.
-desc "Run all specs"
-Spec::Rake::SpecTask.new do |t|
- t.spec_files = FileList['spec/**/*_spec.rb']
- t.spec_opts = ['--options', 'spec/spec.opts']
- unless ENV['NO_RCOV']
- t.rcov = true
- t.rcov_dir = '../doc/output/coverage'
- t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,examples,\/var\/lib\/gems,\/Library\/Ruby,\.autotest']
- end
+#{'*'*50}
+POST_INSTALL_MESSAGE
end
-desc "Run all stories"
-task :stories do
- html = 'story_server/prototype/rspec_stories.html'
- ruby "stories/all.rb --colour --format plain --format html:#{html}"
- unless IO.read(html) =~ /<span class="param">/m
- raise 'highlighted parameters are broken in story HTML'
- end
+['audit','test','test_deps','default','post_blog'].each do |task|
+ Rake.application.instance_variable_get('@tasks').delete(task)
end
-desc "Run all specs and store html output in doc/output/report.html"
-Spec::Rake::SpecTask.new('spec_html') do |t|
- t.spec_files = FileList['spec/**/*_spec.rb']
- t.spec_opts = ['--format html:../../../../doc/output/report.html', '--format progress','--backtrace']
+task :post_blog do
+ # no-op
end
-desc "Run all failing examples"
-Spec::Rake::SpecTask.new('failing_examples') do |t|
- t.spec_files = FileList['failing_examples/**/*_spec.rb']
-end
+# Some of the tasks are in separate files since they are also part of the website documentation
+load 'resources/rake/examples.rake'
+load 'resources/rake/examples_with_rcov.rake'
+load 'resources/rake/failing_examples_with_html.rake'
+load 'resources/rake/verify_rcov.rake'
-desc 'Generate RDoc'
-rd = Rake::RDocTask.new do |rdoc|
- rdoc.rdoc_dir = '../doc/output/rdoc'
- rdoc.options << '--title' << 'RSpec' << '--line-numbers' << '--inline-source' << '--main' << 'README'
- rdoc.rdoc_files.include('README', 'CHANGES', 'MIT-LICENSE', 'UPGRADE', 'lib/**/*.rb')
+task :cleanup_rcov_files do
+ rm_rf 'coverage.data'
end
-spec = Gem::Specification.new do |s|
- s.name = PKG_NAME
- s.version = PKG_VERSION
- s.summary = Spec::VERSION::DESCRIPTION
- s.description = <<-EOF
- RSpec is a behaviour driven development (BDD) framework for Ruby. RSpec was
- created in response to Dave Astels' article _A New Look at Test Driven Development_
- which can be read at: http://daveastels.com/index.php?p=5 RSpec is intended to
- provide the features discussed in Dave's article.
- EOF
- s.files = PKG_FILES.to_a
- s.require_path = 'lib'
+if RUBY_VERSION =~ /^1.8/
+ task :default => [:cleanup_rcov_files, :features, :verify_rcov]
+else
+ task :default => [:spec, :features]
+end
- s.has_rdoc = true
- s.rdoc_options = rd.options
- s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$|^EXAMPLES.rd$/ }.to_a
+namespace :spec do
- s.bindir = 'bin'
- s.executables = ['spec', 'spec_translator']
- s.default_executable = 'spec'
- s.author = "RSpec Development Team"
- s.email = "rspec-devel@rubyforge.org"
- s.homepage = "http://rspec.rubyforge.org"
- s.platform = Gem::Platform::RUBY
- s.rubyforge_project = "rspec"
+ desc "Run all specs with rcov"
+ Spec::Rake::SpecTask.new(:rcov) do |t|
+ t.spec_files = FileList['spec/**/*_spec.rb']
+ t.spec_opts = ['--options', 'spec/spec.opts']
+ t.rcov = true
+ t.rcov_dir = 'coverage'
+ t.rcov_opts = ['--exclude', "features,kernel,load-diff-lcs\.rb,instance_exec\.rb,lib/spec.rb,lib/spec/runner.rb,^spec/*,bin/spec,examples,/gems,/Library/Ruby,\.autotest,#{ENV['GEM_HOME']}"]
+ t.rcov_opts << '--sort coverage --text-summary --aggregate coverage.data'
+ end
+
+ desc "Run files listed in spec/spec_files.txt"
+ Spec::Rake::SpecTask.new(:focus) do |t|
+ if File.exists?('spec/spec_files.txt')
+ t.spec_files = File.readlines('spec/spec_files.txt').collect{|f| f.chomp}
+ end
+ end
end
-Rake::GemPackageTask.new(spec) do |pkg|
- pkg.need_zip = true
- pkg.need_tar = true
+desc "Run Cucumber features"
+if RUBY_VERSION =~ /^1.8/
+ Cucumber::Rake::Task.new :features do |t|
+ t.rcov = true
+ t.rcov_opts = ['--exclude', "features,kernel,load-diff-lcs\.rb,instance_exec\.rb,lib/spec.rb,lib/spec/runner.rb,^spec/*,bin/spec,examples,/gems,/Library/Ruby,\.autotest,#{ENV['GEM_HOME']}"]
+ t.rcov_opts << '--no-html --aggregate coverage.data'
+ t.cucumber_opts = %w{--format progress}
+ end
+else
+ task :features do
+ sh 'cucumber --profile no_heckle'
+ end
+end
+
+desc "Run failing examples (see failure output)"
+Spec::Rake::SpecTask.new('failing_examples') do |t|
+ t.spec_files = FileList['failing_examples/**/*_spec.rb']
+ t.spec_opts = ['--options', 'spec/spec.opts']
end
def egrep(pattern)
@@ -121,148 +117,29 @@ task :todo do
egrep /(FIXME|TODO|TBD)/
end
-task :clobber do
- core.clobber
-end
-
-task :release => [:clobber, :verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_news]
+desc "verify_committed, verify_rcov, post_news, release"
+task :complete_release => [:verify_committed, :verify_rcov, :post_news, :release]
desc "Verifies that there is no uncommitted code"
task :verify_committed do
- IO.popen('svn stat') do |io|
+ IO.popen('git status') do |io|
io.each_line do |line|
- raise "\n!!! Do a svn commit first !!!\n\n" if line =~ /^\s*M\s*/
+ raise "\n!!! Do a git commit first !!!\n\n" if line =~ /^#\s*modified:/
end
end
end
-desc "Creates a tag in svn"
-task :tag do
- from = `svn info #{File.dirname(__FILE__)}`.match(/URL: (.*)\/rspec/n)[1]
- to = from.gsub(/trunk/, "tags/#{Spec::VERSION::TAG}")
- current = from.gsub(/trunk/, "tags/CURRENT")
-
- puts "Creating tag in SVN"
- tag_cmd = "svn cp #{from} #{to} -m \"Tag release #{Spec::VERSION::FULL_VERSION}\""
- `#{tag_cmd}` ; raise "ERROR: #{tag_cmd}" unless $? == 0
-
- puts "Removing CURRENT"
- remove_current_cmd = "svn rm #{current} -m \"Remove tags/CURRENT\""
- `#{remove_current_cmd}` ; raise "ERROR: #{remove_current_cmd}" unless $? == 0
-
- puts "Re-Creating CURRENT"
- create_current_cmd = "svn cp #{to} #{current} -m \"Copy #{Spec::VERSION::TAG} to tags/CURRENT\""
- `#{create_current_cmd}` ; "ERROR: #{create_current_cmd}" unless $? == 0
-end
-
-task :verify_user do
- raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
-end
-
-desc "Upload Website to RubyForge"
-task :publish_website => [:verify_user, :website] do
- unless Spec::VERSION::RELEASE_CANDIDATE
- publisher = Rake::SshDirPublisher.new(
- "rspec-website@rubyforge.org",
- "/var/www/gforge-projects/#{PKG_NAME}",
- "../doc/output"
- )
- publisher.upload
- else
- puts "** Not publishing packages to RubyForge - this is a prerelease"
- end
-end
-
-desc "Upload Website archive to RubyForge"
-task :archive_website => [:verify_user, :website] do
- publisher = Rake::SshDirPublisher.new(
- "rspec-website@rubyforge.org",
- "/var/www/gforge-projects/#{PKG_NAME}/#{Spec::VERSION::TAG}",
- "../doc/output"
- )
- publisher.upload
-end
-
-desc "Package the Rails plugin"
-task :package_rspec_on_rails do
- mkdir 'pkg' rescue nil
- rm_rf 'pkg/rspec-rails' rescue nil
- `svn export ../rspec-rails pkg/rspec_on_rails-#{PKG_VERSION}`
- Dir.chdir 'pkg' do
- `tar cvzf rspec-rails-#{PKG_VERSION}.tgz rspec-rails-#{PKG_VERSION}`
- end
-end
-task :pkg => :package_rspec_on_rails
-
-desc "Package the RSpec.tmbundle"
-task :package_tmbundle do
- mkdir 'pkg' rescue nil
- rm_rf 'pkg/RSpec.tmbundle' rescue nil
- `svn export ../RSpec.tmbundle pkg/RSpec.tmbundle`
- Dir.chdir 'pkg' do
- `tar cvzf RSpec-#{PKG_VERSION}.tmbundle.tgz RSpec.tmbundle`
+namespace :update do
+ desc "update the manifest"
+ task :manifest do
+ system %q[touch Manifest.txt; rake check_manifest | grep -v "(in " | patch]
end
end
-task :pkg => :package_tmbundle
-desc "Publish gem+tgz+zip on RubyForge. You must make sure lib/version.rb is aligned with the CHANGELOG file"
-task :publish_packages => [:verify_user, :package] do
- release_files = FileList[
- "pkg/#{PKG_FILE_NAME}.gem",
- "pkg/#{PKG_FILE_NAME}.tgz",
- "pkg/rspec-rails-#{PKG_VERSION}.tgz",
- "pkg/#{PKG_FILE_NAME}.zip",
- "pkg/RSpec-#{PKG_VERSION}.tmbundle.tgz"
- ]
- unless Spec::VERSION::RELEASE_CANDIDATE
- require 'meta_project'
- require 'rake/contrib/xforge'
-
- Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |xf|
- # Never hardcode user name and password in the Rakefile!
- xf.user_name = ENV['RUBYFORGE_USER']
- xf.files = release_files.to_a
- xf.release_name = "RSpec #{PKG_VERSION}"
- end
- else
- puts "SINCE THIS IS A PRERELEASE, FILES ARE UPLOADED WITH SSH, NOT TO THE RUBYFORGE FILE SECTION"
- puts "YOU MUST TYPE THE PASSWORD #{release_files.length} TIMES..."
-
- host = "rspec-website@rubyforge.org"
- remote_dir = "/var/www/gforge-projects/#{PKG_NAME}"
-
- publisher = Rake::SshFilePublisher.new(
- host,
- remote_dir,
- File.dirname(__FILE__),
- *release_files
- )
- publisher.upload
-
- puts "UPLADED THE FOLLOWING FILES:"
- release_files.each do |file|
- name = file.match(/pkg\/(.*)/)[1]
- puts "* http://rspec.rubyforge.org/#{name}"
- end
-
- puts "They are not linked to anywhere, so don't forget to tell people!"
- end
-end
-
-desc "Publish news on RubyForge"
-task :publish_news => [:verify_user] do
- unless Spec::VERSION::RELEASE_CANDIDATE
- require 'meta_project'
- require 'rake/contrib/xforge'
- Rake::XForge::NewsPublisher.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |news|
- # Never hardcode user name and password in the Rakefile!
- news.user_name = ENV['RUBYFORGE_USER']
- end
- else
- puts "** Not publishing news to RubyForge - this is a prerelease"
- end
-end
+task :clobber => :clobber_tmp
-def core
- PreCommit::Core.new(self)
+task :clobber_tmp do
+ cmd = %q[rm -r tmp]
+ puts cmd
+ system cmd if test ?d, 'tmp'
end
diff --git a/vendor/plugins/rspec/TODO b/vendor/plugins/rspec/TODO
deleted file mode 100644
index 8b1378917..000000000
--- a/vendor/plugins/rspec/TODO
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/vendor/plugins/rspec/UPGRADE b/vendor/plugins/rspec/UPGRADE
deleted file mode 100644
index 923b31530..000000000
--- a/vendor/plugins/rspec/UPGRADE
+++ /dev/null
@@ -1,7 +0,0 @@
-== Spec::Rails
-
- script/generate rspec
-
-Or modify spec_helper.rb based on the template, which can be found at:
-
- vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb \ No newline at end of file
diff --git a/vendor/plugins/rspec/bin/spec b/vendor/plugins/rspec/bin/spec
index 283176d76..d3dd2430f 100755
--- a/vendor/plugins/rspec/bin/spec
+++ b/vendor/plugins/rspec/bin/spec
@@ -1,4 +1,5 @@
#!/usr/bin/env ruby
-$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
-require 'spec'
-exit ::Spec::Runner::CommandLine.run(rspec_options)
+rspec_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
+$LOAD_PATH.unshift(rspec_dir) unless $LOAD_PATH.include?(rspec_dir)
+require 'spec/autorun'
+exit ::Spec::Runner::CommandLine.run
diff --git a/vendor/plugins/rspec/bin/spec_translator b/vendor/plugins/rspec/bin/spec_translator
deleted file mode 100755
index abd50b743..000000000
--- a/vendor/plugins/rspec/bin/spec_translator
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env ruby
-raise "\n\nUsage: spec_translator from_dir to_dir\n\n" if ARGV.size != 2
-$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
-require 'spec/translator'
-t = ::Spec::Translator.new
-from = ARGV[0]
-to = ARGV[1]
-t.translate(from, to)
diff --git a/vendor/plugins/rspec/examples/pure/autogenerated_docstrings_example.rb b/vendor/plugins/rspec/examples/pure/autogenerated_docstrings_example.rb
deleted file mode 100644
index a4928ef4a..000000000
--- a/vendor/plugins/rspec/examples/pure/autogenerated_docstrings_example.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-# Run spec w/ -fs to see the output of this file
-
-describe "Examples with no descriptions" do
-
- # description is auto-generated as "should equal(5)" based on the last #should
- it do
- 3.should equal(3)
- 5.should equal(5)
- end
-
- it { 3.should be < 5 }
-
- it { ["a"].should include("a") }
-
- it { [1,2,3].should respond_to(:size) }
-
-end
diff --git a/vendor/plugins/rspec/examples/pure/before_and_after_example.rb b/vendor/plugins/rspec/examples/pure/before_and_after_example.rb
deleted file mode 100644
index 7db6274ef..000000000
--- a/vendor/plugins/rspec/examples/pure/before_and_after_example.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-$global = 0
-
-describe "State created in before(:all)" do
- before :all do
- @sideeffect = 1
- $global +=1
- end
-
- before :each do
- @isolated = 1
- end
-
- it "should be accessible from example" do
- @sideeffect.should == 1
- $global.should == 1
- @isolated.should == 1
-
- @sideeffect += 1
- @isolated += 1
- end
-
- it "should not have sideffects" do
- @sideeffect.should == 1
- $global.should == 2
- @isolated.should == 1
-
- @sideeffect += 1
- @isolated += 1
- end
-
- after :each do
- $global += 1
- end
-
- after :all do
- $global.should == 3
- $global = 0
- end
-end
diff --git a/vendor/plugins/rspec/examples/pure/behave_as_example.rb b/vendor/plugins/rspec/examples/pure/behave_as_example.rb
deleted file mode 100644
index e95d1469a..000000000
--- a/vendor/plugins/rspec/examples/pure/behave_as_example.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-def behave_as_electric_musician
- respond_to(:read_notes, :turn_down_amp)
-end
-
-def behave_as_musician
- respond_to(:read_notes)
-end
-
-module BehaveAsExample
-
- class BluesGuitarist
- def read_notes; end
- def turn_down_amp; end
- end
-
- class RockGuitarist
- def read_notes; end
- def turn_down_amp; end
- end
-
- class ClassicGuitarist
- def read_notes; end
- end
-
- describe BluesGuitarist do
- it "should behave as guitarist" do
- BluesGuitarist.new.should behave_as_electric_musician
- end
- end
-
- describe RockGuitarist do
- it "should behave as guitarist" do
- RockGuitarist.new.should behave_as_electric_musician
- end
- end
-
- describe ClassicGuitarist do
- it "should not behave as guitarist" do
- ClassicGuitarist.new.should behave_as_musician
- end
- end
-
-end
diff --git a/vendor/plugins/rspec/examples/pure/custom_expectation_matchers.rb b/vendor/plugins/rspec/examples/pure/custom_expectation_matchers.rb
deleted file mode 100644
index 075bb542d..000000000
--- a/vendor/plugins/rspec/examples/pure/custom_expectation_matchers.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-module AnimalSpecHelper
- class Eat
- def initialize(food)
- @food = food
- end
-
- def matches?(animal)
- @animal = animal
- @animal.eats?(@food)
- end
-
- def failure_message
- "expected #{@animal} to eat #{@food}, but it does not"
- end
-
- def negative_failure_message
- "expected #{@animal} not to eat #{@food}, but it does"
- end
- end
-
- def eat(food)
- Eat.new(food)
- end
-end
-
-module Animals
- class Animal
- def eats?(food)
- return foods_i_eat.include?(food)
- end
- end
-
- class Mouse < Animal
- def foods_i_eat
- [:cheese]
- end
- end
-
- describe Mouse do
- include AnimalSpecHelper
- before(:each) do
- @mouse = Animals::Mouse.new
- end
-
- it "should eat cheese" do
- @mouse.should eat(:cheese)
- end
-
- it "should not eat cat" do
- @mouse.should_not eat(:cat)
- end
- end
-
-end
diff --git a/vendor/plugins/rspec/examples/pure/custom_formatter.rb b/vendor/plugins/rspec/examples/pure/custom_formatter.rb
deleted file mode 100644
index c449fdc2e..000000000
--- a/vendor/plugins/rspec/examples/pure/custom_formatter.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require 'spec/runner/formatter/progress_bar_formatter'
-
-# Example of a formatter with custom bactrace printing. Run me with:
-# ruby bin/spec failing_examples -r examples/custom_formatter.rb -f CustomFormatter
-class CustomFormatter < Spec::Runner::Formatter::ProgressBarFormatter
- def backtrace_line(line)
- line.gsub(/([^:]*\.rb):(\d*)/) do
- "<a href=\"file://#{File.expand_path($1)}\">#{$1}:#{$2}</a> "
- end
- end
-end
diff --git a/vendor/plugins/rspec/examples/pure/dynamic_spec.rb b/vendor/plugins/rspec/examples/pure/dynamic_spec.rb
deleted file mode 100644
index 15d473d61..000000000
--- a/vendor/plugins/rspec/examples/pure/dynamic_spec.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "Some integers" do
- (1..10).each do |n|
- it "The root of #{n} square should be #{n}" do
- Math.sqrt(n*n).should == n
- end
- end
-end
diff --git a/vendor/plugins/rspec/examples/pure/file_accessor.rb b/vendor/plugins/rspec/examples/pure/file_accessor.rb
deleted file mode 100644
index ff6fb743c..000000000
--- a/vendor/plugins/rspec/examples/pure/file_accessor.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-class FileAccessor
- def open_and_handle_with(pathname, processor)
- pathname.open do |io|
- processor.process(io)
- end
- end
-end
-
-if __FILE__ == $0
- require File.dirname(__FILE__) + '/io_processor'
- require 'pathname'
-
- accessor = FileAccessor.new
- io_processor = IoProcessor.new
- file = Pathname.new ARGV[0]
-
- accessor.open_and_handle_with(file, io_processor)
-end
diff --git a/vendor/plugins/rspec/examples/pure/file_accessor_spec.rb b/vendor/plugins/rspec/examples/pure/file_accessor_spec.rb
deleted file mode 100644
index 628d4c0b0..000000000
--- a/vendor/plugins/rspec/examples/pure/file_accessor_spec.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require File.dirname(__FILE__) + '/file_accessor'
-require 'stringio'
-
-describe "A FileAccessor" do
- # This sequence diagram illustrates what this spec specifies.
- #
- # +--------------+ +----------+ +-------------+
- # | FileAccessor | | Pathname | | IoProcessor |
- # +--------------+ +----------+ +-------------+
- # | | |
- # open_and_handle_with | | |
- # -------------------->| | open | |
- # | |--------------->| | |
- # | | io | | |
- # | |<...............| | |
- # | | | process(io) |
- # | |---------------------------------->| |
- # | | | | |
- # | |<..................................| |
- # | | |
- #
- it "should open a file and pass it to the processor's process method" do
- # This is the primary actor
- accessor = FileAccessor.new
-
- # These are the primary actor's neighbours, which we mock.
- file = mock "Pathname"
- io_processor = mock "IoProcessor"
-
- io = StringIO.new "whatever"
- file.should_receive(:open).and_yield io
- io_processor.should_receive(:process).with(io)
-
- accessor.open_and_handle_with(file, io_processor)
- end
-
-end
diff --git a/vendor/plugins/rspec/examples/pure/greeter_spec.rb b/vendor/plugins/rspec/examples/pure/greeter_spec.rb
deleted file mode 100644
index ec7669dcc..000000000
--- a/vendor/plugins/rspec/examples/pure/greeter_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-# greeter.rb
-#
-# Based on http://glu.ttono.us/articles/2006/12/19/tormenting-your-tests-with-heckle
-#
-# Run with:
-#
-# spec greeter_spec.rb --heckle Greeter
-#
-class Greeter
- def initialize(person = nil)
- @person = person
- end
-
- def greet
- @person.nil? ? "Hi there!" : "Hi #{@person}!"
- end
-end
-
-describe "Greeter" do
- it "should say Hi to person" do
- greeter = Greeter.new("Kevin")
- greeter.greet.should == "Hi Kevin!"
- end
-
- it "should say Hi to nobody" do
- greeter = Greeter.new
- # Uncomment the next line to make Heckle happy
- #greeter.greet.should == "Hi there!"
- end
-end
diff --git a/vendor/plugins/rspec/examples/pure/helper_method_example.rb b/vendor/plugins/rspec/examples/pure/helper_method_example.rb
deleted file mode 100644
index d97f19e65..000000000
--- a/vendor/plugins/rspec/examples/pure/helper_method_example.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-module HelperMethodExample
- describe "an example group with helper a method" do
- def helper_method
- "received call"
- end
-
- it "should make that method available to specs" do
- helper_method.should == "received call"
- end
- end
-end
-
diff --git a/vendor/plugins/rspec/examples/pure/io_processor.rb b/vendor/plugins/rspec/examples/pure/io_processor.rb
deleted file mode 100644
index 6b15147b6..000000000
--- a/vendor/plugins/rspec/examples/pure/io_processor.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-class DataTooShort < StandardError; end
-
-class IoProcessor
- # Does some fancy stuff unless the length of +io+ is shorter than 32
- def process(io)
- raise DataTooShort if io.read.length < 32
- end
-end
diff --git a/vendor/plugins/rspec/examples/pure/io_processor_spec.rb b/vendor/plugins/rspec/examples/pure/io_processor_spec.rb
deleted file mode 100644
index 5cab7bf31..000000000
--- a/vendor/plugins/rspec/examples/pure/io_processor_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require File.dirname(__FILE__) + '/io_processor'
-require 'stringio'
-
-describe "An IoProcessor" do
- before(:each) do
- @processor = IoProcessor.new
- end
-
- it "should raise nothing when the file is exactly 32 bytes" do
- lambda {
- @processor.process(StringIO.new("z"*32))
- }.should_not raise_error
- end
-
- it "should raise an exception when the file length is less than 32 bytes" do
- lambda {
- @processor.process(StringIO.new("z"*31))
- }.should raise_error(DataTooShort)
- end
-end
diff --git a/vendor/plugins/rspec/examples/pure/legacy_spec.rb b/vendor/plugins/rspec/examples/pure/legacy_spec.rb
deleted file mode 100644
index c86369515..000000000
--- a/vendor/plugins/rspec/examples/pure/legacy_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-context "A legacy spec" do
- setup do
- end
-
- specify "should work fine" do
- end
-
- teardown do
- end
-end
diff --git a/vendor/plugins/rspec/examples/pure/mocking_example.rb b/vendor/plugins/rspec/examples/pure/mocking_example.rb
deleted file mode 100644
index 6adbef59d..000000000
--- a/vendor/plugins/rspec/examples/pure/mocking_example.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "A consumer of a mock" do
- it "should be able to send messages to the mock" do
- mock = mock("poke me")
- mock.should_receive(:poke)
- mock.poke
- end
-end
-
-describe "a mock" do
- it "should be able to mock the same message twice w/ different args" do
- mock = mock("mock")
- mock.should_receive(:msg).with(:arg1).and_return(:val1)
- mock.should_receive(:msg).with(:arg2).and_return(:val2)
- mock.msg(:arg1).should eql(:val1)
- mock.msg(:arg2).should eql(:val2)
- end
-
- it "should be able to mock the same message twice w/ different args in reverse order" do
- mock = mock("mock")
- mock.should_receive(:msg).with(:arg1).and_return(:val1)
- mock.should_receive(:msg).with(:arg2).and_return(:val2)
- mock.msg(:arg2).should eql(:val2)
- mock.msg(:arg1).should eql(:val1)
- end
-end
diff --git a/vendor/plugins/rspec/examples/pure/multi_threaded_behaviour_runner.rb b/vendor/plugins/rspec/examples/pure/multi_threaded_behaviour_runner.rb
deleted file mode 100644
index 36edcd497..000000000
--- a/vendor/plugins/rspec/examples/pure/multi_threaded_behaviour_runner.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-class MultiThreadedExampleGroupRunner < Spec::Runner::ExampleGroupRunner
- def initialize(options, arg)
- super(options)
- # configure these
- @thread_count = 4
- @thread_wait = 0
- end
-
- def run
- @threads = []
- q = Queue.new
- example_groups.each { |b| q << b}
- success = true
- @thread_count.times do
- @threads << Thread.new(q) do |queue|
- while not queue.empty?
- example_group = queue.pop
- success &= example_group.suite.run(nil)
- end
- end
- sleep @thread_wait
- end
- @threads.each {|t| t.join}
- success
- end
-end
-
-MultiThreadedBehaviourRunner = MultiThreadedExampleGroupRunner \ No newline at end of file
diff --git a/vendor/plugins/rspec/examples/pure/nested_classes_example.rb b/vendor/plugins/rspec/examples/pure/nested_classes_example.rb
deleted file mode 100644
index abe43b0a6..000000000
--- a/vendor/plugins/rspec/examples/pure/nested_classes_example.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require File.dirname(__FILE__) + '/stack'
-
-class StackExamples < Spec::ExampleGroup
- describe(Stack)
- before(:each) do
- @stack = Stack.new
- end
-end
-
-class EmptyStackExamples < StackExamples
- describe("when empty")
- it "should be empty" do
- @stack.should be_empty
- end
-end
-
-class AlmostFullStackExamples < StackExamples
- describe("when almost full")
- before(:each) do
- (1..9).each {|n| @stack.push n}
- end
- it "should be full" do
- @stack.should_not be_full
- end
-end
-
-class FullStackExamples < StackExamples
- describe("when full")
- before(:each) do
- (1..10).each {|n| @stack.push n}
- end
- it "should be full" do
- @stack.should be_full
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/examples/pure/partial_mock_example.rb b/vendor/plugins/rspec/examples/pure/partial_mock_example.rb
deleted file mode 100644
index 2af608b2f..000000000
--- a/vendor/plugins/rspec/examples/pure/partial_mock_example.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-class MockableClass
- def self.find id
- return :original_return
- end
-end
-
-describe "A partial mock" do
-
- it "should work at the class level" do
- MockableClass.should_receive(:find).with(1).and_return {:stub_return}
- MockableClass.find(1).should equal(:stub_return)
- end
-
- it "should revert to the original after each spec" do
- MockableClass.find(1).should equal(:original_return)
- end
-
- it "can be mocked w/ ordering" do
- MockableClass.should_receive(:msg_1).ordered
- MockableClass.should_receive(:msg_2).ordered
- MockableClass.should_receive(:msg_3).ordered
- MockableClass.msg_1
- MockableClass.msg_2
- MockableClass.msg_3
- end
-
-end
diff --git a/vendor/plugins/rspec/examples/pure/pending_example.rb b/vendor/plugins/rspec/examples/pure/pending_example.rb
deleted file mode 100644
index 13f3d00c4..000000000
--- a/vendor/plugins/rspec/examples/pure/pending_example.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "pending example (using pending method)" do
- it %Q|should be reported as "PENDING: for some reason"| do
- pending("for some reason")
- end
-end
-
-describe "pending example (with no block)" do
- it %Q|should be reported as "PENDING: Not Yet Implemented"|
-end
-
-describe "pending example (with block for pending)" do
- it %Q|should have a failing block, passed to pending, reported as "PENDING: for some reason"| do
- pending("for some reason") do
- raise "some reason"
- end
- end
-end
-
diff --git a/vendor/plugins/rspec/examples/pure/predicate_example.rb b/vendor/plugins/rspec/examples/pure/predicate_example.rb
deleted file mode 100644
index 1202bb670..000000000
--- a/vendor/plugins/rspec/examples/pure/predicate_example.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-class BddFramework
- def intuitive?
- true
- end
-
- def adopted_quickly?
- true
- end
-end
-
-describe "BDD framework" do
-
- before(:each) do
- @bdd_framework = BddFramework.new
- end
-
- it "should be adopted quickly" do
- @bdd_framework.should be_adopted_quickly
- end
-
- it "should be intuitive" do
- @bdd_framework.should be_intuitive
- end
-
-end
diff --git a/vendor/plugins/rspec/examples/pure/priority.txt b/vendor/plugins/rspec/examples/pure/priority.txt
deleted file mode 100644
index 5b00064e2..000000000
--- a/vendor/plugins/rspec/examples/pure/priority.txt
+++ /dev/null
@@ -1 +0,0 @@
-examples/custom_expectation_matchers.rb \ No newline at end of file
diff --git a/vendor/plugins/rspec/examples/pure/shared_example_group_example.rb b/vendor/plugins/rspec/examples/pure/shared_example_group_example.rb
deleted file mode 100644
index fb81af1ec..000000000
--- a/vendor/plugins/rspec/examples/pure/shared_example_group_example.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-module SharedExampleGroupExample
- class OneThing
- def what_things_do
- "stuff"
- end
- end
-
- class AnotherThing
- def what_things_do
- "stuff"
- end
- end
-
- class YetAnotherThing
- def what_things_do
- "stuff"
- end
- end
-
- # A SharedExampleGroup is an example group that doesn't get run.
- # You can create one like this:
- share_examples_for "most things" do
- def helper_method
- "helper method"
- end
-
- it "should do what things do" do
- @thing.what_things_do.should == "stuff"
- end
- end
-
- # A SharedExampleGroup is also module. If you create one like this
- # it gets assigned to the constant AllThings
- share_as :MostThings do
- def helper_method
- "helper method"
- end
-
- it "should do what things do" do
- @thing.what_things_do.should == "stuff"
- end
- end
-
- describe OneThing do
- # Now you can include the shared example group like this, which
- # feels more like what you might say ...
- it_should_behave_like "most things"
-
- before(:each) { @thing = OneThing.new }
-
- it "should have access to helper methods defined in the shared example group" do
- helper_method.should == "helper method"
- end
- end
-
- describe AnotherThing do
- # ... or you can include the example group like this, which
- # feels more like the programming language we love.
- it_should_behave_like MostThings
-
- before(:each) { @thing = AnotherThing.new }
-
- it "should have access to helper methods defined in the shared example group" do
- helper_method.should == "helper method"
- end
- end
-
- describe YetAnotherThing do
- # ... or you can include the example group like this, which
- # feels more like the programming language we love.
- include MostThings
-
- before(:each) { @thing = AnotherThing.new }
-
- it "should have access to helper methods defined in the shared example group" do
- helper_method.should == "helper method"
- end
- end
-end
diff --git a/vendor/plugins/rspec/examples/pure/shared_stack_examples.rb b/vendor/plugins/rspec/examples/pure/shared_stack_examples.rb
deleted file mode 100644
index 7a0816250..000000000
--- a/vendor/plugins/rspec/examples/pure/shared_stack_examples.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[spec_helper])
-
-shared_examples_for "non-empty Stack" do
-
- it { @stack.should_not be_empty }
-
- it "should return the top item when sent #peek" do
- @stack.peek.should == @last_item_added
- end
-
- it "should NOT remove the top item when sent #peek" do
- @stack.peek.should == @last_item_added
- @stack.peek.should == @last_item_added
- end
-
- it "should return the top item when sent #pop" do
- @stack.pop.should == @last_item_added
- end
-
- it "should remove the top item when sent #pop" do
- @stack.pop.should == @last_item_added
- unless @stack.empty?
- @stack.pop.should_not == @last_item_added
- end
- end
-
-end
-
-shared_examples_for "non-full Stack" do
-
- it { @stack.should_not be_full }
-
- it "should add to the top when sent #push" do
- @stack.push "newly added top item"
- @stack.peek.should == "newly added top item"
- end
-
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/examples/pure/spec_helper.rb b/vendor/plugins/rspec/examples/pure/spec_helper.rb
deleted file mode 100644
index 1e880796c..000000000
--- a/vendor/plugins/rspec/examples/pure/spec_helper.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-lib_path = File.expand_path("#{File.dirname(__FILE__)}/../../lib")
-$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
-require 'spec'
diff --git a/vendor/plugins/rspec/examples/pure/stack.rb b/vendor/plugins/rspec/examples/pure/stack.rb
deleted file mode 100644
index 407173f7b..000000000
--- a/vendor/plugins/rspec/examples/pure/stack.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-class StackUnderflowError < RuntimeError
-end
-
-class StackOverflowError < RuntimeError
-end
-
-class Stack
-
- def initialize
- @items = []
- end
-
- def push object
- raise StackOverflowError if @items.length == 10
- @items.push object
- end
-
- def pop
- raise StackUnderflowError if @items.empty?
- @items.delete @items.last
- end
-
- def peek
- raise StackUnderflowError if @items.empty?
- @items.last
- end
-
- def empty?
- @items.empty?
- end
-
- def full?
- @items.length == 10
- end
-
-end
diff --git a/vendor/plugins/rspec/examples/pure/stack_spec.rb b/vendor/plugins/rspec/examples/pure/stack_spec.rb
deleted file mode 100644
index 2a769da00..000000000
--- a/vendor/plugins/rspec/examples/pure/stack_spec.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require File.dirname(__FILE__) + "/stack"
-require File.dirname(__FILE__) + '/shared_stack_examples'
-
-describe Stack, " (empty)" do
- before(:each) do
- @stack = Stack.new
- end
-
- # NOTE that this one auto-generates the description "should be empty"
- it { @stack.should be_empty }
-
- it_should_behave_like "non-full Stack"
-
- it "should complain when sent #peek" do
- lambda { @stack.peek }.should raise_error(StackUnderflowError)
- end
-
- it "should complain when sent #pop" do
- lambda { @stack.pop }.should raise_error(StackUnderflowError)
- end
-end
-
-describe Stack, " (with one item)" do
- before(:each) do
- @stack = Stack.new
- @stack.push 3
- @last_item_added = 3
- end
-
- it_should_behave_like "non-empty Stack"
- it_should_behave_like "non-full Stack"
-
-end
-
-describe Stack, " (with one item less than capacity)" do
- before(:each) do
- @stack = Stack.new
- (1..9).each { |i| @stack.push i }
- @last_item_added = 9
- end
-
- it_should_behave_like "non-empty Stack"
- it_should_behave_like "non-full Stack"
-end
-
-describe Stack, " (full)" do
- before(:each) do
- @stack = Stack.new
- (1..10).each { |i| @stack.push i }
- @last_item_added = 10
- end
-
- # NOTE that this one auto-generates the description "should be full"
- it { @stack.should be_full }
-
- it_should_behave_like "non-empty Stack"
-
- it "should complain on #push" do
- lambda { @stack.push Object.new }.should raise_error(StackOverflowError)
- end
-
-end
diff --git a/vendor/plugins/rspec/examples/pure/stack_spec_with_nested_example_groups.rb b/vendor/plugins/rspec/examples/pure/stack_spec_with_nested_example_groups.rb
deleted file mode 100644
index 05f6ad464..000000000
--- a/vendor/plugins/rspec/examples/pure/stack_spec_with_nested_example_groups.rb
+++ /dev/null
@@ -1,67 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require File.dirname(__FILE__) + '/stack'
-require File.dirname(__FILE__) + '/shared_stack_examples'
-
-describe Stack do
-
- before(:each) do
- @stack = Stack.new
- end
-
- describe "(empty)" do
-
- it { @stack.should be_empty }
-
- it_should_behave_like "non-full Stack"
-
- it "should complain when sent #peek" do
- lambda { @stack.peek }.should raise_error(StackUnderflowError)
- end
-
- it "should complain when sent #pop" do
- lambda { @stack.pop }.should raise_error(StackUnderflowError)
- end
-
- end
-
- describe "(with one item)" do
-
- before(:each) do
- @stack.push 3
- @last_item_added = 3
- end
-
- it_should_behave_like "non-empty Stack"
- it_should_behave_like "non-full Stack"
-
- end
-
- describe "(with one item less than capacity)" do
-
- before(:each) do
- (1..9).each { |i| @stack.push i }
- @last_item_added = 9
- end
-
- it_should_behave_like "non-empty Stack"
- it_should_behave_like "non-full Stack"
- end
-
- describe "(full)" do
-
- before(:each) do
- (1..10).each { |i| @stack.push i }
- @last_item_added = 10
- end
-
- it { @stack.should be_full }
-
- it_should_behave_like "non-empty Stack"
-
- it "should complain on #push" do
- lambda { @stack.push Object.new }.should raise_error(StackOverflowError)
- end
-
- end
-
-end
diff --git a/vendor/plugins/rspec/examples/pure/stubbing_example.rb b/vendor/plugins/rspec/examples/pure/stubbing_example.rb
deleted file mode 100644
index 31354aec6..000000000
--- a/vendor/plugins/rspec/examples/pure/stubbing_example.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "A consumer of a stub" do
- it "should be able to stub methods on any Object" do
- obj = Object.new
- obj.stub!(:foobar).and_return {:return_value}
- obj.foobar.should equal(:return_value)
- end
-end
-
-class StubbableClass
- def self.find id
- return :original_return
- end
-end
-
-describe "A stubbed method on a class" do
- it "should return the stubbed value" do
- StubbableClass.stub!(:find).and_return(:stub_return)
- StubbableClass.find(1).should equal(:stub_return)
- end
-
- it "should revert to the original method after each spec" do
- StubbableClass.find(1).should equal(:original_return)
- end
-
- it "can stub! and mock the same message" do
- StubbableClass.stub!(:msg).and_return(:stub_value)
- StubbableClass.should_receive(:msg).with(:arg).and_return(:mock_value)
-
- StubbableClass.msg.should equal(:stub_value)
- StubbableClass.msg(:other_arg).should equal(:stub_value)
- StubbableClass.msg(:arg).should equal(:mock_value)
- StubbableClass.msg(:another_arg).should equal(:stub_value)
- StubbableClass.msg(:yet_another_arg).should equal(:stub_value)
- StubbableClass.msg.should equal(:stub_value)
- end
-end
-
-describe "A mock" do
- it "can stub!" do
- mock = mock("stubbing mock")
- mock.stub!(:msg).and_return(:value)
- (1..10).each {mock.msg.should equal(:value)}
- end
-
- it "can stub! and mock" do
- mock = mock("stubbing mock")
- mock.stub!(:stub_message).and_return(:stub_value)
- mock.should_receive(:mock_message).once.and_return(:mock_value)
- (1..10).each {mock.stub_message.should equal(:stub_value)}
- mock.mock_message.should equal(:mock_value)
- (1..10).each {mock.stub_message.should equal(:stub_value)}
- end
-
- it "can stub! and mock the same message" do
- mock = mock("stubbing mock")
- mock.stub!(:msg).and_return(:stub_value)
- mock.should_receive(:msg).with(:arg).and_return(:mock_value)
- mock.msg.should equal(:stub_value)
- mock.msg(:other_arg).should equal(:stub_value)
- mock.msg(:arg).should equal(:mock_value)
- mock.msg(:another_arg).should equal(:stub_value)
- mock.msg(:yet_another_arg).should equal(:stub_value)
- mock.msg.should equal(:stub_value)
- end
-end
-
-
diff --git a/vendor/plugins/rspec/examples/stories/adder.rb b/vendor/plugins/rspec/examples/stories/adder.rb
deleted file mode 100644
index 0b027b0ff..000000000
--- a/vendor/plugins/rspec/examples/stories/adder.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-class Adder
- def initialize
- @addends = []
- end
-
- def <<(val)
- @addends << val
- end
-
- def sum
- @addends.inject(0) { |sum_so_far, val| sum_so_far + val }
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/examples/stories/addition b/vendor/plugins/rspec/examples/stories/addition
deleted file mode 100644
index 58f092990..000000000
--- a/vendor/plugins/rspec/examples/stories/addition
+++ /dev/null
@@ -1,34 +0,0 @@
-This is a story about a calculator. The text up here above the Story: declaration
-won't be processed, so you can write whatever you wish!
-
-Story: simple addition
-
- As an accountant
- I want to add numbers
- So that I can count beans
-
- Scenario: add one plus one
- Given an addend of 1
- And an addend of 1
-
- When the addends are addeds
-
- Then the sum should be 3
- And the corks should be popped
-
- Scenario: add two plus five
- Given an addend of 2
- And an addend of 5
-
- When the addends are added
-
- Then the sum should be 7
- Then it should snow
-
- Scenario: add three more
- GivenScenario add two plus five
- And an addend of 3
-
- When the addends are added
-
- Then the sum should be 10
diff --git a/vendor/plugins/rspec/examples/stories/addition.rb b/vendor/plugins/rspec/examples/stories/addition.rb
deleted file mode 100644
index e43f5cf39..000000000
--- a/vendor/plugins/rspec/examples/stories/addition.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require File.join(File.dirname(__FILE__), "helper")
-require File.join(File.dirname(__FILE__), "adder")
-
-# with_steps_for :addition, :more_addition do
-with_steps_for :addition, :more_addition do
- # Then("the corks should be popped") { }
- run File.expand_path(__FILE__).gsub(".rb","")
-end
-
diff --git a/vendor/plugins/rspec/examples/stories/calculator.rb b/vendor/plugins/rspec/examples/stories/calculator.rb
deleted file mode 100644
index d86fc7e5c..000000000
--- a/vendor/plugins/rspec/examples/stories/calculator.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. lib])
-require 'spec'
-
-class AdditionMatchers < Spec::Story::StepGroup
- steps do |add|
- add.given("an addend of $addend") do |addend|
- @adder ||= Adder.new
- @adder << addend.to_i
- end
- end
-end
-
-steps = AdditionMatchers.new do |add|
- add.then("the sum should be $sum") do |sum|
- @sum.should == sum.to_i
- end
-end
-
-steps.when("they are added") do
- @sum = @adder.sum
-end
-
-# This Story uses steps (see above) instead of blocks
-# passed to Given, When and Then
-
-Story "addition", %{
- As an accountant
- I want to add numbers
- So that I can count some beans
-}, :steps_for => steps do
- Scenario "2 + 3" do
- Given "an addend of 2"
- And "an addend of 3"
- When "they are added"
- Then "the sum should be 5"
- end
-
- # This scenario uses GivenScenario, which silently runs
- # all the steps in a previous scenario.
-
- Scenario "add 4 more" do
- GivenScenario "2 + 3"
- Given "an addend of 4"
- When "they are added"
- Then "the sum should be 9"
- end
-end
-
-# And the class that makes the story pass
-
-class Adder
- def << addend
- addends << addend
- end
-
- def sum
- @addends.inject(0) do |result, addend|
- result + addend.to_i
- end
- end
-
- def addends
- @addends ||= []
- end
-end
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/.loadpath b/vendor/plugins/rspec/examples/stories/game-of-life/.loadpath
deleted file mode 100644
index 9a6222015..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/.loadpath
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<loadpath>
- <pathentry path="" type="src"/>
- <pathentry path="org.rubypeople.rdt.launching.RUBY_CONTAINER" type="con"/>
-</loadpath>
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/README.txt b/vendor/plugins/rspec/examples/stories/game-of-life/README.txt
deleted file mode 100644
index 9624ad411..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/README.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-John Conway's Game of Life
-
-The Rules
----------
-The Game of Life was invented by John Conway (as you might have gathered).
-The game is played on a field of cells, each of which has eight neighbors (adjacent cells).
-A cell is either occupied (by an organism) or not.
-The rules for deriving a generation from the previous one are these:
-
-Survival
---------
-If an occupied cell has 2 or 3 neighbors, the organism survives to the next generation.
-
-Death
------
-If an occupied cell has 0, 1, 4, 5, 6, 7, or 8 occupied neighbors, the organism dies
-(0, 1: of loneliness; 4 thru 8: of overcrowding).
-
-Birth
------
-If an unoccupied cell has 3 occupied neighbors, it becomes occupied.
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/everything.rb b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/everything.rb
deleted file mode 100644
index 90a281da5..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/everything.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-$:.unshift File.join(File.dirname(__FILE__), '..', '..', '..', '..', 'lib')
-$:.unshift File.join(File.dirname(__FILE__), '..')
-
-require 'spec'
-require 'behaviour/examples/examples'
-require 'behaviour/stories/stories'
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/examples.rb b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/examples.rb
deleted file mode 100644
index 1cadfb3c1..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/examples.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'spec'
-require 'behaviour/examples/game_behaviour'
-require 'behaviour/examples/grid_behaviour'
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb
deleted file mode 100644
index ff5b357f0..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require 'life'
-
-describe Game do
- it 'should have a grid' do
- # given
- game = Game.new(5, 5)
-
- # then
- game.grid.should be_kind_of(Grid)
- end
-
- it 'should create a cell' do
- # given
- game = Game.new(2, 2)
- expected_grid = Grid.from_string( 'X. ..' )
-
- # when
- game.create_at(0, 0)
-
- # then
- game.grid.should == expected_grid
- end
-
- it 'should destroy a cell' do
- # given
- game = Game.new(2,2)
- game.grid = Grid.from_string('X. ..')
-
- # when
- game.destroy_at(0,0)
-
- # then
- game.grid.should == Grid.from_string('.. ..')
- end
-end
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb
deleted file mode 100644
index 5be3af519..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-describe Grid do
- it 'should be empty when created' do
- # given
- expected_contents = [
- [0, 0, 0],
- [0, 0, 0]
- ]
- grid = Grid.new(2, 3)
-
- # when
- contents = grid.contents
-
- # then
- contents.should == expected_contents
- end
-
- it 'should compare equal based on its contents' do
- # given
- grid1 = Grid.new(2, 3)
- grid2 = Grid.new(2, 3)
-
- # then
- grid1.should == grid2
- end
-
- it 'should be able to replace its contents' do
- # given
- grid = Grid.new(2,2)
- new_contents = [[0,1,0], [1,0,1]]
-
- # when
- grid.contents = new_contents
-
- # then
- grid.contents.should == new_contents
- grid.rows.should == 2
- grid.columns.should == 3
- end
-
- it 'should add an organism' do
- # given
- grid = Grid.new(2, 2)
- expected = Grid.new(2, 2)
- expected.contents = [[1,0],[0,0]]
-
- # when
- grid.create_at(0,0)
-
- # then
- grid.should == expected
- end
-
- it 'should create itself from a string' do
- # given
- expected = Grid.new 3, 3
- expected.create_at(0,0)
- expected.create_at(1,0)
- expected.create_at(2,2)
-
- # when
- actual = Grid.from_string "X.. X.. ..X"
-
- # then
- actual.should == expected
- end
-end
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story
deleted file mode 100644
index 8374e86c5..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story
+++ /dev/null
@@ -1,21 +0,0 @@
-Story: cells with less than two neighbours die
-
-As a game producer
-I want cells with less than two neighbours to die
-So that I can illustrate how the game works to people with money
-
-Scenario: cells with zero or one neighbour die
-
-Given the grid looks like
-........
-.XX.XX..
-.XX.....
-....X...
-........
-When the next step occurs
-Then the grid should look like
-........
-.XX.....
-.XX.....
-........
-........
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story
deleted file mode 100644
index 0d30b59be..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story
+++ /dev/null
@@ -1,21 +0,0 @@
-Story: cells with more than three neighbours die
-
-As a game producer
-I want cells with more than three neighbours to die
-So that I can show the people with money how we are getting on
-
-Scenario: blink
-
-Given the grid looks like
-.....
-...XX
-...XX
-.XX..
-.XX..
-When the next step occurs
-Then the grid should look like
-.....
-...XX
-....X
-.X...
-.XX..
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story
deleted file mode 100644
index cbc248e73..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story
+++ /dev/null
@@ -1,42 +0,0 @@
-Story: Empty spaces with three neighbours create a cell
-
-As a game producer
-I want empty cells with three neighbours to die
-So that I have a minimum feature set to ship
-
-Scenario: the glider
-
-Given the grid looks like
-...X..
-..X...
-..XXX.
-......
-......
-When the next step occurs
-Then the grid should look like
-......
-..X.X.
-..XX..
-...X..
-......
-When the next step occurs
-Then the grid should look like
-......
-..X...
-..X.X.
-..XX..
-......
-When the next step occurs
-Then the grid should look like
-......
-...X..
-.XX...
-..XX..
-......
-When the next step occurs
-Then the grid should look like
-......
-..X...
-.X....
-.XXX..
-......
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story
deleted file mode 100644
index 88895cb69..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story
+++ /dev/null
@@ -1,42 +0,0 @@
-Story: I can create a cell
-
-As a game producer
-I want to create a cell
-So that I can show the grid to people
-
-Scenario: nothing to see here
-
-Given a 3 x 3 game
-Then the grid should look like
-...
-...
-...
-
-Scenario: all on its lonesome
-
-Given a 3 x 3 game
-When I create a cell at 1, 1
-Then the grid should look like
-...
-.X.
-...
-
-Scenario: the grid has three cells
-
-Given a 3 x 3 game
-When I create a cell at 0, 0
-and I create a cell at 0, 1
-and I create a cell at 2, 2
-Then the grid should look like
-XX.
-...
-..X
-
-Scenario: more cells more more
-
-Given the grid has three cells
-When I create a celll at 3, 1
-Then the grid should look like
-XX.
-..X
-..X
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story
deleted file mode 100644
index a9cf1ac64..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story
+++ /dev/null
@@ -1,17 +0,0 @@
-Story: I can kill a cell
-
-As a game producer
-I want to kill a cell
-So that when I make a mistake I dont have to start again
-
-Scenario: bang youre dead
-
-Given the grid looks like
-XX.
-.X.
-..X
-When I destroy the cell at 0, 1
-Then the grid should look like
-X..
-.X.
-..X
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story
deleted file mode 100644
index aeeede77d..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story
+++ /dev/null
@@ -1,53 +0,0 @@
-Story: The grid wraps
-
-As a game player
-I want the grid to wrap
-So that untidy stuff at the edges is avoided
-
-Scenario: crowded in the corners
-
-Given the grid looks like
-X.X
-...
-X.X
-When the next step is taken
-Then the grid should look like
-X.X
-...
-X.X
-
-
-Scenario: the glider returns
-
-Given the glider
-......
-..X...
-.X....
-.XXX..
-......
-When the next step is taken
-and the next step is taken
-and the next step is taken
-and the next step is taken
-Then the grid should look like
-......
-......
-.X....
-X.....
-XXX...
-When the next step is taken
-Then the grid should look like
-.X....
-......
-......
-X.X...
-XX....
-When the next step is taken
-Then the grid should look like
-XX....
-......
-......
-X.....
-X.X...
-
-
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb
deleted file mode 100644
index 81f86baba..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[helper])
-
-Story "I can create a cell",
- %(As a game producer
- I want to create a cell
- So that I can show the grid to people), :steps_for => :life do
-
- Scenario "nothing to see here" do
- Given "a game with dimensions", 3, 3 do |rows,cols|
- @game = Game.new(rows,cols)
- end
-
- Then "the grid should look like", %(
- ...
- ...
- ...
- )
- end
-
- Scenario "all on its lonesome" do
- Given "a game with dimensions", 2, 2
- When "I create a cell at", 1, 1 do |row,col|
- @game.create_at(row,col)
- end
- Then "the grid should look like", %(
- ..
- .X
- )
- end
-
- Scenario "the grid has three cells" do
- Given "a game with dimensions", 3, 3
- When "I create a cell at", 0, 0
- When "I create a cell at", 0, 1
- When "I create a cell at", 2, 2
- Then "the grid should look like", %(
- XX.
- ...
- ..X
- )
- end
-
- Scenario "more cells more more" do
- GivenScenario "the grid has three cells"
- When "I create a cell at", 2, 0
- Then "the grid should look like", %(
- XX.
- ...
- X.X
- )
- end
-end
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/helper.rb b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/helper.rb
deleted file mode 100644
index 70ed21ec5..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/helper.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-dir = File.dirname(__FILE__)
-$LOAD_PATH.unshift(File.expand_path("#{dir}/../../../../../../rspec/lib"))
-require 'spec'
-$LOAD_PATH.unshift(File.expand_path("#{dir}/../../"))
-require "#{dir}/../../life"
-require File.join(File.dirname(__FILE__), *%w[steps]) \ No newline at end of file
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb
deleted file mode 100644
index 7ae2d912d..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[helper])
-
-Story 'I can kill a cell',
- %(As a game producer
- I want to kill a cell
- So that when I make a mistake I don't have to start again), :steps_for => :life do
-
- Scenario "bang, you're dead" do
-
- Given 'a game that looks like', %(
- XX.
- .X.
- ..X
- ) do |dots|
- @game = Game.from_string dots
- end
- When 'I destroy the cell at', 0, 1 do |row,col|
- @game.destroy_at(row,col)
- end
- Then 'the grid should look like', %(
- X..
- .X.
- ..X
- )
- end
-end
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/steps.rb b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/steps.rb
deleted file mode 100644
index 793590d70..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/steps.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-steps_for :life do
- Then "the grid should look like" do |dots|
- @game.grid.should == Grid.from_string(dots)
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/stories.rb b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/stories.rb
deleted file mode 100644
index e60fe01de..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/stories.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[helper])
-require 'behaviour/stories/create_a_cell'
-require 'behaviour/stories/kill_a_cell'
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/stories.txt b/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/stories.txt
deleted file mode 100644
index d8f809be3..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/behaviour/stories/stories.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Story: Show the game field
- As a game player
- I want to see the field
- so that I can observe the progress of the organisms
-
-Scenario: an empty field
- Given a new game starts
- When the game displays the field
- Then the field should be empty
-
-
-
-
-
-StoryBuilder story = stories.createStory().called("a story")
- .asA("person")
- .iWant("to do something")
- .soThat("I can rule the world");
-story.addScenario().called("happy path").as()
- .given("some context")
- .when("some event happens")
- .then("expect some outcome");
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/life.rb b/vendor/plugins/rspec/examples/stories/game-of-life/life.rb
deleted file mode 100644
index 88263bd00..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/life.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-$: << File.dirname(__FILE__)
-require 'life/game'
-require 'life/grid'
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/life/game.rb b/vendor/plugins/rspec/examples/stories/game-of-life/life/game.rb
deleted file mode 100644
index 5411b01bf..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/life/game.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-class Game
- attr_accessor :grid
- def initialize(rows,cols)
- @grid = Grid.new(rows, cols)
- end
-
- def create_at(row,col)
- @grid.create_at(row,col)
- end
-
- def destroy_at(row,col)
- @grid.destroy_at(row, col)
- end
-
- def self.from_string(dots)
- grid = Grid.from_string(dots)
- game = new(grid.rows, grid.columns)
- game.instance_eval do
- @grid = grid
- end
- return game
- end
-end
diff --git a/vendor/plugins/rspec/examples/stories/game-of-life/life/grid.rb b/vendor/plugins/rspec/examples/stories/game-of-life/life/grid.rb
deleted file mode 100644
index aca23087c..000000000
--- a/vendor/plugins/rspec/examples/stories/game-of-life/life/grid.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-class Grid
-
- attr_accessor :contents
-
- def initialize(rows, cols)
- @contents = []
- rows.times do @contents << [0] * cols end
- end
-
- def rows
- @contents.size
- end
-
- def columns
- @contents[0].size
- end
-
- def ==(other)
- self.contents == other.contents
- end
-
- def create_at(row,col)
- @contents[row][col] = 1
- end
-
- def destroy_at(row,col)
- @contents[row][col] = 0
- end
-
- def self.from_string(str)
- row_strings = str.split(' ')
- grid = new(row_strings.size, row_strings[0].size)
-
- row_strings.each_with_index do |row, row_index|
- row_chars = row.split(//)
- row_chars.each_with_index do |col_char, col_index|
- grid.create_at(row_index, col_index) if col_char == 'X'
- end
- end
- return grid
- end
-
-end
diff --git a/vendor/plugins/rspec/examples/stories/helper.rb b/vendor/plugins/rspec/examples/stories/helper.rb
deleted file mode 100644
index 2e825b278..000000000
--- a/vendor/plugins/rspec/examples/stories/helper.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-$:.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
-require 'spec/story'
-
-# won't have to do this once plain_text_story_runner is moved into the library
-# require File.join(File.dirname(__FILE__), "plain_text_story_runner")
-
-Dir[File.join(File.dirname(__FILE__), "steps/*.rb")].each do |file|
- require file
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/examples/stories/steps/addition_steps.rb b/vendor/plugins/rspec/examples/stories/steps/addition_steps.rb
deleted file mode 100644
index 3f27095a9..000000000
--- a/vendor/plugins/rspec/examples/stories/steps/addition_steps.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.expand_path("#{File.dirname(__FILE__)}/../helper")
-
-# This creates steps for :addition
-steps_for(:addition) do
- Given("an addend of $addend") do |addend|
- @adder ||= Adder.new
- @adder << addend.to_i
- end
-end
-
-# This appends to them
-steps_for(:addition) do
- When("the addends are added") { @sum = @adder.sum }
-end
-
-steps_for(:more_addition) do
- Then("the sum should be $sum") { |sum| @sum.should == sum.to_i }
-end
diff --git a/vendor/plugins/rspec/failing_examples/README.txt b/vendor/plugins/rspec/failing_examples/README.txt
deleted file mode 100644
index 38c667d92..000000000
--- a/vendor/plugins/rspec/failing_examples/README.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-"Why have failing examples?", you might ask.
-
-They allow us to see failure messages. RSpec wants to provide meaningful and helpful failure messages. The failures in this directory not only provide you a way of seeing the failure messages, but they provide RSpec's own specs a way of describing what they should look like and ensuring they stay correct.
-
-To see the types of messages you can expect, stand in this directory and run:
-
-../bin/spec ./*.rb \ No newline at end of file
diff --git a/vendor/plugins/rspec/failing_examples/diffing_spec.rb b/vendor/plugins/rspec/failing_examples/diffing_spec.rb
deleted file mode 100644
index 85e13e8c0..000000000
--- a/vendor/plugins/rspec/failing_examples/diffing_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-describe "Running specs with --diff" do
- it "should print diff of different strings" do
- uk = <<-EOF
-RSpec is a
-behaviour driven development
-framework for Ruby
-EOF
- usa = <<-EOF
-RSpec is a
-behavior driven development
-framework for Ruby
-EOF
- usa.should == uk
- end
-
- class Animal
- def initialize(name,species)
- @name,@species = name,species
- end
-
- def inspect
- <<-EOA
-<Animal
-name=#{@name},
-species=#{@species}
->
- EOA
- end
- end
-
- it "should print diff of different objects' pretty representation" do
- expected = Animal.new "bob", "giraffe"
- actual = Animal.new "bob", "tortoise"
- expected.should eql(actual)
- end
-end
diff --git a/vendor/plugins/rspec/failing_examples/failing_autogenerated_docstrings_example.rb b/vendor/plugins/rspec/failing_examples/failing_autogenerated_docstrings_example.rb
deleted file mode 100644
index 8a7d2490e..000000000
--- a/vendor/plugins/rspec/failing_examples/failing_autogenerated_docstrings_example.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-# Run spec w/ -fs to see the output of this file
-
-describe "Failing examples with no descriptions" do
-
- # description is auto-generated as "should equal(5)" based on the last #should
- it do
- 3.should equal(2)
- 5.should equal(5)
- end
-
- it { 3.should be > 5 }
-
- it { ["a"].should include("b") }
-
- it { [1,2,3].should_not respond_to(:size) }
-
-end
diff --git a/vendor/plugins/rspec/failing_examples/failure_in_setup.rb b/vendor/plugins/rspec/failing_examples/failure_in_setup.rb
deleted file mode 100644
index 2a807a99a..000000000
--- a/vendor/plugins/rspec/failing_examples/failure_in_setup.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-describe "This example" do
-
- before(:each) do
- NonExistentClass.new
- end
-
- it "should be listed as failing in setup" do
- end
-
-end
diff --git a/vendor/plugins/rspec/failing_examples/failure_in_teardown.rb b/vendor/plugins/rspec/failing_examples/failure_in_teardown.rb
deleted file mode 100644
index 6458ea2b8..000000000
--- a/vendor/plugins/rspec/failing_examples/failure_in_teardown.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-describe "This example" do
-
- it "should be listed as failing in teardown" do
- end
-
- after(:each) do
- NonExistentClass.new
- end
-
-end
diff --git a/vendor/plugins/rspec/failing_examples/mocking_example.rb b/vendor/plugins/rspec/failing_examples/mocking_example.rb
deleted file mode 100644
index caf2db036..000000000
--- a/vendor/plugins/rspec/failing_examples/mocking_example.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "Mocker" do
-
- it "should be able to call mock()" do
- mock = mock("poke me")
- mock.should_receive(:poke)
- mock.poke
- end
-
- it "should fail when expected message not received" do
- mock = mock("poke me")
- mock.should_receive(:poke)
- end
-
- it "should fail when messages are received out of order" do
- mock = mock("one two three")
- mock.should_receive(:one).ordered
- mock.should_receive(:two).ordered
- mock.should_receive(:three).ordered
- mock.one
- mock.three
- mock.two
- end
-
- it "should get yelled at when sending unexpected messages" do
- mock = mock("don't talk to me")
- mock.should_not_receive(:any_message_at_all)
- mock.any_message_at_all
- end
-
- it "has a bug we need to fix" do
- pending "here is the bug" do
- # Actually, no. It's fixed. This will fail because it passes :-)
- mock = mock("Bug")
- mock.should_receive(:hello)
- mock.hello
- end
- end
-end
diff --git a/vendor/plugins/rspec/failing_examples/mocking_with_flexmock.rb b/vendor/plugins/rspec/failing_examples/mocking_with_flexmock.rb
deleted file mode 100644
index 6e79ece0e..000000000
--- a/vendor/plugins/rspec/failing_examples/mocking_with_flexmock.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# stub frameworks like to gum up Object, so this is deliberately
-# set NOT to run so that you don't accidentally run it when you
-# run this dir.
-
-# To run it, stand in this directory and say:
-#
-# RUN_FLEXMOCK_EXAMPLE=true ruby ../bin/spec mocking_with_flexmock.rb
-
-if ENV['RUN_FLEXMOCK_EXAMPLE']
- Spec::Runner.configure do |config|
- config.mock_with :flexmock
- end
-
- describe "Flexmocks" do
- it "should fail when the expected message is received with wrong arguments" do
- m = flexmock("now flex!")
- m.should_receive(:msg).with("arg").once
- m.msg("other arg")
- end
-
- it "should fail when the expected message is not received at all" do
- m = flexmock("now flex!")
- m.should_receive(:msg).with("arg").once
- end
- end
-end
diff --git a/vendor/plugins/rspec/failing_examples/mocking_with_mocha.rb b/vendor/plugins/rspec/failing_examples/mocking_with_mocha.rb
deleted file mode 100644
index f14a1a3e5..000000000
--- a/vendor/plugins/rspec/failing_examples/mocking_with_mocha.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# stub frameworks like to gum up Object, so this is deliberately
-# set NOT to run so that you don't accidentally run it when you
-# run this dir.
-
-# To run it, stand in this directory and say:
-#
-# RUN_MOCHA_EXAMPLE=true ruby ../bin/spec mocking_with_mocha.rb
-
-if ENV['RUN_MOCHA_EXAMPLE']
- Spec::Runner.configure do |config|
- config.mock_with :mocha
- end
- describe "Mocha framework" do
- it "should should be made available by saying config.mock_with :mocha" do
- m = mock()
- m.expects(:msg).with("arg")
- m.msg
- end
- it "should should be made available by saying config.mock_with :mocha" do
- o = Object.new
- o.expects(:msg).with("arg")
- o.msg
- end
- end
-end
diff --git a/vendor/plugins/rspec/failing_examples/mocking_with_rr.rb b/vendor/plugins/rspec/failing_examples/mocking_with_rr.rb
deleted file mode 100644
index 0d2b4fe04..000000000
--- a/vendor/plugins/rspec/failing_examples/mocking_with_rr.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-# stub frameworks like to gum up Object, so this is deliberately
-# set NOT to run so that you don't accidentally run it when you
-# run this dir.
-
-# To run it, stand in this directory and say:
-#
-# RUN_RR_EXAMPLE=true ruby ../bin/spec mocking_with_rr.rb
-
-if ENV['RUN_RR_EXAMPLE']
- Spec::Runner.configure do |config|
- config.mock_with :rr
- end
- describe "RR framework" do
- it "should should be made available by saying config.mock_with :rr" do
- o = Object.new
- mock(o).msg("arg")
- o.msg
- end
- it "should should be made available by saying config.mock_with :rr" do
- o = Object.new
- mock(o) do |m|
- m.msg("arg")
- end
- o.msg
- end
- end
-end
diff --git a/vendor/plugins/rspec/failing_examples/partial_mock_example.rb b/vendor/plugins/rspec/failing_examples/partial_mock_example.rb
deleted file mode 100644
index 6d0554055..000000000
--- a/vendor/plugins/rspec/failing_examples/partial_mock_example.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-class MockableClass
- def self.find id
- return :original_return
- end
-end
-
-describe "A partial mock" do
-
- it "should work at the class level (but fail here due to the type mismatch)" do
- MockableClass.should_receive(:find).with(1).and_return {:stub_return}
- MockableClass.find("1").should equal(:stub_return)
- end
-
- it "should revert to the original after each spec" do
- MockableClass.find(1).should equal(:original_return)
- end
-
-end
diff --git a/vendor/plugins/rspec/failing_examples/predicate_example.rb b/vendor/plugins/rspec/failing_examples/predicate_example.rb
deleted file mode 100644
index 53b6367e2..000000000
--- a/vendor/plugins/rspec/failing_examples/predicate_example.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-class BddFramework
- def intuitive?
- true
- end
-
- def adopted_quickly?
- #this will cause failures because it reallly SHOULD be adopted quickly
- false
- end
-end
-
-describe "BDD framework" do
-
- before(:each) do
- @bdd_framework = BddFramework.new
- end
-
- it "should be adopted quickly" do
- #this will fail because it reallly SHOULD be adopted quickly
- @bdd_framework.should be_adopted_quickly
- end
-
- it "should be intuitive" do
- @bdd_framework.should be_intuitive
- end
-
-end
diff --git a/vendor/plugins/rspec/failing_examples/raising_example.rb b/vendor/plugins/rspec/failing_examples/raising_example.rb
deleted file mode 100644
index e40b51ec8..000000000
--- a/vendor/plugins/rspec/failing_examples/raising_example.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-describe "This example" do
-
- it "should show that a NoMethodError is raised but an Exception was expected" do
- proc { ''.nonexistent_method }.should raise_error
- end
-
- it "should pass" do
- proc { ''.nonexistent_method }.should raise_error(NoMethodError)
- end
-
- it "should show that a NoMethodError is raised but a SyntaxError was expected" do
- proc { ''.nonexistent_method }.should raise_error(SyntaxError)
- end
-
- it "should show that nothing is raised when SyntaxError was expected" do
- proc { }.should raise_error(SyntaxError)
- end
-
- it "should show that a NoMethodError is raised but a Exception was expected" do
- proc { ''.nonexistent_method }.should_not raise_error
- end
-
- it "should show that a NoMethodError is raised" do
- proc { ''.nonexistent_method }.should_not raise_error(NoMethodError)
- end
-
- it "should also pass" do
- proc { ''.nonexistent_method }.should_not raise_error(SyntaxError)
- end
-
- it "should show that a NoMethodError is raised when nothing expected" do
- proc { ''.nonexistent_method }.should_not raise_error(Exception)
- end
-
- it "should show that the wrong message was received" do
- proc { raise StandardError.new("what is an enterprise?") }.should raise_error(StandardError, "not this")
- end
-
- it "should show that the unexpected error/message was thrown" do
- proc { raise StandardError.new("abc") }.should_not raise_error(StandardError, "abc")
- end
-
- it "should pass too" do
- proc { raise StandardError.new("abc") }.should_not raise_error(StandardError, "xyz")
- end
-
-end
diff --git a/vendor/plugins/rspec/failing_examples/spec_helper.rb b/vendor/plugins/rspec/failing_examples/spec_helper.rb
deleted file mode 100644
index f8d657554..000000000
--- a/vendor/plugins/rspec/failing_examples/spec_helper.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-lib_path = File.expand_path("#{File.dirname(__FILE__)}/../lib")
-$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
-require "spec"
diff --git a/vendor/plugins/rspec/failing_examples/syntax_error_example.rb b/vendor/plugins/rspec/failing_examples/syntax_error_example.rb
deleted file mode 100644
index c9bb90774..000000000
--- a/vendor/plugins/rspec/failing_examples/syntax_error_example.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-describe "when passing a block to a matcher" do
- it "you should use {} instead of do/end" do
- Object.new.should satisfy do
- "this block is being passed to #should instead of #satisfy - use {} instead"
- end
- end
-end
diff --git a/vendor/plugins/rspec/failing_examples/team_spec.rb b/vendor/plugins/rspec/failing_examples/team_spec.rb
deleted file mode 100644
index 41a44e551..000000000
--- a/vendor/plugins/rspec/failing_examples/team_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-
-class Team
- attr_reader :players
- def initialize
- @players = Players.new
- end
-end
-
-class Players
- def initialize
- @players = []
- end
- def size
- @players.size
- end
- def include? player
- raise "player must be a string" unless player.is_a?(String)
- @players.include? player
- end
-end
-
-describe "A new team" do
-
- before(:each) do
- @team = Team.new
- end
-
- it "should have 3 players (failing example)" do
- @team.should have(3).players
- end
-
- it "should include some player (failing example)" do
- @team.players.should include("Some Player")
- end
-
- it "should include 5 (failing example)" do
- @team.players.should include(5)
- end
-
- it "should have no players"
-
-end
diff --git a/vendor/plugins/rspec/failing_examples/timeout_behaviour.rb b/vendor/plugins/rspec/failing_examples/timeout_behaviour.rb
deleted file mode 100644
index 18221365f..000000000
--- a/vendor/plugins/rspec/failing_examples/timeout_behaviour.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "Something really slow" do
- it "should be failed by RSpec when it takes longer than --timeout" do
- sleep(2)
- end
-end
diff --git a/vendor/plugins/rspec/lib/autotest/discover.rb b/vendor/plugins/rspec/lib/autotest/discover.rb
index 81914c3b7..3ac51c135 100644
--- a/vendor/plugins/rspec/lib/autotest/discover.rb
+++ b/vendor/plugins/rspec/lib/autotest/discover.rb
@@ -1,3 +1,3 @@
Autotest.add_discovery do
- "rspec" if File.exist?('spec')
+ "rspec" if File.directory?('spec') && ENV['RSPEC']
end
diff --git a/vendor/plugins/rspec/lib/autotest/rspec.rb b/vendor/plugins/rspec/lib/autotest/rspec.rb
index 164f298f5..625e340b5 100644
--- a/vendor/plugins/rspec/lib/autotest/rspec.rb
+++ b/vendor/plugins/rspec/lib/autotest/rspec.rb
@@ -4,13 +4,13 @@ Autotest.add_hook :initialize do |at|
at.clear_mappings
# watch out: Ruby bug (1.8.6):
# %r(/) != /\//
- at.add_mapping(%r%^spec/.*\.rb$%) { |filename, _|
- filename
+ at.add_mapping(%r%^spec/.*_spec.rb$%) { |filename, _|
+ filename
}
- at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m|
+ at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m|
["spec/#{m[1]}_spec.rb"]
}
- at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.rb$%) {
+ at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.rb$%) {
at.files_matching %r%^spec/.*_spec\.rb$%
}
end
@@ -21,14 +21,14 @@ class Autotest::Rspec < Autotest
def initialize
super
- self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m
+ self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n\n?(.*?(\n\n\(.*?)?)\n\n/m
self.completed_re = /\n(?:\e\[\d*m)?\d* examples?/m
end
-
+
def consolidate_failures(failed)
filters = new_hash_of_arrays
failed.each do |spec, trace|
- if trace =~ /\n(\.\/)?(.*\.rb):[\d]+:\Z?/
+ if trace =~ /\n(\.\/)?(.*spec\.rb):[\d]+:/
filters[$2] << spec
end
end
@@ -36,37 +36,12 @@ class Autotest::Rspec < Autotest
end
def make_test_cmd(files_to_test)
- return "#{ruby} -S #{spec_command} #{add_options_if_present} #{files_to_test.keys.flatten.join(' ')}"
+ return '' if files_to_test.empty?
+ spec_program = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec'))
+ return "#{ruby} #{spec_program} --autospec #{files_to_test.keys.flatten.join(' ')} #{add_options_if_present}"
end
-
+
def add_options_if_present # :nodoc:
File.exist?("spec/spec.opts") ? "-O spec/spec.opts " : ""
end
-
- # Finds the proper spec command to use. Precendence is set in the
- # lazily-evaluated method spec_commands. Alias + Override that in
- # ~/.autotest to provide a different spec command then the default
- # paths provided.
- def spec_command(separator=File::ALT_SEPARATOR)
- unless defined? @spec_command then
- @spec_command = spec_commands.find { |cmd| File.exists? cmd }
-
- raise RspecCommandError, "No spec command could be found!" unless @spec_command
-
- @spec_command.gsub! File::SEPARATOR, separator if separator
- end
- @spec_command
- end
-
- # Autotest will look for spec commands in the following
- # locations, in this order:
- #
- # * bin/spec
- # * default spec bin/loader installed in Rubygems
- def spec_commands
- [
- File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec')),
- File.join(Config::CONFIG['bindir'], 'spec')
- ]
- end
end
diff --git a/vendor/plugins/rspec/lib/spec.rb b/vendor/plugins/rspec/lib/spec.rb
index c143aa885..879c373e8 100644
--- a/vendor/plugins/rspec/lib/spec.rb
+++ b/vendor/plugins/rspec/lib/spec.rb
@@ -1,30 +1,8 @@
-require 'spec/version'
+require 'spec/deprecation'
+require 'spec/ruby'
require 'spec/matchers'
require 'spec/expectations'
require 'spec/example'
-require 'spec/extensions'
require 'spec/runner'
-
-if Object.const_defined?(:Test); \
- require 'spec/interop/test'; \
-end
-
-module Spec
- class << self
- def run?
- @run || rspec_options.examples_run?
- end
-
- def run; \
- return true if run?; \
- result = rspec_options.run_examples; \
- @run = true; \
- result; \
- end
- attr_writer :run
-
- def exit?; \
- !Object.const_defined?(:Test) || Test::Unit.run?; \
- end
- end
-end \ No newline at end of file
+require 'spec/version'
+require 'spec/dsl'
diff --git a/vendor/plugins/rspec/lib/spec/example.rb b/vendor/plugins/rspec/lib/spec/example.rb
index 16ce12261..afbf41286 100644
--- a/vendor/plugins/rspec/lib/spec/example.rb
+++ b/vendor/plugins/rspec/lib/spec/example.rb
@@ -1,12 +1,164 @@
+module Spec
+ # == Example Groups and Code Examples
+ #
+ # A Code Example is an executable example of how a bit of code is expected
+ # to behave.
+ #
+ # An Example Group is a group of code examples.
+ #
+ # RSpec exposes a DSL to describe groups of examples.
+ #
+ # describe Account do
+ # it "should have a balance of $0" do
+ # account = Account.new
+ # account.balance.should == Money.new(0, :dollars)
+ # end
+ # end
+ #
+ # == Before and After
+ #
+ # You can use the <tt>before()</tt> and <tt>after()</tt> methods to extract
+ # common code within an Example Group. Both methods take an optional scope
+ # argument so you can run the block before :each example or before :all
+ # examples
+ #
+ # describe "..." do
+ # before :all do
+ # ...
+ # end
+ #
+ # before :each do
+ # ...
+ # end
+ #
+ # it "should do something" do
+ # ...
+ # end
+ #
+ # it "should do something else" do
+ # ...
+ # end
+ #
+ # after :each do
+ # ...
+ # end
+ #
+ # after :all do
+ # ...
+ # end
+ #
+ # end
+ #
+ # The <tt>before :each</tt> block will run before each of the examples, once
+ # for each example. Likewise, the <tt>after :each</tt> block will run after
+ # each of the examples.
+ #
+ # It is also possible to specify a <tt>before :all</tt> and <tt>after
+ # :all</tt> block that will run only once for each example group, before the
+ # first <code>before :each</code> and after the last <code>after
+ # :each</code> respectively. The use of these is generally discouraged,
+ # because it introduces dependencies between the examples. Still, it might
+ # prove useful for very expensive operations if you know what you are doing.
+ #
+ # == Local helper methods
+ #
+ # You can include local helper methods by simply expressing them within an
+ # example group:
+ #
+ # describe "..." do
+ #
+ # it "..." do
+ # helper_method
+ # end
+ #
+ # def helper_method
+ # ...
+ # end
+ #
+ # end
+ #
+ # == Included helper methods
+ #
+ # You can include helper methods in multiple example groups by expressing
+ # them within a module, and then including that module in your example
+ # groups:
+ #
+ # module AccountExampleHelperMethods
+ # def helper_method
+ # ...
+ # end
+ # end
+ #
+ # describe "A new account" do
+ # include AccountExampleHelperMethods
+ # before do
+ # @account = Account.new
+ # end
+ #
+ # it "should have a balance of $0" do
+ # helper_method
+ # @account.balance.should eql(Money.new(0, :dollars))
+ # end
+ # end
+ #
+ # == Shared Example Groups
+ #
+ # You can define a shared example group, that may be used on other groups
+ #
+ # share_examples_for "All Editions" do
+ # it "all editions behaviour" ...
+ # end
+ #
+ # describe SmallEdition do
+ # it_should_behave_like "All Editions"
+ #
+ # it "should do small edition stuff" do
+ # ...
+ # end
+ # end
+ #
+ # You can also assign the shared group to a module and include that
+ #
+ # share_as :AllEditions do
+ # it "should do all editions stuff" ...
+ # end
+ #
+ # describe SmallEdition do
+ # it_should_behave_like AllEditions
+ #
+ # it "should do small edition stuff" do
+ # ...
+ # end
+ # end
+ #
+ # And, for those of you who prefer to use something more like Ruby, you can
+ # just include the module directly
+ #
+ # describe SmallEdition do
+ # include AllEditions
+ #
+ # it "should do small edition stuff" do
+ # ...
+ # end
+ # end
+ module Example
+ end
+end
+
require 'timeout'
+require 'spec/example/args_and_options'
+require 'spec/example/predicate_matchers'
+require 'spec/example/example_group_proxy'
+require 'spec/example/example_proxy'
+require 'spec/example/subject'
+require 'spec/example/before_and_after_hooks'
require 'spec/example/pending'
require 'spec/example/module_reopening_fix'
-require 'spec/example/module_inclusion_warnings'
+require 'spec/example/example_group_hierarchy'
require 'spec/example/example_group_methods'
require 'spec/example/example_methods'
require 'spec/example/example_group'
require 'spec/example/shared_example_group'
require 'spec/example/example_group_factory'
require 'spec/example/errors'
-require 'spec/example/configuration'
require 'spec/example/example_matcher'
diff --git a/vendor/plugins/rspec/lib/spec/example/configuration.rb b/vendor/plugins/rspec/lib/spec/example/configuration.rb
deleted file mode 100644
index cd3f46909..000000000
--- a/vendor/plugins/rspec/lib/spec/example/configuration.rb
+++ /dev/null
@@ -1,158 +0,0 @@
-module Spec
- module Example
- class Configuration
- # Chooses what mock framework to use. Example:
- #
- # Spec::Runner.configure do |config|
- # config.mock_with :rspec, :mocha, :flexmock, or :rr
- # end
- #
- # To use any other mock framework, you'll have to provide your own
- # adapter. This is simply a module that responds to the following
- # methods:
- #
- # setup_mocks_for_rspec
- # verify_mocks_for_rspec
- # teardown_mocks_for_rspec.
- #
- # These are your hooks into the lifecycle of a given example. RSpec will
- # call setup_mocks_for_rspec before running anything else in each
- # Example. After executing the #after methods, RSpec will then call
- # verify_mocks_for_rspec and teardown_mocks_for_rspec (this is
- # guaranteed to run even if there are failures in
- # verify_mocks_for_rspec).
- #
- # Once you've defined this module, you can pass that to mock_with:
- #
- # Spec::Runner.configure do |config|
- # config.mock_with MyMockFrameworkAdapter
- # end
- #
- def mock_with(mock_framework)
- @mock_framework = case mock_framework
- when Symbol
- mock_framework_path(mock_framework.to_s)
- else
- mock_framework
- end
- end
-
- def mock_framework # :nodoc:
- @mock_framework ||= mock_framework_path("rspec")
- end
-
- # :call-seq:
- # include(Some::Helpers)
- # include(Some::Helpers, More::Helpers)
- # include(My::Helpers, :type => :key)
- #
- # Declares modules to be included in multiple example groups
- # (<tt>describe</tt> blocks). With no :type, the modules listed will be
- # included in all example groups. Use :type to restrict the inclusion to
- # a subset of example groups. The value assigned to :type should be a
- # key that maps to a class that is either a subclass of
- # Spec::Example::ExampleGroup or extends Spec::Example::ExampleGroupMethods
- # and includes Spec::Example::ExampleMethods
- #
- # config.include(My::Pony, My::Horse, :type => :farm)
- #
- # Only example groups that have that type will get the modules included:
- #
- # describe "Downtown", :type => :city do
- # # Will *not* get My::Pony and My::Horse included
- # end
- #
- # describe "Old Mac Donald", :type => :farm do
- # # *Will* get My::Pony and My::Horse included
- # end
- #
- def include(*args)
- args << {} unless Hash === args.last
- modules, options = args_and_options(*args)
- required_example_group = get_type_from_options(options)
- required_example_group = required_example_group.to_sym if required_example_group
- modules.each do |mod|
- ExampleGroupFactory.get(required_example_group).send(:include, mod)
- end
- end
-
- # Defines global predicate matchers. Example:
- #
- # config.predicate_matchers[:swim] = :can_swim?
- #
- # This makes it possible to say:
- #
- # person.should swim # passes if person.can_swim? returns true
- #
- def predicate_matchers
- @predicate_matchers ||= {}
- end
-
- # Prepends a global <tt>before</tt> block to all example groups.
- # See #append_before for filtering semantics.
- def prepend_before(*args, &proc)
- scope, options = scope_and_options(*args)
- example_group = ExampleGroupFactory.get(
- get_type_from_options(options)
- )
- example_group.prepend_before(scope, &proc)
- end
-
- # Appends a global <tt>before</tt> block to all example groups.
- #
- # If you want to restrict the block to a subset of all the example
- # groups then specify this in a Hash as the last argument:
- #
- # config.prepend_before(:all, :type => :farm)
- #
- # or
- #
- # config.prepend_before(:type => :farm)
- #
- def append_before(*args, &proc)
- scope, options = scope_and_options(*args)
- example_group = ExampleGroupFactory.get(
- get_type_from_options(options)
- )
- example_group.append_before(scope, &proc)
- end
- alias_method :before, :append_before
-
- # Prepends a global <tt>after</tt> block to all example groups.
- # See #append_before for filtering semantics.
- def prepend_after(*args, &proc)
- scope, options = scope_and_options(*args)
- example_group = ExampleGroupFactory.get(
- get_type_from_options(options)
- )
- example_group.prepend_after(scope, &proc)
- end
- alias_method :after, :prepend_after
-
- # Appends a global <tt>after</tt> block to all example groups.
- # See #append_before for filtering semantics.
- def append_after(*args, &proc)
- scope, options = scope_and_options(*args)
- example_group = ExampleGroupFactory.get(
- get_type_from_options(options)
- )
- example_group.append_after(scope, &proc)
- end
-
- private
-
- def scope_and_options(*args)
- args, options = args_and_options(*args)
- scope = (args[0] || :each), options
- end
-
- def get_type_from_options(options)
- options[:type] || options[:behaviour_type]
- end
-
- def mock_framework_path(framework_name)
- File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "plugins", "mock_frameworks", framework_name))
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/example/errors.rb b/vendor/plugins/rspec/lib/spec/example/errors.rb
index c6cb22453..157b669b0 100644
--- a/vendor/plugins/rspec/lib/spec/example/errors.rb
+++ b/vendor/plugins/rspec/lib/spec/example/errors.rb
@@ -1,9 +1,25 @@
module Spec
module Example
- class ExamplePendingError < StandardError
+ class ExamplePendingError < StandardError; end
+
+ class NotYetImplementedError < ExamplePendingError
+ MESSAGE = "Not Yet Implemented"
+ def initialize
+ super(MESSAGE)
+ end
end
- class PendingExampleFixedError < StandardError
+ class PendingExampleFixedError < StandardError; end
+
+ class NoDescriptionError < ArgumentError
+ class << self
+ def message(kind, location)
+ "No description supplied for #{kind} declared on #{location}"
+ end
+ end
+ def initialize(kind, location)
+ super(self.class.message(kind, location))
+ end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/example/example_group.rb b/vendor/plugins/rspec/lib/spec/example/example_group.rb
index 35997f0c4..983be9a24 100644
--- a/vendor/plugins/rspec/lib/spec/example/example_group.rb
+++ b/vendor/plugins/rspec/lib/spec/example/example_group.rb
@@ -5,13 +5,6 @@ module Spec
class ExampleGroup
extend Spec::Example::ExampleGroupMethods
include Spec::Example::ExampleMethods
-
- def initialize(defined_description, &implementation)
- @_defined_description = defined_description
- @_implementation = implementation
- end
end
end
end
-
-Spec::ExampleGroup = Spec::Example::ExampleGroup
diff --git a/vendor/plugins/rspec/lib/spec/example/example_group_factory.rb b/vendor/plugins/rspec/lib/spec/example/example_group_factory.rb
index c5caf4c9c..1d662782a 100644
--- a/vendor/plugins/rspec/lib/spec/example/example_group_factory.rb
+++ b/vendor/plugins/rspec/lib/spec/example/example_group_factory.rb
@@ -1,12 +1,36 @@
module Spec
module Example
+
class ExampleGroupFactory
- class << self
+ module ClassMethods
+ include Spec::Example::ArgsAndOptions
+
def reset
@example_group_types = nil
default(ExampleGroup)
end
+ def example_group_creation_listeners
+ @example_group_creation_listeners ||= []
+ end
+
+ def register_example_group(klass)
+ example_group_creation_listeners.each do |listener|
+ listener.register_example_group(klass)
+ end
+ end
+
+ def create_shared_example_group(*args, &example_group_block) # :nodoc:
+ ::Spec::Example::SharedExampleGroup.register(*args, &example_group_block)
+ end
+
+ def create_example_group(*args, &block)
+ raise ArgumentError if args.empty? || block.nil?
+ add_options(args)
+ superclass = determine_superclass(args.last)
+ superclass.describe(*args, &block)
+ end
+
# Registers an example group class +klass+ with the symbol +type+. For
# example:
#
@@ -22,42 +46,36 @@ module Spec
# implicitly use an instance of FarmExampleGroup for any file loaded
# from the <tt>./spec/farm</tt> directory.
def register(key, example_group_class)
- @example_group_types[key] = example_group_class
+ @example_group_types[key.to_sym] = example_group_class
end
-
+
# Sets the default ExampleGroup class
def default(example_group_class)
+ Spec.__send__ :remove_const, :ExampleGroup if Spec.const_defined?(:ExampleGroup)
+ Spec.const_set(:ExampleGroup, example_group_class)
old = @example_group_types
@example_group_types = Hash.new(example_group_class)
@example_group_types.merge!(old) if old
end
- def get(key=nil)
- if @example_group_types.values.include?(key)
- key
- else
- @example_group_types[key]
- end
- end
-
- def create_example_group(*args, &block)
- opts = Hash === args.last ? args.last : {}
- superclass = determine_superclass(opts)
- superclass.describe(*args, &block)
+ def [](key)
+ @example_group_types[key]
end
- protected
+ protected
def determine_superclass(opts)
- key = if opts[:type]
- opts[:type]
- elsif opts[:spec_path] =~ /spec(\\|\/)(#{@example_group_types.keys.join('|')})/
- $2 == '' ? nil : $2.to_sym
+ if type = opts[:type]
+ self[type]
+ elsif opts[:location] =~ /spec(\\|\/)(#{@example_group_types.keys.sort_by{|k| k.to_s.length}.reverse.join('|')})/
+ self[$2 == '' ? nil : $2.to_sym]
+ else
+ self[nil]
end
- get(key)
end
end
+ extend ClassMethods
self.reset
end
end
diff --git a/vendor/plugins/rspec/lib/spec/example/example_group_methods.rb b/vendor/plugins/rspec/lib/spec/example/example_group_methods.rb
index 64e90cdb2..3862fdef6 100644
--- a/vendor/plugins/rspec/lib/spec/example/example_group_methods.rb
+++ b/vendor/plugins/rspec/lib/spec/example/example_group_methods.rb
@@ -3,22 +3,33 @@ module Spec
module ExampleGroupMethods
class << self
- def description_text(*args)
- args.inject("") do |result, arg|
- result << " " unless (result == "" || arg.to_s =~ /^(\s|\.|#)/)
- result << arg.to_s
+ attr_accessor :matcher_class
+
+ def build_description_from(*args)
+ text = args.inject("") do |description, arg|
+ description << " " unless (description == "" || arg.to_s =~ /^(\s|\.|#)/)
+ description << arg.to_s
end
+ text == "" ? nil : text
end
end
- attr_reader :description_text, :description_args, :description_options, :spec_path, :registration_binding_block
+ include Spec::Example::BeforeAndAfterHooks
+ include Spec::Example::Subject::ExampleGroupMethods
+ include Spec::Example::PredicateMatchers
+ include Spec::Example::ArgsAndOptions
+
+ attr_reader :location
+
+ def options # :nodoc:
+ @options ||= {}
+ end
- def inherited(klass)
+ def inherited(klass) # :nodoc:
super
- klass.register {}
- Spec::Runner.register_at_exit_hook
+ ExampleGroupFactory.register_example_group(klass)
end
-
+
# Makes the describe/it syntax available from a class. For example:
#
# class StackSpec < Spec::ExampleGroup
@@ -34,390 +45,214 @@ module Spec
# end
#
def describe(*args, &example_group_block)
- args << {} unless Hash === args.last
+ raise Spec::Example::NoDescriptionError.new("example group", caller(0)[1]) if args.empty?
if example_group_block
- params = args.last
- params[:spec_path] = eval("caller(0)[1]", example_group_block) unless params[:spec_path]
- if params[:shared]
- SharedExampleGroup.new(*args, &example_group_block)
+ options = add_options(args)
+ set_location(options, caller(0)[1])
+ if options[:shared]
+ ExampleGroupFactory.create_shared_example_group(*args, &example_group_block)
else
- self.subclass("Subclass") do
- describe(*args)
- module_eval(&example_group_block)
- end
+ subclass(*args, &example_group_block)
end
else
set_description(*args)
- before_eval
- self
end
end
alias :context :describe
# Use this to pull in examples from shared example groups.
- # See Spec::Runner for information about shared example groups.
- def it_should_behave_like(shared_example_group)
- case shared_example_group
- when SharedExampleGroup
- include shared_example_group
- else
- example_group = SharedExampleGroup.find_shared_example_group(shared_example_group)
- unless example_group
- raise RuntimeError.new("Shared Example Group '#{shared_example_group}' can not be found")
- end
- include(example_group)
+ def it_should_behave_like(*shared_example_groups)
+ shared_example_groups.each do |group|
+ include_shared_example_group(group)
end
end
- # :call-seq:
- # predicate_matchers[matcher_name] = method_on_object
- # predicate_matchers[matcher_name] = [method1_on_object, method2_on_object]
- #
- # Dynamically generates a custom matcher that will match
- # a predicate on your class. RSpec provides a couple of these
- # out of the box:
- #
- # exist (or state expectations)
- # File.should exist("path/to/file")
- #
- # an_instance_of (for mock argument constraints)
- # mock.should_receive(:message).with(an_instance_of(String))
- #
- # == Examples
- #
- # class Fish
- # def can_swim?
- # true
- # end
- # end
- #
- # describe Fish do
- # predicate_matchers[:swim] = :can_swim?
- # it "should swim" do
- # Fish.new.should swim
- # end
- # end
- def predicate_matchers
- @predicate_matchers ||= {:an_instance_of => :is_a?}
+ # Creates an instance of the current example group class and adds it to
+ # a collection of examples of the current example group.
+ def example(description=nil, options={}, backtrace=nil, &implementation)
+ example_proxy = ExampleProxy.new(description, options, backtrace || caller(0)[1])
+ example_proxies << example_proxy
+ example_implementations[example_proxy] = implementation || pending_implementation
+ example_proxy
end
- # Creates an instance of Spec::Example::Example and adds
- # it to a collection of examples of the current example group.
- def it(description=nil, &implementation)
- e = new(description, &implementation)
- example_objects << e
- e
+ def pending_implementation
+ lambda { raise(Spec::Example::NotYetImplementedError) }
end
- alias_method :specify, :it
+ alias_method :it, :example
+ alias_method :specify, :example
# Use this to temporarily disable an example.
- def xit(description=nil, opts={}, &block)
+ def xexample(description=nil, opts={}, &block)
Kernel.warn("Example disabled: #{description}")
end
- alias_method :xspecify, :xit
- def run
- examples = examples_to_run
- reporter.add_example_group(self)
+ alias_method :xit, :xexample
+ alias_method :xspecify, :xexample
+
+ def run(run_options)
+ examples = examples_to_run(run_options)
+ notify(run_options.reporter) unless examples.empty?
return true if examples.empty?
- return dry_run(examples) if dry_run?
+ return dry_run(examples, run_options) if run_options.dry_run?
- plugin_mock_framework
define_methods_from_predicate_matchers
- success, before_all_instance_variables = run_before_all
- success, after_all_instance_variables = execute_examples(success, before_all_instance_variables, examples)
- success = run_after_all(success, after_all_instance_variables)
- end
-
- def description
- result = ExampleGroupMethods.description_text(*description_parts)
- if result.nil? || result == ""
- return to_s
- else
- result
- end
- end
-
- def described_type
- description_parts.find {|part| part.is_a?(Module)}
- end
-
- def description_parts #:nodoc:
- parts = []
- execute_in_class_hierarchy do |example_group|
- parts << example_group.description_args
- end
- parts.flatten.compact
+ success, before_all_instance_variables = run_before_all(run_options)
+ success, after_all_instance_variables = run_examples(success, before_all_instance_variables, examples, run_options)
+ success = run_after_all(success, after_all_instance_variables, run_options)
end
def set_description(*args)
- args, options = args_and_options(*args)
- @description_args = args
- @description_options = options
- @description_text = ExampleGroupMethods.description_text(*args)
- @spec_path = File.expand_path(options[:spec_path]) if options[:spec_path]
- if described_type.class == Module
- @described_module = described_type
- end
+ @description_args, @options = args_and_options(*args)
+ @backtrace = caller(1)
+ @location = File.expand_path(options[:location]) if options[:location]
self
end
-
- attr_reader :described_module
-
- def examples #:nodoc:
- examples = example_objects.dup
- add_method_examples(examples)
- rspec_options.reverse ? examples.reverse : examples
- end
-
- def number_of_examples #:nodoc:
- examples.length
- end
-
- # Registers a block to be executed before each example.
- # This method prepends +block+ to existing before blocks.
- def prepend_before(*args, &block)
- scope, options = scope_and_options(*args)
- parts = before_parts_from_scope(scope)
- parts.unshift(block)
- end
- # Registers a block to be executed before each example.
- # This method appends +block+ to existing before blocks.
- def append_before(*args, &block)
- scope, options = scope_and_options(*args)
- parts = before_parts_from_scope(scope)
- parts << block
+ def notify(reporter) # :nodoc:
+ reporter.example_group_started(ExampleGroupProxy.new(self))
end
- alias_method :before, :append_before
- # Registers a block to be executed after each example.
- # This method prepends +block+ to existing after blocks.
- def prepend_after(*args, &block)
- scope, options = scope_and_options(*args)
- parts = after_parts_from_scope(scope)
- parts.unshift(block)
- end
- alias_method :after, :prepend_after
-
- # Registers a block to be executed after each example.
- # This method appends +block+ to existing after blocks.
- def append_after(*args, &block)
- scope, options = scope_and_options(*args)
- parts = after_parts_from_scope(scope)
- parts << block
+ def description
+ @description ||= ExampleGroupMethods.build_description_from(*description_parts) || to_s
end
- def remove_after(scope, &block)
- after_each_parts.delete(block)
+ def described_type
+ @described_type ||= description_parts.reverse.find {|part| part.is_a?(Module)}
end
- # Deprecated. Use before(:each)
- def setup(&block)
- before(:each, &block)
+ def described_class
+ @described_class ||= Class === described_type ? described_type : nil
end
- # Deprecated. Use after(:each)
- def teardown(&block)
- after(:each, &block)
+ def description_args
+ @description_args ||= []
end
- def before_all_parts # :nodoc:
- @before_all_parts ||= []
+ def description_parts #:nodoc:
+ @description_parts ||= example_group_hierarchy.inject([]) do |parts, example_group_class|
+ [parts << example_group_class.description_args].flatten
+ end
end
- def after_all_parts # :nodoc:
- @after_all_parts ||= []
+ def example_proxies # :nodoc:
+ @example_proxies ||= []
end
- def before_each_parts # :nodoc:
- @before_each_parts ||= []
+ def example_implementations # :nodoc:
+ @example_implementations ||= {}
end
- def after_each_parts # :nodoc:
- @after_each_parts ||= []
+ def examples(run_options=nil) #:nodoc:
+ (run_options && run_options.reverse) ? example_proxies.reverse : example_proxies
end
- # Only used from RSpec's own examples
- def reset # :nodoc:
- @before_all_parts = nil
- @after_all_parts = nil
- @before_each_parts = nil
- @after_each_parts = nil
+ def number_of_examples #:nodoc:
+ example_proxies.length
end
- def register(&registration_binding_block)
- @registration_binding_block = registration_binding_block
- rspec_options.add_example_group self
+ def example_group_hierarchy
+ @example_group_hierarchy ||= ExampleGroupHierarchy.new(self)
end
- def unregister #:nodoc:
- rspec_options.remove_example_group self
+ def nested_descriptions
+ example_group_hierarchy.nested_descriptions
end
- def registration_backtrace
- eval("caller", registration_binding_block.binding)
+ def include_constants_in(mod)
+ include mod if (Spec::Ruby.version.to_f >= 1.9) & (Module === mod) & !(Class === mod)
end
- def run_before_each(example)
- execute_in_class_hierarchy do |example_group|
- example.eval_each_fail_fast(example_group.before_each_parts)
+ def let(name, &block)
+ define_method name do
+ @assignments ||= {}
+ @assignments[name] ||= instance_eval(&block)
end
end
- def run_after_each(example)
- execute_in_class_hierarchy(:superclass_first) do |example_group|
- example.eval_each_fail_slow(example_group.after_each_parts)
- end
+ private
+
+ def subclass(*args, &example_group_block)
+ @class_count ||= 0
+ @class_count += 1
+ klass = const_set("Subclass_#{@class_count}", Class.new(self))
+ klass.set_description(*args)
+ klass.include_constants_in(args.last[:scope])
+ klass.module_eval(&example_group_block)
+ klass
end
- private
- def dry_run(examples)
+ def dry_run(examples, run_options)
examples.each do |example|
- rspec_options.reporter.example_started(example)
- rspec_options.reporter.example_finished(example)
+ run_options.reporter.example_started(example)
+ run_options.reporter.example_finished(example)
end
- return true
end
- def run_before_all
- before_all = new("before(:all)")
+ def run_before_all(run_options)
+ return [true,{}] if example_group_hierarchy.before_all_parts.empty?
+ example_proxy = ExampleProxy.new("before(:all)")
+ before_all = new(example_proxy)
begin
- execute_in_class_hierarchy do |example_group|
- before_all.eval_each_fail_fast(example_group.before_all_parts)
- end
+ example_group_hierarchy.run_before_all(before_all)
return [true, before_all.instance_variable_hash]
rescue Exception => e
- reporter.failure(before_all, e)
+ run_options.reporter.example_failed(example_proxy, e)
return [false, before_all.instance_variable_hash]
end
end
- def execute_examples(success, instance_variables, examples)
+ def run_examples(success, instance_variables, examples, run_options)
return [success, instance_variables] unless success
after_all_instance_variables = instance_variables
- examples.each do |example_group_instance|
- success &= example_group_instance.execute(rspec_options, instance_variables)
+
+ examples.each do |example|
+ example_group_instance = new(example, &example_implementations[example])
+ success &= example_group_instance.execute(run_options, instance_variables)
after_all_instance_variables = example_group_instance.instance_variable_hash
end
+
return [success, after_all_instance_variables]
end
- def run_after_all(success, instance_variables)
- after_all = new("after(:all)")
+ def run_after_all(success, instance_variables, run_options)
+ return success if example_group_hierarchy.after_all_parts.empty?
+ example_proxy = ExampleProxy.new("after(:all)")
+ after_all = new(example_proxy)
after_all.set_instance_variables_from_hash(instance_variables)
- execute_in_class_hierarchy(:superclass_first) do |example_group|
- after_all.eval_each_fail_slow(example_group.after_all_parts)
- end
- return success
+ example_group_hierarchy.run_after_all(after_all)
+ success
rescue Exception => e
- reporter.failure(after_all, e)
- return false
- end
-
- def examples_to_run
- all_examples = examples
- return all_examples unless specified_examples?
- all_examples.reject do |example|
- matcher = ExampleMatcher.new(description.to_s, example.description)
- !matcher.matches?(specified_examples)
- end
- end
-
- def specified_examples?
- specified_examples && !specified_examples.empty?
- end
-
- def specified_examples
- rspec_options.examples
- end
-
- def reporter
- rspec_options.reporter
- end
-
- def dry_run?
- rspec_options.dry_run
- end
-
- def example_objects
- @example_objects ||= []
- end
-
- def execute_in_class_hierarchy(superclass_last=false)
- classes = []
- current_class = self
- while is_example_group?(current_class)
- superclass_last ? classes << current_class : classes.unshift(current_class)
- current_class = current_class.superclass
- end
- superclass_last ? classes << ExampleMethods : classes.unshift(ExampleMethods)
-
- classes.each do |example_group|
- yield example_group
- end
- end
-
- def is_example_group?(klass)
- Module === klass && klass.kind_of?(ExampleGroupMethods)
+ run_options.reporter.example_failed(example_proxy, e)
+ false
end
- def plugin_mock_framework
- case mock_framework = Spec::Runner.configuration.mock_framework
- when Module
- include mock_framework
+ def examples_to_run(run_options)
+ return example_proxies unless examples_were_specified?(run_options)
+ if run_options.line_number_requested?
+ if location =~ /:#{run_options.example_line}:?/
+ example_proxies
+ else
+ example_proxies.select {|proxy| proxy.location =~ /:#{run_options.example_line}:?/}
+ end
else
- require Spec::Runner.configuration.mock_framework
- include Spec::Plugins::MockFramework
- end
- end
-
- def define_methods_from_predicate_matchers # :nodoc:
- all_predicate_matchers = predicate_matchers.merge(
- Spec::Runner.configuration.predicate_matchers
- )
- all_predicate_matchers.each_pair do |matcher_method, method_on_object|
- define_method matcher_method do |*args|
- eval("be_#{method_on_object.to_s.gsub('?','')}(*args)")
+ example_proxies.reject do |proxy|
+ matcher = ExampleGroupMethods.matcher_class.
+ new(description.to_s, proxy.description)
+ !matcher.matches?(run_options.examples)
end
end
end
- def scope_and_options(*args)
- args, options = args_and_options(*args)
- scope = (args[0] || :each), options
- end
-
- def before_parts_from_scope(scope)
- case scope
- when :each; before_each_parts
- when :all; before_all_parts
- when :suite; rspec_options.before_suite_parts
- end
- end
-
- def after_parts_from_scope(scope)
- case scope
- when :each; after_each_parts
- when :all; after_all_parts
- when :suite; rspec_options.after_suite_parts
- end
- end
-
- def before_eval
+ def examples_were_specified?(run_options)
+ !run_options.examples.empty?
end
- def add_method_examples(examples)
- instance_methods.sort.each do |method_name|
- if example_method?(method_name)
- examples << new(method_name) do
- __send__(method_name)
- end
- end
- end
+ def method_added(name) # :nodoc:
+ example(name.to_s, {}, caller(0)[1]) {__send__ name.to_s} if example_method?(name.to_s)
end
def example_method?(method_name)
@@ -426,10 +261,20 @@ module Spec
def should_method?(method_name)
!(method_name =~ /^should(_not)?$/) &&
- method_name =~ /^should/ && (
- instance_method(method_name).arity == 0 ||
- instance_method(method_name).arity == -1
- )
+ method_name =~ /^should/ &&
+ instance_method(method_name).arity < 1
+ end
+
+ def include_shared_example_group(shared_example_group)
+ case shared_example_group
+ when SharedExampleGroup
+ include shared_example_group
+ else
+ unless example_group = SharedExampleGroup.find(shared_example_group)
+ raise RuntimeError.new("Shared Example Group '#{shared_example_group}' can not be found")
+ end
+ include(example_group)
+ end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/example/example_matcher.rb b/vendor/plugins/rspec/lib/spec/example/example_matcher.rb
index 435eabf52..3acd7e14a 100644
--- a/vendor/plugins/rspec/lib/spec/example/example_matcher.rb
+++ b/vendor/plugins/rspec/lib/spec/example/example_matcher.rb
@@ -5,14 +5,13 @@ module Spec
@example_group_description = example_group_description
@example_name = example_name
end
-
+
def matches?(specified_examples)
- specified_examples.each do |specified_example|
- return true if matches_literal_example?(specified_example) || matches_example_not_considering_modules?(specified_example)
+ specified_examples.any? do |specified_example|
+ matches_literal_example?(specified_example) || matches_example_not_considering_modules?(specified_example)
end
- false
end
-
+
protected
def matches_literal_example?(specified_example)
specified_example =~ /(^#{example_group_regex} #{example_regexp}$|^#{example_group_regex}$|^#{example_group_with_before_all_regexp}$|^#{example_regexp}$)/
@@ -35,8 +34,10 @@ module Spec
end
def example_regexp
- Regexp.escape(@example_name)
+ Regexp.escape(@example_name) if @example_name
end
end
+
+ ExampleGroupMethods.matcher_class = ExampleMatcher
end
end
diff --git a/vendor/plugins/rspec/lib/spec/example/example_methods.rb b/vendor/plugins/rspec/lib/spec/example/example_methods.rb
index d4d716c2d..ca81a9379 100644
--- a/vendor/plugins/rspec/lib/spec/example/example_methods.rb
+++ b/vendor/plugins/rspec/lib/spec/example/example_methods.rb
@@ -1,60 +1,80 @@
module Spec
module Example
module ExampleMethods
- extend ExampleGroupMethods
- extend ModuleReopeningFix
- include ModuleInclusionWarnings
-
- PENDING_EXAMPLE_BLOCK = lambda {
- raise Spec::Example::ExamplePendingError.new("Not Yet Implemented")
- }
+ extend Spec::Example::ModuleReopeningFix
+ include Spec::Example::Subject::ExampleMethods
+
+ def violated(message="")
+ raise Spec::Expectations::ExpectationNotMetError.new(message)
+ end
+
+ # Declared description for this example:
+ #
+ # describe Account do
+ # it "should start with a balance of 0" do
+ # ...
+ #
+ # description
+ # => "should start with a balance of 0"
+ def description
+ if description = @_proxy.description || ::Spec::Matchers.generated_description
+ description
+ else
+ Spec.warn Spec::Example::NoDescriptionError.message("example", @_proxy.location)
+ end
+ end
+
+ def options # :nodoc:
+ @_proxy.options
+ end
- def execute(options, instance_variables)
- options.reporter.example_started(self)
+ def execute(run_options, instance_variables) # :nodoc:
+ run_options.reporter.example_started(@_proxy)
set_instance_variables_from_hash(instance_variables)
-
+
execution_error = nil
- Timeout.timeout(options.timeout) do
+ Timeout.timeout(run_options.timeout) do
begin
- before_example
- run_with_description_capturing
+ before_each_example
+ instance_eval(&@_implementation)
rescue Exception => e
execution_error ||= e
end
begin
- after_example
+ after_each_example
rescue Exception => e
execution_error ||= e
end
end
- options.reporter.example_finished(self, execution_error)
+ run_options.reporter.example_finished(@_proxy.update(description), execution_error)
success = execution_error.nil? || ExamplePendingError === execution_error
end
- def instance_variable_hash
- instance_variables.inject({}) do |variable_hash, variable_name|
- variable_hash[variable_name] = instance_variable_get(variable_name)
- variable_hash
- end
+ module BlockAliases
+ alias_method :to, :should
+ alias_method :to_not, :should_not
end
- def violated(message="")
- raise Spec::Expectations::ExpectationNotMetError.new(message)
+ # Extends the submitted block with aliases to and to_not
+ # for should and should_not. Allows expectations like this:
+ #
+ # expect { this_block }.to change{this.expression}.from(old_value).to(new_value)
+ # expect { this_block }.to raise_error
+ def expect(&block)
+ block.extend BlockAliases
end
- def eval_each_fail_fast(procs) #:nodoc:
- procs.each do |proc|
- instance_eval(&proc)
- end
+ def eval_each_fail_fast(blocks) # :nodoc:
+ blocks.each {|block| instance_eval(&block)}
end
- def eval_each_fail_slow(procs) #:nodoc:
+ def eval_each_fail_slow(blocks) # :nodoc:
first_exception = nil
- procs.each do |proc|
+ blocks.each do |block|
begin
- instance_eval(&proc)
+ instance_eval(&block)
rescue Exception => e
first_exception ||= e
end
@@ -62,51 +82,67 @@ module Spec
raise first_exception if first_exception
end
- def description
- @_defined_description || @_matcher_description || "NO NAME"
+ def instance_variable_hash # :nodoc:
+ instance_variables.inject({}) do |variable_hash, variable_name|
+ variable_hash[variable_name] = instance_variable_get(variable_name)
+ variable_hash
+ end
end
- def __full_description
- "#{self.class.description} #{self.description}"
- end
-
- def set_instance_variables_from_hash(ivars)
+ def set_instance_variables_from_hash(ivars) # :nodoc:
ivars.each do |variable_name, value|
# Ruby 1.9 requires variable.to_s on the next line
- unless ['@_implementation', '@_defined_description', '@_matcher_description', '@method_name'].include?(variable_name.to_s)
+ unless ['@_proxy', '@_implementation', '@method_name'].include?(variable_name.to_s)
instance_variable_set variable_name, value
end
end
end
- def run_with_description_capturing
- begin
- return instance_eval(&(@_implementation || PENDING_EXAMPLE_BLOCK))
- ensure
- @_matcher_description = Spec::Matchers.generated_description
- Spec::Matchers.clear_generated_description
- end
+ # Run all the before(:each) blocks for this example
+ def run_before_each
+ example_group_hierarchy.run_before_each(self)
end
- def implementation_backtrace
- eval("caller", @_implementation)
+ # Run all the after(:each) blocks for this example
+ def run_after_each
+ example_group_hierarchy.run_after_each(self)
+ end
+
+ def initialize(example_proxy, &implementation)
+ @_proxy = example_proxy
+ @_implementation = implementation
+ @_backtrace = caller
end
- protected
+ private
+
include Matchers
include Pending
-
- def before_example
+
+ def before_each_example
setup_mocks_for_rspec
- self.class.run_before_each(self)
+ run_before_each
end
- def after_example
- self.class.run_after_each(self)
+ def after_each_example
+ run_after_each
verify_mocks_for_rspec
ensure
teardown_mocks_for_rspec
end
+
+ def described_class
+ self.class.described_class
+ end
+
+ def description_args
+ self.class.description_args
+ end
+
+ def example_group_hierarchy
+ self.class.example_group_hierarchy
+ end
+
end
end
-end \ No newline at end of file
+end
diff --git a/vendor/plugins/rspec/lib/spec/example/module_inclusion_warnings.rb b/vendor/plugins/rspec/lib/spec/example/module_inclusion_warnings.rb
deleted file mode 100644
index c65faf2dd..000000000
--- a/vendor/plugins/rspec/lib/spec/example/module_inclusion_warnings.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module Spec
- module Example
- # In the future, modules will no longer be automatically included
- # in the Example Group (based on the description name); when that
- # time comes, this code should be removed.
- module ModuleInclusionWarnings
- # Thanks, Francis Hwang.
- class MethodDispatcher
- def initialize(mod, target=nil)
- @mod = mod
- @target = target
- end
-
- def respond_to?(sym)
- @mod && @mod.instance_methods.include?(sym.to_s)
- end
-
- def call(sym, *args, &blk)
- Kernel.warn("Modules will no longer be automatically included in RSpec version 1.1.4. Called from #{caller[2]}")
- @target.extend @mod
- @target.send(sym, *args, &blk)
- end
- end
-
- def respond_to?(sym)
- MethodDispatcher.new(self.class.described_module).respond_to?(sym) ? true : super
- end
-
- private
-
- def method_missing(sym, *args, &blk)
- md = MethodDispatcher.new(self.class.described_module, self)
- self.respond_to?(sym) ? md.call(sym, *args, &blk) : super
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/example/module_reopening_fix.rb b/vendor/plugins/rspec/lib/spec/example/module_reopening_fix.rb
index dc01dd666..9ea088a2e 100644
--- a/vendor/plugins/rspec/lib/spec/example/module_reopening_fix.rb
+++ b/vendor/plugins/rspec/lib/spec/example/module_reopening_fix.rb
@@ -1,6 +1,28 @@
module Spec
module Example
- # This is a fix for ...Something in Ruby 1.8.6??... (Someone fill in here please - Aslak)
+ # When you reopen a module that is included in another module that is included in a class,
+ # the new material you define does not make it to the class. This fixes that.
+ #
+ # == Example
+ #
+ # module M1; end
+ #
+ # module M2
+ # def foo; "FOO"; end
+ # end
+ #
+ # class C
+ # include M1
+ # end
+ #
+ # module M1
+ # include M2
+ # end
+ #
+ # c = C.new
+ # c.foo
+ # NoMethodError: undefined method `foo' for #<C:0x5e89a4>
+ # from (irb):12
module ModuleReopeningFix
def child_modules
@child_modules ||= []
@@ -18,4 +40,4 @@ module Spec
end
end
end
-end \ No newline at end of file
+end
diff --git a/vendor/plugins/rspec/lib/spec/example/pending.rb b/vendor/plugins/rspec/lib/spec/example/pending.rb
index b1f27c866..9aad1aab0 100644
--- a/vendor/plugins/rspec/lib/spec/example/pending.rb
+++ b/vendor/plugins/rspec/lib/spec/example/pending.rb
@@ -1,11 +1,11 @@
module Spec
- module Example
+ module Example
module Pending
def pending(message = "TODO")
if block_given?
begin
yield
- rescue Exception => e
+ rescue Exception
raise Spec::Example::ExamplePendingError.new(message)
end
raise Spec::Example::PendingExampleFixedError.new("Expected pending '#{message}' to fail. No Error was raised.")
diff --git a/vendor/plugins/rspec/lib/spec/example/shared_example_group.rb b/vendor/plugins/rspec/lib/spec/example/shared_example_group.rb
index a6fd6211c..336944914 100644
--- a/vendor/plugins/rspec/lib/spec/example/shared_example_group.rb
+++ b/vendor/plugins/rspec/lib/spec/example/shared_example_group.rb
@@ -1,58 +1,59 @@
module Spec
module Example
class SharedExampleGroup < Module
- class << self
- def add_shared_example_group(new_example_group)
- guard_against_redefining_existing_example_group(new_example_group)
- shared_example_groups << new_example_group
+ module ClassMethods
+ def register(*args, &block)
+ new_example_group = new(*args, &block)
+ shared_example_groups << new_example_group unless already_registered?(new_example_group)
+ new_example_group
end
- def find_shared_example_group(example_group_description)
- shared_example_groups.find do |b|
- b.description == example_group_description
- end
+ def find(example_group_description)
+ shared_example_groups.find {|b| b.description == example_group_description}
end
+ def clear
+ shared_example_groups.clear
+ end
+
+ def include?(group)
+ shared_example_groups.include?(group)
+ end
+
+ def count
+ shared_example_groups.length
+ end
+
+ private
+
def shared_example_groups
- # TODO - this needs to be global, or at least accessible from
- # from subclasses of Example in a centralized place. I'm not loving
- # this as a solution, but it works for now.
- $shared_example_groups ||= []
- end
-
- private
- def guard_against_redefining_existing_example_group(new_example_group)
- existing_example_group = find_shared_example_group(new_example_group.description)
- return unless existing_example_group
- return if new_example_group.equal?(existing_example_group)
- return if spec_path(new_example_group) == spec_path(existing_example_group)
+ @shared_example_groups ||= []
+ end
+
+ def already_registered?(new_example_group)
+ existing_example_group = find(new_example_group.description)
+ return false unless existing_example_group
+ return true if new_example_group.equal?(existing_example_group)
+ return true if expanded_path(new_example_group) == expanded_path(existing_example_group)
raise ArgumentError.new("Shared Example '#{existing_example_group.description}' already exists")
end
- def spec_path(example_group)
- File.expand_path(example_group.spec_path)
+ def expanded_path(example_group)
+ File.expand_path(example_group.location)
end
end
+
+ extend ClassMethods
include ExampleGroupMethods
- public :include
def initialize(*args, &example_group_block)
- describe(*args)
+ set_description(*args)
@example_group_block = example_group_block
- self.class.add_shared_example_group(self)
end
def included(mod) # :nodoc:
mod.module_eval(&@example_group_block)
end
-
- def execute_in_class_hierarchy(superclass_last=false)
- classes = [self]
- superclass_last ? classes << ExampleMethods : classes.unshift(ExampleMethods)
- classes.each do |example_group|
- yield example_group
- end
- end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/expectations.rb b/vendor/plugins/rspec/lib/spec/expectations.rb
index 65ea47425..13cf59b26 100644
--- a/vendor/plugins/rspec/lib/spec/expectations.rb
+++ b/vendor/plugins/rspec/lib/spec/expectations.rb
@@ -1,4 +1,5 @@
require 'spec/matchers'
+require 'spec/expectations/fail_with'
require 'spec/expectations/errors'
require 'spec/expectations/extensions'
require 'spec/expectations/handler'
@@ -30,27 +31,5 @@ module Spec
# RSpec ships with a standard set of useful matchers, and writing your own
# matchers is quite simple. See Spec::Matchers for details.
module Expectations
- class << self
- attr_accessor :differ
-
- # raises a Spec::Expectations::ExpectationNotMetError with message
- #
- # When a differ has been assigned and fail_with is passed
- # <code>expected</code> and <code>target</code>, passes them
- # to the differ to append a diff message to the failure message.
- def fail_with(message, expected=nil, target=nil) # :nodoc:
- if Array === message && message.length == 3
- message, expected, target = message[0], message[1], message[2]
- end
- unless (differ.nil? || expected.nil? || target.nil?)
- if expected.is_a?(String)
- message << "\nDiff:" << self.differ.diff_as_string(target.to_s, expected)
- elsif !target.is_a?(Proc)
- message << "\nDiff:" << self.differ.diff_as_object(target, expected)
- end
- end
- Kernel::raise(Spec::Expectations::ExpectationNotMetError.new(message))
- end
- end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/expectations/differs/default.rb b/vendor/plugins/rspec/lib/spec/expectations/differs/default.rb
deleted file mode 100644
index 74b59bbe3..000000000
--- a/vendor/plugins/rspec/lib/spec/expectations/differs/default.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-begin
- require 'rubygems'
- require 'diff/lcs' #necessary due to loading bug on some machines - not sure why - DaC
- require 'diff/lcs/hunk'
-rescue LoadError ; raise "You must gem install diff-lcs to use diffing" ; end
-
-require 'pp'
-
-module Spec
- module Expectations
- module Differs
-
- # TODO add some rdoc
- class Default
- def initialize(options)
- @options = options
- end
-
- # This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)
- def diff_as_string(data_new, data_old)
- data_old = data_old.split(/\n/).map! { |e| e.chomp }
- data_new = data_new.split(/\n/).map! { |e| e.chomp }
- output = ""
- diffs = Diff::LCS.diff(data_old, data_new)
- return output if diffs.empty?
- oldhunk = hunk = nil
- file_length_difference = 0
- diffs.each do |piece|
- begin
- hunk = Diff::LCS::Hunk.new(data_old, data_new, piece, context_lines,
- file_length_difference)
- file_length_difference = hunk.file_length_difference
- next unless oldhunk
- # Hunks may overlap, which is why we need to be careful when our
- # diff includes lines of context. Otherwise, we might print
- # redundant lines.
- if (context_lines > 0) and hunk.overlaps?(oldhunk)
- hunk.unshift(oldhunk)
- else
- output << oldhunk.diff(format)
- end
- ensure
- oldhunk = hunk
- output << "\n"
- end
- end
- #Handle the last remaining hunk
- output << oldhunk.diff(format) << "\n"
- end
-
- def diff_as_object(target,expected)
- diff_as_string(PP.pp(target,""), PP.pp(expected,""))
- end
-
- protected
- def format
- @options.diff_format
- end
-
- def context_lines
- @options.context_lines
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/expectations/extensions.rb b/vendor/plugins/rspec/lib/spec/expectations/extensions.rb
index 60c9b9e7d..d68212e42 100644
--- a/vendor/plugins/rspec/lib/spec/expectations/extensions.rb
+++ b/vendor/plugins/rspec/lib/spec/expectations/extensions.rb
@@ -1,2 +1 @@
-require 'spec/expectations/extensions/object'
-require 'spec/expectations/extensions/string_and_symbol'
+require 'spec/expectations/extensions/kernel'
diff --git a/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb b/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb
deleted file mode 100644
index 2091c2947..000000000
--- a/vendor/plugins/rspec/lib/spec/expectations/extensions/object.rb
+++ /dev/null
@@ -1,63 +0,0 @@
-module Spec
- module Expectations
- # rspec adds #should and #should_not to every Object (and,
- # implicitly, every Class).
- module ObjectExpectations
- # :call-seq:
- # should(matcher)
- # should == expected
- # should === expected
- # should =~ expected
- #
- # receiver.should(matcher)
- # => Passes if matcher.matches?(receiver)
- #
- # receiver.should == expected #any value
- # => Passes if (receiver == expected)
- #
- # receiver.should === expected #any value
- # => Passes if (receiver === expected)
- #
- # receiver.should =~ regexp
- # => Passes if (receiver =~ regexp)
- #
- # See Spec::Matchers for more information about matchers
- #
- # == Warning
- #
- # NOTE that this does NOT support receiver.should != expected.
- # Instead, use receiver.should_not == expected
- def should(matcher=:use_operator_matcher, &block)
- ExpectationMatcherHandler.handle_matcher(self, matcher, &block)
- end
-
- # :call-seq:
- # should_not(matcher)
- # should_not == expected
- # should_not === expected
- # should_not =~ expected
- #
- # receiver.should_not(matcher)
- # => Passes unless matcher.matches?(receiver)
- #
- # receiver.should_not == expected
- # => Passes unless (receiver == expected)
- #
- # receiver.should_not === expected
- # => Passes unless (receiver === expected)
- #
- # receiver.should_not =~ regexp
- # => Passes unless (receiver =~ regexp)
- #
- # See Spec::Matchers for more information about matchers
- def should_not(matcher=:use_operator_matcher, &block)
- NegativeExpectationMatcherHandler.handle_matcher(self, matcher, &block)
- end
-
- end
- end
-end
-
-class Object
- include Spec::Expectations::ObjectExpectations
-end
diff --git a/vendor/plugins/rspec/lib/spec/expectations/extensions/string_and_symbol.rb b/vendor/plugins/rspec/lib/spec/expectations/extensions/string_and_symbol.rb
deleted file mode 100644
index 29cfbddfa..000000000
--- a/vendor/plugins/rspec/lib/spec/expectations/extensions/string_and_symbol.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-module Spec
- module Expectations
- module StringHelpers
- def starts_with?(prefix)
- to_s[0..(prefix.to_s.length - 1)] == prefix.to_s
- end
- end
- end
-end
-
-class String
- include Spec::Expectations::StringHelpers
-end
-
-class Symbol
- include Spec::Expectations::StringHelpers
-end
diff --git a/vendor/plugins/rspec/lib/spec/expectations/handler.rb b/vendor/plugins/rspec/lib/spec/expectations/handler.rb
index 2e5f2a621..c059637c7 100644
--- a/vendor/plugins/rspec/lib/spec/expectations/handler.rb
+++ b/vendor/plugins/rspec/lib/spec/expectations/handler.rb
@@ -2,59 +2,49 @@ module Spec
module Expectations
class InvalidMatcherError < ArgumentError; end
- module MatcherHandlerHelper
- def describe_matcher(matcher)
- matcher.respond_to?(:description) ? matcher.description : "[#{matcher.class.name} does not provide a description]"
- end
- end
-
- class ExpectationMatcherHandler
- class << self
- include MatcherHandlerHelper
- def handle_matcher(actual, matcher, &block)
- if :use_operator_matcher == matcher
- return Spec::Matchers::PositiveOperatorMatcher.new(actual)
- end
+ class PositiveExpectationHandler
+ def self.handle_matcher(actual, matcher, message=nil, &block)
+ ::Spec::Matchers.last_should = :should
+ ::Spec::Matchers.last_matcher = matcher
+ return ::Spec::Matchers::PositiveOperatorMatcher.new(actual) if matcher.nil?
- unless matcher.respond_to?(:matches?)
- raise InvalidMatcherError, "Expected a matcher, got #{matcher.inspect}."
- end
-
- match = matcher.matches?(actual, &block)
- ::Spec::Matchers.generated_description = "should #{describe_matcher(matcher)}"
- Spec::Expectations.fail_with(matcher.failure_message) unless match
+ match = matcher.matches?(actual, &block)
+ return match if match
+
+ message ||= matcher.respond_to?(:failure_message_for_should) ?
+ matcher.failure_message_for_should :
+ matcher.failure_message
+
+ if matcher.respond_to?(:diffable?) && matcher.diffable?
+ ::Spec::Expectations.fail_with message, matcher.expected.first, matcher.actual
+ else
+ ::Spec::Expectations.fail_with message
end
end
end
- class NegativeExpectationMatcherHandler
- class << self
- include MatcherHandlerHelper
- def handle_matcher(actual, matcher, &block)
- if :use_operator_matcher == matcher
- return Spec::Matchers::NegativeOperatorMatcher.new(actual)
- end
-
- unless matcher.respond_to?(:matches?)
- raise InvalidMatcherError, "Expected a matcher, got #{matcher.inspect}."
- end
+ class NegativeExpectationHandler
+ def self.handle_matcher(actual, matcher, message=nil, &block)
+ ::Spec::Matchers.last_should = :should_not
+ ::Spec::Matchers.last_matcher = matcher
+ return ::Spec::Matchers::NegativeOperatorMatcher.new(actual) if matcher.nil?
+
+ match = matcher.respond_to?(:does_not_match?) ?
+ !matcher.does_not_match?(actual, &block) :
+ matcher.matches?(actual, &block)
+ return match unless match
+
+ message ||= matcher.respond_to?(:failure_message_for_should_not) ?
+ matcher.failure_message_for_should_not :
+ matcher.negative_failure_message
- unless matcher.respond_to?(:negative_failure_message)
- Spec::Expectations.fail_with(
-<<-EOF
-Matcher does not support should_not.
-See Spec::Matchers for more information
-about matchers.
-EOF
-)
- end
- match = matcher.matches?(actual, &block)
- ::Spec::Matchers.generated_description = "should not #{describe_matcher(matcher)}"
- Spec::Expectations.fail_with(matcher.negative_failure_message) if match
+ if matcher.respond_to?(:diffable?) && matcher.diffable?
+ ::Spec::Expectations.fail_with message, matcher.expected.first, matcher.actual
+ else
+ ::Spec::Expectations.fail_with message
end
end
end
-
end
end
diff --git a/vendor/plugins/rspec/lib/spec/extensions.rb b/vendor/plugins/rspec/lib/spec/extensions.rb
deleted file mode 100755
index 715bb49f2..000000000
--- a/vendor/plugins/rspec/lib/spec/extensions.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'spec/extensions/object'
-require 'spec/extensions/class'
-require 'spec/extensions/main'
-require 'spec/extensions/metaclass'
diff --git a/vendor/plugins/rspec/lib/spec/extensions/class.rb b/vendor/plugins/rspec/lib/spec/extensions/class.rb
deleted file mode 100644
index 30730f87e..000000000
--- a/vendor/plugins/rspec/lib/spec/extensions/class.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-class Class
- # Creates a new subclass of self, with a name "under" our own name.
- # Example:
- #
- # x = Foo::Bar.subclass('Zap'){}
- # x.name # => Foo::Bar::Zap_1
- # x.superclass.name # => Foo::Bar
- def subclass(base_name, &body)
- klass = Class.new(self)
- class_name = "#{base_name}_#{class_count!}"
- instance_eval do
- const_set(class_name, klass)
- end
- klass.instance_eval(&body)
- klass
- end
-
- private
- def class_count!
- @class_count ||= 0
- @class_count += 1
- @class_count
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/lib/spec/extensions/main.rb b/vendor/plugins/rspec/lib/spec/extensions/main.rb
deleted file mode 100644
index 281cbf879..000000000
--- a/vendor/plugins/rspec/lib/spec/extensions/main.rb
+++ /dev/null
@@ -1,102 +0,0 @@
-module Spec
- module Extensions
- module Main
- # Creates and returns a class that includes the ExampleGroupMethods
- # module. Which ExampleGroup type is created depends on the directory of the file
- # calling this method. For example, Spec::Rails will use different
- # classes for specs living in <tt>spec/models</tt>,
- # <tt>spec/helpers</tt>, <tt>spec/views</tt> and
- # <tt>spec/controllers</tt>.
- #
- # It is also possible to override autodiscovery of the example group
- # type with an options Hash as the last argument:
- #
- # describe "name", :type => :something_special do ...
- #
- # The reason for using different behaviour classes is to have different
- # matcher methods available from within the <tt>describe</tt> block.
- #
- # See Spec::Example::ExampleFactory#register for details about how to
- # register special implementations.
- #
- def describe(*args, &block)
- raise ArgumentError if args.empty?
- raise ArgumentError unless block
- args << {} unless Hash === args.last
- args.last[:spec_path] = caller(0)[1]
- Spec::Example::ExampleGroupFactory.create_example_group(*args, &block)
- end
- alias :context :describe
-
- # Creates an example group that can be shared by other example groups
- #
- # == Examples
- #
- # share_examples_for "All Editions" do
- # it "all editions behaviour" ...
- # end
- #
- # describe SmallEdition do
- # it_should_behave_like "All Editions"
- #
- # it "should do small edition stuff" do
- # ...
- # end
- # end
- def share_examples_for(name, &block)
- describe(name, :shared => true, &block)
- end
-
- alias :shared_examples_for :share_examples_for
-
- # Creates a Shared Example Group and assigns it to a constant
- #
- # share_as :AllEditions do
- # it "should do all editions stuff" ...
- # end
- #
- # describe SmallEdition do
- # it_should_behave_like AllEditions
- #
- # it "should do small edition stuff" do
- # ...
- # end
- # end
- #
- # And, for those of you who prefer to use something more like Ruby, you
- # can just include the module directly
- #
- # describe SmallEdition do
- # include AllEditions
- #
- # it "should do small edition stuff" do
- # ...
- # end
- # end
- def share_as(name, &block)
- begin
- Object.const_set(name, share_examples_for(name, &block))
- rescue NameError => e
- raise NameError.new(e.message + "\nThe first argument to share_as must be a legal name for a constant\n")
- end
- end
-
- private
-
- def rspec_options
- $rspec_options ||= begin; \
- parser = ::Spec::Runner::OptionParser.new(STDERR, STDOUT); \
- parser.order!(ARGV); \
- $rspec_options = parser.options; \
- end
- $rspec_options
- end
-
- def init_rspec_options(options)
- $rspec_options = options if $rspec_options.nil?
- end
- end
- end
-end
-
-include Spec::Extensions::Main \ No newline at end of file
diff --git a/vendor/plugins/rspec/lib/spec/extensions/metaclass.rb b/vendor/plugins/rspec/lib/spec/extensions/metaclass.rb
deleted file mode 100644
index acf9febea..000000000
--- a/vendor/plugins/rspec/lib/spec/extensions/metaclass.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-module Spec
- module MetaClass
- def metaclass
- class << self; self; end
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/lib/spec/extensions/object.rb b/vendor/plugins/rspec/lib/spec/extensions/object.rb
deleted file mode 100755
index 0b8c26fa2..000000000
--- a/vendor/plugins/rspec/lib/spec/extensions/object.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-class Object
- def args_and_options(*args)
- options = Hash === args.last ? args.pop : {}
- return args, options
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/interop/test.rb b/vendor/plugins/rspec/lib/spec/interop/test.rb
index afa16137b..284eb32ce 100644
--- a/vendor/plugins/rspec/lib/spec/interop/test.rb
+++ b/vendor/plugins/rspec/lib/spec/interop/test.rb
@@ -1,4 +1,36 @@
+require 'spec'
+
+if Spec::Ruby.version.to_f >= 1.9
+ gem 'test-unit','= 1.2.3'
+end
+
require 'test/unit'
+
+if Spec::Ruby.version.to_f >= 1.9
+ require 'test/unit/version'
+ if Test::Unit::VERSION > '1.2.3'
+ raise <<-MESSAGE
+#{'*' * 50}
+Required: test-unit-1.2.3
+Loaded: test-unit-#{Test::Unit::VERSION}
+
+With ruby-1.9, rspec-#{Spec::VERSION::STRING} requires test-unit-1.2.3, and
+tries to force it with "gem 'test-unit', '= 1.2.3'" in:
+
+ #{__FILE__}
+
+Unfortunately, test-unit-#{Test::Unit::VERSION} was loaded anyway. While we are
+aware of this bug we have not been able to track down its source.
+Until we do, you have two alternatives:
+
+* uninstall test-unit-2.0.3
+* use 'script/spec' instead of 'rake spec'
+#{'*' * 50}
+MESSAGE
+ end
+end
+
+
require 'test/unit/testresult'
require 'spec/interop/test/unit/testcase'
diff --git a/vendor/plugins/rspec/lib/spec/interop/test/unit/testcase.rb b/vendor/plugins/rspec/lib/spec/interop/test/unit/testcase.rb
index b32a820c1..dc10a2a64 100644
--- a/vendor/plugins/rspec/lib/spec/interop/test/unit/testcase.rb
+++ b/vendor/plugins/rspec/lib/spec/interop/test/unit/testcase.rb
@@ -5,8 +5,7 @@ module Test
# This extension of the standard Test::Unit::TestCase makes RSpec
# available from within, so that you can do things like:
#
- # require 'test/unit'
- # require 'spec'
+ # require 'spec/test/unit'
#
# class MyTest < Test::Unit::TestCase
# it "should work with Test::Unit assertions" do
@@ -23,39 +22,35 @@ module Test
extend Spec::Example::ExampleGroupMethods
include Spec::Example::ExampleMethods
- before(:each) {setup}
- after(:each) {teardown}
+ def self.suite
+ Test::Unit::TestSuiteAdapter.new(self)
+ end
- class << self
- def suite
- Test::Unit::TestSuiteAdapter.new(self)
- end
-
- def example_method?(method_name)
- should_method?(method_name) || test_method?(method_name)
- end
-
- def test_method?(method_name)
- method_name =~ /^test[_A-Z]./ && (
- instance_method(method_name).arity == 0 ||
- instance_method(method_name).arity == -1
- )
- end
+ def self.example_method?(method_name)
+ should_method?(method_name) || test_method?(method_name)
end
- def initialize(defined_description, &implementation)
- @_defined_description = defined_description
- @_implementation = implementation
+ def self.test_method?(method_name)
+ method_name =~ /^test./ && (
+ instance_method(method_name).arity == 0 ||
+ instance_method(method_name).arity == -1
+ )
+ end
- @_result = ::Test::Unit::TestResult.new
- # @method_name is important to set here because it "complies" with Test::Unit's interface.
+ before(:each) {setup}
+ after(:each) {teardown}
+
+ def initialize(description, &implementation)
+ super
# Some Test::Unit extensions depend on @method_name being present.
- @method_name = @_defined_description
+ @method_name = description.description
+ @_result = ::Test::Unit::TestResult.new
end
def run(ignore_this_argument=nil)
super()
end
+
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/interop/test/unit/testresult.rb b/vendor/plugins/rspec/lib/spec/interop/test/unit/testresult.rb
index 1386dc728..dddcfe868 100644
--- a/vendor/plugins/rspec/lib/spec/interop/test/unit/testresult.rb
+++ b/vendor/plugins/rspec/lib/spec/interop/test/unit/testresult.rb
@@ -1,6 +1,6 @@
class Test::Unit::TestResult
alias_method :tu_passed?, :passed?
def passed?
- return tu_passed? & ::Spec.run
+ return tu_passed? & ::Spec::Runner.run
end
end \ No newline at end of file
diff --git a/vendor/plugins/rspec/lib/spec/interop/test/unit/testsuite_adapter.rb b/vendor/plugins/rspec/lib/spec/interop/test/unit/testsuite_adapter.rb
index 7c0ed092d..912762f18 100644
--- a/vendor/plugins/rspec/lib/spec/interop/test/unit/testsuite_adapter.rb
+++ b/vendor/plugins/rspec/lib/spec/interop/test/unit/testsuite_adapter.rb
@@ -14,7 +14,7 @@ module Test
def run(*args)
return true unless args.empty?
- example_group.run
+ example_group.run(Spec::Runner.options)
end
def size
diff --git a/vendor/plugins/rspec/lib/spec/matchers.rb b/vendor/plugins/rspec/lib/spec/matchers.rb
index afae5ae5f..4ef832936 100644
--- a/vendor/plugins/rspec/lib/spec/matchers.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers.rb
@@ -1,19 +1,31 @@
-require 'spec/matchers/simple_matcher'
+require 'spec/matchers/extensions/instance_exec'
+require 'spec/matchers/pretty'
+require 'spec/matchers/matcher'
+require 'spec/matchers/operator_matcher'
require 'spec/matchers/be'
require 'spec/matchers/be_close'
+require 'spec/matchers/be_instance_of'
+require 'spec/matchers/be_kind_of'
require 'spec/matchers/change'
require 'spec/matchers/eql'
require 'spec/matchers/equal'
+require 'spec/matchers/errors'
require 'spec/matchers/exist'
+require 'spec/matchers/generated_descriptions'
require 'spec/matchers/has'
require 'spec/matchers/have'
require 'spec/matchers/include'
require 'spec/matchers/match'
+require 'spec/matchers/match_array'
+require 'spec/matchers/method_missing'
require 'spec/matchers/raise_error'
require 'spec/matchers/respond_to'
require 'spec/matchers/satisfy'
+require 'spec/matchers/simple_matcher'
require 'spec/matchers/throw_symbol'
-require 'spec/matchers/operator_matcher'
+require 'spec/matchers/wrap_expectation'
+require 'spec/matchers/compatibility'
+require 'spec/matchers/dsl'
module Spec
@@ -21,12 +33,21 @@ module Spec
# is any object that responds to the following methods:
#
# matches?(actual)
- # failure_message
- # negative_failure_message #optional
+ # failure_message_for_should
+ #
+ # These methods are also part of the matcher protocol, but are optional:
+ #
+ # does_not_match?(actual)
+ # failure_message_for_should_not
# description #optional
#
+ # These methods are from older versions of the protocol. They are still supported,
+ # but are not recommended:
+ #
+ # failure_message (use failure_message_for_should instead)
+ # negative_failure_message (use failure_message_for_should_not instead)
+ #
# See Spec::Expectations to learn how to use these as Expectation Matchers.
- # See Spec::Mocks to learn how to use them as Mock Argument Constraints.
#
# == Predicates
#
@@ -63,14 +84,17 @@ module Spec
# You can use this feature to invoke any predicate that begins with "has_", whether it is
# part of the Ruby libraries (like +Hash#has_key?+) or a method you wrote on your own class.
#
- # == Custom Expectation Matchers
+ # == Custom Matchers
#
# When you find that none of the stock Expectation Matchers provide a natural
- # feeling expectation, you can very easily write your own.
+ # feeling expectation, you can very easily write your own using RSpec's matcher
+ # DSL or writing one from scratch.
+ #
+ # === Matcher DSL
#
- # For example, imagine that you are writing a game in which players can
- # be in various zones on a virtual board. To specify that bob should
- # be in zone 4, you could say:
+ # Imagine that you are writing a game in which players can be in various
+ # zones on a virtual board. To specify that bob should be in zone 4, you
+ # could say:
#
# bob.current_zone.should eql(Zone.new("4"))
#
@@ -82,7 +106,42 @@ module Spec
#
# bob.should_not be_in_zone("3")
#
- # To do this, you would need to write a class like this:
+ # You can create such a matcher like so:
+ #
+ # Spec::Matchers.define :be_in_zone do |zone|
+ # match do |player|
+ # player.in_zone?(zone)
+ # end
+ # end
+ #
+ # This will generate a <tt>be_in_zone</tt> method that returns a matcher
+ # with logical default messages for failures. You can override the failure
+ # messages and the generated description as follows:
+ #
+ # Spec::Matchers.define :be_in_zone do |zone|
+ # match do |player|
+ # player.in_zone?(zone)
+ # end
+ # failure_message_for_should do |player|
+ # # generate and return the appropriate string.
+ # end
+ # failure_message_for_should_not do |player|
+ # # generate and return the appropriate string.
+ # end
+ # description do
+ # # generate and return the appropriate string.
+ # end
+ # end
+ #
+ # Each of the message-generation methods has access to the block arguments
+ # passed to the <tt>create</tt> method (in this case, <tt>zone</tt>). The
+ # failure message methods (<tt>failure_message_for_should</tt> and
+ # <tt>failure_message_for_should_not</tt>) are passed the actual value (the
+ # receiver of <tt>should</tt> or <tt>should_not</tt>).
+ #
+ # === Custom Matcher from scratch
+ #
+ # You could also write a custom matcher from scratch, as follows:
#
# class BeInZone
# def initialize(expected)
@@ -92,10 +151,10 @@ module Spec
# @target = target
# @target.current_zone.eql?(Zone.new(@expected))
# end
- # def failure_message
+ # def failure_message_for_should
# "expected #{@target.inspect} to be in Zone #{@expected}"
# end
- # def negative_failure_message
+ # def failure_message_for_should_not
# "expected #{@target.inspect} not to be in Zone #{@expected}"
# end
# end
@@ -132,25 +191,5 @@ module Spec
# config.include(CustomGameMatchers)
# end
#
- module Matchers
- module ModuleMethods
- attr_accessor :generated_description
-
- def clear_generated_description
- self.generated_description = nil
- end
- end
-
- extend ModuleMethods
-
- def method_missing(sym, *args, &block) # :nodoc:
- return Matchers::Be.new(sym, *args) if sym.starts_with?("be_")
- return Matchers::Has.new(sym, *args) if sym.starts_with?("have_")
- super
- end
-
- class MatcherError < StandardError
- end
-
- end
+ module Matchers; end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/be.rb b/vendor/plugins/rspec/lib/spec/matchers/be.rb
index 2b25b11f4..242f7c5c9 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/be.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/be.rb
@@ -2,142 +2,130 @@ module Spec
module Matchers
class Be #:nodoc:
+ include Spec::Matchers::Pretty
+
def initialize(*args)
- if args.empty?
- @expected = :satisfy_if
- else
- @expected = parse_expected(args.shift)
- end
+ @expected = args.empty? ? true : set_expected(args.shift)
@args = args
- @comparison = ""
+ @comparison_method = nil
end
def matches?(actual)
@actual = actual
- if handling_predicate?
- begin
- return @result = actual.__send__(predicate, *@args)
- rescue => predicate_error
- # This clause should be empty, but rcov will not report it as covered
- # unless something (anything) is executed within the clause
- rcov_error_report = "http://eigenclass.org/hiki.rb?rcov-0.8.0"
- end
-
- # This supports should_exist > target.exists? in the old world.
- # We should consider deprecating that ability as in the new world
- # you can't write "should exist" unless you have your own custom matcher.
- begin
- return @result = actual.__send__(present_tense_predicate, *@args)
- rescue
- raise predicate_error
- end
- else
- return match_or_compare
- end
- end
-
- def failure_message
- return "expected #{@comparison}#{expected}, got #{@actual.inspect}" unless handling_predicate?
- return "expected #{predicate}#{args_to_s} to return true, got #{@result.inspect}"
+ handling_predicate? ? run_predicate_on(actual) : match_or_compare(actual)
end
- def negative_failure_message
- return "expected not #{expected}, got #{@actual.inspect}" unless handling_predicate?
- return "expected #{predicate}#{args_to_s} to return false, got #{@result.inspect}"
+ def run_predicate_on(actual)
+ begin
+ return @result = actual.__send__(predicate, *@args)
+ rescue NameError => predicate_missing_error
+ "this needs to be here or rcov will not count this branch even though it's executed in a code example"
+ end
+
+ begin
+ return @result = actual.__send__(present_tense_predicate, *@args)
+ rescue NameError
+ raise predicate_missing_error
+ end
end
- def expected
- return "if to be satisfied" if @expected == :satisfy_if
- return true if @expected == :true
- return false if @expected == :false
- return "nil" if @expected == :nil
- return @expected.inspect
+ def failure_message_for_should
+ if handling_predicate?
+ if predicate == :nil?
+ "expected nil, got #{@actual.inspect}"
+ else
+ "expected #{predicate}#{args_to_s} to return true, got #{@result.inspect}"
+ end
+ else
+ "expected #{@comparison_method} #{expected}, got #{@actual.inspect}".gsub(' ',' ')
+ end
end
- def match_or_compare
- return @actual ? true : false if @expected == :satisfy_if
- return @actual == true if @expected == :true
- return @actual == false if @expected == :false
- return @actual.nil? if @expected == :nil
- return @actual < @expected if @less_than
- return @actual <= @expected if @less_than_or_equal
- return @actual >= @expected if @greater_than_or_equal
- return @actual > @expected if @greater_than
- return @actual == @expected if @double_equal
- return @actual === @expected if @triple_equal
- return @actual.equal?(@expected)
+ def failure_message_for_should_not
+ if handling_predicate?
+ if predicate == :nil?
+ "expected not nil, got nil"
+ else
+ "expected #{predicate}#{args_to_s} to return false, got #{@result.inspect}"
+ end
+ else
+ message = <<-MESSAGE
+'should_not be #{@comparison_method} #{expected}' not only FAILED,
+it is a bit confusing.
+ MESSAGE
+
+ raise message << ([:===,:==].include?(@comparison_method) ?
+ "It might be more clearly expressed without the \"be\"?" :
+ "It might be more clearly expressed in the positive?")
+ end
end
- def ==(expected)
- @prefix = "be "
- @double_equal = true
- @comparison = "== "
- @expected = expected
- self
- end
-
- def ===(expected)
- @prefix = "be "
- @triple_equal = true
- @comparison = "=== "
- @expected = expected
- self
- end
-
- def <(expected)
- @prefix = "be "
- @less_than = true
- @comparison = "< "
- @expected = expected
- self
- end
-
- def <=(expected)
- @prefix = "be "
- @less_than_or_equal = true
- @comparison = "<= "
- @expected = expected
- self
+ def description
+ "#{prefix_to_sentence}#{comparison} #{expected_to_sentence}#{args_to_sentence}".gsub(/\s+/,' ')
end
- def >=(expected)
- @prefix = "be "
- @greater_than_or_equal = true
- @comparison = ">= "
- @expected = expected
- self
+ [:==, :<, :<=, :>=, :>, :===].each do |method|
+ define_method method do |expected|
+ compare_to(expected, :using => method)
+ self
+ end
end
- def >(expected)
- @prefix = "be "
- @greater_than = true
- @comparison = "> "
- @expected = expected
- self
- end
+ private
+ def match_or_compare(actual)
+ TrueClass === @expected ? @actual : @actual.__send__(comparison_method, @expected)
+ end
- def description
- "#{prefix_to_sentence}#{comparison}#{expected_to_sentence}#{args_to_sentence}"
- end
+ def comparison_method
+ @comparison_method || :equal?
+ end
+
+ def expected
+ @expected
+ end
- private
+ def compare_to(expected, opts)
+ @expected, @comparison_method = expected, opts[:using]
+ end
+
+ def set_expected(expected)
+ Symbol === expected ? parse_expected(expected) : expected
+ end
+
def parse_expected(expected)
- if Symbol === expected
- @handling_predicate = true
- ["be_an_","be_a_","be_"].each do |prefix|
- if expected.starts_with?(prefix)
- @prefix = prefix
- return "#{expected.to_s.sub(@prefix,"")}".to_sym
+ ["be_an_","be_a_","be_"].each do |prefix|
+ handling_predicate!
+ if expected.to_s =~ /^#{prefix}/
+ set_prefix(prefix)
+ expected = expected.to_s.sub(prefix,"")
+ [true, false, nil].each do |val|
+ return val if val.to_s == expected
end
+ return expected.to_sym
end
end
- @prefix = ""
- return expected
+ end
+
+ def set_prefix(prefix)
+ @prefix = prefix
+ end
+
+ def prefix
+ # FIXME - this is a bit goofy - but we get failures
+ # if just defining @prefix = nil in initialize
+ @prefix = nil unless defined?(@prefix)
+ @prefix
+ end
+
+ def handling_predicate!
+ @handling_predicate = true
end
def handling_predicate?
- return false if [:true, :false, :nil].include?(@expected)
- return @handling_predicate
+ return false if [true, false, nil].include?(expected)
+ # FIXME - this is a bit goofy - but we get failures
+ # if just defining @handling_predicate = nil or false in initialize
+ return defined?(@handling_predicate) ? @handling_predicate : nil
end
def predicate
@@ -149,50 +137,44 @@ module Spec
end
def args_to_s
- return "" if @args.empty?
- inspected_args = @args.collect{|a| a.inspect}
- return "(#{inspected_args.join(', ')})"
+ @args.empty? ? "" : parenthesize(inspected_args.join(', '))
+ end
+
+ def parenthesize(string)
+ return "(#{string})"
+ end
+
+ def inspected_args
+ @args.collect{|a| a.inspect}
end
def comparison
- @comparison
+ @comparison_method.nil? ? " " : "be #{@comparison_method.to_s} "
end
def expected_to_sentence
- split_words(@expected)
+ split_words(expected)
end
def prefix_to_sentence
- split_words(@prefix)
- end
-
- def split_words(sym)
- sym.to_s.gsub(/_/,' ')
+ split_words(prefix)
end
def args_to_sentence
- case @args.length
- when 0
- ""
- when 1
- " #{@args[0]}"
- else
- " #{@args[0...-1].join(', ')} and #{@args[-1]}"
- end
+ to_sentence(@args)
end
end
# :call-seq:
- # should be
# should be_true
# should be_false
# should be_nil
- # should be_arbitrary_predicate(*args)
+ # should be_[arbitrary_predicate](*args)
# should_not be_nil
- # should_not be_arbitrary_predicate(*args)
+ # should_not be_[arbitrary_predicate](*args)
#
- # Given true, false, or nil, will pass if actual is
+ # Given true, false, or nil, will pass if actual value is
# true, false or nil (respectively). Given no args means
# the caller should satisfy an if condition (to be or not to be).
#
@@ -206,19 +188,23 @@ module Spec
#
# == Examples
#
- # target.should be
# target.should be_true
# target.should be_false
# target.should be_nil
# target.should_not be_nil
#
# collection.should be_empty #passes if target.empty?
- # "this string".should be_an_intance_of(String)
- #
# target.should_not be_empty #passes unless target.empty?
# target.should_not be_old_enough(16) #passes unless target.old_enough?(16)
def be(*args)
Matchers::Be.new(*args)
end
+
+ # passes if target.kind_of?(klass)
+ def be_a(klass)
+ be_a_kind_of(klass)
+ end
+
+ alias_method :be_an, :be_a
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/be_close.rb b/vendor/plugins/rspec/lib/spec/matchers/be_close.rb
index 7763eb97e..28015f5fb 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/be_close.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/be_close.rb
@@ -1,26 +1,5 @@
module Spec
module Matchers
-
- class BeClose #:nodoc:
- def initialize(expected, delta)
- @expected = expected
- @delta = delta
- end
-
- def matches?(actual)
- @actual = actual
- (@actual - @expected).abs < @delta
- end
-
- def failure_message
- "expected #{@expected} +/- (< #{@delta}), got #{@actual}"
- end
-
- def description
- "be close to #{@expected} (within +- #{@delta})"
- end
- end
-
# :call-seq:
# should be_close(expected, delta)
# should_not be_close(expected, delta)
@@ -31,7 +10,23 @@ module Spec
#
# result.should be_close(3.0, 0.5)
def be_close(expected, delta)
- Matchers::BeClose.new(expected, delta)
+ Matcher.new :be_close, expected, delta do |_expected_, _delta_|
+ match do |actual|
+ (actual - _expected_).abs < _delta_
+ end
+
+ failure_message_for_should do |actual|
+ "expected #{_expected_} +/- (< #{_delta_}), got #{actual}"
+ end
+
+ failure_message_for_should_not do |actual|
+ "expected #{_expected_} +/- (< #{_delta_}), got #{actual}"
+ end
+
+ description do
+ "be close to #{_expected_} (within +- #{_delta_})"
+ end
+ end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/change.rb b/vendor/plugins/rspec/lib/spec/matchers/change.rb
index 8f4ecc187..c8ab9e5cf 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/change.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/change.rb
@@ -4,60 +4,59 @@ module Spec
#Based on patch from Wilson Bilkovich
class Change #:nodoc:
def initialize(receiver=nil, message=nil, &block)
- @receiver = receiver
- @message = message
- @block = block
+ @message = message || "result"
+ @value_proc = block || lambda {receiver.__send__(message)}
+ @to = @from = @minimum = @maximum = @amount = nil
end
- def matches?(target, &block)
- if block
- raise MatcherError.new(<<-EOF
-block passed to should or should_not change must use {} instead of do/end
-EOF
-)
- end
- @target = target
- execute_change
- return false if @from && (@from != @before)
- return false if @to && (@to != @after)
+ def matches?(event_proc)
+ raise_block_syntax_error if block_given?
+
+ @before = evaluate_value_proc
+ event_proc.call
+ @after = evaluate_value_proc
+
+ return (@to = false) if @from unless @from == @before
+ return false if @to unless @to == @after
return (@before + @amount == @after) if @amount
return ((@after - @before) >= @minimum) if @minimum
return ((@after - @before) <= @maximum) if @maximum
return @before != @after
end
- def execute_change
- @before = @block.nil? ? @receiver.send(@message) : @block.call
- @target.call
- @after = @block.nil? ? @receiver.send(@message) : @block.call
+ def raise_block_syntax_error
+ raise MatcherError.new(<<-MESSAGE
+block passed to should or should_not change must use {} instead of do/end
+MESSAGE
+ )
+ end
+
+ def evaluate_value_proc
+ @value_proc.call
end
- def failure_message
+ def failure_message_for_should
if @to
- "#{result} should have been changed to #{@to.inspect}, but is now #{@after.inspect}"
+ "#{@message} should have been changed to #{@to.inspect}, but is now #{@after.inspect}"
elsif @from
- "#{result} should have initially been #{@from.inspect}, but was #{@before.inspect}"
+ "#{@message} should have initially been #{@from.inspect}, but was #{@before.inspect}"
elsif @amount
- "#{result} should have been changed by #{@amount.inspect}, but was changed by #{actual_delta.inspect}"
+ "#{@message} should have been changed by #{@amount.inspect}, but was changed by #{actual_delta.inspect}"
elsif @minimum
- "#{result} should have been changed by at least #{@minimum.inspect}, but was changed by #{actual_delta.inspect}"
+ "#{@message} should have been changed by at least #{@minimum.inspect}, but was changed by #{actual_delta.inspect}"
elsif @maximum
- "#{result} should have been changed by at most #{@maximum.inspect}, but was changed by #{actual_delta.inspect}"
+ "#{@message} should have been changed by at most #{@maximum.inspect}, but was changed by #{actual_delta.inspect}"
else
- "#{result} should have changed, but is still #{@before.inspect}"
+ "#{@message} should have changed, but is still #{@before.inspect}"
end
end
- def result
- @message || "result"
- end
-
def actual_delta
@after - @before
end
- def negative_failure_message
- "#{result} should not have changed, but did change from #{@before.inspect} to #{@after.inspect}"
+ def failure_message_for_should_not
+ "#{@message} should not have changed, but did change from #{@before.inspect} to #{@after.inspect}"
end
def by(amount)
@@ -84,6 +83,10 @@ EOF
@from = from
self
end
+
+ def description
+ "change ##{@message}"
+ end
end
# :call-seq:
@@ -125,20 +128,24 @@ EOF
# employee.develop_great_new_social_networking_app
# }.should change(employee, :title).from("Mail Clerk").to("CEO")
#
- # Evaluates +receiver.message+ or +block+ before and
- # after it evaluates the c object (generated by the lambdas in the examples above).
+ # Evaluates <tt>receiver.message</tt> or <tt>block</tt> before and after
+ # it evaluates the c object (generated by the lambdas in the examples
+ # above).
+ #
+ # Then compares the values before and after the <tt>receiver.message</tt>
+ # and evaluates the difference compared to the expected difference.
#
- # Then compares the values before and after the +receiver.message+ and
- # evaluates the difference compared to the expected difference.
+ # == WARNING
+ # <tt>should_not change</tt> only supports the form with no
+ # subsequent calls to <tt>by</tt>, <tt>by_at_least</tt>,
+ # <tt>by_at_most</tt>, <tt>to</tt> or <tt>from</tt>.
#
- # == Warning
- # +should_not+ +change+ only supports the form with no subsequent calls to
- # +by+, +by_at_least+, +by_at_most+, +to+ or +from+.
+ # blocks passed to <tt>should</tt> <tt>change</tt> and <tt>should_not</tt>
+ # <tt>change</tt> must use the <tt>{}</tt> form (<tt>do/end</tt> is not
+ # supported).
#
- # blocks passed to +should+ +change+ and +should_not+ +change+
- # must use the <tt>{}</tt> form (<tt>do/end</tt> is not supported)
- def change(target=nil, message=nil, &block)
- Matchers::Change.new(target, message, &block)
+ def change(receiver=nil, message=nil, &block)
+ Matchers::Change.new(receiver, message, &block)
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/eql.rb b/vendor/plugins/rspec/lib/spec/matchers/eql.rb
index 280ca5454..98ab198d9 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/eql.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/eql.rb
@@ -1,29 +1,5 @@
module Spec
module Matchers
-
- class Eql #:nodoc:
- def initialize(expected)
- @expected = expected
- end
-
- def matches?(actual)
- @actual = actual
- @actual.eql?(@expected)
- end
-
- def failure_message
- return "expected #{@expected.inspect}, got #{@actual.inspect} (using .eql?)", @expected, @actual
- end
-
- def negative_failure_message
- return "expected #{@actual.inspect} not to equal #{@expected.inspect} (using .eql?)", @expected, @actual
- end
-
- def description
- "eql #{@expected.inspect}"
- end
- end
-
# :call-seq:
# should eql(expected)
# should_not eql(expected)
@@ -37,7 +13,30 @@ module Spec
# 5.should eql(5)
# 5.should_not eql(3)
def eql(expected)
- Matchers::Eql.new(expected)
+ Matcher.new :eql, expected do |_expected_|
+ match do |actual|
+ actual.eql?(_expected_)
+ end
+
+ failure_message_for_should do |actual|
+ <<-MESSAGE
+
+expected #{_expected_.inspect}
+ got #{actual.inspect}
+
+(compared using eql?)
+MESSAGE
+ end
+
+ failure_message_for_should_not do |actual|
+ <<-MESSAGE
+
+expected #{actual.inspect} not to equal #{_expected_.inspect}
+
+(compared using eql?)
+MESSAGE
+ end
+ end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/equal.rb b/vendor/plugins/rspec/lib/spec/matchers/equal.rb
index 4bfc74951..3580a95af 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/equal.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/equal.rb
@@ -1,29 +1,6 @@
module Spec
module Matchers
-
- class Equal #:nodoc:
- def initialize(expected)
- @expected = expected
- end
-
- def matches?(actual)
- @actual = actual
- @actual.equal?(@expected)
- end
-
- def failure_message
- return "expected #{@expected.inspect}, got #{@actual.inspect} (using .equal?)", @expected, @actual
- end
- def negative_failure_message
- return "expected #{@actual.inspect} not to equal #{@expected.inspect} (using .equal?)", @expected, @actual
- end
-
- def description
- "equal #{@expected.inspect}"
- end
- end
-
# :call-seq:
# should equal(expected)
# should_not equal(expected)
@@ -37,7 +14,40 @@ module Spec
# 5.should equal(5) #Fixnums are equal
# "5".should_not equal("5") #Strings that look the same are not the same object
def equal(expected)
- Matchers::Equal.new(expected)
+ Matcher.new :equal, expected do |_expected_|
+ match do |actual|
+ actual.equal?(_expected_)
+ end
+
+ def inspect_object(o)
+ "#<#{o.class}:#{o.object_id}> => #{o.inspect}"
+ end
+
+ failure_message_for_should do |actual|
+ <<-MESSAGE
+
+expected #{inspect_object(_expected_)}
+ got #{inspect_object(actual)}
+
+Compared using equal?, which compares object identity,
+but expected and actual are not the same object. Use
+'actual.should == expected' if you don't care about
+object identity in this example.
+
+MESSAGE
+ end
+
+ failure_message_for_should_not do |actual|
+ <<-MESSAGE
+
+expected not #{inspect_object(actual)}
+ got #{inspect_object(_expected_)}
+
+Compared using equal?, which compares object identity.
+
+MESSAGE
+ end
+ end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/exist.rb b/vendor/plugins/rspec/lib/spec/matchers/exist.rb
index a5a911132..dc69c683d 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/exist.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/exist.rb
@@ -1,17 +1,16 @@
module Spec
module Matchers
- class Exist
- def matches? actual
- @actual = actual
- @actual.exist?
- end
- def failure_message
- "expected #{@actual.inspect} to exist, but it doesn't."
- end
- def negative_failure_message
- "expected #{@actual.inspect} to not exist, but it does."
+ # :call-seq:
+ # should exist
+ # should_not exist
+ #
+ # Passes if actual.exist?
+ def exist(arg=nil)
+ Matcher.new :exist do
+ match do |actual|
+ arg ? actual.exist?(arg) : actual.exist?
+ end
end
end
- def exist; Exist.new; end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/has.rb b/vendor/plugins/rspec/lib/spec/matchers/has.rb
index 60199f54d..7073e0a86 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/has.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/has.rb
@@ -1,34 +1,35 @@
module Spec
module Matchers
- class Has #:nodoc:
- def initialize(sym, *args)
- @sym = sym
- @args = args
+ class Has
+
+ def initialize(expected, *args)
+ @expected, @args = expected, args
end
- def matches?(target)
- target.send(predicate, *@args)
+ def matches?(actual)
+ actual.__send__(predicate(@expected), *@args)
end
- def failure_message
- "expected ##{predicate}(#{@args[0].inspect}) to return true, got false"
+ def failure_message_for_should
+ "expected ##{predicate(@expected)}(#{@args[0].inspect}) to return true, got false"
end
- def negative_failure_message
- "expected ##{predicate}(#{@args[0].inspect}) to return false, got true"
+ def failure_message_for_should_not
+ "expected ##{predicate(@expected)}(#{@args[0].inspect}) to return false, got true"
end
def description
"have key #{@args[0].inspect}"
end
+
+ private
+
+ def predicate(sym)
+ "#{sym.to_s.sub("have_","has_")}?".to_sym
+ end
- private
- def predicate
- "#{@sym.to_s.sub("have_","has_")}?".to_sym
- end
-
end
-
+
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/have.rb b/vendor/plugins/rspec/lib/spec/matchers/have.rb
index 47454e3be..2975ee129 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/have.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/have.rb
@@ -1,10 +1,10 @@
module Spec
module Matchers
-
class Have #:nodoc:
def initialize(expected, relativity=:exactly)
@expected = (expected == :no ? 0 : expected)
@relativity = relativity
+ @actual = nil
end
def relativities
@@ -15,23 +15,15 @@ module Spec
}
end
- def method_missing(sym, *args, &block)
- @collection_name = sym
- @plural_collection_name = Inflector.pluralize(sym.to_s) if Object.const_defined?(:Inflector)
- @args = args
- @block = block
- self
- end
-
def matches?(collection_owner)
if collection_owner.respond_to?(@collection_name)
- collection = collection_owner.send(@collection_name, *@args, &@block)
+ collection = collection_owner.__send__(@collection_name, *@args, &@block)
elsif (@plural_collection_name && collection_owner.respond_to?(@plural_collection_name))
- collection = collection_owner.send(@plural_collection_name, *@args, &@block)
+ collection = collection_owner.__send__(@plural_collection_name, *@args, &@block)
elsif (collection_owner.respond_to?(:length) || collection_owner.respond_to?(:size))
collection = collection_owner
else
- collection_owner.send(@collection_name, *@args, &@block)
+ collection_owner.__send__(@collection_name, *@args, &@block)
end
@actual = collection.size if collection.respond_to?(:size)
@actual = collection.length if collection.respond_to?(:length)
@@ -45,11 +37,11 @@ module Spec
"expected #{@collection_name} to be a collection but it does not respond to #length or #size"
end
- def failure_message
+ def failure_message_for_should
"expected #{relative_expectation} #{@collection_name}, got #{@actual}"
end
- def negative_failure_message
+ def failure_message_for_should_not
if @relativity == :exactly
return "expected target not to have #{@expected} #{@collection_name}, got #{@actual}"
elsif @relativity == :at_most
@@ -75,8 +67,22 @@ EOF
"have #{relative_expectation} #{@collection_name}"
end
+ def respond_to?(sym)
+ @expected.respond_to?(sym) || super
+ end
+
private
+ def method_missing(sym, *args, &block)
+ @collection_name = sym
+ if inflector = (defined?(ActiveSupport::Inflector) ? ActiveSupport::Inflector : (defined?(Inflector) ? Inflector : nil))
+ @plural_collection_name = inflector.pluralize(sym.to_s)
+ end
+ @args = args
+ @block = block
+ self
+ end
+
def relative_expectation
"#{relativities[@relativity]}#{@expected}"
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/include.rb b/vendor/plugins/rspec/lib/spec/matchers/include.rb
index 5476f97d8..a2a7fe3db 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/include.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/include.rb
@@ -1,52 +1,5 @@
module Spec
module Matchers
-
- class Include #:nodoc:
-
- def initialize(*expecteds)
- @expecteds = expecteds
- end
-
- def matches?(actual)
- @actual = actual
- @expecteds.each do |expected|
- return false unless actual.include?(expected)
- end
- true
- end
-
- def failure_message
- _message
- end
-
- def negative_failure_message
- _message("not ")
- end
-
- def description
- "include #{_pretty_print(@expecteds)}"
- end
-
- private
- def _message(maybe_not="")
- "expected #{@actual.inspect} #{maybe_not}to include #{_pretty_print(@expecteds)}"
- end
-
- def _pretty_print(array)
- result = ""
- array.each_with_index do |item, index|
- if index < (array.length - 2)
- result << "#{item.inspect}, "
- elsif index < (array.length - 1)
- result << "#{item.inspect} and "
- else
- result << "#{item.inspect}"
- end
- end
- result
- end
- end
-
# :call-seq:
# should include(expected)
# should_not include(expected)
@@ -64,7 +17,28 @@ module Spec
# "spread".should include("read")
# "spread".should_not include("red")
def include(*expected)
- Matchers::Include.new(*expected)
+ Matcher.new :include, *expected do |*_expected_|
+ match do |actual|
+ helper(actual, *_expected_)
+ end
+
+ def helper(actual, *_expected_)
+ _expected_.each do |expected|
+ if actual.is_a?(Hash)
+ if expected.is_a?(Hash)
+ expected.each_pair do |k,v|
+ return false unless actual[k] == v
+ end
+ else
+ return false unless actual.has_key?(expected)
+ end
+ else
+ return false unless actual.include?(expected)
+ end
+ end
+ true
+ end
+ end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/match.rb b/vendor/plugins/rspec/lib/spec/matchers/match.rb
index 61ab52429..b4b9ea864 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/match.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/match.rb
@@ -1,41 +1,21 @@
module Spec
module Matchers
-
- class Match #:nodoc:
- def initialize(expected)
- @expected = expected
- end
-
- def matches?(actual)
- @actual = actual
- return true if actual =~ @expected
- return false
- end
-
- def failure_message
- return "expected #{@actual.inspect} to match #{@expected.inspect}", @expected, @actual
- end
-
- def negative_failure_message
- return "expected #{@actual.inspect} not to match #{@expected.inspect}", @expected, @actual
- end
-
- def description
- "match #{@expected.inspect}"
- end
- end
-
# :call-seq:
- # should match(regexp)
- # should_not match(regexp)
+ # should match(pattern)
+ # should_not match(pattern)
#
- # Given a Regexp, passes if actual =~ regexp
+ # Given a Regexp or String, passes if actual.match(pattern)
#
# == Examples
#
- # email.should match(/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i)
- def match(regexp)
- Matchers::Match.new(regexp)
+ # email.should match(/^([^\s]+)((?:[-a-z0-9]+\.)+[a-z]{2,})$/i)
+ # email.should match("@example.com")
+ def match(expected)
+ Matcher.new :match, expected do |_expected_|
+ match do |actual|
+ actual.match(_expected_)
+ end
+ end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/operator_matcher.rb b/vendor/plugins/rspec/lib/spec/matchers/operator_matcher.rb
index dd23a0994..30295be01 100755..100644
--- a/vendor/plugins/rspec/lib/spec/matchers/operator_matcher.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/operator_matcher.rb
@@ -1,70 +1,75 @@
module Spec
module Matchers
- class BaseOperatorMatcher
- attr_reader :generated_description
-
- def initialize(target)
- @target = target
- end
- def ==(expected)
- @expected = expected
- __delegate_method_missing_to_target("==", expected)
- end
+ class OperatorMatcher
+ class << self
+ def registry
+ @registry ||= {}
+ end
- def ===(expected)
- @expected = expected
- __delegate_method_missing_to_target("===", expected)
- end
+ def register(klass, operator, matcher)
+ registry[klass] ||= {}
+ registry[klass][operator] = matcher
+ end
- def =~(expected)
- @expected = expected
- __delegate_method_missing_to_target("=~", expected)
+ def get(klass, operator)
+ registry[klass] && registry[klass][operator]
+ end
end
- def >(expected)
- @expected = expected
- __delegate_method_missing_to_target(">", expected)
+ def initialize(actual)
+ @actual = actual
end
- def >=(expected)
- @expected = expected
- __delegate_method_missing_to_target(">=", expected)
+ def self.use_custom_matcher_or_delegate(operator)
+ define_method(operator) do |expected|
+ if matcher = OperatorMatcher.get(@actual.class, operator)
+ @actual.send(::Spec::Matchers.last_should, matcher.new(expected))
+ else
+ eval_match(@actual, operator, expected)
+ end
+ end
end
- def <(expected)
- @expected = expected
- __delegate_method_missing_to_target("<", expected)
+ ['==', '===', '=~', '>', '>=', '<', '<='].each do |operator|
+ use_custom_matcher_or_delegate operator
end
- def <=(expected)
- @expected = expected
- __delegate_method_missing_to_target("<=", expected)
+ def fail_with_message(message)
+ Spec::Expectations.fail_with(message, @expected, @actual)
end
- def fail_with_message(message)
- Spec::Expectations.fail_with(message, @expected, @target)
+ def description
+ "#{@operator} #{@expected.inspect}"
+ end
+
+ private
+
+ def eval_match(actual, operator, expected)
+ ::Spec::Matchers.last_matcher = self
+ @operator, @expected = operator, expected
+ __delegate_operator(actual, operator, expected)
end
end
- class PositiveOperatorMatcher < BaseOperatorMatcher #:nodoc:
-
- def __delegate_method_missing_to_target(operator, expected)
- ::Spec::Matchers.generated_description = "should #{operator} #{expected.inspect}"
- return if @target.send(operator, expected)
- return fail_with_message("expected: #{expected.inspect},\n got: #{@target.inspect} (using #{operator})") if ['==','===', '=~'].include?(operator)
- return fail_with_message("expected: #{operator} #{expected.inspect},\n got: #{operator.gsub(/./, ' ')} #{@target.inspect}")
+ class PositiveOperatorMatcher < OperatorMatcher #:nodoc:
+ def __delegate_operator(actual, operator, expected)
+ if actual.__send__(operator, expected)
+ true
+ elsif ['==','===', '=~'].include?(operator)
+ fail_with_message("expected: #{expected.inspect},\n got: #{actual.inspect} (using #{operator})")
+ else
+ fail_with_message("expected: #{operator} #{expected.inspect},\n got: #{operator.gsub(/./, ' ')} #{actual.inspect}")
+ end
end
end
- class NegativeOperatorMatcher < BaseOperatorMatcher #:nodoc:
-
- def __delegate_method_missing_to_target(operator, expected)
- ::Spec::Matchers.generated_description = "should not #{operator} #{expected.inspect}"
- return unless @target.send(operator, expected)
- return fail_with_message("expected not: #{operator} #{expected.inspect},\n got: #{operator.gsub(/./, ' ')} #{@target.inspect}")
+ class NegativeOperatorMatcher < OperatorMatcher #:nodoc:
+ def __delegate_operator(actual, operator, expected)
+ return false unless actual.__send__(operator, expected)
+ return fail_with_message("expected not: #{operator} #{expected.inspect},\n got: #{operator.gsub(/./, ' ')} #{actual.inspect}")
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/raise_error.rb b/vendor/plugins/rspec/lib/spec/matchers/raise_error.rb
index c003849b6..65bdf2370 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/raise_error.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/raise_error.rb
@@ -1,23 +1,24 @@
module Spec
module Matchers
class RaiseError #:nodoc:
- def initialize(error_or_message=Exception, message=nil, &block)
+ def initialize(expected_error_or_message=Exception, expected_message=nil, &block)
@block = block
- case error_or_message
+ @actual_error = nil
+ case expected_error_or_message
when String, Regexp
- @expected_error, @expected_message = Exception, error_or_message
+ @expected_error, @expected_message = Exception, expected_error_or_message
else
- @expected_error, @expected_message = error_or_message, message
+ @expected_error, @expected_message = expected_error_or_message, expected_message
end
end
- def matches?(proc)
+ def matches?(given_proc)
@raised_expected_error = false
@with_expected_message = false
@eval_block = false
@eval_block_passed = false
begin
- proc.call
+ given_proc.call
rescue @expected_error => @actual_error
@raised_expected_error = true
@with_expected_message = verify_message
@@ -31,7 +32,7 @@ module Spec
eval_block if @raised_expected_error && @with_expected_message && @block
end
ensure
- return (@raised_expected_error && @with_expected_message) ? (@eval_block ? @eval_block_passed : true) : false
+ return (@raised_expected_error & @with_expected_message) ? (@eval_block ? @eval_block_passed : true) : false
end
def eval_block
@@ -47,24 +48,20 @@ module Spec
def verify_message
case @expected_message
when nil
- return true
+ true
when Regexp
- return @expected_message =~ @actual_error.message
+ @expected_message =~ @actual_error.message
else
- return @expected_message == @actual_error.message
+ @expected_message == @actual_error.message
end
end
- def failure_message
- if @eval_block
- return @actual_error.message
- else
- return "expected #{expected_error}#{actual_error}"
- end
+ def failure_message_for_should
+ @eval_block ? @actual_error.message : "expected #{expected_error}#{given_error}"
end
- def negative_failure_message
- "expected no #{expected_error}#{actual_error}"
+ def failure_message_for_should_not
+ "expected no #{expected_error}#{given_error}"
end
def description
@@ -83,7 +80,7 @@ module Spec
end
end
- def actual_error
+ def given_error
@actual_error.nil? ? " but nothing was raised" : ", got #{@actual_error.inspect}"
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/respond_to.rb b/vendor/plugins/rspec/lib/spec/matchers/respond_to.rb
index 3d23422aa..9161cb94e 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/respond_to.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/respond_to.rb
@@ -4,28 +4,54 @@ module Spec
class RespondTo #:nodoc:
def initialize(*names)
@names = names
+ @expected_arity = nil
@names_not_responded_to = []
end
- def matches?(target)
+ def matches?(actual)
+ @actual = actual
@names.each do |name|
- unless target.respond_to?(name)
- @names_not_responded_to << name
- end
+ @names_not_responded_to << name unless actual.respond_to?(name) && matches_arity?(actual, name)
end
return @names_not_responded_to.empty?
end
- def failure_message
- "expected target to respond to #{@names_not_responded_to.collect {|name| name.inspect }.join(', ')}"
+ def failure_message_for_should
+ "expected #{@actual.inspect} to respond to #{@names_not_responded_to.collect {|name| name.inspect }.join(', ')}#{with_arity}"
end
- def negative_failure_message
- "expected target not to respond to #{@names.collect {|name| name.inspect }.join(', ')}"
+ def failure_message_for_should_not
+ "expected #{@actual.inspect} not to respond to #{@names.collect {|name| name.inspect }.join(', ')}"
end
def description
- "respond to ##{@names.to_s}"
+ "respond to #{pp_names}#{with_arity}"
+ end
+
+ def with(n)
+ @expected_arity = n
+ self
+ end
+
+ def argument
+ self
+ end
+ alias :arguments :argument
+
+ private
+
+ def matches_arity?(actual, name)
+ @expected_arity.nil?? true : @expected_arity == actual.method(name).arity
+ end
+
+ def with_arity
+ @expected_arity.nil?? "" :
+ " with #{@expected_arity} argument#{@expected_arity == 1 ? '' : 's'}"
+ end
+
+ def pp_names
+ # Ruby 1.9 returns the same thing for array.to_s as array.inspect, so just use array.inspect here
+ @names.length == 1 ? "##{@names.first}" : @names.inspect
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/satisfy.rb b/vendor/plugins/rspec/lib/spec/matchers/satisfy.rb
index 6c0ca95bc..58e3f56aa 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/satisfy.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/satisfy.rb
@@ -12,11 +12,11 @@ module Spec
@block.call(actual)
end
- def failure_message
+ def failure_message_for_should
"expected #{@actual} to satisfy block"
end
- def negative_failure_message
+ def failure_message_for_should_not
"expected #{@actual} not to satisfy block"
end
end
diff --git a/vendor/plugins/rspec/lib/spec/matchers/simple_matcher.rb b/vendor/plugins/rspec/lib/spec/matchers/simple_matcher.rb
index ac547d06a..5ab7f3068 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/simple_matcher.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/simple_matcher.rb
@@ -1,29 +1,133 @@
module Spec
module Matchers
class SimpleMatcher
- attr_reader :description
+ attr_writer :failure_message, :negative_failure_message, :description
def initialize(description, &match_block)
@description = description
@match_block = match_block
+ @failure_message = @negative_failure_message = nil
end
- def matches?(actual)
- @actual = actual
- return @match_block.call(@actual)
+ def matches?(given)
+ @given = given
+ case @match_block.arity
+ when 2
+ @match_block.call(@given, self)
+ else
+ @match_block.call(@given)
+ end
+ end
+
+ def description
+ @description || explanation
end
- def failure_message()
- return %[expected #{@description.inspect} but got #{@actual.inspect}]
+ def failure_message_for_should
+ @failure_message || (@description.nil? ? explanation : %[expected #{@description.inspect} but got #{@given.inspect}])
end
-
- def negative_failure_message()
- return %[expected not to get #{@description.inspect}, but got #{@actual.inspect}]
+
+ def failure_message_for_should_not
+ @negative_failure_message || (@description.nil? ? explanation : %[expected not to get #{@description.inspect}, but got #{@given.inspect}])
+ end
+
+ def explanation
+ "No description provided. See RDoc for simple_matcher()"
end
end
-
- def simple_matcher(message, &match_block)
- SimpleMatcher.new(message, &match_block)
+
+ # simple_matcher makes it easy for you to create your own custom matchers
+ # in just a few lines of code when you don't need all the power of a
+ # completely custom matcher object.
+ #
+ # The <tt>description</tt> argument will appear as part of any failure
+ # message, and is also the source for auto-generated descriptions.
+ #
+ # The <tt>match_block</tt> can have an arity of 1 or 2. The first block
+ # argument will be the given value. The second, if the block accepts it
+ # will be the matcher itself, giving you access to set custom failure
+ # messages in favor of the defaults.
+ #
+ # The <tt>match_block</tt> should return a boolean: <tt>true</tt>
+ # indicates a match, which will pass if you use <tt>should</tt> and fail
+ # if you use <tt>should_not</tt>. false (or nil) indicates no match,
+ # which will do the reverse: fail if you use <tt>should</tt> and pass if
+ # you use <tt>should_not</tt>.
+ #
+ # An error in the <tt>match_block</tt> will bubble up, resulting in a
+ # failure.
+ #
+ # == Example with default messages
+ #
+ # def be_even
+ # simple_matcher("an even number") { |given| given % 2 == 0 }
+ # end
+ #
+ # describe 2 do
+ # it "should be even" do
+ # 2.should be_even
+ # end
+ # end
+ #
+ # Given an odd number, this example would produce an error message stating:
+ # expected "an even number", got 3.
+ #
+ # Unfortunately, if you're a fan of auto-generated descriptions, this will
+ # produce "should an even number." Not the most desirable result. You can
+ # control that using custom messages:
+ #
+ # == Example with custom messages
+ #
+ # def rhyme_with(expected)
+ # simple_matcher("rhyme with #{expected.inspect}") do |given, matcher|
+ # matcher.failure_message = "expected #{given.inspect} to rhyme with #{expected.inspect}"
+ # matcher.negative_failure_message = "expected #{given.inspect} not to rhyme with #{expected.inspect}"
+ # given.rhymes_with? expected
+ # end
+ # end
+ #
+ # # OR
+ #
+ # def rhyme_with(expected)
+ # simple_matcher do |given, matcher|
+ # matcher.description = "rhyme with #{expected.inspect}"
+ # matcher.failure_message = "expected #{given.inspect} to rhyme with #{expected.inspect}"
+ # matcher.negative_failure_message = "expected #{given.inspect} not to rhyme with #{expected.inspect}"
+ # given.rhymes_with? expected
+ # end
+ # end
+ #
+ # describe "pecan" do
+ # it "should rhyme with 'be gone'" do
+ # nut = "pecan"
+ # nut.extend Rhymer
+ # nut.should rhyme_with("be gone")
+ # end
+ # end
+ #
+ # The resulting messages would be:
+ # description: rhyme with "be gone"
+ # failure_message: expected "pecan" to rhyme with "be gone"
+ # negative failure_message: expected "pecan" not to rhyme with "be gone"
+ #
+ # == Wrapped Expectations
+ #
+ # Because errors will bubble up, it is possible to wrap other expectations
+ # in a SimpleMatcher.
+ #
+ # def be_even
+ # simple_matcher("an even number") { |given| (given % 2).should == 0 }
+ # end
+ #
+ # BE VERY CAREFUL when you do this. Only use wrapped expectations for
+ # matchers that will always be used in only the positive
+ # (<tt>should</tt>) or negative (<tt>should_not</tt>), but not both.
+ # The reason is that is you wrap a <tt>should</tt> and call the wrapper
+ # with <tt>should_not</tt>, the correct result (the <tt>should</tt>
+ # failing), will fail when you want it to pass.
+ #
+ def simple_matcher(description=nil, &match_block)
+ SimpleMatcher.new(description, &match_block)
end
end
end \ No newline at end of file
diff --git a/vendor/plugins/rspec/lib/spec/matchers/throw_symbol.rb b/vendor/plugins/rspec/lib/spec/matchers/throw_symbol.rb
index c74d84436..da16bb654 100644
--- a/vendor/plugins/rspec/lib/spec/matchers/throw_symbol.rb
+++ b/vendor/plugins/rspec/lib/spec/matchers/throw_symbol.rb
@@ -2,39 +2,58 @@ module Spec
module Matchers
class ThrowSymbol #:nodoc:
- def initialize(expected=nil)
- @expected = expected
- @actual = nil
+ def initialize(expected_symbol = nil, expected_arg=nil)
+ @expected_symbol = expected_symbol
+ @expected_arg = expected_arg
+ @caught_symbol = @caught_arg = nil
end
- def matches?(proc)
+ def matches?(given_proc)
begin
- proc.call
- rescue NameError => e
- raise e unless e.message =~ /uncaught throw/
- @actual = e.name.to_sym
+ if @expected_symbol.nil?
+ given_proc.call
+ else
+ @caught_arg = catch :proc_did_not_throw_anything do
+ catch @expected_symbol do
+ given_proc.call
+ throw :proc_did_not_throw_anything, :nothing_thrown
+ end
+ end
+ @caught_symbol = @expected_symbol unless @caught_arg == :nothing_thrown
+ end
+
+ # Ruby 1.8 uses NameError with `symbol'
+ # Ruby 1.9 uses ArgumentError with :symbol
+ rescue NameError, ArgumentError => e
+ raise e unless e.message =~ /uncaught throw (`|\:)([a-zA-Z0-9_]*)(')?/
+ @caught_symbol = $2.to_sym
+
ensure
- if @expected.nil?
- return @actual.nil? ? false : true
+ if @expected_symbol.nil?
+ return !@caught_symbol.nil?
else
- return @actual == @expected
+ if @expected_arg.nil?
+ return @caught_symbol == @expected_symbol
+ else
+ return (@caught_symbol == @expected_symbol) & (@caught_arg == @expected_arg)
+ end
end
end
end
- def failure_message
- if @actual
- "expected #{expected}, got #{@actual.inspect}"
+ def failure_message_for_should
+ if @caught_symbol
+ "expected #{expected}, got #{@caught_symbol.inspect}"
else
"expected #{expected} but nothing was thrown"
end
end
- def negative_failure_message
- if @expected
+ def failure_message_for_should_not
+ if @expected_symbol
"expected #{expected} not to be thrown"
else
- "expected no Symbol, got :#{@actual}"
+ "expected no Symbol, got :#{@caught_symbol}"
end
end
@@ -45,7 +64,11 @@ module Spec
private
def expected
- @expected.nil? ? "a Symbol" : @expected.inspect
+ @expected_symbol.nil? ? "a Symbol" : "#{@expected_symbol.inspect}#{args}"
+ end
+
+ def args
+ @expected_arg.nil? ? "" : " with #{@expected_arg.inspect}"
end
end
@@ -53,20 +76,27 @@ module Spec
# :call-seq:
# should throw_symbol()
# should throw_symbol(:sym)
+ # should throw_symbol(:sym, arg)
# should_not throw_symbol()
# should_not throw_symbol(:sym)
- #
- # Given a Symbol argument, matches if a proc throws the specified Symbol.
+ # should_not throw_symbol(:sym, arg)
#
# Given no argument, matches if a proc throws any Symbol.
#
+ # Given a Symbol, matches if the given proc throws the specified Symbol.
+ #
+ # Given a Symbol and an arg, matches if the given proc throws the
+ # specified Symbol with the specified arg.
+ #
# == Examples
#
# lambda { do_something_risky }.should throw_symbol
# lambda { do_something_risky }.should throw_symbol(:that_was_risky)
+ # lambda { do_something_risky }.should throw_symbol(:that_was_risky, culprit)
#
# lambda { do_something_risky }.should_not throw_symbol
# lambda { do_something_risky }.should_not throw_symbol(:that_was_risky)
+ # lambda { do_something_risky }.should_not throw_symbol(:that_was_risky, culprit)
def throw_symbol(sym=nil)
Matchers::ThrowSymbol.new(sym)
end
diff --git a/vendor/plugins/rspec/lib/spec/mocks.rb b/vendor/plugins/rspec/lib/spec/mocks.rb
index 678dd6aae..339c0cc50 100644
--- a/vendor/plugins/rspec/lib/spec/mocks.rb
+++ b/vendor/plugins/rspec/lib/spec/mocks.rb
@@ -1,16 +1,5 @@
require 'spec/mocks/framework'
-require 'spec/mocks/methods'
-require 'spec/mocks/argument_constraint_matchers'
-require 'spec/mocks/spec_methods'
-require 'spec/mocks/proxy'
-require 'spec/mocks/mock'
-require 'spec/mocks/argument_expectation'
-require 'spec/mocks/message_expectation'
-require 'spec/mocks/order_group'
-require 'spec/mocks/errors'
-require 'spec/mocks/error_generator'
require 'spec/mocks/extensions/object'
-require 'spec/mocks/space'
module Spec
# == Mocks and Stubs
@@ -116,11 +105,11 @@ module Spec
# my_mock.should_receive(:sym).with(*args)
# my_mock.should_not_receive(:sym).with(*args)
#
- # == Argument Constraints using Expression Matchers
+ # == Argument Matchers
#
# Arguments that are passed to #with are compared with actual arguments received
# using == by default. In cases in which you want to specify things about the arguments
- # rather than the arguments themselves, you can use any of the Expression Matchers.
+ # rather than the arguments themselves, you can use any of RSpec's Expression Matchers.
# They don't all make syntactic sense (they were primarily designed for use with
# Spec::Expectations), but you are free to create your own custom Spec::Matchers.
#
@@ -131,7 +120,7 @@ module Spec
#
# my_mock.should_receive(:sym).with(no_args())
# my_mock.should_receive(:sym).with(any_args())
- # my_mock.should_receive(:sym).with(1, an_instance_of(Numeric), "b") #2nd argument can any type of Numeric
+ # my_mock.should_receive(:sym).with(1, kind_of(Numeric), "b") #2nd argument can any kind of Numeric
# my_mock.should_receive(:sym).with(1, boolean(), "b") #2nd argument can true or false
# my_mock.should_receive(:sym).with(1, /abc/, "b") #2nd argument can be any String matching the submitted Regexp
# my_mock.should_receive(:sym).with(1, anything(), "b") #2nd argument can be anything at all
diff --git a/vendor/plugins/rspec/lib/spec/mocks/argument_constraint_matchers.rb b/vendor/plugins/rspec/lib/spec/mocks/argument_constraint_matchers.rb
deleted file mode 100644
index 96ccf0f4a..000000000
--- a/vendor/plugins/rspec/lib/spec/mocks/argument_constraint_matchers.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-module Spec
- module Mocks
- module ArgumentConstraintMatchers
-
- # Shortcut for creating an instance of Spec::Mocks::DuckTypeArgConstraint
- def duck_type(*args)
- DuckTypeArgConstraint.new(*args)
- end
-
- def any_args
- AnyArgsConstraint.new
- end
-
- def anything
- AnyArgConstraint.new(nil)
- end
-
- def boolean
- BooleanArgConstraint.new(nil)
- end
-
- def hash_including(expected={})
- HashIncludingConstraint.new(expected)
- end
-
- def no_args
- NoArgsConstraint.new
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/mocks/argument_expectation.rb b/vendor/plugins/rspec/lib/spec/mocks/argument_expectation.rb
index b3fdcc80d..b51b7bae5 100644
--- a/vendor/plugins/rspec/lib/spec/mocks/argument_expectation.rb
+++ b/vendor/plugins/rspec/lib/spec/mocks/argument_expectation.rb
@@ -1,208 +1,50 @@
module Spec
module Mocks
-
- class MatcherConstraint
- def initialize(matcher)
- @matcher = matcher
- end
-
- def matches?(value)
- @matcher.matches?(value)
- end
- end
-
- class LiteralArgConstraint
- def initialize(literal)
- @literal_value = literal
- end
-
- def matches?(value)
- @literal_value == value
- end
- end
-
- class RegexpArgConstraint
- def initialize(regexp)
- @regexp = regexp
- end
-
- def matches?(value)
- return value =~ @regexp unless value.is_a?(Regexp)
- value == @regexp
- end
- end
-
- class AnyArgConstraint
- def initialize(ignore)
- end
-
- def ==(other)
- true
- end
-
- # TODO - need this?
- def matches?(value)
- true
- end
- end
-
- class AnyArgsConstraint
- def description
- "any args"
- end
- end
-
- class NoArgsConstraint
- def description
- "no args"
- end
-
- def ==(args)
- args == []
- end
- end
-
- class NumericArgConstraint
- def initialize(ignore)
- end
-
- def matches?(value)
- value.is_a?(Numeric)
- end
- end
- class BooleanArgConstraint
- def initialize(ignore)
- end
-
- def ==(value)
- matches?(value)
- end
-
- def matches?(value)
- return true if value.is_a?(TrueClass)
- return true if value.is_a?(FalseClass)
- false
- end
- end
-
- class StringArgConstraint
- def initialize(ignore)
- end
-
- def matches?(value)
- value.is_a?(String)
- end
- end
-
- class DuckTypeArgConstraint
- def initialize(*methods_to_respond_to)
- @methods_to_respond_to = methods_to_respond_to
- end
-
- def matches?(value)
- @methods_to_respond_to.all? { |sym| value.respond_to?(sym) }
- end
-
- def description
- "duck_type"
- end
- end
-
- class HashIncludingConstraint
- def initialize(expected)
- @expected = expected
- end
-
- def ==(actual)
- @expected.each do | key, value |
- # check key for case that value evaluates to nil
- return false unless actual.has_key?(key) && actual[key] == value
- end
- true
- rescue NoMethodError => ex
- return false
- end
-
- def matches?(value)
- self == value
- end
-
- def description
- "hash_including(#{@expected.inspect.sub(/^\{/,"").sub(/\}$/,"")})"
- end
-
- end
-
-
class ArgumentExpectation
attr_reader :args
- @@constraint_classes = Hash.new { |hash, key| LiteralArgConstraint}
- @@constraint_classes[:anything] = AnyArgConstraint
- @@constraint_classes[:numeric] = NumericArgConstraint
- @@constraint_classes[:boolean] = BooleanArgConstraint
- @@constraint_classes[:string] = StringArgConstraint
- def initialize(args)
+ def initialize(args, &block)
@args = args
- if [:any_args] == args
- @expected_params = nil
- warn_deprecated(:any_args.inspect, "any_args()")
- elsif args.length == 1 && args[0].is_a?(AnyArgsConstraint) then @expected_params = nil
- elsif [:no_args] == args
- @expected_params = []
- warn_deprecated(:no_args.inspect, "no_args()")
- elsif args.length == 1 && args[0].is_a?(NoArgsConstraint) then @expected_params = []
- else @expected_params = process_arg_constraints(args)
+ @matchers_block = block
+ @match_any_args = false
+ @matchers = nil
+
+ if ArgumentMatchers::AnyArgsMatcher === args.first
+ @match_any_args = true
+ elsif ArgumentMatchers::NoArgsMatcher === args.first
+ @matchers = []
+ else
+ @matchers = args.collect {|arg| matcher_for(arg)}
end
end
- def process_arg_constraints(constraints)
- constraints.collect do |constraint|
- convert_constraint(constraint)
- end
+ def matcher_for(arg)
+ return ArgumentMatchers::MatcherMatcher.new(arg) if is_matcher?(arg)
+ return ArgumentMatchers::RegexpMatcher.new(arg) if arg.is_a?(Regexp)
+ return ArgumentMatchers::EqualityProxy.new(arg)
end
- def warn_deprecated(deprecated_method, instead)
- Kernel.warn "The #{deprecated_method} constraint is deprecated. Use #{instead} instead."
+ def is_matcher?(obj)
+ return obj.respond_to?(:matches?) & obj.respond_to?(:description)
end
- def convert_constraint(constraint)
- if [:anything, :numeric, :boolean, :string].include?(constraint)
- case constraint
- when :anything
- instead = "anything()"
- when :boolean
- instead = "boolean()"
- when :numeric
- instead = "an_instance_of(Numeric)"
- when :string
- instead = "an_instance_of(String)"
- end
- warn_deprecated(constraint.inspect, instead)
- return @@constraint_classes[constraint].new(constraint)
- end
- return MatcherConstraint.new(constraint) if is_matcher?(constraint)
- return RegexpArgConstraint.new(constraint) if constraint.is_a?(Regexp)
- return LiteralArgConstraint.new(constraint)
+ def args_match?(given_args)
+ match_any_args? || matchers_block_matches?(given_args) || matchers_match?(given_args)
end
- def is_matcher?(obj)
- return obj.respond_to?(:matches?) && obj.respond_to?(:description)
+ def matchers_block_matches?(given_args)
+ @matchers_block ? @matchers_block.call(*given_args) : nil
end
- def check_args(args)
- return true if @expected_params.nil?
- return true if @expected_params == args
- return constraints_match?(args)
+ def matchers_match?(given_args)
+ @matchers == given_args
end
- def constraints_match?(args)
- return false if args.length != @expected_params.length
- @expected_params.each_index { |i| return false unless @expected_params[i].matches?(args[i]) }
- return true
+ def match_any_args?
+ @match_any_args
end
-
+
end
end
diff --git a/vendor/plugins/rspec/lib/spec/mocks/error_generator.rb b/vendor/plugins/rspec/lib/spec/mocks/error_generator.rb
index 01d8f720d..f63811fed 100644
--- a/vendor/plugins/rspec/lib/spec/mocks/error_generator.rb
+++ b/vendor/plugins/rspec/lib/spec/mocks/error_generator.rb
@@ -3,7 +3,8 @@ module Spec
class ErrorGenerator
attr_writer :opts
- def initialize(target, name)
+ def initialize(target, name, options={})
+ @declared_as = options[:__declared_as] || 'Mock'
@target = target
@name = name
end
@@ -19,7 +20,7 @@ module Spec
def raise_unexpected_message_args_error(expectation, *args)
expected_args = format_args(*expectation.expected_args)
actual_args = args.empty? ? "(no args)" : format_args(*args)
- __raise "#{intro} expected #{expectation.sym.inspect} with #{expected_args} but received it with #{actual_args}"
+ __raise "#{intro} received #{expectation.sym.inspect} with unexpected arguments\n expected: #{expected_args}\n got: #{actual_args}"
end
def raise_expectation_error(sym, expected_received_count, actual_received_count, *args)
@@ -42,9 +43,20 @@ module Spec
__raise "#{intro} yielded |#{arg_list(*args_to_yield)}| to block with arity of #{arity}"
end
- private
+ private
+
def intro
- @name ? "Mock '#{@name}'" : @target.inspect
+ if @name
+ "#{@declared_as} #{@name.inspect}"
+ elsif Mock === @target
+ @declared_as
+ elsif Class === @target
+ "<#{@target.inspect} (class)>"
+ elsif @target
+ @target
+ else
+ "nil"
+ end
end
def __raise(message)
@@ -57,15 +69,11 @@ module Spec
end
def format_args(*args)
- return "(no args)" if args.empty? || args == [:no_args]
- return "(any args)" if args == [:any_args]
- "(" + arg_list(*args) + ")"
+ args.empty? ? "(no args)" : "(" + arg_list(*args) + ")"
end
def arg_list(*args)
- args.collect do |arg|
- arg.respond_to?(:description) ? arg.description : arg.inspect
- end.join(", ")
+ args.collect {|arg| arg.respond_to?(:description) ? arg.description : arg.inspect}.join(", ")
end
def count_message(count)
diff --git a/vendor/plugins/rspec/lib/spec/mocks/errors.rb b/vendor/plugins/rspec/lib/spec/mocks/errors.rb
index 68fdfe006..560b66a93 100644
--- a/vendor/plugins/rspec/lib/spec/mocks/errors.rb
+++ b/vendor/plugins/rspec/lib/spec/mocks/errors.rb
@@ -1,6 +1,6 @@
module Spec
module Mocks
- class MockExpectationError < StandardError
+ class MockExpectationError < Exception
end
class AmbiguousReturnError < StandardError
diff --git a/vendor/plugins/rspec/lib/spec/mocks/framework.rb b/vendor/plugins/rspec/lib/spec/mocks/framework.rb
index 92089673a..e25778655 100644
--- a/vendor/plugins/rspec/lib/spec/mocks/framework.rb
+++ b/vendor/plugins/rspec/lib/spec/mocks/framework.rb
@@ -3,8 +3,8 @@
# object in the system.
require 'spec/mocks/methods'
-require 'spec/mocks/argument_constraint_matchers'
-require 'spec/mocks/spec_methods'
+require 'spec/mocks/argument_matchers'
+require 'spec/mocks/example_methods'
require 'spec/mocks/proxy'
require 'spec/mocks/mock'
require 'spec/mocks/argument_expectation'
diff --git a/vendor/plugins/rspec/lib/spec/mocks/message_expectation.rb b/vendor/plugins/rspec/lib/spec/mocks/message_expectation.rb
index 0b10290b3..8a8133f69 100644
--- a/vendor/plugins/rspec/lib/spec/mocks/message_expectation.rb
+++ b/vendor/plugins/rspec/lib/spec/mocks/message_expectation.rb
@@ -3,17 +3,20 @@ module Spec
class BaseExpectation
attr_reader :sym
+ attr_writer :expected_received_count, :method_block, :expected_from
+ protected :expected_received_count=, :method_block=, :expected_from=
+ attr_accessor :error_generator
+ protected :error_generator, :error_generator=
- def initialize(error_generator, expectation_ordering, expected_from, sym, method_block, expected_received_count=1, opts={})
+ def initialize(error_generator, expectation_ordering, expected_from, sym, method_block, expected_received_count=1, opts={}, &implementation)
@error_generator = error_generator
@error_generator.opts = opts
@expected_from = expected_from
@sym = sym
@method_block = method_block
- @return_block = nil
@actual_received_count = 0
@expected_received_count = expected_received_count
- @args_expectation = ArgumentExpectation.new([AnyArgsConstraint.new])
+ @args_expectation = ArgumentExpectation.new([ArgumentMatchers::AnyArgsMatcher.new])
@consecutive = false
@exception_to_raise = nil
@symbol_to_throw = nil
@@ -21,6 +24,22 @@ module Spec
@at_least = nil
@at_most = nil
@args_to_yield = []
+ @failed_fast = nil
+ @args_to_yield_were_cloned = false
+ @return_block = implementation
+ end
+
+ def build_child(expected_from, method_block, expected_received_count, opts={})
+ child = clone
+ child.expected_from = expected_from
+ child.method_block = method_block
+ child.expected_received_count = expected_received_count
+ child.clear_actual_received_count!
+ new_gen = error_generator.clone
+ new_gen.opts = opts
+ child.error_generator = new_gen
+ child.clone_args_to_yield @args_to_yield
+ child
end
def expected_args
@@ -39,8 +58,6 @@ module Spec
@expected_received_count < values.size
end
@return_block = block_given? ? return_block : lambda { value }
- # Ruby 1.9 - see where this is used below
- @ignore_args = !block_given?
end
# :call-seq:
@@ -63,16 +80,22 @@ module Spec
end
def and_yield(*args)
+ if @args_to_yield_were_cloned
+ @args_to_yield.clear
+ @args_to_yield_were_cloned = false
+ end
+
@args_to_yield << args
self
end
-
+
def matches(sym, args)
- @sym == sym and @args_expectation.check_args(args)
+ @sym == sym and @args_expectation.args_match?(args)
end
- def invoke(args, block)
+ def invoke(*args, &block)
if @expected_received_count == 0
+ @failed_fast = true
@actual_received_count += 1
@error_generator.raise_expectation_error @sym, @expected_received_count, @actual_received_count, *args
end
@@ -85,17 +108,17 @@ module Spec
if !@method_block.nil?
- default_return_val = invoke_method_block(args)
+ default_return_val = invoke_method_block(*args)
elsif @args_to_yield.size > 0
- default_return_val = invoke_with_yield(block)
+ default_return_val = invoke_with_yield(&block)
else
default_return_val = nil
end
if @consecutive
- return invoke_consecutive_return_block(args, block)
+ return invoke_consecutive_return_block(*args, &block)
elsif @return_block
- return invoke_return_block(args, block)
+ return invoke_return_block(*args, &block)
else
return default_return_val
end
@@ -103,10 +126,23 @@ module Spec
@actual_received_count += 1
end
end
+
+ def called_max_times?
+ @expected_received_count != :any && @expected_received_count > 0 &&
+ @actual_received_count >= @expected_received_count
+ end
+
+ def invoke_return_block(*args, &block)
+ args << block unless block.nil?
+ # Ruby 1.9 - when we set @return_block to return values
+ # regardless of arguments, any arguments will result in
+ # a "wrong number of arguments" error
+ @return_block.arity == 0 ? @return_block.call : @return_block.call(*args)
+ end
protected
- def invoke_method_block(args)
+ def invoke_method_block(*args)
begin
@method_block.call(*args)
rescue => detail
@@ -114,7 +150,7 @@ module Spec
end
end
- def invoke_with_yield(block)
+ def invoke_with_yield(&block)
if block.nil?
@error_generator.raise_missing_block_error @args_to_yield
end
@@ -128,35 +164,34 @@ module Spec
value
end
- def invoke_consecutive_return_block(args, block)
- args << block unless block.nil?
- value = @return_block.call(*args)
-
+ def invoke_consecutive_return_block(*args, &block)
+ value = invoke_return_block(*args, &block)
index = [@actual_received_count, value.size-1].min
value[index]
end
- def invoke_return_block(args, block)
- args << block unless block.nil?
- # Ruby 1.9 - when we set @return_block to return values
- # regardless of arguments, any arguments will result in
- # a "wrong number of arguments" error
- if @ignore_args
- @return_block.call()
- else
- @return_block.call(*args)
- end
+ def clone_args_to_yield(args)
+ @args_to_yield = args.clone
+ @args_to_yield_were_cloned = true
+ end
+
+ def failed_fast?
+ @failed_fast
end
end
class MessageExpectation < BaseExpectation
+
+ def matches_name?(sym)
+ @sym == sym
+ end
def matches_name_but_not_args(sym, args)
- @sym == sym and not @args_expectation.check_args(args)
+ matches_name?(sym) and not @args_expectation.args_match?(args)
end
- def verify_messages_received
- return if expected_messages_received?
+ def verify_messages_received
+ return if expected_messages_received? || failed_fast?
generate_error
rescue Spec::Mocks::MockExpectationError => error
@@ -197,13 +232,12 @@ module Spec
if similar_messages.empty?
@error_generator.raise_expectation_error(@sym, @expected_received_count, @actual_received_count, *@args_expectation.args)
else
- @error_generator.raise_unexpected_message_args_error(self, *@similar_messages.first)
+ @error_generator.raise_unexpected_message_args_error(self, *@similar_messages)
end
end
def with(*args, &block)
- @method_block = block if block
- @args_expectation = ArgumentExpectation.new(args)
+ @args_expectation = ArgumentExpectation.new(args, &block)
self
end
@@ -274,6 +308,10 @@ module Spec
2
end
end
+
+ def clear_actual_received_count!
+ @actual_received_count = 0
+ end
end
diff --git a/vendor/plugins/rspec/lib/spec/mocks/methods.rb b/vendor/plugins/rspec/lib/spec/mocks/methods.rb
index d9fa324d3..16dd6e842 100644
--- a/vendor/plugins/rspec/lib/spec/mocks/methods.rb
+++ b/vendor/plugins/rspec/lib/spec/mocks/methods.rb
@@ -9,8 +9,50 @@ module Spec
__mock_proxy.add_negative_message_expectation(caller(1)[0], sym.to_sym, &block)
end
- def stub!(sym, opts={})
- __mock_proxy.add_stub(caller(1)[0], sym.to_sym, opts)
+ def stub!(sym_or_hash, opts={}, &block)
+ if Hash === sym_or_hash
+ sym_or_hash.each {|method, value| stub!(method).and_return value }
+ else
+ __mock_proxy.add_stub(caller(1)[0], sym_or_hash.to_sym, opts, &block)
+ end
+ end
+
+ alias_method :stub, :stub!
+
+ def unstub!(message)
+ __mock_proxy.remove_stub(message)
+ end
+
+ alias_method :unstub, :unstub!
+
+ # :call-seq:
+ # object.stub_chain(:first, :second, :third).and_return(:this)
+ #
+ # Supports stubbing a chain of methods. Each argument represents
+ # a method name to stub, and each one returns a proxy object that
+ # can accept more stubs, until the last, which returns whatever
+ # is passed to +and_return_.
+ #
+ # == Examples
+ #
+ # # with this in an example ...
+ # article = double('article')
+ # Article.stub_chain(:authored_by, :published, :recent).and_return([article])
+ # # then this will return an Array with the article double in it:
+ # Article.authored_by(params[:author_id]).published.recent
+ def stub_chain(*methods)
+ if methods.length > 1
+ if matching_stub = __mock_proxy.find_matching_method_stub(methods[0])
+ methods.shift
+ matching_stub.invoke_return_block.stub_chain(*methods)
+ else
+ next_in_chain = Object.new
+ stub!(methods.shift) {next_in_chain}
+ next_in_chain.stub_chain(*methods)
+ end
+ else
+ stub!(methods.shift)
+ end
end
def received_message?(sym, *args, &block) #:nodoc:
@@ -24,6 +66,14 @@ module Spec
def rspec_reset #:nodoc:
__mock_proxy.reset
end
+
+ def as_null_object
+ __mock_proxy.as_null_object
+ end
+
+ def null_object?
+ __mock_proxy.null_object?
+ end
private
@@ -31,7 +81,7 @@ module Spec
if Mock === self
@mock_proxy ||= Proxy.new(self, @name, @options)
else
- @mock_proxy ||= Proxy.new(self, self.class.name)
+ @mock_proxy ||= Proxy.new(self)
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/mocks/mock.rb b/vendor/plugins/rspec/lib/spec/mocks/mock.rb
index d0b5f204d..35a6c798e 100644
--- a/vendor/plugins/rspec/lib/spec/mocks/mock.rb
+++ b/vendor/plugins/rspec/lib/spec/mocks/mock.rb
@@ -7,23 +7,37 @@ module Spec
# only) == Options:
# * <tt>:null_object</tt> - if true, the mock object acts as a forgiving
# null object allowing any message to be sent to it.
- def initialize(name, stubs_and_options={})
- @name = name
- @options = parse_options(stubs_and_options)
+ def initialize(name=nil, stubs_and_options={})
+ if name.is_a?(Hash) && stubs_and_options.empty?
+ stubs_and_options = name
+ @name = nil
+ else
+ @name = name
+ end
+ @options = extract_options(stubs_and_options)
assign_stubs(stubs_and_options)
end
-
+
# This allows for comparing the mock to other objects that proxy such as
- # ActiveRecords belongs_to proxy objects By making the other object run
- # the comparison, we're sure the call gets delegated to the proxy target
- # This is an unfortunate side effect from ActiveRecord, but this should
- # be safe unless the RHS redefines == in a nonsensical manner
+ # ActiveRecords belongs_to proxy objects. By making the other object run
+ # the comparison, we're sure the call gets delegated to the proxy
+ # target.
def ==(other)
other == __mock_proxy
end
+ def inspect
+ "#<#{self.class}:#{sprintf '0x%x', self.object_id} @name=#{@name.inspect}>"
+ end
+
+ def to_s
+ inspect.gsub('<','[').gsub('>',']')
+ end
+
+ private
+
def method_missing(sym, *args, &block)
- __mock_proxy.instance_eval {@messages_received << [sym, args, block]}
+ __mock_proxy.record_message_received(sym, args, block)
begin
return self if __mock_proxy.null_object?
super(sym, *args, &block)
@@ -31,22 +45,27 @@ module Spec
__mock_proxy.raise_unexpected_message_error sym, *args
end
end
-
- def inspect
- "#<#{self.class}:#{sprintf '0x%x', self.object_id} @name=#{@name.inspect}>"
+
+ def extract_options(stubs_and_options)
+ options = {}
+ extract_option(stubs_and_options, options, :null_object)
+ extract_option(stubs_and_options, options, :__declared_as, 'Mock')
+ options
end
- private
-
- def parse_options(options)
- options.has_key?(:null_object) ? {:null_object => options.delete(:null_object)} : {}
+ def extract_option(source, target, key, default=nil)
+ if source[key]
+ target[key] = source.delete(key)
+ elsif default
+ target[key] = default
end
-
- def assign_stubs(stubs)
- stubs.each_pair do |message, response|
- stub!(message).and_return(response)
- end
+ end
+
+ def assign_stubs(stubs)
+ stubs.each_pair do |message, response|
+ stub!(message).and_return(response)
end
+ end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/mocks/proxy.rb b/vendor/plugins/rspec/lib/spec/mocks/proxy.rb
index 45b96a30b..acf72e0f3 100644
--- a/vendor/plugins/rspec/lib/spec/mocks/proxy.rb
+++ b/vendor/plugins/rspec/lib/spec/mocks/proxy.rb
@@ -4,41 +4,75 @@ module Spec
DEFAULT_OPTIONS = {
:null_object => false,
}
+
+ @@warn_about_expectations_on_nil = true
+
+ def self.allow_message_expectations_on_nil
+ @@warn_about_expectations_on_nil = false
+
+ # ensure nil.rspec_verify is called even if an expectation is not set in the example
+ # otherwise the allowance would effect subsequent examples
+ $rspec_mocks.add(nil) unless $rspec_mocks.nil?
+ end
- def initialize(target, name, options={})
+ def initialize(target, name=nil, options={})
@target = target
@name = name
- @error_generator = ErrorGenerator.new target, name
+ @error_generator = ErrorGenerator.new target, name, options
@expectation_ordering = OrderGroup.new @error_generator
@expectations = []
@messages_received = []
@stubs = []
@proxied_methods = []
@options = options ? DEFAULT_OPTIONS.dup.merge(options) : DEFAULT_OPTIONS
+ @already_proxied_respond_to = false
end
def null_object?
@options[:null_object]
end
+
+ def as_null_object
+ @options[:null_object] = true
+ @target
+ end
- def add_message_expectation(expected_from, sym, opts={}, &block)
+ def add_message_expectation(expected_from, sym, opts={}, &block)
__add sym
- @expectations << MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil, 1, opts)
+ warn_if_nil_class sym
+ if existing_stub = @stubs.detect {|s| s.sym == sym }
+ expectation = existing_stub.build_child(expected_from, block_given?? block : nil, 1, opts)
+ else
+ expectation = MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil, 1, opts)
+ end
+ @expectations << expectation
@expectations.last
end
def add_negative_message_expectation(expected_from, sym, &block)
__add sym
+ warn_if_nil_class sym
@expectations << NegativeMessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil)
@expectations.last
end
- def add_stub(expected_from, sym, opts={})
+ def add_stub(expected_from, sym, opts={}, &implementation)
__add sym
- @stubs.unshift MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, nil, :any, opts)
+ @stubs.unshift MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, nil, :any, opts, &implementation)
@stubs.first
end
+ def remove_stub(message)
+ message = message.to_sym
+
+ if stub_to_remove = @stubs.detect { |s| s.matches_name?(message) }
+ reset_proxied_method(message)
+ @stubs.delete(stub_to_remove)
+ else
+ raise MockExpectationError, "The method `#{message}` was not stubbed or was already unstubbed"
+ end
+ end
+
def verify #:nodoc:
verify_expectations
ensure
@@ -50,6 +84,7 @@ module Spec
clear_stubs
reset_proxied_methods
clear_proxied_methods
+ reset_nil_expectations_warning
end
def received_message?(sym, *args, &block)
@@ -59,20 +94,27 @@ module Spec
def has_negative_expectation?(sym)
@expectations.detect {|expectation| expectation.negative_expectation_for?(sym)}
end
+
+ def record_message_received(sym, args, block)
+ @messages_received << [sym, args, block]
+ end
def message_received(sym, *args, &block)
- if expectation = find_matching_expectation(sym, *args)
- expectation.invoke(args, block)
- elsif (stub = find_matching_method_stub(sym, *args))
+ expectation = find_matching_expectation(sym, *args)
+ stub = find_matching_method_stub(sym, *args)
+
+ if (stub && expectation && expectation.called_max_times?) || (stub && !expectation)
if expectation = find_almost_matching_expectation(sym, *args)
expectation.advise(args, block) unless expectation.expected_messages_received?
end
- stub.invoke([], block)
+ stub.invoke(*args, &block)
+ elsif expectation
+ expectation.invoke(*args, &block)
elsif expectation = find_almost_matching_expectation(sym, *args)
expectation.advise(args, block) if null_object? unless expectation.expected_messages_received?
raise_unexpected_message_args_error(expectation, *args) unless (has_negative_expectation?(sym) or null_object?)
else
- @target.send :method_missing, sym, *args, &block
+ @target.__send__ :method_missing, sym, *args, &block
end
end
@@ -84,6 +126,10 @@ module Spec
@error_generator.raise_unexpected_message_error sym, *args
end
+ def find_matching_method_stub(sym, *args)
+ @stubs.find {|stub| stub.matches(sym, args)}
+ end
+
private
def __add(sym)
@@ -91,28 +137,35 @@ module Spec
define_expected_method(sym)
end
+ def warn_if_nil_class(sym)
+ if proxy_for_nil_class? & @@warn_about_expectations_on_nil
+ Kernel.warn("An expectation of :#{sym} was set on nil. Called from #{caller[2]}. Use allow_message_expectations_on_nil to disable warnings.")
+ end
+ end
+
def define_expected_method(sym)
- visibility_string = "#{visibility(sym)} :#{sym}"
- if target_responds_to?(sym) && !target_metaclass.method_defined?(munge(sym))
- munged_sym = munge(sym)
- target_metaclass.instance_eval do
- alias_method munged_sym, sym if method_defined?(sym.to_s)
+ unless @proxied_methods.include?(sym)
+ visibility_string = "#{visibility(sym)} :#{sym}"
+ if target_responds_to?(sym)
+ munged_sym = munge(sym)
+ target_metaclass.instance_eval do
+ alias_method munged_sym, sym if method_defined?(sym)
+ end
+ @proxied_methods << sym
end
- @proxied_methods << sym
+ target_metaclass.class_eval(<<-EOF, __FILE__, __LINE__)
+ def #{sym}(*args, &block)
+ __mock_proxy.message_received :#{sym}, *args, &block
+ end
+ #{visibility_string}
+ EOF
end
-
- target_metaclass.class_eval(<<-EOF, __FILE__, __LINE__)
- def #{sym}(*args, &block)
- __mock_proxy.message_received :#{sym}, *args, &block
- end
- #{visibility_string}
- EOF
end
def target_responds_to?(sym)
- return @target.send(munge(:respond_to?),sym) if @already_proxied_respond_to
+ return @target.__send__(munge(:respond_to?),sym) if @already_proxied_respond_to
return @already_proxied_respond_to = true if sym == :respond_to?
- return @target.respond_to?(sym)
+ return @target.respond_to?(sym, true)
end
def visibility(sym)
@@ -128,7 +181,7 @@ module Spec
end
def munge(sym)
- "proxied_by_rspec__#{sym.to_s}".to_sym
+ "proxied_by_rspec__#{sym}"
end
def clear_expectations
@@ -155,19 +208,31 @@ module Spec
def reset_proxied_methods
@proxied_methods.each do |sym|
- munged_sym = munge(sym)
- target_metaclass.instance_eval do
- if method_defined?(munged_sym.to_s)
- alias_method sym, munged_sym
- undef_method munged_sym
- else
- undef_method sym
- end
+ reset_proxied_method(sym)
+ end
+ end
+
+ def reset_proxied_method(sym)
+ munged_sym = munge(sym)
+ target_metaclass.instance_eval do
+ remove_method sym
+ if method_defined?(munged_sym)
+ alias_method sym, munged_sym
+ remove_method munged_sym
end
end
end
+
+ def proxy_for_nil_class?
+ @target.nil?
+ end
+
+ def reset_nil_expectations_warning
+ @@warn_about_expectations_on_nil = true if proxy_for_nil_class?
+ end
def find_matching_expectation(sym, *args)
+ @expectations.find {|expectation| expectation.matches(sym, args) && !expectation.called_max_times?} ||
@expectations.find {|expectation| expectation.matches(sym, args)}
end
@@ -175,10 +240,6 @@ module Spec
@expectations.find {|expectation| expectation.matches_name_but_not_args(sym, args)}
end
- def find_matching_method_stub(sym, *args)
- @stubs.find {|stub| stub.matches(sym, args)}
- end
-
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/mocks/spec_methods.rb b/vendor/plugins/rspec/lib/spec/mocks/spec_methods.rb
deleted file mode 100644
index d92a4cedd..000000000
--- a/vendor/plugins/rspec/lib/spec/mocks/spec_methods.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-module Spec
- module Mocks
- module ExampleMethods
- include Spec::Mocks::ArgumentConstraintMatchers
-
- # Shortcut for creating an instance of Spec::Mocks::Mock.
- #
- # +name+ is used for failure reporting, so you should use the
- # role that the mock is playing in the example.
- #
- # +stubs_and_options+ lets you assign options and stub values
- # at the same time. The only option available is :null_object.
- # Anything else is treated as a stub value.
- #
- # == Examples
- #
- # stub_thing = mock("thing", :a => "A")
- # stub_thing.a == "A" => true
- #
- # stub_person = stub("thing", :name => "Joe", :email => "joe@domain.com")
- # stub_person.name => "Joe"
- # stub_person.email => "joe@domain.com"
- def mock(name, stubs_and_options={})
- Spec::Mocks::Mock.new(name, stubs_and_options)
- end
-
- alias :stub :mock
-
- # Shortcut for creating a mock object that will return itself in response
- # to any message it receives that it hasn't been explicitly instructed
- # to respond to.
- def stub_everything(name = 'stub')
- mock(name, :null_object => true)
- end
-
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/rake/spectask.rb b/vendor/plugins/rspec/lib/spec/rake/spectask.rb
index ecf39506d..9049fd08e 100644
--- a/vendor/plugins/rspec/lib/spec/rake/spectask.rb
+++ b/vendor/plugins/rspec/lib/spec/rake/spectask.rb
@@ -48,7 +48,6 @@ module Spec
# This task can also be used to run existing Test::Unit tests and get RSpec
# output, for example like this:
#
- # require 'rubygems'
# require 'spec/rake/spectask'
# Spec::Rake::SpecTask.new do |t|
# t.ruby_opts = ['-rtest/unit']
@@ -56,12 +55,10 @@ module Spec
# end
#
class SpecTask < ::Rake::TaskLib
- class << self
- def attr_accessor(*names)
- super(*names)
- names.each do |name|
- module_eval "def #{name}() evaluate(@#{name}) end" # Allows use of procs
- end
+ def self.attr_accessor(*names)
+ super(*names)
+ names.each do |name|
+ module_eval "def #{name}() evaluate(@#{name}) end" # Allows use of procs
end
end
@@ -107,7 +104,7 @@ module Spec
# A message to print to stderr when there are failures.
attr_accessor :failure_message
- # Where RSpec's output is written. Defaults to STDOUT.
+ # Where RSpec's output is written. Defaults to $stdout.
# DEPRECATED. Use --format FORMAT:WHERE in spec_opts.
attr_accessor :out
@@ -122,10 +119,13 @@ module Spec
# the executed spec command to stdout. Defaults to false.
attr_accessor :verbose
+ # Explicitly define the path to the ruby binary, or its proxy (e.g. multiruby)
+ attr_accessor :ruby_cmd
+
# Defines a new task, using the name +name+.
def initialize(name=:spec)
@name = name
- @libs = [File.expand_path(File.dirname(__FILE__) + '/../../../lib')]
+ @libs = ['lib']
@pattern = nil
@spec_files = nil
@spec_opts = []
@@ -142,7 +142,7 @@ module Spec
end
def define # :nodoc:
- spec_script = File.expand_path(File.dirname(__FILE__) + '/../../../bin/spec')
+ spec_script = File.expand_path(File.join(File.dirname(__FILE__),"..","..","..","bin","spec"))
lib_path = libs.join(File::PATH_SEPARATOR)
actual_name = Hash === name ? name.keys.first : name
@@ -155,30 +155,23 @@ module Spec
# ruby [ruby_opts] -Ilib -S rcov [rcov_opts] bin/spec -- examples [spec_opts]
# or
# ruby [ruby_opts] -Ilib bin/spec examples [spec_opts]
- cmd = "#{File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])} "
-
- rb_opts = ruby_opts.clone
- rb_opts << "-I\"#{lib_path}\""
- rb_opts << "-S rcov" if rcov
- rb_opts << "-w" if warning
- cmd << rb_opts.join(" ")
- cmd << " "
- cmd << rcov_option_list
- cmd << %[ -o "#{rcov_dir}" ] if rcov
- cmd << %Q|"#{spec_script}"|
- cmd << " "
- cmd << "-- " if rcov
- cmd << spec_file_list.collect { |fn| %["#{fn}"] }.join(' ')
- cmd << " "
- cmd << spec_option_list
+ cmd_parts = [ruby_cmd || RUBY]
+ cmd_parts += ruby_opts
+ cmd_parts << %[-I"#{lib_path}"]
+ cmd_parts << "-S rcov" if rcov
+ cmd_parts << "-w" if warning
+ cmd_parts << rcov_option_list
+ cmd_parts << %[-o "#{rcov_dir}"] if rcov
+ cmd_parts << %["#{spec_script}"]
+ cmd_parts << "--" if rcov
+ cmd_parts += spec_file_list.collect { |fn| %["#{fn}"] }
+ cmd_parts << spec_option_list
if out
- cmd << " "
- cmd << %Q| > "#{out}"|
+ cmd_parts << %[> "#{out}"]
STDERR.puts "The Spec::Rake::SpecTask#out attribute is DEPRECATED and will be removed in a future version. Use --format FORMAT:WHERE instead."
end
- if verbose
- puts cmd
- end
+ cmd = cmd_parts.join(" ")
+ puts cmd if verbose
unless system(cmd)
STDERR.puts failure_message if failure_message
raise("Command #{cmd} failed") if fail_on_error
@@ -202,8 +195,11 @@ module Spec
end
def rcov_option_list # :nodoc:
- return "" unless rcov
- ENV['RCOV_OPTS'] || rcov_opts.join(" ") || ""
+ if rcov
+ ENV['RCOV_OPTS'] || rcov_opts.join(" ") || ""
+ else
+ ""
+ end
end
def spec_option_list # :nodoc:
@@ -232,4 +228,3 @@ module Spec
end
end
end
-
diff --git a/vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb b/vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb
index 3328f9e9a..199bd8546 100644
--- a/vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb
+++ b/vendor/plugins/rspec/lib/spec/rake/verify_rcov.rb
@@ -35,11 +35,11 @@ module RCov
def define
desc "Verify that rcov coverage is at least #{threshold}%"
task @name do
- total_coverage = nil
+ total_coverage = 0
File.open(index_html).each_line do |line|
- if line =~ /<tt class='coverage_total'>(\d+\.\d+)%<\/tt>/
- total_coverage = eval($1)
+ if line =~ /<tt class='coverage_total'>\s*(\d+\.\d+)%\s*<\/tt>/
+ total_coverage = $1.to_f
break
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner.rb b/vendor/plugins/rspec/lib/spec/runner.rb
index 97ef95bd2..519b536e2 100644
--- a/vendor/plugins/rspec/lib/spec/runner.rb
+++ b/vendor/plugins/rspec/lib/spec/runner.rb
@@ -1,3 +1,4 @@
+require 'spec/runner/configuration'
require 'spec/runner/options'
require 'spec/runner/option_parser'
require 'spec/runner/example_group_runner'
@@ -5,170 +6,26 @@ require 'spec/runner/command_line'
require 'spec/runner/drb_command_line'
require 'spec/runner/backtrace_tweaker'
require 'spec/runner/reporter'
-require 'spec/runner/spec_parser'
+require 'spec/runner/line_number_query'
require 'spec/runner/class_and_arguments_parser'
+require 'spec/runner/extensions/kernel'
module Spec
- # == ExampleGroups and Examples
- #
- # Rather than expressing examples in classes, RSpec uses a custom DSLL (DSL light) to
- # describe groups of examples.
- #
- # A ExampleGroup is the equivalent of a fixture in xUnit-speak. It is a metaphor for the context
- # in which you will run your executable example - a set of known objects in a known starting state.
- # We begin be describing
- #
- # describe Account do
- #
- # before do
- # @account = Account.new
- # end
- #
- # it "should have a balance of $0" do
- # @account.balance.should == Money.new(0, :dollars)
- # end
- #
- # end
- #
- # We use the before block to set up the Example (given), and then the #it method to
- # hold the example code that expresses the event (when) and the expected outcome (then).
- #
- # == Helper Methods
- #
- # A primary goal of RSpec is to keep the examples clear. We therefore prefer
- # less indirection than you might see in xUnit examples and in well factored, DRY production code. We feel
- # that duplication is OK if removing it makes it harder to understand an example without
- # having to look elsewhere to understand its context.
- #
- # That said, RSpec does support some level of encapsulating common code in helper
- # methods that can exist within a context or within an included module.
- #
- # == Setup and Teardown
- #
- # You can use before and after within a Example. Both methods take an optional
- # scope argument so you can run the block before :each example or before :all examples
- #
- # describe "..." do
- # before :all do
- # ...
- # end
- #
- # before :each do
- # ...
- # end
- #
- # it "should do something" do
- # ...
- # end
- #
- # it "should do something else" do
- # ...
- # end
- #
- # after :each do
- # ...
- # end
- #
- # after :all do
- # ...
- # end
- #
- # end
- #
- # The <tt>before :each</tt> block will run before each of the examples, once for each example. Likewise,
- # the <tt>after :each</tt> block will run after each of the examples.
- #
- # It is also possible to specify a <tt>before :all</tt> and <tt>after :all</tt>
- # block that will run only once for each behaviour, respectively before the first <code>before :each</code>
- # and after the last <code>after :each</code>. The use of these is generally discouraged, because it
- # introduces dependencies between the examples. Still, it might prove useful for very expensive operations
- # if you know what you are doing.
- #
- # == Local helper methods
- #
- # You can include local helper methods by simply expressing them within a context:
- #
- # describe "..." do
- #
- # it "..." do
- # helper_method
- # end
- #
- # def helper_method
- # ...
- # end
- #
- # end
- #
- # == Included helper methods
- #
- # You can include helper methods in multiple contexts by expressing them within
- # a module, and then including that module in your context:
- #
- # module AccountExampleHelperMethods
- # def helper_method
- # ...
- # end
- # end
- #
- # describe "A new account" do
- # include AccountExampleHelperMethods
- # before do
- # @account = Account.new
- # end
- #
- # it "should have a balance of $0" do
- # helper_method
- # @account.balance.should eql(Money.new(0, :dollars))
- # end
- # end
- #
- # == Shared Example Groups
- #
- # You can define a shared Example Group, that may be used on other groups
- #
- # share_examples_for "All Editions" do
- # it "all editions behaviour" ...
- # end
- #
- # describe SmallEdition do
- # it_should_behave_like "All Editions"
- #
- # it "should do small edition stuff" do
- # ...
- # end
- # end
- #
- # You can also assign the shared group to a module and include that
- #
- # share_as :AllEditions do
- # it "should do all editions stuff" ...
- # end
- #
- # describe SmallEdition do
- # it_should_behave_like AllEditions
- #
- # it "should do small edition stuff" do
- # ...
- # end
- # end
- #
- # And, for those of you who prefer to use something more like Ruby, you
- # can just include the module directly
- #
- # describe SmallEdition do
- # include AllEditions
- #
- # it "should do small edition stuff" do
- # ...
- # end
- # end
module Runner
+
+ class ExampleGroupCreationListener
+ def register_example_group(klass)
+ Spec::Runner.options.add_example_group klass
+ end
+ end
+
+ Spec::Example::ExampleGroupFactory.example_group_creation_listeners << ExampleGroupCreationListener.new
+
class << self
def configuration # :nodoc:
- @configuration ||= Spec::Example::Configuration.new
+ @configuration ||= Spec::Runner::Configuration.new
end
-
+
# Use this to configure various configurable aspects of
# RSpec:
#
@@ -177,26 +34,33 @@ module Spec
# end
#
# The yielded <tt>configuration</tt> object is a
- # Spec::Example::Configuration instance. See its RDoc
+ # Spec::Runner::Configuration instance. See its RDoc
# for details about what you can do with it.
#
def configure
yield configuration
end
- def register_at_exit_hook # :nodoc:
- $spec_runner_at_exit_hook_registered ||= nil
- unless $spec_runner_at_exit_hook_registered
- at_exit do
- unless $! || Spec.run?; \
- success = Spec.run; \
- exit success if Spec.exit?; \
- end
- end
- $spec_runner_at_exit_hook_registered = true
+ def autorun # :nodoc:
+ at_exit {exit run unless $!}
+ end
+
+ def options # :nodoc:
+ @options ||= begin
+ parser = ::Spec::Runner::OptionParser.new($stderr, $stdout)
+ parser.order!(ARGV)
+ parser.options
end
end
-
+
+ def use options
+ @options = options
+ end
+
+ def run
+ options.examples_run? || options.run_examples
+ end
+
end
end
-end
+end \ No newline at end of file
diff --git a/vendor/plugins/rspec/lib/spec/runner/backtrace_tweaker.rb b/vendor/plugins/rspec/lib/spec/runner/backtrace_tweaker.rb
index 587e57d90..a3cb7d9bd 100644
--- a/vendor/plugins/rspec/lib/spec/runner/backtrace_tweaker.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/backtrace_tweaker.rb
@@ -1,31 +1,53 @@
module Spec
module Runner
class BacktraceTweaker
+ def initialize(*patterns)
+ @ignore_patterns = []
+ end
+
def clean_up_double_slashes(line)
line.gsub!('//','/')
end
- end
- class NoisyBacktraceTweaker < BacktraceTweaker
+ def ignore_patterns(*patterns)
+ # do nothing. Only QuietBacktraceTweaker ignores patterns.
+ end
+
+ def ignored_patterns
+ []
+ end
+
def tweak_backtrace(error)
return if error.backtrace.nil?
- error.backtrace.each do |line|
- clean_up_double_slashes(line)
+ tweaked = error.backtrace.collect do |message|
+ clean_up_double_slashes(message)
+ kept_lines = message.split("\n").select do |line|
+ ignored_patterns.each do |ignore|
+ break if line =~ ignore
+ end
+ end
+ kept_lines.empty?? nil : kept_lines.join("\n")
end
+ error.set_backtrace(tweaked.select {|line| line})
end
end
+ class NoisyBacktraceTweaker < BacktraceTweaker
+ end
+
# Tweaks raised Exceptions to mask noisy (unneeded) parts of the backtrace
class QuietBacktraceTweaker < BacktraceTweaker
unless defined?(IGNORE_PATTERNS)
- root_dir = File.expand_path(File.join(__FILE__, '..', '..', '..', '..'))
- spec_files = Dir["#{root_dir}/lib/*"].map do |path|
- subpath = path[root_dir.length..-1]
+ spec_files = Dir["lib/*"].map do |path|
+ subpath = path[1..-1]
/#{subpath}/
end
IGNORE_PATTERNS = spec_files + [
+ /\/rspec-[^\/]*\/lib\/spec\//,
+ /\/spork-[^\/]*\/lib\/spork\//,
/\/lib\/ruby\//,
/bin\/spec:/,
+ /bin\/spork:/,
/bin\/rcov:/,
/lib\/rspec-rails/,
/vendor\/rails/,
@@ -37,20 +59,18 @@ module Spec
/spec_server/
]
end
-
- def tweak_backtrace(error)
- return if error.backtrace.nil?
- error.backtrace.collect! do |line|
- clean_up_double_slashes(line)
- IGNORE_PATTERNS.each do |ignore|
- if line =~ ignore
- line = nil
- break
- end
- end
- line
- end
- error.backtrace.compact!
+
+ def initialize(*patterns)
+ super
+ ignore_patterns(*patterns)
+ end
+
+ def ignore_patterns(*patterns)
+ @ignore_patterns += patterns.flatten.map { |pattern| Regexp.new(pattern) }
+ end
+
+ def ignored_patterns
+ IGNORE_PATTERNS + @ignore_patterns
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/class_and_arguments_parser.rb b/vendor/plugins/rspec/lib/spec/runner/class_and_arguments_parser.rb
index 65dc4519c..a49ade26e 100644
--- a/vendor/plugins/rspec/lib/spec/runner/class_and_arguments_parser.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/class_and_arguments_parser.rb
@@ -1,16 +1,14 @@
module Spec
module Runner
class ClassAndArgumentsParser
- class << self
- def parse(s)
- if s =~ /([a-zA-Z_]+(?:::[a-zA-Z_]+)*):?(.*)/
- arg = $2 == "" ? nil : $2
- [$1, arg]
- else
- raise "Couldn't parse #{s.inspect}"
- end
+ def self.parse(s)
+ if s =~ /([a-zA-Z_]+(?:::[a-zA-Z_]+)*):?(.*)/
+ arg = $2 == "" ? nil : $2
+ [$1, arg]
+ else
+ raise "Couldn't parse #{s.inspect}"
end
end
end
end
-end \ No newline at end of file
+end
diff --git a/vendor/plugins/rspec/lib/spec/runner/command_line.rb b/vendor/plugins/rspec/lib/spec/runner/command_line.rb
index 9849c4853..35a7e3159 100644
--- a/vendor/plugins/rspec/lib/spec/runner/command_line.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/command_line.rb
@@ -2,26 +2,13 @@ require 'spec/runner/option_parser'
module Spec
module Runner
- # Facade to run specs without having to fork a new ruby process (using `spec ...`)
class CommandLine
- class << self
- # Runs specs. +argv+ is the commandline args as per the spec commandline API, +err+
- # and +out+ are the streams output will be written to.
- def run(instance_rspec_options)
- # NOTE - this call to init_rspec_options is not spec'd, but neither is any of this
- # swapping of $rspec_options. That is all here to enable rspec to run against itself
- # and maintain coverage in a single process. Therefore, DO NOT mess with this stuff
- # unless you know what you are doing!
- init_rspec_options(instance_rspec_options)
- orig_rspec_options = rspec_options
- begin
- $rspec_options = instance_rspec_options
- return $rspec_options.run_examples
- ensure
- ::Spec.run = true
- $rspec_options = orig_rspec_options
- end
- end
+ def self.run(tmp_options=Spec::Runner.options)
+ orig_options = Spec::Runner.options
+ Spec::Runner.use tmp_options
+ tmp_options.run_examples
+ ensure
+ Spec::Runner.use orig_options
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/drb_command_line.rb b/vendor/plugins/rspec/lib/spec/runner/drb_command_line.rb
index 6c340cfea..058a8e1df 100644
--- a/vendor/plugins/rspec/lib/spec/runner/drb_command_line.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/drb_command_line.rb
@@ -8,11 +8,17 @@ module Spec
# CommandLine - making it possible for clients to use both interchangeably.
def self.run(options)
begin
- DRb.start_service
- spec_server = DRbObject.new_with_uri("druby://localhost:8989")
+ begin; \
+ DRb.start_service("druby://localhost:0"); \
+ rescue SocketError; \
+ DRb.start_service("druby://:0"); \
+ end
+ spec_server = DRbObject.new_with_uri("druby://127.0.0.1:8989")
spec_server.run(options.argv, options.error_stream, options.output_stream)
- rescue DRb::DRbConnError => e
+ true
+ rescue DRb::DRbConnError
options.error_stream.puts "No server is running"
+ false
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/example_group_runner.rb b/vendor/plugins/rspec/lib/spec/runner/example_group_runner.rb
index 7275c6a88..67dc99509 100644
--- a/vendor/plugins/rspec/lib/spec/runner/example_group_runner.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/example_group_runner.rb
@@ -6,6 +6,7 @@ module Spec
end
def load_files(files)
+ $KCODE = 'u' if RUBY_VERSION.to_f < 1.9
# It's important that loading files (or choosing not to) stays the
# responsibility of the ExampleGroupRunner. Some implementations (like)
# the one using DRb may choose *not* to load files, but instead tell
@@ -19,14 +20,15 @@ module Spec
prepare
success = true
example_groups.each do |example_group|
- success = success & example_group.run
+ success = success & example_group.run(@options)
end
return success
ensure
finish
end
- protected
+ protected
+
def prepare
reporter.start(number_of_examples)
example_groups.reverse! if reverse
@@ -53,7 +55,5 @@ module Spec
@options.number_of_examples
end
end
- # TODO: BT - Deprecate BehaviourRunner?
- BehaviourRunner = ExampleGroupRunner
end
-end \ No newline at end of file
+end
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/base_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/base_formatter.rb
index a1269b513..0fbc12ce4 100644
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/base_formatter.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/formatter/base_formatter.rb
@@ -1,12 +1,29 @@
module Spec
module Runner
module Formatter
- # Baseclass for formatters that implements all required methods as no-ops.
+ # Formatter base-class, which implements all required methods as no-ops, with the exception
class BaseFormatter
- attr_accessor :example_group, :options, :where
- def initialize(options, where)
- @options = options
- @where = where
+ # Formatters are initialized with <tt>options</tt> and <tt>output</tt>
+ # arguments. RSpec's built-in formatters already expect this, and any
+ # custom formatters should as well.
+ #
+ # ==== Parameters
+ # options::
+ # A struct containing boolean values for colour, autospec,
+ # and dry_run
+ # output::
+ # Used by RSpec's built-in formatters to determine where to
+ # write the output. Default is <tt>STDOUT</tt>, otherwise a
+ # filename is expected.
+ #
+ # === Example
+ # If you invoke the <tt>spec</tt> command with:
+ #
+ # --format progress:progress_report.txt
+ #
+ # ... the value of <tt>output</tt> will be progress_report.txt. If you
+ # don't identify an output destination, the default is STDOUT.
+ def initialize(options, output)
end
# This method is invoked before any examples are run, right after
@@ -14,42 +31,77 @@ module Spec
# formatters that need to provide progress on feedback (graphical ones)
#
# This method will only be invoked once, and the next one to be invoked
- # is #add_example_group
+ # is #example_group_started
+ #
+ # ==== Parameters
+ # example_count:: the total number of examples to be run
def start(example_count)
end
- # This method is invoked at the beginning of the execution of each example_group.
- # +example_group+ is the example_group.
+ # This method is invoked at the beginning of the execution of each
+ # example_group. The next method to be invoked after this is
+ # #example_started
#
- # The next method to be invoked after this is #example_failed or #example_finished
- def add_example_group(example_group)
- @example_group = example_group
+ # ==== Parameters
+ # example_group_proxy:: instance of Spec::Example::ExampleGroupProxy
+ def example_group_started(example_group_proxy)
+ end
+
+ # Deprecated - use example_group_started instead
+ def add_example_group(example_group_proxy)
+ Spec.deprecate("BaseFormatter#add_example_group", "BaseFormatter#example_group_started")
+ example_group_started(example_group_proxy)
end
- # This method is invoked when an +example+ starts.
- def example_started(example)
+ # This method is invoked when an +example+ starts. The next method to be
+ # invoked after this is #example_passed, #example_failed, or
+ # #example_pending
+ #
+ # ==== Parameters
+ # example_proxy:: instance of Spec::Example::ExampleProxy
+ def example_started(example_proxy)
end
# This method is invoked when an +example+ passes.
- def example_passed(example)
+ # +example_proxy+ is the same instance of Spec::Example::ExampleProxy
+ # that was passed to example_started
+ #
+ # ==== Parameters
+ # example_proxy:: instance of Spec::Example::ExampleProxy
+ def example_passed(example_proxy)
end
# This method is invoked when an +example+ fails, i.e. an exception occurred
- # inside it (such as a failed should or other exception). +counter+ is the
- # sequence number of the failure (starting at 1) and +failure+ is the associated
- # Failure object.
- def example_failed(example, counter, failure)
+ # inside it (such as a failed should or other exception).
+ #
+ # ==== Parameters
+ # example_proxy::
+ # The same instance of Spec::Example::ExampleProxy that was passed
+ # to <tt>example_started</tt>
+ #
+ # counter:: the sequential number of this failure
+ #
+ # failure:: instance of Spec::Runner::Reporter::Failure
+ def example_failed(example_proxy, counter, failure)
end
# This method is invoked when an example is not yet implemented (i.e. has not
# been provided a block), or when an ExamplePendingError is raised.
# +message+ is the message from the ExamplePendingError, if it exists, or the
- # default value of "Not Yet Implemented"
- def example_pending(example, message)
+ # default value of "Not Yet Implemented". +deprecated_pending_location+ is
+ # deprecated - use example_proxy.location instead
+ #
+ # ==== Parameters
+ # example_proxy:: instance of Spec::Example::ExampleProxy
+ # message::
+ # the message passed to the pending message, or an internal
+ # default
+ #
+ def example_pending(example_proxy, message, deprecated_pending_location=nil)
end
# This method is invoked after all of the examples have executed. The next method
- # to be invoked after this one is #dump_failure (once for each failed example),
+ # to be invoked after this one is #dump_failure (once for each failed example)
def start_dump
end
@@ -57,14 +109,24 @@ module Spec
# This method is invoked for each failed example after all examples have run. +counter+ is the sequence number
# of the associated example. +failure+ is a Failure object, which contains detailed
# information about the failure.
+ #
+ # ==== Parameters
+ # counter:: the sequential number of this failure
+ # failure:: instance of Spec::Runner::Reporter::Failure
def dump_failure(counter, failure)
end
# This method is invoked after the dumping of examples and failures.
+ #
+ # ==== Parameters
+ # duration:: the total time for the entire run
+ # example_count:: the number of examples run
+ # failure_count:: the number of examples that failed
+ # pending_count:: the number of examples that are pending
def dump_summary(duration, example_count, failure_count, pending_count)
end
- # This gets invoked after the summary if option is set to do so.
+ # This gets invoked after the summary
def dump_pending
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/base_text_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/base_text_formatter.rb
index bad023db7..ee8db75a4 100644
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/base_text_formatter.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/formatter/base_text_formatter.rb
@@ -1,4 +1,5 @@
require 'spec/runner/formatter/base_formatter'
+require 'fileutils'
module Spec
module Runner
@@ -7,47 +8,47 @@ module Spec
# non-text based ones too - just ignore the +output+ constructor
# argument.
class BaseTextFormatter < BaseFormatter
- attr_reader :output, :pending_examples
- # Creates a new instance that will write to +where+. If +where+ is a
+ attr_reader :output, :example_group
+ # Creates a new instance that will write to +output+. If +output+ is a
# String, output will be written to the File with that name, otherwise
- # +where+ is exected to be an IO (or an object that responds to #puts and #write).
- def initialize(options, where)
- super
- if where.is_a?(String)
- @output = File.open(where, 'w')
- elsif where == STDOUT
- @output = Kernel
- def @output.flush
- STDOUT.flush
- end
+ # +output+ is exected to be an IO (or an object that responds to #puts
+ # and #write).
+ def initialize(options, output)
+ @options = options
+ if String === output
+ FileUtils.mkdir_p(File.dirname(output))
+ @output = File.open(output, 'w')
else
- @output = where
+ @output = output
end
@pending_examples = []
end
+
+ def example_group_started(example_group_proxy)
+ @example_group = example_group_proxy
+ end
- def example_pending(example, message)
- @pending_examples << [example.__full_description, message]
+ def example_pending(example, message, deprecated_pending_location=nil)
+ @pending_examples << ["#{@example_group.description} #{example.description}", message, example.location]
end
def dump_failure(counter, failure)
@output.puts
@output.puts "#{counter.to_s})"
- @output.puts colourise("#{failure.header}\n#{failure.exception.message}", failure)
+ @output.puts colorize_failure("#{failure.header}\n#{failure.exception.message}", failure)
@output.puts format_backtrace(failure.exception.backtrace)
@output.flush
end
- def colourise(s, failure)
- if(failure.expectation_not_met?)
- red(s)
- elsif(failure.pending_fixed?)
- blue(s)
- else
- magenta(s)
- end
+ def colorize_failure(message, failure)
+ failure.pending_fixed? ? blue(message) : red(message)
end
-
+
+ def colourise(message, failure)
+ Spec::deprecate("BaseTextFormatter#colourise", "colorize_failure")
+ colorize_failure(message, failure)
+ end
+
def dump_summary(duration, example_count, failure_count, pending_count)
return if dry_run?
@output.puts
@@ -74,16 +75,15 @@ module Spec
@output.puts
@output.puts "Pending:"
@pending_examples.each do |pending_example|
- @output.puts "#{pending_example[0]} (#{pending_example[1]})"
+ @output.puts "\n#{pending_example[0]} (#{pending_example[1]})"
+ @output.puts "#{pending_example[2]}\n"
end
end
@output.flush
end
def close
- if IO === @output
- @output.close
- end
+ @output.close if (IO === @output) & (@output != $stdout)
end
def format_backtrace(backtrace)
@@ -94,11 +94,15 @@ module Spec
protected
def colour?
- @options.colour ? true : false
+ !!@options.colour
end
def dry_run?
- @options.dry_run ? true : false
+ !!@options.dry_run
+ end
+
+ def autospec?
+ !!@options.autospec || ENV.has_key?("AUTOTEST")
end
def backtrace_line(line)
@@ -106,13 +110,18 @@ module Spec
end
def colour(text, colour_code)
- return text unless colour? && output_to_tty?
+ return text if output_to_file?
+ return text unless ENV['RSPEC_COLOR'] || (colour? & (autospec? || output_to_tty?))
"#{colour_code}#{text}\e[0m"
end
+ def output_to_file?
+ File === @output
+ end
+
def output_to_tty?
begin
- @output == Kernel || @output.tty?
+ @output.tty?
rescue NoMethodError
false
end
@@ -120,10 +129,13 @@ module Spec
def green(text); colour(text, "\e[32m"); end
def red(text); colour(text, "\e[31m"); end
- def magenta(text); colour(text, "\e[35m"); end
def yellow(text); colour(text, "\e[33m"); end
def blue(text); colour(text, "\e[34m"); end
+ def magenta(text)
+ Spec::deprecate("BaseTextFormatter#magenta")
+ red(text)
+ end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/failing_example_groups_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/failing_example_groups_formatter.rb
index 8d39bc572..31729438b 100644
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/failing_example_groups_formatter.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/formatter/failing_example_groups_formatter.rb
@@ -6,21 +6,19 @@ module Spec
class FailingExampleGroupsFormatter < BaseTextFormatter
def example_failed(example, counter, failure)
if @example_group
- description_parts = @example_group.description_parts.collect do |description|
- description =~ /(.*) \(druby.*\)$/ ? $1 : description
- end
- @output.puts ::Spec::Example::ExampleGroupMethods.description_text(*description_parts)
+ @output.puts @example_group.description.gsub(/ \(druby.*\)/,"")
@output.flush
@example_group = nil
end
end
-
+
def dump_failure(counter, failure)
end
def dump_summary(duration, example_count, failure_count, pending_count)
end
+
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/html_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/html_formatter.rb
index e5368f2cb..2d0c65d1b 100644
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/html_formatter.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/formatter/html_formatter.rb
@@ -1,22 +1,21 @@
require 'erb'
require 'spec/runner/formatter/base_text_formatter'
+require 'spec/runner/formatter/no_op_method_missing'
module Spec
module Runner
module Formatter
class HtmlFormatter < BaseTextFormatter
include ERB::Util # for the #h method
+ include NOOPMethodMissing
def initialize(options, output)
super
@example_group_number = 0
@example_number = 0
+ @header_red = nil
end
- def method_missing(sym, *args)
- # no-op
- end
-
# The number of the currently running example_group
def example_group_number
@example_group_number
@@ -35,10 +34,9 @@ module Spec
@output.flush
end
- def add_example_group(example_group)
+ def example_group_started(example_group)
super
@example_group_red = false
- @example_group_red = false
@example_group_number += 1
unless example_group_number == 1
@output.puts " </dl>"
@@ -85,7 +83,7 @@ module Spec
@output.flush
end
- def example_pending(example, message)
+ def example_pending(example, message, deprecated_pending_location=nil)
@output.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
@output.puts " <script type=\"text/javascript\">makeYellow('example_group_#{example_group_number}');</script>" unless @example_group_red
move_progress
@@ -154,14 +152,6 @@ module Spec
font-size: 80%;
}
</style>
-</head>
-<body>
-EOF
- end
-
- def report_header
- <<-EOF
-<div class="rspec-report">
<script type="text/javascript">
// <![CDATA[
#{global_scripts}
@@ -170,9 +160,19 @@ EOF
<style type="text/css">
#{global_styles}
</style>
+</head>
+<body>
+EOF
+ end
+
+ def report_header
+ <<-EOF
+<div class="rspec-report">
<div id="rspec-header">
- <h1>RSpec Results</h1>
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
<div id="summary">
<p id="totals">&nbsp;</p>
@@ -212,7 +212,7 @@ EOF
def global_styles
<<-EOF
#rspec-header {
- background: #65C400; color: #fff;
+ background: #65C400; color: #fff; height: 4em;
}
.rspec-report h1 {
@@ -220,15 +220,16 @@ EOF
padding: 10px;
font-family: "Lucida Grande", Helvetica, sans-serif;
font-size: 1.8em;
+ position: absolute;
}
#summary {
margin: 0; padding: 5px 10px;
font-family: "Lucida Grande", Helvetica, sans-serif;
text-align: right;
- position: absolute;
top: 0px;
right: 0px;
+ float:right;
}
#summary p {
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/nested_text_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/nested_text_formatter.rb
index f9aa5f67c..5caec5a4d 100644
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/nested_text_formatter.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/formatter/nested_text_formatter.rb
@@ -4,33 +4,25 @@ module Spec
module Runner
module Formatter
class NestedTextFormatter < BaseTextFormatter
- attr_reader :previous_nested_example_groups
def initialize(options, where)
super
- @previous_nested_example_groups = []
+ @last_nested_descriptions = []
end
- def add_example_group(example_group)
+ def example_group_started(example_group)
super
- current_nested_example_groups = described_example_group_chain
- current_nested_example_groups.each_with_index do |nested_example_group, i|
- unless nested_example_group == previous_nested_example_groups[i]
- output.puts "#{' ' * i}#{nested_example_group.description_args}"
+ example_group.nested_descriptions.each_with_index do |nested_description, i|
+ unless nested_description == @last_nested_descriptions[i]
+ output.puts "#{' ' * i}#{nested_description}"
end
end
- @previous_nested_example_groups = described_example_group_chain
+ @last_nested_descriptions = example_group.nested_descriptions
end
def example_failed(example, counter, failure)
- message = if failure.expectation_not_met?
- "#{current_indentation}#{example.description} (FAILED - #{counter})"
- else
- "#{current_indentation}#{example.description} (ERROR - #{counter})"
- end
-
- output.puts(failure.expectation_not_met? ? red(message) : magenta(message))
+ output.puts(red("#{current_indentation}#{example.description} (FAILED - #{counter})"))
output.flush
end
@@ -40,24 +32,14 @@ module Spec
output.flush
end
- def example_pending(example, message)
+ def example_pending(example, message, deprecated_pending_location=nil)
super
output.puts yellow("#{current_indentation}#{example.description} (PENDING: #{message})")
output.flush
end
def current_indentation
- ' ' * previous_nested_example_groups.length
- end
-
- def described_example_group_chain
- example_group_chain = []
- example_group.send(:execute_in_class_hierarchy) do |parent_example_group|
- if parent_example_group.description_args && !parent_example_group.description_args.empty?
- example_group_chain << parent_example_group
- end
- end
- example_group_chain
+ ' ' * @last_nested_descriptions.length
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/profile_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/profile_formatter.rb
index 8671d721e..3784f3ac7 100644
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/profile_formatter.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/formatter/profile_formatter.rb
@@ -41,10 +41,6 @@ module Spec
end
@output.flush
end
-
- def method_missing(sym, *args)
- # ignore
- end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb
index 032a2872d..862f87a44 100644
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb
@@ -1,11 +1,14 @@
require 'spec/runner/formatter/base_text_formatter'
+require 'spec/runner/formatter/no_op_method_missing'
module Spec
module Runner
module Formatter
class ProgressBarFormatter < BaseTextFormatter
+ include NOOPMethodMissing
+
def example_failed(example, counter, failure)
- @output.print colourise('F', failure)
+ @output.print colorize_failure('F', failure)
@output.flush
end
@@ -14,9 +17,9 @@ module Spec
@output.flush
end
- def example_pending(example, message)
+ def example_pending(example, message, deprecated_pending_location=nil)
super
- @output.print yellow('P')
+ @output.print yellow('*')
@output.flush
end
@@ -24,10 +27,6 @@ module Spec
@output.puts
@output.flush
end
-
- def method_missing(sym, *args)
- # ignore
- end
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/snippet_extractor.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/snippet_extractor.rb
index 41119fe46..4f34e5fee 100644
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/snippet_extractor.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/formatter/snippet_extractor.rb
@@ -4,7 +4,7 @@ module Spec
# This class extracts code snippets by looking at the backtrace of the passed error
class SnippetExtractor #:nodoc:
class NullConverter; def convert(code, pre); code; end; end #:nodoc:
- begin; require 'rubygems'; require 'syntax/convertors/html'; @@converter = Syntax::Convertors::HTML.for_syntax "ruby"; rescue LoadError => e; @@converter = NullConverter.new; end
+ begin; require 'syntax/convertors/html'; @@converter = Syntax::Convertors::HTML.for_syntax "ruby"; rescue LoadError => e; @@converter = NullConverter.new; end
def snippet(error)
raw_code, line = snippet_for(error.backtrace[0])
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/specdoc_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/specdoc_formatter.rb
index facf1a65a..7204f2147 100644
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/specdoc_formatter.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/formatter/specdoc_formatter.rb
@@ -4,7 +4,7 @@ module Spec
module Runner
module Formatter
class SpecdocFormatter < BaseTextFormatter
- def add_example_group(example_group)
+ def example_group_started(example_group)
super
output.puts
output.puts example_group.description
@@ -12,13 +12,7 @@ module Spec
end
def example_failed(example, counter, failure)
- message = if failure.expectation_not_met?
- "- #{example.description} (FAILED - #{counter})"
- else
- "- #{example.description} (ERROR - #{counter})"
- end
-
- output.puts(failure.expectation_not_met? ? red(message) : magenta(message))
+ output.puts(red("- #{example.description} (FAILED - #{counter})"))
output.flush
end
@@ -28,7 +22,7 @@ module Spec
output.flush
end
- def example_pending(example, message)
+ def example_pending(example, message, deprecated_pending_location=nil)
super
output.puts yellow("- #{example.description} (PENDING: #{message})")
output.flush
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/story/html_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/story/html_formatter.rb
deleted file mode 100644
index 5a8134683..000000000
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/story/html_formatter.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-require 'erb'
-require 'spec/runner/formatter/base_text_formatter'
-
-module Spec
- module Runner
- module Formatter
- module Story
- class HtmlFormatter < BaseTextFormatter
- include ERB::Util
-
- def run_started(count)
- @output.puts <<-EOF
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title>Stories</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Expires" content="-1" />
- <meta http-equiv="Pragma" content="no-cache" />
- <script src="javascripts/prototype.js" type="text/javascript"></script>
- <script src="javascripts/scriptaculous.js" type="text/javascript"></script>
- <script src="javascripts/rspec.js" type="text/javascript"></script>
- <link href="stylesheets/rspec.css" rel="stylesheet" type="text/css" />
- </head>
- <body>
- <div id="container">
-EOF
- end
-
- def collected_steps(steps)
- unless steps.empty?
- @output.puts " <ul id=\"stock_steps\" style=\"display: none;\">"
- steps.each do |step|
- @output.puts " <li>#{step}</li>"
- end
- @output.puts " </ul>"
- end
- end
-
- def run_ended
- @output.puts <<-EOF
- </div>
- </body>
-</head>
-EOF
- end
-
- def story_started(title, narrative)
- @output.puts <<-EOF
- <dl class="story passed">
- <dt>Story: #{h title}</dt>
- <dd>
- <p>
- #{h(narrative).split("\n").join("<br />")}
- </p>
-EOF
- end
-
- def story_ended(title, narrative)
- @output.puts <<-EOF
- </dd>
- </dl>
-EOF
- end
-
- def scenario_started(story_title, scenario_name)
- @output.puts <<-EOF
- <dl class="passed">
- <dt>Scenario: #{h scenario_name}</dt>
- <dd>
- <ul class="steps">
-EOF
- end
-
- def scenario_ended
- @output.puts <<-EOF
- </ul>
- </dd>
- </dl>
-EOF
- end
-
- def found_scenario(type, description)
- end
-
- def scenario_succeeded(story_title, scenario_name)
- scenario_ended
- end
-
- def scenario_pending(story_title, scenario_name, reason)
- scenario_ended
- end
-
- def scenario_failed(story_title, scenario_name, err)
- scenario_ended
- end
-
- def step_upcoming(type, description, *args)
- end
-
- def step_succeeded(type, description, *args)
- print_step('passed', type, description, *args) # TODO: uses succeeded CSS class
- end
-
- def step_pending(type, description, *args)
- print_step('pending', type, description, *args)
- end
-
- def step_failed(type, description, *args)
- print_step('failed', type, description, *args)
- end
-
- def print_step(klass, type, description, *args)
- spans = args.map { |arg| "<span class=\"param\">#{arg}</span>" }
- desc_string = description.step_name
- arg_regexp = description.arg_regexp
- i = -1
- inner = type.to_s.capitalize + ' ' + desc_string.gsub(arg_regexp) { |param| spans[i+=1] }
- @output.puts " <li class=\"#{klass}\">#{inner}</li>"
- end
- end
- end
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/lib/spec/runner/formatter/story/plain_text_formatter.rb b/vendor/plugins/rspec/lib/spec/runner/formatter/story/plain_text_formatter.rb
deleted file mode 100644
index 31cd614cb..000000000
--- a/vendor/plugins/rspec/lib/spec/runner/formatter/story/plain_text_formatter.rb
+++ /dev/null
@@ -1,142 +0,0 @@
-require 'spec/runner/formatter/base_text_formatter'
-
-module Spec
- module Runner
- module Formatter
- module Story
- class PlainTextFormatter < BaseTextFormatter
- def initialize(options, where)
- super
- @successful_scenario_count = 0
- @pending_scenario_count = 0
- @failed_scenarios = []
- @pending_steps = []
- @previous_type = nil
- end
-
- def run_started(count)
- @count = count
- @output.puts "Running #@count scenarios\n\n"
- end
-
- def story_started(title, narrative)
- @current_story_title = title
- @output.puts "Story: #{title}\n\n"
- narrative.each_line do |line|
- @output.print " "
- @output.print line
- end
- end
-
- def story_ended(title, narrative)
- @output.puts
- @output.puts
- end
-
- def scenario_started(story_title, scenario_name)
- @current_scenario_name = scenario_name
- @scenario_already_failed = false
- @output.print "\n\n Scenario: #{scenario_name}"
- @scenario_ok = true
- @scenario_pending = false
- end
-
- def scenario_succeeded(story_title, scenario_name)
- @successful_scenario_count += 1
- end
-
- def scenario_failed(story_title, scenario_name, err)
- @options.backtrace_tweaker.tweak_backtrace(err)
- @failed_scenarios << [story_title, scenario_name, err] unless @scenario_already_failed
- @scenario_already_failed = true
- end
-
- def scenario_pending(story_title, scenario_name, msg)
- @pending_scenario_count += 1 unless @scenario_already_failed
- @scenario_pending = true
- @scenario_already_failed = true
- end
-
- def run_ended
- @output.puts "#@count scenarios: #@successful_scenario_count succeeded, #{@failed_scenarios.size} failed, #@pending_scenario_count pending"
- unless @pending_steps.empty?
- @output.puts "\nPending Steps:"
- @pending_steps.each_with_index do |pending, i|
- story_name, scenario_name, msg = pending
- @output.puts "#{i+1}) #{story_name} (#{scenario_name}): #{msg}"
- end
- end
- unless @failed_scenarios.empty?
- @output.print "\nFAILURES:"
- @failed_scenarios.each_with_index do |failure, i|
- title, scenario_name, err = failure
- @output.print %[
- #{i+1}) #{title} (#{scenario_name}) FAILED
- #{err.class}: #{err.message}
- #{err.backtrace.join("\n")}
-]
- end
- end
- end
-
- def step_upcoming(type, description, *args)
- end
-
- def step_succeeded(type, description, *args)
- found_step(type, description, false, false, *args)
- end
-
- def step_pending(type, description, *args)
- found_step(type, description, false, true, *args)
- @pending_steps << [@current_story_title, @current_scenario_name, description]
- @output.print yellow(" (PENDING)")
- @scenario_pending = true
- @scenario_ok = false
- end
-
- def step_failed(type, description, *args)
- found_step(type, description, true, @scenario_pending, *args)
- if @scenario_pending
- @output.print yellow(" (SKIPPED)")
- else
- @output.print red(@scenario_ok ? " (FAILED)" : " (SKIPPED)")
- end
- @scenario_ok = false
- end
-
- def collected_steps(steps)
- end
-
- def method_missing(sym, *args, &block) #:nodoc:
- # noop - ignore unknown messages
- end
-
- private
-
- def found_step(type, description, failed, pending, *args)
- desc_string = description.step_name
- arg_regexp = description.arg_regexp
- text = if(type == @previous_type)
- "\n And "
- else
- "\n\n #{type.to_s.capitalize} "
- end
- i = -1
- text << desc_string.gsub(arg_regexp) { |param| args[i+=1] }
- if pending
- @output.print yellow(text)
- else
- @output.print(failed ? red(text) : green(text))
- end
-
- if type == :'given scenario'
- @previous_type = :given
- else
- @previous_type = type
- end
- end
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/runner/heckle_runner.rb b/vendor/plugins/rspec/lib/spec/runner/heckle_runner.rb
index 7695fe794..5c81ea846 100644
--- a/vendor/plugins/rspec/lib/spec/runner/heckle_runner.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/heckle_runner.rb
@@ -1,72 +1,72 @@
-begin
- require 'rubygems'
- require 'heckle'
-rescue LoadError ; raise "You must gem install heckle to use --heckle" ; end
+if Spec::Ruby.version.to_f < 1.9
+ begin
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
+ require 'heckle'
+ rescue LoadError ; raise "You must gem install heckle to use --heckle" ; end
-module Spec
- module Runner
- # Creates a new Heckler configured to heckle all methods in the classes
- # whose name matches +filter+
- class HeckleRunner
- def initialize(filter, heckle_class=Heckler)
- @filter = filter
- @heckle_class = heckle_class
- end
-
- # Runs all the example groups held by +rspec_options+ once for each of the
- # methods in the matched classes.
- def heckle_with
- if @filter =~ /(.*)[#\.](.*)/
- heckle_method($1, $2)
- else
- heckle_class_or_module(@filter)
+ module Spec
+ module Runner
+ # Creates a new Heckler configured to heckle all methods in the classes
+ # whose name matches +filter+
+ class HeckleRunner
+ def initialize(filter, heckle_class=Heckler)
+ @filter = filter
+ @heckle_class = heckle_class
end
- end
- def heckle_method(class_name, method_name)
- verify_constant(class_name)
- heckle = @heckle_class.new(class_name, method_name, rspec_options)
- heckle.validate
- end
+ # Runs all the example groups held by +rspec_options+ once for each of the
+ # methods in the matched classes.
+ def heckle_with
+ if @filter =~ /(.*)[#\.](.*)/
+ heckle_method($1, $2)
+ else
+ heckle_class_or_module(@filter)
+ end
+ end
- def heckle_class_or_module(class_or_module_name)
- verify_constant(class_or_module_name)
- pattern = /^#{class_or_module_name}/
- classes = []
- ObjectSpace.each_object(Class) do |klass|
- classes << klass if klass.name =~ pattern
+ def heckle_method(class_name, method_name)
+ verify_constant(class_name)
+ heckle = @heckle_class.new(class_name, method_name, Spec::Runner.options)
+ heckle.validate
end
+
+ def heckle_class_or_module(class_or_module_name)
+ verify_constant(class_or_module_name)
+ pattern = /^#{class_or_module_name}/
+ classes = []
+ ObjectSpace.each_object(Class) do |klass|
+ classes << klass if klass.name =~ pattern
+ end
- classes.each do |klass|
- klass.instance_methods(false).each do |method_name|
- heckle = @heckle_class.new(klass.name, method_name, rspec_options)
- heckle.validate
+ classes.each do |klass|
+ klass.instance_methods(false).each do |method_name|
+ heckle = @heckle_class.new(klass.name, method_name, Spec::Runner.options)
+ heckle.validate
+ end
end
end
- end
- def verify_constant(name)
- begin
- # This is defined in Heckle
- name.to_class
- rescue
- raise "Heckling failed - \"#{name}\" is not a known class or module"
+ def verify_constant(name)
+ begin
+ # This is defined in Heckle
+ name.to_class
+ rescue
+ raise "Heckling failed - \"#{name}\" is not a known class or module"
+ end
end
end
- end
- #Supports Heckle 1.2 and prior (earlier versions used Heckle::Base)
- class Heckler < (Heckle.const_defined?(:Base) ? Heckle::Base : Heckle)
- def initialize(klass_name, method_name, rspec_options)
- super(klass_name, method_name)
- @rspec_options = rspec_options
- end
+ class Heckler < Heckle
+ def initialize(klass_name, method_name, rspec_options)
+ super(klass_name, method_name)
+ @rspec_options = rspec_options
+ end
- def tests_pass?
- success = @rspec_options.run_examples
- success
- end
+ def tests_pass?
+ @rspec_options.run_examples
+ end
+ end
end
end
-end
+end \ No newline at end of file
diff --git a/vendor/plugins/rspec/lib/spec/runner/heckle_runner_unsupported.rb b/vendor/plugins/rspec/lib/spec/runner/heckle_runner_unsupported.rb
index 02aa37953..35ff86e10 100644
--- a/vendor/plugins/rspec/lib/spec/runner/heckle_runner_unsupported.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/heckle_runner_unsupported.rb
@@ -3,7 +3,7 @@ module Spec
# Dummy implementation for Windows that just fails (Heckle is not supported on Windows)
class HeckleRunner
def initialize(filter)
- raise "Heckle not supported on Windows"
+ raise "Heckle is not supported on Windows or Ruby 1.9"
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/option_parser.rb b/vendor/plugins/rspec/lib/spec/runner/option_parser.rb
index 91525e089..fbbf444a9 100644
--- a/vendor/plugins/rspec/lib/spec/runner/option_parser.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/option_parser.rb
@@ -10,6 +10,10 @@ module Spec
parser.parse(args)
parser.options
end
+
+ def spec_command?
+ $0.split('/').last == 'spec'
+ end
end
attr_reader :options
@@ -27,34 +31,30 @@ module Spec
:example => ["-e", "--example [NAME|FILE_NAME]", "Execute example(s) with matching name(s). If the argument is",
"the path to an existing file (typically generated by a previous",
"run using --format failing_examples:file.txt), then the examples",
- "on each line of thatfile will be executed. If the file is empty,",
+ "on each line of that file will be executed. If the file is empty,",
"all examples will be run (as if --example was not specified).",
" ",
"If the argument is not an existing file, then it is treated as",
"an example name directly, causing RSpec to run just the example",
"matching that name"],
:specification => ["-s", "--specification [NAME]", "DEPRECATED - use -e instead", "(This will be removed when autotest works with -e)"],
- :line => ["-l", "--line LINE_NUMBER", Integer, "Execute behaviout or specification at given line.",
- "(does not work for dynamically generated specs)"],
+ :line => ["-l", "--line LINE_NUMBER", Integer, "Execute example group or example at given line.",
+ "(does not work for dynamically generated examples)"],
:format => ["-f", "--format FORMAT[:WHERE]","Specifies what format to use for output. Specify WHERE to tell",
"the formatter where to write the output. All built-in formats",
- "expect WHERE to be a file name, and will write to STDOUT if it's",
+ "expect WHERE to be a file name, and will write to $stdout if it's",
"not specified. The --format option may be specified several times",
"if you want several outputs",
" ",
- "Builtin formats for examples: ",
- "progress|p : Text progress",
- "profile|o : Text progress with profiling of 10 slowest examples",
- "specdoc|s : Example doc as text",
- "indented|i : Example doc as indented text",
+ "Builtin formats:",
+ "silent|l : No output", "progress|p : Text-based progress bar",
+ "profile|o : Text-based progress bar with profiling of 10 slowest examples",
+ "specdoc|s : Code example doc strings",
+ "nested|n : Code example doc strings with nested groups indented",
"html|h : A nice HTML report",
"failing_examples|e : Write all failing examples - input for --example",
"failing_example_groups|g : Write all failing example groups - input for --example",
" ",
- "Builtin formats for stories: ",
- "plain|p : Plain Text",
- "html|h : A nice HTML report",
- " ",
"FORMAT can also be the name of a custom formatter class",
"(in which case you should also specify --require to load it)"],
:require => ["-r", "--require FILE", "Require FILE before running specs",
@@ -78,6 +78,7 @@ module Spec
:options_file => ["-O", "--options PATH", "Read options from a file"],
:generate_options => ["-G", "--generate-options PATH", "Generate an options file for --options"],
:runner => ["-U", "--runner RUNNER", "Use a custom Runner."],
+ :debug => ["-u", "--debugger", "Enable ruby-debugging."],
:drb => ["-X", "--drb", "Run examples via DRb. (For example against script/spec_server)"],
:version => ["-v", "--version", "Show version"],
:help => ["-h", "--help", "You're looking at it"]
@@ -91,37 +92,49 @@ module Spec
@file_factory = File
- self.banner = "Usage: spec (FILE|DIRECTORY|GLOB)+ [options]"
+ self.banner = "Usage: spec (FILE(:LINE)?|DIRECTORY|GLOB)+ [options]"
self.separator ""
- on(*OPTIONS[:pattern]) {|pattern| @options.filename_pattern = pattern}
- on(*OPTIONS[:diff]) {|diff| @options.parse_diff(diff)}
- on(*OPTIONS[:colour]) {@options.colour = true}
- on(*OPTIONS[:example]) {|example| @options.parse_example(example)}
- on(*OPTIONS[:specification]) {|example| @options.parse_example(example)}
- on(*OPTIONS[:line]) {|line_number| @options.line_number = line_number.to_i}
- on(*OPTIONS[:format]) {|format| @options.parse_format(format)}
- on(*OPTIONS[:require]) {|requires| invoke_requires(requires)}
- on(*OPTIONS[:backtrace]) {@options.backtrace_tweaker = NoisyBacktraceTweaker.new}
- on(*OPTIONS[:loadby]) {|loadby| @options.loadby = loadby}
- on(*OPTIONS[:reverse]) {@options.reverse = true}
- on(*OPTIONS[:timeout]) {|timeout| @options.timeout = timeout.to_f}
- on(*OPTIONS[:heckle]) {|heckle| @options.load_heckle_runner(heckle)}
- on(*OPTIONS[:dry_run]) {@options.dry_run = true}
- on(*OPTIONS[:options_file]) {|options_file| parse_options_file(options_file)}
+ on(*OPTIONS[:pattern]) {|pattern| @options.filename_pattern = pattern}
+ on(*OPTIONS[:diff]) {|diff| @options.parse_diff(diff)}
+ on(*OPTIONS[:colour]) {@options.colour = true}
+ on(*OPTIONS[:example]) {|example| @options.parse_example(example)}
+ on(*OPTIONS[:specification]) {|example| @options.parse_example(example)}
+ on(*OPTIONS[:line]) {|line_number| @options.line_number = line_number.to_i}
+ on(*OPTIONS[:format]) {|format| @options.parse_format(format)}
+ on(*OPTIONS[:require]) {|requires| invoke_requires(requires)}
+ on(*OPTIONS[:backtrace]) {@options.backtrace_tweaker = NoisyBacktraceTweaker.new}
+ on(*OPTIONS[:loadby]) {|loadby| @options.loadby = loadby}
+ on(*OPTIONS[:reverse]) {@options.reverse = true}
+ on(*OPTIONS[:timeout]) {|timeout| @options.timeout = timeout.to_f}
+ on(*OPTIONS[:heckle]) {|heckle| @options.load_heckle_runner(heckle)}
+ on(*OPTIONS[:dry_run]) {@options.dry_run = true}
+ on(*OPTIONS[:options_file]) {|options_file|}
on(*OPTIONS[:generate_options]) {|options_file|}
- on(*OPTIONS[:runner]) {|runner| @options.user_input_for_runner = runner}
- on(*OPTIONS[:drb]) {}
- on(*OPTIONS[:version]) {parse_version}
- on_tail(*OPTIONS[:help]) {parse_help}
+ on(*OPTIONS[:runner]) {|runner| @options.user_input_for_runner = runner}
+ on(*OPTIONS[:debug]) {@options.debug = true}
+ on(*OPTIONS[:drb]) {}
+ on(*OPTIONS[:version]) {parse_version}
+ on("--autospec") {@options.autospec = true}
+ on_tail(*OPTIONS[:help]) {parse_help}
end
def order!(argv, &blk)
- @argv = argv
+ @argv = argv.dup
+ @argv = (@argv.empty? & self.class.spec_command?) ? ['--help'] : @argv
+
+ # Parse options file first
+ parse_file_options(:options_file, :parse_options_file)
+
@options.argv = @argv.dup
- return if parse_generate_options
+ return if parse_file_options(:generate_options, :write_options_file)
return if parse_drb
-
+
super(@argv) do |file|
+ if file =~ /^(.+):(\d+)$/
+ file = $1
+ @options.line_number = $2.to_i
+ end
+
@options.files << file
blk.call(file) if blk
end
@@ -129,41 +142,46 @@ module Spec
@options
end
- protected
+ protected
+
def invoke_requires(requires)
requires.split(",").each do |file|
require file
end
end
-
- def parse_options_file(options_file)
- option_file_args = IO.readlines(options_file).map {|l| l.chomp.split " "}.flatten
- @argv.push(*option_file_args)
- # TODO - this is a brute force solution to http://rspec.lighthouseapp.com/projects/5645/tickets/293.
- # Let's look for a cleaner way. Might not be one. But let's look. If not, perhaps
- # this can be moved to a different method to indicate the special handling for drb?
- parse_drb(@argv)
- end
- def parse_generate_options
- # Remove the --generate-options option and the argument before writing to file
+ def parse_file_options(option_name, action)
+ # Remove the file option and the argument before handling the file
options_file = nil
- ['-G', '--generate-options'].each do |option|
+ options_list = OPTIONS[option_name][0..1]
+ options_list[1].gsub!(" PATH", "")
+ options_list.each do |option|
if index = @argv.index(option)
@argv.delete_at(index)
options_file = @argv.delete_at(index)
end
end
+ if options_file.nil? &&
+ File.exist?('spec/spec.opts') &&
+ !@argv.any?{|a| a =~ /^\-/ }
+ options_file = 'spec/spec.opts'
+ end
+
if options_file
- write_generated_options(options_file)
+ send(action, options_file)
return true
else
return false
end
end
-
- def write_generated_options(options_file)
+
+ def parse_options_file(options_file)
+ option_file_args = File.readlines(options_file).map {|l| l.chomp.split " "}.flatten
+ @argv.push(*option_file_args)
+ end
+
+ def write_options_file(options_file)
File.open(options_file, 'w') do |io|
io.puts @argv.join("\n")
end
@@ -172,28 +190,30 @@ module Spec
@options.examples_should_not_be_run
end
- def parse_drb(argv = nil)
- argv ||= @options.argv # TODO - see note about about http://rspec.lighthouseapp.com/projects/5645/tickets/293
+ def parse_drb
+ argv = @options.argv
is_drb = false
is_drb ||= argv.delete(OPTIONS[:drb][0])
is_drb ||= argv.delete(OPTIONS[:drb][1])
return false unless is_drb
- @options.examples_should_not_be_run
- DrbCommandLine.run(
- self.class.parse(argv, @error_stream, @out_stream)
- )
- true
+ if DrbCommandLine.run(self.class.parse(argv, @error_stream, @out_stream))
+ @options.examples_should_not_be_run
+ true
+ else
+ @error_stream.puts "Running specs locally:"
+ false
+ end
end
def parse_version
- @out_stream.puts ::Spec::VERSION::DESCRIPTION
+ @out_stream.puts ::Spec::VERSION::SUMMARY
exit if stdout?
end
def parse_help
@out_stream.puts self
exit if stdout?
- end
+ end
def stdout?
@out_stream == $stdout
diff --git a/vendor/plugins/rspec/lib/spec/runner/options.rb b/vendor/plugins/rspec/lib/spec/runner/options.rb
index 6716464af..e0179e80e 100644
--- a/vendor/plugins/rspec/lib/spec/runner/options.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/options.rb
@@ -1,3 +1,5 @@
+require 'ostruct'
+
module Spec
module Runner
class Options
@@ -6,9 +8,11 @@ module Spec
}
EXAMPLE_FORMATTERS = { # Load these lazily for better speed
+ 'silent' => ['spec/runner/formatter/silent_formatter', 'Formatter::SilentFormatter'],
+ 'l' => ['spec/runner/formatter/silent_formatter', 'Formatter::SilentFormatter'],
'specdoc' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'],
's' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'],
- 'nested' => ['spec/runner/formatter/nested_text_formatter', 'Formatter::NestedTextFormatter'],
+ 'nested' => ['spec/runner/formatter/nested_text_formatter', 'Formatter::NestedTextFormatter'],
'n' => ['spec/runner/formatter/nested_text_formatter', 'Formatter::NestedTextFormatter'],
'html' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'],
'h' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'],
@@ -23,22 +27,16 @@ module Spec
'textmate' => ['spec/runner/formatter/text_mate_formatter', 'Formatter::TextMateFormatter']
}
- STORY_FORMATTERS = {
- 'plain' => ['spec/runner/formatter/story/plain_text_formatter', 'Formatter::Story::PlainTextFormatter'],
- 'p' => ['spec/runner/formatter/story/plain_text_formatter', 'Formatter::Story::PlainTextFormatter'],
- 'html' => ['spec/runner/formatter/story/html_formatter', 'Formatter::Story::HtmlFormatter'],
- 'h' => ['spec/runner/formatter/story/html_formatter', 'Formatter::Story::HtmlFormatter']
- }
-
attr_accessor(
+ :autospec, # hack to tell
:filename_pattern,
:backtrace_tweaker,
:context_lines,
:diff_format,
:dry_run,
:profile,
- :examples,
:heckle_runner,
+ :debug,
:line_number,
:loadby,
:reporter,
@@ -48,12 +46,10 @@ module Spec
:user_input_for_runner,
:error_stream,
:output_stream,
- :before_suite_parts,
- :after_suite_parts,
# TODO: BT - Figure out a better name
:argv
)
- attr_reader :colour, :differ_class, :files, :example_groups
+ attr_reader :colour, :differ_class, :files, :examples, :example_groups
def initialize(error_stream, output_stream)
@error_stream = error_stream
@@ -64,6 +60,7 @@ module Spec
@colour = false
@profile = false
@dry_run = false
+ @debug = false
@reporter = Reporter.new(self)
@context_lines = 3
@diff_format = :unified
@@ -73,32 +70,80 @@ module Spec
@examples_run = false
@examples_should_be_run = nil
@user_input_for_runner = nil
- @before_suite_parts = []
@after_suite_parts = []
+ @files_loaded = false
+ @out_used = nil
end
def add_example_group(example_group)
@example_groups << example_group
end
+ def line_number_requested?
+ !!line_number
+ end
+
+ def example_line
+ Spec::Runner::LineNumberQuery.new(self).example_line_for(files.first, line_number)
+ end
+
def remove_example_group(example_group)
@example_groups.delete(example_group)
end
+ def require_ruby_debug
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
+ require 'ruby-debug'
+ end
+
+ def project_root # :nodoc:
+ require 'pathname'
+ @project_root ||= determine_project_root
+ end
+
+ def determine_project_root # :nodoc:
+ # This is borrowed (slightly modified) from Scott Taylors
+ # project_path project:
+ # http://github.com/smtlaissezfaire/project_path
+ Pathname(File.expand_path('.')).ascend do |path|
+ if File.exists?(File.join(path, "spec"))
+ return path
+ end
+ end
+ end
+
+ def add_dir_from_project_root_to_load_path(dir, load_path=$LOAD_PATH) # :nodoc:
+ return if project_root.nil?
+ full_dir = File.join(project_root, dir)
+ load_path.unshift full_dir unless load_path.include?(full_dir)
+ end
+
def run_examples
+ require_ruby_debug if debug
return true unless examples_should_be_run?
success = true
begin
- before_suite_parts.each do |part|
- part.call
- end
runner = custom_runner || ExampleGroupRunner.new(self)
unless @files_loaded
+ ['spec','lib'].each do |dir|
+ add_dir_from_project_root_to_load_path(dir)
+ end
runner.load_files(files_to_load)
@files_loaded = true
end
+ define_predicate_matchers
+ plugin_mock_framework
+ ignore_backtrace_patterns
+
+ # TODO - this has to happen after the files get loaded,
+ # otherwise the before_suite_parts are not populated
+ # from the configuration. There is no spec for this
+ # directly, but features/before_and_after_blocks/before_and_after_blocks.story
+ # will fail if this happens before the files are loaded.
+ before_suite_parts.each { |part| part.call }
+
if example_groups.empty?
true
else
@@ -110,25 +155,40 @@ module Spec
end
ensure
after_suite_parts.each do |part|
- part.call(success)
+ part.arity < 1 ? part.call : part.call(success)
end
end
end
+ def before_suite_parts
+ Spec::Example::BeforeAndAfterHooks.before_suite_parts
+ end
+
+ def after_suite_parts
+ Spec::Example::BeforeAndAfterHooks.after_suite_parts
+ end
+
def examples_run?
@examples_run
end
def examples_should_not_be_run
@examples_should_be_run = false
- end
+ end
+
+ def mock_framework
+ # TODO - don't like this dependency - perhaps store this in here instead?
+ Spec::Runner.configuration.mock_framework
+ end
def colour=(colour)
@colour = colour
- if @colour && RUBY_PLATFORM =~ /win32/ ;\
+ if @colour && RUBY_PLATFORM =~ /mswin|mingw/ ;\
begin ;\
- require 'rubygems' ;\
+ replace_output = @output_stream.equal?($stdout) ;\
+ require 'rubygems' unless ENV['NO_RUBYGEMS'] ;\
require 'Win32/Console/ANSI' ;\
+ @output_stream = $stdout if replace_output ;\
rescue LoadError ;\
warn "You must 'gem install win32console' to use colour on Windows" ;\
@colour = false ;\
@@ -152,7 +212,7 @@ module Spec
def parse_example(example)
if(File.file?(example))
- @examples = File.open(example).read.split("\n")
+ @examples = [File.open(example).read.split("\n")].flatten
else
@examples = [example]
end
@@ -168,17 +228,12 @@ module Spec
@format_options ||= []
@format_options << [format, where]
end
-
+
def formatters
@format_options ||= [['progress', @output_stream]]
@formatters ||= load_formatters(@format_options, EXAMPLE_FORMATTERS)
end
- def story_formatters
- @format_options ||= [['plain', @output_stream]]
- @formatters ||= load_formatters(@format_options, STORY_FORMATTERS)
- end
-
def load_formatters(format_options, formatters)
format_options.map do |format, where|
formatter_type = if formatters[format]
@@ -187,22 +242,31 @@ module Spec
else
load_class(format, 'formatter', '--format')
end
- formatter_type.new(self, where)
+ formatter_type.new(formatter_options, where)
end
end
+ def formatter_options
+ @formatter_options ||= OpenStruct.new(
+ :colour => colour,
+ :autospec => autospec,
+ :dry_run => dry_run
+ )
+ end
+
+ def which_heckle_runner
+ ([/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} || Spec::Ruby.version.to_f == 1.9) ? "spec/runner/heckle_runner_unsupported" : "spec/runner/heckle_runner"
+ end
+
def load_heckle_runner(heckle)
- suffix = [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} ? '_unsupported' : ''
- require "spec/runner/heckle_runner#{suffix}"
- @heckle_runner = HeckleRunner.new(heckle)
+ @format_options ||= [['silent', @output_stream]]
+ require which_heckle_runner
+ @heckle_runner = ::Spec::Runner::HeckleRunner.new(heckle)
end
def number_of_examples
- total = 0
- @example_groups.each do |example_group|
- total += example_group.number_of_examples
- end
- total
+ return examples.size unless examples.empty?
+ @example_groups.inject(0) {|sum, group| sum + group.number_of_examples}
end
def files_to_load
@@ -220,13 +284,40 @@ module Spec
end
result
end
-
- protected
+
+ def dry_run?
+ @dry_run == true
+ end
+
+ protected
+
+ def define_predicate_matchers
+ Spec::Runner.configuration.predicate_matchers.each_pair do |matcher_method, method_on_object|
+ Spec::Example::ExampleMethods::__send__ :define_method, matcher_method do |*args|
+ eval("be_#{method_on_object.to_s.gsub('?','')}(*args)")
+ end
+ end
+ end
+
+ def plugin_mock_framework
+ case mock_framework
+ when Module
+ Spec::Example::ExampleMethods.__send__ :include, mock_framework
+ else
+ require mock_framework
+ Spec::Example::ExampleMethods.__send__ :include, Spec::Adapters::MockFramework
+ end
+ end
+
+ def ignore_backtrace_patterns
+ @backtrace_tweaker.ignore_patterns Spec::Runner.configuration.ignored_backtrace_patterns
+ end
+
def examples_should_be_run?
return @examples_should_be_run unless @examples_should_be_run.nil?
@examples_should_be_run = true
end
-
+
def differ_class=(klass)
return unless klass
@differ_class = klass
@@ -250,24 +341,24 @@ module Spec
if $_spec_spec ; raise e ; else exit(1) ; end
end
end
-
+
def custom_runner
return nil unless custom_runner?
klass_name, arg = ClassAndArgumentsParser.parse(user_input_for_runner)
- runner_type = load_class(klass_name, 'behaviour runner', '--runner')
+ runner_type = load_class(klass_name, 'example group runner', '--runner')
return runner_type.new(self, arg)
end
def custom_runner?
return user_input_for_runner ? true : false
end
-
+
def heckle
heckle_runner = self.heckle_runner
self.heckle_runner = nil
heckle_runner.heckle_with
end
-
+
def sorted_files
return sorter ? files.sort(&sorter) : files
end
@@ -277,26 +368,26 @@ module Spec
end
def default_differ
- require 'spec/expectations/differs/default'
- self.differ_class = Spec::Expectations::Differs::Default
+ require 'spec/runner/differs/default'
+ self.differ_class = ::Spec::Expectations::Differs::Default
end
def set_spec_from_line_number
if examples.empty?
if files.length == 1
if File.directory?(files[0])
- error_stream.puts "You must specify one file, not a directory when using the --line option"
+ error_stream.puts "You must specify one file, not a directory when providing a line number"
exit(1) if stderr?
else
- example = SpecParser.new.spec_name_for(files[0], line_number)
+ example = LineNumberQuery.new(self).spec_name_for(files[0], line_number)
@examples = [example]
end
else
- error_stream.puts "Only one file can be specified when using the --line option: #{files.inspect}"
+ error_stream.puts "Only one file can be specified when providing a line number: #{files.inspect}"
exit(3) if stderr?
end
else
- error_stream.puts "You cannot use both --line and --example"
+ error_stream.puts "You cannot use --example and specify a line number"
exit(4) if stderr?
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/reporter.rb b/vendor/plugins/rspec/lib/spec/runner/reporter.rb
index 66db38406..0fae7d137 100644
--- a/vendor/plugins/rspec/lib/spec/runner/reporter.rb
+++ b/vendor/plugins/rspec/lib/spec/runner/reporter.rb
@@ -1,19 +1,23 @@
module Spec
module Runner
class Reporter
- attr_reader :options, :example_groups
+ attr_reader :options
def initialize(options)
@options = options
@options.reporter = self
- clear
+ @failures = []
+ @pending_count = 0
+ @example_count = 0
+ @start_time = nil
+ @end_time = nil
end
- def add_example_group(example_group)
+ def example_group_started(example_group)
+ @example_group = example_group
formatters.each do |f|
- f.add_example_group(example_group)
+ f.example_group_started(example_group)
end
- example_groups << example_group
end
def example_started(example)
@@ -21,29 +25,27 @@ module Spec
end
def example_finished(example, error=nil)
- @examples << example
+ @example_count += 1
if error.nil?
example_passed(example)
elsif Spec::Example::ExamplePendingError === error
- example_pending(example, error.message)
+ example_pending(example, example.location, error.message)
else
example_failed(example, error)
end
end
- def failure(example, error)
+ def example_failed(example, error)
backtrace_tweaker.tweak_backtrace(error)
- failure = Failure.new(example, error)
+ failure = Failure.new(@example_group.description, example.description, error)
@failures << failure
formatters.each do |f|
f.example_failed(example, @failures.length, failure)
end
end
- alias_method :example_failed, :failure
def start(number_of_examples)
- clear
@start_time = Time.new
formatters.each{|f| f.start(number_of_examples)}
end
@@ -58,12 +60,51 @@ module Spec
dump_pending
dump_failures
formatters.each do |f|
- f.dump_summary(duration, @examples.length, @failures.length, @pending_count)
+ f.dump_summary(duration, @example_count, @failures.length, @pending_count)
f.close
end
@failures.length
end
+ class Failure
+ def initialize(group_description, example_description, exception) # :nodoc:
+ @example_name = "#{group_description} #{example_description}"
+ @exception = exception
+ end
+
+ # The Exception object raised
+ attr_reader :exception
+
+ # Header messsage for reporting this failure, including the name of the
+ # example and an indicator of the type of failure. FAILED indicates a
+ # failed expectation. FIXED indicates a pending example that passes, and
+ # no longer needs to be pending. RuntimeError indicates that a
+ # RuntimeError occured.
+ #
+ # == Examples
+ #
+ # 'A new account should have a zero balance' FAILED
+ # 'A new account should have a zero balance' FIXED
+ # RuntimeError in 'A new account should have a zero balance'
+ def header
+ if expectation_not_met?
+ "'#{@example_name}' FAILED"
+ elsif pending_fixed?
+ "'#{@example_name}' FIXED"
+ else
+ "#{@exception.class.name} in '#{@example_name}'"
+ end
+ end
+
+ def pending_fixed? # :nodoc:
+ @exception.is_a?(Spec::Example::PendingExampleFixedError)
+ end
+
+ def expectation_not_met? # :nodoc:
+ @exception.is_a?(Spec::Expectations::ExpectationNotMetError)
+ end
+ end
+
private
def formatters
@@ -74,15 +115,6 @@ module Spec
@options.backtrace_tweaker
end
- def clear
- @example_groups = []
- @failures = []
- @pending_count = 0
- @examples = []
- @start_time = nil
- @end_time = nil
- end
-
def dump_failures
return if @failures.empty?
@failures.inject(1) do |index, failure|
@@ -103,45 +135,37 @@ module Spec
def example_passed(example)
formatters.each{|f| f.example_passed(example)}
end
+
+ EXAMPLE_PENDING_DEPRECATION_WARNING = <<-WARNING
+
+*********************************************************************
+DEPRECATION WARNING: RSpec's formatters have changed example_pending
+to accept two arguments instead of three. Please see the rdoc
+for Spec::Runner::Formatter::BaseFormatter#example_pending
+for more information.
+
+Please update any custom formatters to accept only two arguments
+to example_pending. Support for example_pending with two arguments
+and this warning message will be removed after the RSpec 2.0 release.
+*********************************************************************
+WARNING
- def example_pending(example, message="Not Yet Implemented")
+ def example_pending(example, ignore, message="Not Yet Implemented")
@pending_count += 1
- formatters.each do |f|
- f.example_pending(example, message)
- end
- end
-
- class Failure
- attr_reader :example, :exception
-
- def initialize(example, exception)
- @example = example
- @exception = exception
- end
-
- def header
- if expectation_not_met?
- "'#{example_name}' FAILED"
- elsif pending_fixed?
- "'#{example_name}' FIXED"
+ formatters.each do |formatter|
+ if formatter_uses_deprecated_example_pending_method?(formatter)
+ Spec.warn EXAMPLE_PENDING_DEPRECATION_WARNING
+ formatter.example_pending(example, message, example.location)
else
- "#{@exception.class.name} in '#{example_name}'"
+ formatter.example_pending(example, message)
end
end
-
- def pending_fixed?
- @exception.is_a?(Spec::Example::PendingExampleFixedError)
- end
-
- def expectation_not_met?
- @exception.is_a?(Spec::Expectations::ExpectationNotMetError)
- end
-
- protected
- def example_name
- @example.__full_description
- end
end
+
+ def formatter_uses_deprecated_example_pending_method?(formatter)
+ formatter.method(:example_pending).arity == 3
+ end
+
end
end
end
diff --git a/vendor/plugins/rspec/lib/spec/runner/spec_parser.rb b/vendor/plugins/rspec/lib/spec/runner/spec_parser.rb
deleted file mode 100644
index 8beb384e9..000000000
--- a/vendor/plugins/rspec/lib/spec/runner/spec_parser.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-module Spec
- module Runner
- # Parses a spec file and finds the nearest example for a given line number.
- class SpecParser
- attr_reader :best_match
-
- def initialize
- @best_match = {}
- end
-
- def spec_name_for(file, line_number)
- best_match.clear
- file = File.expand_path(file)
- rspec_options.example_groups.each do |example_group|
- consider_example_groups_for_best_match example_group, file, line_number
-
- example_group.examples.each do |example|
- consider_example_for_best_match example, example_group, file, line_number
- end
- end
- if best_match[:example_group]
- if best_match[:example]
- "#{best_match[:example_group].description} #{best_match[:example].description}"
- else
- best_match[:example_group].description
- end
- else
- nil
- end
- end
-
- protected
-
- def consider_example_groups_for_best_match(example_group, file, line_number)
- parsed_backtrace = parse_backtrace(example_group.registration_backtrace)
- parsed_backtrace.each do |example_file, example_line|
- if is_best_match?(file, line_number, example_file, example_line)
- best_match.clear
- best_match[:example_group] = example_group
- best_match[:line] = example_line
- end
- end
- end
-
- def consider_example_for_best_match(example, example_group, file, line_number)
- parsed_backtrace = parse_backtrace(example.implementation_backtrace)
- parsed_backtrace.each do |example_file, example_line|
- if is_best_match?(file, line_number, example_file, example_line)
- best_match.clear
- best_match[:example_group] = example_group
- best_match[:example] = example
- best_match[:line] = example_line
- end
- end
- end
-
- def is_best_match?(file, line_number, example_file, example_line)
- file == File.expand_path(example_file) &&
- example_line <= line_number &&
- example_line > best_match[:line].to_i
- end
-
- def parse_backtrace(backtrace)
- backtrace.collect do |trace_line|
- split_line = trace_line.split(':')
- [split_line[0], Integer(split_line[1])]
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story.rb b/vendor/plugins/rspec/lib/spec/story.rb
deleted file mode 100644
index bc6960a28..000000000
--- a/vendor/plugins/rspec/lib/spec/story.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require 'spec'
-require 'spec/story/extensions'
-require 'spec/story/given_scenario'
-require 'spec/story/runner'
-require 'spec/story/scenario'
-require 'spec/story/step'
-require 'spec/story/step_group'
-require 'spec/story/step_mother'
-require 'spec/story/story'
-require 'spec/story/world'
diff --git a/vendor/plugins/rspec/lib/spec/story/extensions.rb b/vendor/plugins/rspec/lib/spec/story/extensions.rb
deleted file mode 100644
index dc7dd1140..000000000
--- a/vendor/plugins/rspec/lib/spec/story/extensions.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-require 'spec/story/extensions/main'
-require 'spec/story/extensions/string'
-require 'spec/story/extensions/regexp'
diff --git a/vendor/plugins/rspec/lib/spec/story/extensions/main.rb b/vendor/plugins/rspec/lib/spec/story/extensions/main.rb
deleted file mode 100644
index 6336b630c..000000000
--- a/vendor/plugins/rspec/lib/spec/story/extensions/main.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-module Spec
- module Story
- module Extensions
- module Main
- def Story(title, narrative, params = {}, &body)
- ::Spec::Story::Runner.story_runner.Story(title, narrative, params, &body)
- end
-
- # Calling this deprecated is silly, since it hasn't been released yet. But, for
- # those who are reading this - this will be deleted before the 1.1 release.
- def run_story(*args, &block)
- runner = Spec::Story::Runner::PlainTextStoryRunner.new(*args)
- runner.instance_eval(&block) if block
- runner.run
- end
-
- # Creates (or appends to an existing) a namespaced group of steps for use in Stories
- #
- # == Examples
- #
- # # Creating a new group
- # steps_for :forms do
- # When("user enters $value in the $field field") do ... end
- # When("user submits the $form form") do ... end
- # end
- def steps_for(tag, &block)
- steps = rspec_story_steps[tag]
- steps.instance_eval(&block) if block
- steps
- end
-
- # Creates a context for running a Plain Text Story with specific groups of Steps.
- # Also supports adding arbitrary steps that will only be accessible to
- # the Story being run.
- #
- # == Examples
- #
- # # Run a Story with one group of steps
- # with_steps_for :checking_accounts do
- # run File.dirname(__FILE__) + "/withdraw_cash"
- # end
- #
- # # Run a Story, adding steps that are only available for this Story
- # with_steps_for :accounts do
- # Given "user is logged in as account administrator"
- # run File.dirname(__FILE__) + "/reconcile_accounts"
- # end
- #
- # # Run a Story with steps from two groups
- # with_steps_for :checking_accounts, :savings_accounts do
- # run File.dirname(__FILE__) + "/transfer_money"
- # end
- #
- # # Run a Story with a specific Story extension
- # with_steps_for :login, :navigation do
- # run File.dirname(__FILE__) + "/user_changes_password", :type => RailsStory
- # end
- def with_steps_for(*tags, &block)
- steps = Spec::Story::StepGroup.new do
- extend StoryRunnerStepGroupAdapter
- end
- tags.each {|tag| steps << rspec_story_steps[tag]}
- steps.instance_eval(&block) if block
- steps
- end
-
- private
-
- module StoryRunnerStepGroupAdapter
- def run(path, options={})
- runner = Spec::Story::Runner::PlainTextStoryRunner.new(path, options)
- runner.steps << self
- runner.run
- end
- end
-
- def rspec_story_steps # :nodoc:
- $rspec_story_steps ||= Spec::Story::StepGroupHash.new
- end
-
- end
- end
- end
-end
-
-include Spec::Story::Extensions::Main \ No newline at end of file
diff --git a/vendor/plugins/rspec/lib/spec/story/extensions/regexp.rb b/vendor/plugins/rspec/lib/spec/story/extensions/regexp.rb
deleted file mode 100644
index 8ee338605..000000000
--- a/vendor/plugins/rspec/lib/spec/story/extensions/regexp.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class Regexp
- def step_name
- self.source.gsub '\\$', '$$'
- end
-
- def arg_regexp
- ::Spec::Story::Step::PARAM_OR_GROUP_PATTERN
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/extensions/string.rb b/vendor/plugins/rspec/lib/spec/story/extensions/string.rb
deleted file mode 100644
index 0e4ec1d68..000000000
--- a/vendor/plugins/rspec/lib/spec/story/extensions/string.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class String
- def step_name
- self
- end
-
- def arg_regexp
- ::Spec::Story::Step::PARAM_OR_GROUP_PATTERN
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/given_scenario.rb b/vendor/plugins/rspec/lib/spec/story/given_scenario.rb
deleted file mode 100644
index 88c51f981..000000000
--- a/vendor/plugins/rspec/lib/spec/story/given_scenario.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-module Spec
- module Story
- class GivenScenario
- def initialize(name)
- @name = name
- end
-
- def perform(instance, ignore_name)
- scenario = Runner::StoryRunner.scenario_from_current_story(@name)
- Runner::ScenarioRunner.new.run(scenario, instance)
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/runner.rb b/vendor/plugins/rspec/lib/spec/story/runner.rb
deleted file mode 100644
index 3d7ed59b5..000000000
--- a/vendor/plugins/rspec/lib/spec/story/runner.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-require 'spec/story/runner/scenario_collector.rb'
-require 'spec/story/runner/scenario_runner.rb'
-require 'spec/story/runner/story_runner.rb'
-require 'spec/story/runner/story_parser.rb'
-require 'spec/story/runner/story_mediator.rb'
-require 'spec/story/runner/plain_text_story_runner.rb'
-
-module Spec
- module Story
- module Runner
- class << self
- def run_options # :nodoc:
- rspec_options
- # @run_options ||= ::Spec::Runner::OptionParser.parse(ARGV, $stderr, $stdout)
- end
-
- def story_runner # :nodoc:
- unless @story_runner
- @story_runner = create_story_runner
- run_options.story_formatters.each do |formatter|
- register_listener(formatter)
- end
- self.register_exit_hook
- end
- @story_runner
- end
-
- def scenario_runner # :nodoc:
- @scenario_runner ||= ScenarioRunner.new
- end
-
- def world_creator # :nodoc:
- @world_creator ||= World
- end
-
- def create_story_runner
- StoryRunner.new(scenario_runner, world_creator)
- end
-
- # Use this to register a customer output formatter.
- def register_listener(listener)
- story_runner.add_listener(listener) # run_started, story_started, story_ended, #run_ended
- world_creator.add_listener(listener) # found_scenario, step_succeeded, step_failed, step_failed
- scenario_runner.add_listener(listener) # scenario_started, scenario_succeeded, scenario_pending, scenario_failed
- end
-
- def register_exit_hook # :nodoc:
- at_exit do
- exit Runner.story_runner.run_stories unless $!
- end
- end
-
- def dry_run
- run_options.dry_run
- end
-
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/runner/plain_text_story_runner.rb b/vendor/plugins/rspec/lib/spec/story/runner/plain_text_story_runner.rb
deleted file mode 100644
index a1bfbda4f..000000000
--- a/vendor/plugins/rspec/lib/spec/story/runner/plain_text_story_runner.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-module Spec
- module Story
- module Runner
- class PlainTextStoryRunner
- # You can initialize a PlainTextStoryRunner with the path to the
- # story file or a block, in which you can define the path using load.
- #
- # == Examples
- #
- # PlainTextStoryRunner.new('path/to/file')
- #
- # PlainTextStoryRunner.new do |runner|
- # runner.load 'path/to/file'
- # end
- def initialize(*args)
- @options = Hash === args.last ? args.pop : {}
- @story_file = args.empty? ? nil : args.shift
- yield self if block_given?
- end
-
- def []=(key, value)
- @options[key] = value
- end
-
- def load(path)
- @story_file = path
- end
-
- def run(story_runner=Spec::Story::Runner.story_runner)
- raise "You must set a path to the file with the story. See the RDoc." if @story_file.nil?
- mediator = Spec::Story::Runner::StoryMediator.new(steps, story_runner, @options)
- parser = Spec::Story::Runner::StoryParser.new(mediator)
-
- story_text = File.read(@story_file)
- parser.parse(story_text.split("\n"))
-
- mediator.run_stories
- end
-
- def steps
- @step_group ||= Spec::Story::StepGroup.new
- yield @step_group if block_given?
- @step_group
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/runner/scenario_collector.rb b/vendor/plugins/rspec/lib/spec/story/runner/scenario_collector.rb
deleted file mode 100644
index 78339fd22..000000000
--- a/vendor/plugins/rspec/lib/spec/story/runner/scenario_collector.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-module Spec
- module Story
- module Runner
- class ScenarioCollector
- attr_accessor :scenarios
-
- def initialize(story)
- @story = story
- @scenarios = []
- end
-
- def Scenario(name, &body)
- @scenarios << Scenario.new(@story, name, &body)
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/runner/scenario_runner.rb b/vendor/plugins/rspec/lib/spec/story/runner/scenario_runner.rb
deleted file mode 100644
index 2d7c58d03..000000000
--- a/vendor/plugins/rspec/lib/spec/story/runner/scenario_runner.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-module Spec
- module Story
- module Runner
- class ScenarioRunner
- def initialize
- @listeners = []
- end
-
- def run(scenario, world)
- @listeners.each { |l| l.scenario_started(scenario.story.title, scenario.name) }
- run_story_ignoring_scenarios(scenario.story, world)
-
- world.start_collecting_errors
-
- unless scenario.body
- @listeners.each { |l| l.scenario_pending(scenario.story.title, scenario.name, '') }
- return true
- end
-
- world.instance_eval(&scenario.body)
- if world.errors.empty?
- @listeners.each { |l| l.scenario_succeeded(scenario.story.title, scenario.name) }
- else
- if Spec::Example::ExamplePendingError === (e = world.errors.first)
- @listeners.each { |l| l.scenario_pending(scenario.story.title, scenario.name, e.message) }
- else
- @listeners.each { |l| l.scenario_failed(scenario.story.title, scenario.name, e) }
- return false
- end
- end
- true
- end
-
- def add_listener(listener)
- @listeners << listener
- end
-
- private
-
- def run_story_ignoring_scenarios(story, world)
- class << world
- def Scenario(name, &block)
- # do nothing
- end
- end
- story.run_in(world)
- class << world
- remove_method(:Scenario)
- end
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/runner/story_mediator.rb b/vendor/plugins/rspec/lib/spec/story/runner/story_mediator.rb
deleted file mode 100644
index 826f322ee..000000000
--- a/vendor/plugins/rspec/lib/spec/story/runner/story_mediator.rb
+++ /dev/null
@@ -1,123 +0,0 @@
- module Spec
- module Story
- module Runner
-
- class StoryMediator
- def initialize(step_group, runner, options={})
- @step_group = step_group
- @stories = []
- @runner = runner
- @options = options
- end
-
- def stories
- @stories.collect { |p| p.to_proc }
- end
-
- def create_story(title, narrative)
- @stories << Story.new(title, narrative, @step_group, @options)
- end
-
- def create_scenario(title)
- current_story.add_scenario Scenario.new(title)
- end
-
- def create_given(name)
- current_scenario.add_step Step.new('Given', name)
- end
-
- def create_given_scenario(name)
- current_scenario.add_step Step.new('GivenScenario', name)
- end
-
- def create_when(name)
- current_scenario.add_step Step.new('When', name)
- end
-
- def create_then(name)
- current_scenario.add_step Step.new('Then', name)
- end
-
- def run_stories
- stories.each { |story| @runner.instance_eval(&story) }
- end
-
- private
- def current_story
- @stories.last
- end
-
- def current_scenario
- current_story.current_scenario
- end
-
- class Story
- def initialize(title, narrative, step_group, options)
- @title = title
- @narrative = narrative
- @scenarios = []
- @step_group = step_group
- @options = options
- end
-
- def to_proc
- title = @title
- narrative = @narrative
- scenarios = @scenarios.collect { |scenario| scenario.to_proc }
- options = @options.merge(:steps_for => @step_group)
- lambda do
- Story title, narrative, options do
- scenarios.each { |scenario| instance_eval(&scenario) }
- end
- end
- end
-
- def add_scenario(scenario)
- @scenarios << scenario
- end
-
- def current_scenario
- @scenarios.last
- end
- end
-
- class Scenario
- def initialize(name)
- @name = name
- @steps = []
- end
-
- def to_proc
- name = @name
- steps = @steps.collect { |step| step.to_proc }
- lambda do
- Scenario name do
- steps.each { |step| instance_eval(&step) }
- end
- end
- end
-
- def add_step(step)
- @steps << step
- end
- end
-
- class Step
- def initialize(type, name)
- @type = type
- @name = name
- end
-
- def to_proc
- type = @type
- name = @name
- lambda do
- send(type, name)
- end
- end
- end
- end
-
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/runner/story_parser.rb b/vendor/plugins/rspec/lib/spec/story/runner/story_parser.rb
deleted file mode 100644
index d454df8cb..000000000
--- a/vendor/plugins/rspec/lib/spec/story/runner/story_parser.rb
+++ /dev/null
@@ -1,227 +0,0 @@
-module Spec
- module Story
- module Runner
-
- class IllegalStepError < StandardError
- def initialize(state, event)
- super("Illegal attempt to create a #{event} after a #{state}")
- end
- end
-
- class StoryParser
- def initialize(story_mediator)
- @story_mediator = story_mediator
- @current_story_lines = []
- transition_to(:starting_state)
- end
-
- def parse(lines)
- lines.reject! {|line| line == ""}
- until lines.empty?
- process_line(lines.shift)
- end
- @state.eof
- end
-
- def process_line(line)
- line.strip!
- case line
- when /^Story: / then @state.story(line)
- when /^Scenario: / then @state.scenario(line)
- when /^Given:? / then @state.given(line)
- when /^GivenScenario:? / then @state.given_scenario(line)
- when /^When:? / then @state.event(line)
- when /^Then:? / then @state.outcome(line)
- when /^And:? / then @state.one_more_of_the_same(line)
- else @state.other(line)
- end
- end
-
- def init_story(title)
- @current_story_lines.clear
- add_story_line(title)
- end
-
- def add_story_line(line)
- @current_story_lines << line
- end
-
- def create_story()
- unless @current_story_lines.empty?
- @story_mediator.create_story(@current_story_lines[0].gsub("Story: ",""), @current_story_lines[1..-1].join("\n"))
- @current_story_lines.clear
- end
- end
-
- def create_scenario(title)
- @story_mediator.create_scenario(title.gsub("Scenario: ",""))
- end
-
- def create_given(name)
- @story_mediator.create_given(name)
- end
-
- def create_given_scenario(name)
- @story_mediator.create_given_scenario(name)
- end
-
- def create_when(name)
- @story_mediator.create_when(name)
- end
-
- def create_then(name)
- @story_mediator.create_then(name)
- end
-
- def transition_to(key)
- @state = states[key]
- end
-
- def states
- @states ||= {
- :starting_state => StartingState.new(self),
- :story_state => StoryState.new(self),
- :scenario_state => ScenarioState.new(self),
- :given_state => GivenState.new(self),
- :when_state => WhenState.new(self),
- :then_state => ThenState.new(self)
- }
- end
-
- class State
- def initialize(parser)
- @parser = parser
- end
-
- def story(line)
- @parser.init_story(line)
- @parser.transition_to(:story_state)
- end
-
- def scenario(line)
- @parser.create_scenario(line)
- @parser.transition_to(:scenario_state)
- end
-
- def given(line)
- @parser.create_given(remove_tag_from(:given, line))
- @parser.transition_to(:given_state)
- end
-
- def given_scenario(line)
- @parser.create_given_scenario(remove_tag_from(:givenscenario, line))
- @parser.transition_to(:given_state)
- end
-
- def event(line)
- @parser.create_when(remove_tag_from(:when, line))
- @parser.transition_to(:when_state)
- end
-
- def outcome(line)
- @parser.create_then(remove_tag_from(:then, line))
- @parser.transition_to(:then_state)
- end
-
- def remove_tag_from(tag, line)
- tokens = line.split
- # validation of tag can go here
- tokens[0].downcase.match(/#{tag.to_s}:?/) ?
- (tokens[1..-1].join(' ')) : line
- end
-
- def eof
- end
-
- def other(line)
- # no-op - supports header text before the first story in a file
- end
- end
-
- class StartingState < State
- def initialize(parser)
- @parser = parser
- end
- end
-
- class StoryState < State
- def one_more_of_the_same(line)
- other(line)
- end
-
- def story(line)
- @parser.create_story
- @parser.add_story_line(line)
- end
-
- def scenario(line)
- @parser.create_story
- @parser.create_scenario(line)
- @parser.transition_to(:scenario_state)
- end
-
- def given(line)
- other(line)
- end
-
- def event(line)
- other(line)
- end
-
- def outcome(line)
- other(line)
- end
-
- def other(line)
- @parser.add_story_line(line)
- end
-
- def eof
- @parser.create_story
- end
- end
-
- class ScenarioState < State
- def one_more_of_the_same(line)
- raise IllegalStepError.new("Scenario", "And")
- end
-
- def scenario(line)
- @parser.create_scenario(line)
- end
- end
-
- class GivenState < State
- def one_more_of_the_same(line)
- @parser.create_given(remove_tag_from(:and, line))
- end
-
- def given(line)
- @parser.create_given(remove_tag_from(:given, line))
- end
- end
-
- class WhenState < State
- def one_more_of_the_same(line)
- @parser.create_when(remove_tag_from(:and ,line))
- end
-
- def event(line)
- @parser.create_when(remove_tag_from(:when ,line))
- end
- end
-
- class ThenState < State
- def one_more_of_the_same(line)
- @parser.create_then(remove_tag_from(:and ,line))
- end
-
- def outcome(line)
- @parser.create_then(remove_tag_from(:then ,line))
- end
- end
-
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/runner/story_runner.rb b/vendor/plugins/rspec/lib/spec/story/runner/story_runner.rb
deleted file mode 100644
index a63479783..000000000
--- a/vendor/plugins/rspec/lib/spec/story/runner/story_runner.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-module Spec
- module Story
- module Runner
- class StoryRunner
- class << self
- attr_accessor :current_story_runner
-
- def scenario_from_current_story(scenario_name)
- current_story_runner.scenario_from_current_story(scenario_name)
- end
- end
-
- attr_accessor :stories, :scenarios, :current_story
-
- def initialize(scenario_runner, world_creator = World)
- StoryRunner.current_story_runner = self
- @scenario_runner = scenario_runner
- @world_creator = world_creator
- @stories = []
- @scenarios_by_story = {}
- @scenarios = []
- @listeners = []
- end
-
- def Story(title, narrative, params = {}, &body)
- story = Story.new(title, narrative, params, &body)
- @stories << story
-
- # collect scenarios
- collector = ScenarioCollector.new(story)
- story.run_in(collector)
- @scenarios += collector.scenarios
- @scenarios_by_story[story.title] = collector.scenarios
- end
-
- def run_stories
- return if @stories.empty?
- @listeners.each { |l| l.run_started(scenarios.size) }
- success = true
- @stories.each do |story|
- story.assign_steps_to(World)
- @current_story = story
- @listeners.each { |l| l.story_started(story.title, story.narrative) }
- scenarios = @scenarios_by_story[story.title]
- scenarios.each do |scenario|
- type = story[:type] || Object
- args = story[:args] || []
- world = @world_creator.create(type, *args)
- success = success & @scenario_runner.run(scenario, world)
- end
- @listeners.each { |l| l.story_ended(story.title, story.narrative) }
- World.step_mother.clear
- end
- unique_steps = (World.step_names.collect {|n| Regexp === n ? n.source : n.to_s}).uniq.sort
- @listeners.each { |l| l.collected_steps(unique_steps) }
- @listeners.each { |l| l.run_ended }
- return success
- end
-
- def add_listener(listener)
- @listeners << listener
- end
-
- def scenario_from_current_story(scenario_name)
- @scenarios_by_story[@current_story.title].find {|s| s.name == scenario_name }
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/scenario.rb b/vendor/plugins/rspec/lib/spec/story/scenario.rb
deleted file mode 100644
index d83b3eeb8..000000000
--- a/vendor/plugins/rspec/lib/spec/story/scenario.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-
-module Spec
- module Story
- class Scenario
- attr_accessor :name, :body, :story
-
- def initialize(story, name, &body)
- @story = story
- @name = name
- @body = body
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/step.rb b/vendor/plugins/rspec/lib/spec/story/step.rb
deleted file mode 100644
index 5cd8765d6..000000000
--- a/vendor/plugins/rspec/lib/spec/story/step.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-module Spec
- module Story
- class Step
- PARAM_PATTERN = /([^\\]|^)(\$(?!\$)\w*)/
- PARAM_OR_GROUP_PATTERN = /(\$(?!\$)\w*)|\(.*?\)/
-
- attr_reader :name
- def initialize(name, &block)
- @name = name
- assign_expression(name)
- init_module(name, &block)
- end
-
- def perform(instance, *args)
- instance.extend(@mod)
- instance.__send__(sanitize(@name), *args)
- end
-
- def init_module(name, &block)
- sanitized_name = sanitize(name)
- @mod = Module.new do
- define_method(sanitized_name, &block)
- end
- end
-
- def sanitize(a_string_or_regexp)
- return a_string_or_regexp.source if Regexp == a_string_or_regexp
- a_string_or_regexp.to_s
- end
-
-
- def matches?(name)
- !(matches = name.match(@expression)).nil?
- end
-
- def parse_args(name)
- name.match(@expression)[1..-1]
- end
-
- private
-
- def assign_expression(string_or_regexp)
- if String === string_or_regexp
- expression = string_or_regexp.dup
- expression.gsub! '(', '\('
- expression.gsub! ')', '\)'
- elsif Regexp === string_or_regexp
- expression = string_or_regexp.source
- end
- while expression =~ PARAM_PATTERN
- expression.gsub!($2, "(.*?)")
- end
- @expression = Regexp.new("^#{expression}$")
- end
-
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/step_group.rb b/vendor/plugins/rspec/lib/spec/story/step_group.rb
deleted file mode 100644
index cae558c40..000000000
--- a/vendor/plugins/rspec/lib/spec/story/step_group.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-module Spec
- module Story
-
- class StepGroupHash < Hash
- def initialize
- super do |h,k|
- h[k] = Spec::Story::StepGroup.new
- end
- end
- end
-
- class StepGroup
- def self.steps(&block)
- @step_group ||= StepGroup.new(false)
- @step_group.instance_eval(&block) if block
- @step_group
- end
-
- def initialize(init_defaults=true, &block)
- @hash_of_lists_of_steps = Hash.new {|h, k| h[k] = []}
- if init_defaults
- self.class.steps.add_to(self)
- end
- instance_eval(&block) if block
- end
-
- def find(type, name)
- @hash_of_lists_of_steps[type].each do |step|
- return step if step.matches?(name)
- end
- return nil
- end
-
- def GivenScenario(name, &block)
- create_matcher(:given_scenario, name, &block)
- end
-
- def Given(name, &block)
- create_matcher(:given, name, &block)
- end
-
- def When(name, &block)
- create_matcher(:when, name, &block)
- end
-
- def Then(name, &block)
- create_matcher(:then, name, &block)
- end
-
- alias :given_scenario :GivenScenario
- alias :given :Given
- alias :when :When
- alias :then :Then
-
- def add(type, steps)
- (@hash_of_lists_of_steps[type] << steps).flatten!
- end
-
- def clear
- @hash_of_lists_of_steps.clear
- end
-
- def empty?
- [:given_scenario, :given, :when, :then].each do |type|
- return false unless @hash_of_lists_of_steps[type].empty?
- end
- return true
- end
-
- def add_to(other_step_matchers)
- [:given_scenario, :given, :when, :then].each do |type|
- other_step_matchers.add(type, @hash_of_lists_of_steps[type])
- end
- end
-
- def <<(other_step_matchers)
- other_step_matchers.add_to(self) if other_step_matchers.respond_to?(:add_to)
- end
-
- # TODO - make me private
- def create_matcher(type, name, &block)
- matcher = Step.new(name, &block)
- @hash_of_lists_of_steps[type] << matcher
- matcher
- end
-
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/step_mother.rb b/vendor/plugins/rspec/lib/spec/story/step_mother.rb
deleted file mode 100644
index a2e84e310..000000000
--- a/vendor/plugins/rspec/lib/spec/story/step_mother.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module Spec
- module Story
- class StepMother
- def initialize
- @steps = StepGroup.new
- end
-
- def use(new_step_group)
- @steps << new_step_group
- end
-
- def store(type, step)
- @steps.add(type, step)
- end
-
- def find(type, name)
- if @steps.find(type, name).nil?
- @steps.add(type,
- Step.new(name) do
- raise Spec::Example::ExamplePendingError.new("Unimplemented step: #{name}")
- end
- )
- end
- @steps.find(type, name)
- end
-
- def clear
- @steps.clear
- end
-
- def empty?
- @steps.empty?
- end
-
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/story.rb b/vendor/plugins/rspec/lib/spec/story/story.rb
deleted file mode 100644
index 9cd1a0fec..000000000
--- a/vendor/plugins/rspec/lib/spec/story/story.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-module Spec
- module Story
- class Story
- attr_reader :title, :narrative
-
- def initialize(title, narrative, params = {}, &body)
- @body = body
- @title = title
- @narrative = narrative
- @params = params
- end
-
- def [](key)
- @params[key]
- end
-
- def run_in(obj)
- obj.instance_eval(&@body)
- end
-
- def assign_steps_to(assignee)
- if steps=@params[:steps_for]
- steps = [steps] unless steps.is_a?(Array)
- steps.each do |step|
- if step.is_a?(StepGroup)
- assignee.use(step)
- else
- assignee.use(steps_for(step))
- end
- end
- end
- end
-
- def steps_for(key)
- $rspec_story_steps[key]
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/story/world.rb b/vendor/plugins/rspec/lib/spec/story/world.rb
deleted file mode 100644
index a27d3dda9..000000000
--- a/vendor/plugins/rspec/lib/spec/story/world.rb
+++ /dev/null
@@ -1,124 +0,0 @@
-require 'spec/expectations'
-require 'spec/matchers'
-require 'spec/example/pending'
-
-module Spec
- module Story
-=begin
- A World represents the actual instance a scenario will run in.
-
- The runner ensures any instance variables and methods defined anywhere
- in a story block are available to all the scenarios. This includes
- variables that are created or referenced inside Given, When and Then
- blocks.
-=end
- module World
- include ::Spec::Example::Pending
- include ::Spec::Matchers
- # store steps and listeners in the singleton metaclass.
- # This serves both to keep them out of the way of runtime Worlds
- # and to make them available to all instances.
- class << self
- def create(cls = Object, *args)
- cls.new(*args).extend(World)
- end
-
- def listeners
- @listeners ||= []
- end
-
- def add_listener(listener)
- listeners() << listener
- end
-
- def step_mother
- @step_mother ||= StepMother.new
- end
-
- def use(steps)
- step_mother.use(steps)
- end
-
- def step_names
- @step_names ||= []
- end
-
- def run_given_scenario_with_suspended_listeners(world, type, name, scenario)
- current_listeners = Array.new(listeners)
- begin
- listeners.each { |l| l.found_scenario(type, name) }
- @listeners.clear
- scenario.perform(world, name) unless ::Spec::Story::Runner.dry_run
- ensure
- @listeners.replace(current_listeners)
- end
- end
-
- def store_and_call(world, type, name, *args, &block)
- if block_given?
- step_mother.store(type, Step.new(name, &block))
- end
- step = step_mother.find(type, name)
-
- step_name = step.name
- step_names << step_name
-
- # It's important to have access to the parsed args here, so
- # we can give them to the listeners. The HTML reporter needs
- # the args so it can style them. See the generated output in
- # story_server/prototype/rspec_stories.html (generated by rake stories)
- args = step.parse_args(name) if args.empty?
- begin
- listeners.each { |l| l.step_upcoming(type, step_name, *args) }
- step.perform(world, *args) unless ::Spec::Story::Runner.dry_run
- listeners.each { |l| l.step_succeeded(type, step_name, *args) }
- rescue Exception => e
- case e
- when Spec::Example::ExamplePendingError
- @listeners.each { |l| l.step_pending(type, step_name, *args) }
- else
- @listeners.each { |l| l.step_failed(type, step_name, *args) }
- end
- errors << e
- end
- end
-
- def errors
- @errors ||= []
- end
- end # end of class << self
-
- def start_collecting_errors
- errors.clear
- end
-
- def errors
- World.errors
- end
-
- def GivenScenario(name)
- World.run_given_scenario_with_suspended_listeners(self, :'given scenario', name, GivenScenario.new(name))
- @__previous_step = :given
- end
-
- def Given(name, *args, &block)
- World.store_and_call self, :given, name, *args, &block
- @__previous_step = :given
- end
-
- def When(name, *args, &block)
- World.store_and_call self, :when, name, *args, &block
- @__previous_step = :when
- end
-
- def Then(name, *args, &block)
- World.store_and_call self, :then, name, *args, &block
- @__previous_step = :then
- end
-
- def And(name, *args, &block)
- World.store_and_call self, @__previous_step, name, *args, &block
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/translator.rb b/vendor/plugins/rspec/lib/spec/translator.rb
deleted file mode 100644
index c1e07eda4..000000000
--- a/vendor/plugins/rspec/lib/spec/translator.rb
+++ /dev/null
@@ -1,114 +0,0 @@
-require 'fileutils'
-
-module Spec
- class Translator
- def translate(from, to)
- from = File.expand_path(from)
- to = File.expand_path(to)
- if File.directory?(from)
- translate_dir(from, to)
- elsif(from =~ /\.rb$/)
- translate_file(from, to)
- end
- end
-
- def translate_dir(from, to)
- FileUtils.mkdir_p(to) unless File.directory?(to)
- Dir["#{from}/*"].each do |sub_from|
- path = sub_from[from.length+1..-1]
- sub_to = File.join(to, path)
- translate(sub_from, sub_to)
- end
- end
-
- def translate_file(from, to)
- translation = ""
- File.open(from) do |io|
- io.each_line do |line|
- translation << translate_line(line)
- end
- end
- File.open(to, "w") do |io|
- io.write(translation)
- end
- end
-
- def translate_line(line)
- # Translate deprecated mock constraints
- line.gsub!(/:any_args/, 'any_args')
- line.gsub!(/:anything/, 'anything')
- line.gsub!(/:boolean/, 'boolean')
- line.gsub!(/:no_args/, 'no_args')
- line.gsub!(/:numeric/, 'an_instance_of(Numeric)')
- line.gsub!(/:string/, 'an_instance_of(String)')
-
- return line if line =~ /(should_not|should)_receive/
-
- line.gsub!(/(^\s*)context([\s*|\(]['|"|A-Z])/, '\1describe\2')
- line.gsub!(/(^\s*)specify([\s*|\(]['|"|A-Z])/, '\1it\2')
- line.gsub!(/(^\s*)context_setup(\s*[do|\{])/, '\1before(:all)\2')
- line.gsub!(/(^\s*)context_teardown(\s*[do|\{])/, '\1after(:all)\2')
- line.gsub!(/(^\s*)setup(\s*[do|\{])/, '\1before(:each)\2')
- line.gsub!(/(^\s*)teardown(\s*[do|\{])/, '\1after(:each)\2')
-
- if line =~ /(.*\.)(should_not|should)(?:_be)(?!_)(.*)/m
- pre = $1
- should = $2
- post = $3
- be_or_equal = post =~ /(<|>)/ ? "be" : "equal"
-
- return "#{pre}#{should} #{be_or_equal}#{post}"
- end
-
- if line =~ /(.*\.)(should_not|should)_(?!not)\s*(.*)/m
- pre = $1
- should = $2
- post = $3
-
- post.gsub!(/^raise/, 'raise_error')
- post.gsub!(/^throw/, 'throw_symbol')
-
- unless standard_matcher?(post)
- post = "be_#{post}"
- end
-
- # Add parenthesis
- post.gsub!(/^(\w+)\s+([\w|\.|\,|\(.*\)|\'|\"|\:|@| ]+)(\})/, '\1(\2)\3') # inside a block
- post.gsub!(/^(redirect_to)\s+(.*)/, '\1(\2)') # redirect_to, which often has http:
- post.gsub!(/^(\w+)\s+([\w|\.|\,|\(.*\)|\{.*\}|\'|\"|\:|@| ]+)/, '\1(\2)')
- post.gsub!(/(\s+\))/, ')')
- post.gsub!(/\)\}/, ') }')
- post.gsub!(/^(\w+)\s+(\/.*\/)/, '\1(\2)') #regexps
- line = "#{pre}#{should} #{post}"
- end
-
- line
- end
-
- def standard_matcher?(matcher)
- patterns = [
- /^be/,
- /^be_close/,
- /^eql/,
- /^equal/,
- /^has/,
- /^have/,
- /^change/,
- /^include/,
- /^match/,
- /^raise_error/,
- /^respond_to/,
- /^redirect_to/,
- /^satisfy/,
- /^throw_symbol/,
- # Extra ones that we use in spec_helper
- /^pass/,
- /^fail/,
- /^fail_with/,
- ]
- matched = patterns.detect{ |p| matcher =~ p }
- !matched.nil?
- end
-
- end
-end
diff --git a/vendor/plugins/rspec/lib/spec/version.rb b/vendor/plugins/rspec/lib/spec/version.rb
index 959bf5189..b1088cd69 100644
--- a/vendor/plugins/rspec/lib/spec/version.rb
+++ b/vendor/plugins/rspec/lib/spec/version.rb
@@ -1,22 +1,14 @@
-module Spec
- module VERSION
- unless defined? MAJOR
- MAJOR = 1
- MINOR = 1
- TINY = 4
- RELEASE_CANDIDATE = nil
-
- BUILD_TIME_UTC = 20080526202855
-
- STRING = [MAJOR, MINOR, TINY].join('.')
- TAG = "REL_#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('_')}".upcase.gsub(/\.|-/, '_')
- FULL_VERSION = "#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('.')} (build #{BUILD_TIME_UTC})"
-
- NAME = "RSpec"
- URL = "http://rspec.rubyforge.org/"
-
- DESCRIPTION = "#{NAME}-#{FULL_VERSION} - BDD for Ruby\n#{URL}"
- end
- end
-end
-
+module Spec # :nodoc:
+ module VERSION # :nodoc:
+ unless defined? MAJOR
+ MAJOR = 1
+ MINOR = 2
+ TINY = 9
+ PRE = nil
+
+ STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
+
+ SUMMARY = "rspec #{STRING}"
+ end
+ end
+end
diff --git a/vendor/plugins/rspec/plugins/mock_frameworks/flexmock.rb b/vendor/plugins/rspec/plugins/mock_frameworks/flexmock.rb
deleted file mode 100644
index 6875a5222..000000000
--- a/vendor/plugins/rspec/plugins/mock_frameworks/flexmock.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env ruby
-#
-# Created by Jim Weirich on 2007-04-10.
-# Copyright (c) 2007. All rights reserved.
-
-require 'flexmock/rspec'
-
-module Spec
- module Plugins
- module MockFramework
- include FlexMock::MockContainer
- def setup_mocks_for_rspec
- # No setup required
- end
- def verify_mocks_for_rspec
- flexmock_verify
- end
- def teardown_mocks_for_rspec
- flexmock_close
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/plugins/mock_frameworks/mocha.rb b/vendor/plugins/rspec/plugins/mock_frameworks/mocha.rb
deleted file mode 100644
index 69d11636c..000000000
--- a/vendor/plugins/rspec/plugins/mock_frameworks/mocha.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'mocha/standalone'
-require 'mocha/object'
-
-module Spec
- module Plugins
- module MockFramework
- include Mocha::Standalone
- def setup_mocks_for_rspec
- mocha_setup
- end
- def verify_mocks_for_rspec
- mocha_verify
- end
- def teardown_mocks_for_rspec
- mocha_teardown
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/plugins/mock_frameworks/rr.rb b/vendor/plugins/rspec/plugins/mock_frameworks/rr.rb
deleted file mode 100644
index c019c18a1..000000000
--- a/vendor/plugins/rspec/plugins/mock_frameworks/rr.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'rr'
-
-patterns = ::Spec::Runner::QuietBacktraceTweaker::IGNORE_PATTERNS
-patterns.push(RR::Errors::BACKTRACE_IDENTIFIER)
-
-module Spec
- module Plugins
- module MockFramework
- include RR::Extensions::InstanceMethods
- def setup_mocks_for_rspec
- RR::Space.instance.reset
- end
- def verify_mocks_for_rspec
- RR::Space.instance.verify_doubles
- end
- def teardown_mocks_for_rspec
- RR::Space.instance.reset
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/plugins/mock_frameworks/rspec.rb b/vendor/plugins/rspec/plugins/mock_frameworks/rspec.rb
deleted file mode 100644
index f831cb2ba..000000000
--- a/vendor/plugins/rspec/plugins/mock_frameworks/rspec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "lib", "spec", "mocks"))
-require 'spec/mocks/framework'
-require 'spec/mocks/extensions'
-
-module Spec
- module Plugins
- module MockFramework
- include Spec::Mocks::ExampleMethods
- def setup_mocks_for_rspec
- $rspec_mocks ||= Spec::Mocks::Space.new
- end
- def verify_mocks_for_rspec
- $rspec_mocks.verify_all
- end
- def teardown_mocks_for_rspec
- $rspec_mocks.reset_all
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/rake_tasks/examples.rake b/vendor/plugins/rspec/rake_tasks/examples.rake
deleted file mode 100644
index 32d0ad0e6..000000000
--- a/vendor/plugins/rspec/rake_tasks/examples.rake
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'rake'
-require 'spec/rake/spectask'
-
-desc "Run all examples"
-Spec::Rake::SpecTask.new('examples') do |t|
- t.spec_files = FileList['examples/**/*.rb']
-end
diff --git a/vendor/plugins/rspec/rake_tasks/examples_with_rcov.rake b/vendor/plugins/rspec/rake_tasks/examples_with_rcov.rake
deleted file mode 100644
index 4bf35c6b8..000000000
--- a/vendor/plugins/rspec/rake_tasks/examples_with_rcov.rake
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'rake'
-require 'spec/rake/spectask'
-
-desc "Run all examples with RCov"
-Spec::Rake::SpecTask.new('examples_with_rcov') do |t|
- t.spec_files = FileList['examples/**/*.rb']
- t.rcov = true
- t.rcov_opts = ['--exclude', 'examples']
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/rake_tasks/failing_examples_with_html.rake b/vendor/plugins/rspec/rake_tasks/failing_examples_with_html.rake
deleted file mode 100644
index 34549583d..000000000
--- a/vendor/plugins/rspec/rake_tasks/failing_examples_with_html.rake
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'rake'
-require 'spec/rake/spectask'
-
-desc "Generate HTML report for failing examples"
-Spec::Rake::SpecTask.new('failing_examples_with_html') do |t|
- t.spec_files = FileList['failing_examples/**/*.rb']
- t.spec_opts = ["--format", "html:../doc/output/documentation/tools/failing_examples.html", "--diff"]
- t.fail_on_error = false
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/rake_tasks/verify_rcov.rake b/vendor/plugins/rspec/rake_tasks/verify_rcov.rake
deleted file mode 100644
index a90a266df..000000000
--- a/vendor/plugins/rspec/rake_tasks/verify_rcov.rake
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'rake'
-require 'spec/rake/verify_rcov'
-
-RCov::VerifyTask.new(:verify_rcov => :spec) do |t|
- t.threshold = 100.0 # Make sure you have rcov 0.7 or higher!
- t.index_html = '../doc/output/coverage/index.html'
-end
diff --git a/vendor/plugins/rspec/spec.opts b/vendor/plugins/rspec/spec.opts
deleted file mode 100644
index e9b65f0ac..000000000
--- a/vendor/plugins/rspec/spec.opts
+++ /dev/null
@@ -1,6 +0,0 @@
---colour
---format
-specdoc
---loadby
-mtime
---reverse
diff --git a/vendor/plugins/rspec/spec/autotest/discover_spec.rb b/vendor/plugins/rspec/spec/autotest/discover_spec.rb
index da5cb1445..fc8d483af 100644
--- a/vendor/plugins/rspec/spec/autotest/discover_spec.rb
+++ b/vendor/plugins/rspec/spec/autotest/discover_spec.rb
@@ -1,19 +1,8 @@
-require File.dirname(__FILE__) + "/../autotest_helper"
+require 'spec/autotest/autotest_helper'
-module DiscoveryHelper
- def load_discovery
- require File.dirname(__FILE__) + "/../../lib/autotest/discover"
+describe Autotest::Rspec, "discovery" do
+ it "adds the rspec autotest plugin" do
+ Autotest.should_receive(:add_discovery)
+ load File.expand_path(File.dirname(__FILE__) + "/../../lib/autotest/discover.rb")
end
-end
-
-
-class Autotest
- describe Rspec, "discovery" do
- include DiscoveryHelper
-
- it "should add the rspec autotest plugin" do
- Autotest.should_receive(:add_discovery).and_yield
- load_discovery
- end
- end
-end
+end
diff --git a/vendor/plugins/rspec/spec/autotest/rspec_spec.rb b/vendor/plugins/rspec/spec/autotest/rspec_spec.rb
index 3abe3fdd5..6dea29dd9 100644
--- a/vendor/plugins/rspec/spec/autotest/rspec_spec.rb
+++ b/vendor/plugins/rspec/spec/autotest/rspec_spec.rb
@@ -1,111 +1,9 @@
-require File.dirname(__FILE__) + "/../autotest_helper"
+require 'spec/autotest/autotest_helper'
-class Autotest
-
- module AutotestHelper
- def rspec_output
- <<-HERE
-.............PPF
-
-1)
-'false should be false' FAILED
-expected: true,
- got: false (using ==)
-./spec/autotest/rspec_spec.rb:203:
-
-Finished in 0.158674 seconds
-
-16 examples, 1 failure, 2 pending
-
-Pending:
-Autotest::Rspec handling failed results should return an array of failed examples and errors (TODO)
-Autotest::Rspec tests/specs for a given file should find all the specs for a given file (TODO)
-HERE
- end
-
-
- def common_setup
- @proc = mock Proc
- @kernel = mock Kernel
- @kernel.stub!(:proc).and_return @proc
-
- File.stub!(:exists).and_return true
- @windows_alt_separator = "\\"
- @posix_separator = '/'
-
- @rspec_output = rspec_output
- end
- end
-
- describe Rspec, "rspec_commands" do
- it "should contain the various commands, ordered by preference" do
- Rspec.new.spec_commands.should == [
- File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec"),
- "#{Config::CONFIG['bindir']}/spec"
- ]
- end
- end
-
- describe Rspec, "selection of rspec command" do
- include AutotestHelper
-
+describe Autotest::Rspec do
+ describe "adding spec.opts --options" do
before(:each) do
- common_setup
- @rspec_autotest = Rspec.new
- end
-
- it "should try to find the spec command if it exists in ./bin and use it above everything else" do
- File.stub!(:exists?).and_return true
-
- spec_path = File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec")
- File.should_receive(:exists?).with(spec_path).and_return true
- @rspec_autotest.spec_command.should == spec_path
- end
-
- it "should otherwise select the default spec command in gem_dir/bin/spec" do
- @rspec_autotest.stub!(:spec_commands).and_return ["/foo/spec"]
- Config::CONFIG.stub!(:[]).and_return "/foo"
- File.should_receive(:exists?).with("/foo/spec").and_return(true)
-
- @rspec_autotest.spec_command.should == "/foo/spec"
- end
-
- it "should raise an error if no spec command is found at all" do
- File.stub!(:exists?).and_return false
-
- lambda {
- @rspec_autotest.spec_command
- }.should raise_error(RspecCommandError, "No spec command could be found!")
- end
-
- end
-
- describe Rspec, "selection of rspec command (windows compatibility issues)" do
- include AutotestHelper
-
- before(:each) do
- common_setup
- end
-
- it "should use the ALT_SEPARATOR if it is non-nil" do
- @rspec_autotest = Rspec.new
- spec_command = File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec")
- @rspec_autotest.stub!(:spec_commands).and_return [spec_command]
- @rspec_autotest.spec_command(@windows_alt_separator).should == spec_command.gsub('/', @windows_alt_separator)
- end
-
- it "should not use the ALT_SEPATOR if it is nil" do
- @windows_alt_separator = nil
- @rspec_autotest = Rspec.new
- spec_command = File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec")
- @rspec_autotest.stub!(:spec_commands).and_return [spec_command]
- @rspec_autotest.spec_command.should == spec_command
- end
- end
-
- describe Rspec, "adding spec.opts --options" do
- before(:each) do
- @rspec_autotest = Rspec.new
+ @rspec_autotest = Autotest::Rspec.new
end
it "should return the command line option to add spec.opts if the options file exists" do
@@ -115,18 +13,18 @@ HERE
it "should return an empty string if no spec.opts exists" do
File.stub!(:exist?).and_return false
- Rspec.new.add_options_if_present.should == ""
+ Autotest::Rspec.new.add_options_if_present.should == ""
end
end
-
- describe Rspec do
+
+ describe "commands" do
before(:each) do
- @rspec_autotest = Rspec.new
+ @rspec_autotest = Autotest::Rspec.new
@rspec_autotest.stub!(:ruby).and_return "ruby"
@rspec_autotest.stub!(:add_options_if_present).and_return "-O spec/spec.opts"
-
+
@ruby = @rspec_autotest.ruby
- @spec_command = @rspec_autotest.spec_command
+ @spec_cmd = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec'))
@options = @rspec_autotest.add_options_if_present
@files_to_test = {
:spec => ["file_one", "file_two"]
@@ -136,52 +34,57 @@ HERE
@files_to_test.stub!(:keys).and_return @files_to_test[:spec]
@to_test = @files_to_test.keys.flatten.join ' '
end
-
- it "should make the apropriate test command" do
- @rspec_autotest.make_test_cmd(@files_to_test).should == "#{@ruby} -S #{@spec_command} #{@options} #{@to_test}"
+
+ it "should make the appropriate test command" do
+ @rspec_autotest.make_test_cmd(@files_to_test).should == "#{@ruby} #{@spec_cmd} --autospec #{@to_test} #{@options}"
+ end
+
+ it "should return a blank command for no files" do
+ @rspec_autotest.make_test_cmd({}).should == ''
end
end
+
+ describe "mappings" do
- describe Rspec, "mappings" do
-
before(:each) do
@lib_file = "lib/something.rb"
@spec_file = "spec/something_spec.rb"
- @rspec_autotest = Rspec.new
+ @rspec_autotest = Autotest::Rspec.new
@rspec_autotest.hook :initialize
end
-
+
it "should find the spec file for a given lib file" do
@rspec_autotest.should map_specs([@spec_file]).to(@lib_file)
end
-
+
it "should find the spec file if given a spec file" do
@rspec_autotest.should map_specs([@spec_file]).to(@spec_file)
end
-
- it "should only find the file if the file is being tracked (in @file)" do
+
+ it "should ignore files in spec dir that aren't specs" do
+ @rspec_autotest.should map_specs([]).to("spec/spec_helper.rb")
+ end
+
+ it "should ignore untracked files (in @file)" do
@rspec_autotest.should map_specs([]).to("lib/untracked_file")
end
end
-
- describe Rspec, "consolidating failures" do
- include AutotestHelper
-
+
+ describe "consolidating failures" do
before(:each) do
- common_setup
- @rspec_autotest = Rspec.new
-
- @spec_file = "spec/autotest/rspec_spec.rb"
+ @rspec_autotest = Autotest::Rspec.new
+
+ @spec_file = "spec/autotest/some_spec.rb"
@rspec_autotest.instance_variable_set("@files", {@spec_file => Time.now})
@rspec_autotest.stub!(:find_files_to_test).and_return true
end
-
+
it "should return no failures if no failures were given in the output" do
@rspec_autotest.consolidate_failures([[]]).should == {}
end
-
+
it "should return a hash with the spec filename => spec name for each failure or error" do
- @rspec_autotest.stub!(:test_files_for).and_return "spec/autotest/rspec_spec.rb"
+ @rspec_autotest.stub!(:test_files_for).and_return "spec/autotest/some_spec.rb"
failures = [
[
"false should be false",
@@ -192,6 +95,17 @@ HERE
@spec_file => ["false should be false"]
}
end
-
+
+ it "should not include the subject file" do
+ subject_file = "lib/autotest/some.rb"
+ @rspec_autotest.stub!(:test_files_for).and_return "spec/autotest/some_spec.rb"
+ failures = [
+ [
+ "false should be false",
+ "expected: true,\n got: false (using ==)\n#{subject_file}:143:\n#{@spec_file}:203:"
+ ]
+ ]
+ @rspec_autotest.consolidate_failures(failures).keys.should_not include(subject_file)
+ end
end
end
diff --git a/vendor/plugins/rspec/spec/autotest_helper.rb b/vendor/plugins/rspec/spec/autotest_helper.rb
deleted file mode 100644
index 1b6c6002b..000000000
--- a/vendor/plugins/rspec/spec/autotest_helper.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require "rubygems"
-require 'autotest'
-dir = File.dirname(__FILE__)
-require "#{dir}/spec_helper"
-require File.expand_path("#{dir}/../lib/autotest/rspec")
-require "#{dir}/autotest_matchers"
diff --git a/vendor/plugins/rspec/spec/autotest_matchers.rb b/vendor/plugins/rspec/spec/autotest_matchers.rb
deleted file mode 100644
index 5e23452e2..000000000
--- a/vendor/plugins/rspec/spec/autotest_matchers.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-module Spec
- module Matchers
- class AutotestMappingMatcher
- def initialize(specs)
- @specs = specs
- end
-
- def to(file)
- @file = file
- self
- end
-
- def matches?(autotest)
- @autotest = prepare autotest
- @actual = autotest.test_files_for(@file)
- @actual == @specs
- end
-
- def failure_message
- "expected #{@autotest.class} to map #{@specs.inspect} to #{@file.inspect}\ngot #{@actual.inspect}"
- end
-
- private
- def prepare autotest
- stub_found_files autotest
- stub_find_order autotest
- autotest
- end
-
- def stub_found_files autotest
- found_files = @specs.inject({}){|h,f| h[f] = Time.at(0)}
- autotest.stub!(:find_files).and_return(found_files)
- end
-
- def stub_find_order autotest
- find_order = @specs.dup << @file
- autotest.instance_eval { @find_order = find_order }
- end
-
- end
-
- def map_specs(specs)
- AutotestMappingMatcher.new(specs)
- end
-
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/rspec_suite.rb b/vendor/plugins/rspec/spec/rspec_suite.rb
deleted file mode 100644
index abd016a6d..000000000
--- a/vendor/plugins/rspec/spec/rspec_suite.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-if __FILE__ == $0
- dir = File.dirname(__FILE__)
- Dir["#{dir}/**/*_spec.rb"].reverse.each do |file|
-# puts "require '#{file}'"
- require file
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/example/configuration_spec.rb b/vendor/plugins/rspec/spec/spec/example/configuration_spec.rb
deleted file mode 100644
index 5b4a6049e..000000000
--- a/vendor/plugins/rspec/spec/spec/example/configuration_spec.rb
+++ /dev/null
@@ -1,282 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module Example
-
- describe Configuration do
- before(:each) do
- @config = Configuration.new
- @example_group = mock("example_group")
- end
-
- describe "#mock_with" do
-
- it "should default mock framework to rspec" do
- @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/
- end
-
- it "should let you set rspec mocking explicitly" do
- @config.mock_with(:rspec)
- @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/
- end
-
- it "should let you set mocha" do
- @config.mock_with(:mocha)
- @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/mocha$/
- end
-
- it "should let you set flexmock" do
- @config.mock_with(:flexmock)
- @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/flexmock$/
- end
-
- it "should let you set rr" do
- @config.mock_with(:rr)
- @config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rr$/
- end
-
- it "should let you set an arbitrary adapter module" do
- adapter = Module.new
- @config.mock_with(adapter)
- @config.mock_framework.should == adapter
- end
- end
-
- describe "#include" do
-
- before do
- @original_configuration = Spec::Runner.configuration
- spec_configuration = @config
- Spec::Runner.instance_eval {@configuration = spec_configuration}
- @example_group_class = Class.new(ExampleGroup) do
- class << self
- def this_class_has_special_methods
- end
- end
- end
- ExampleGroupFactory.register(:foobar, @example_group_class)
- end
-
- after do
- original_configuration = @original_configuration
- Spec::Runner.instance_eval {@configuration = original_configuration}
- ExampleGroupFactory.reset
- end
-
- it "should include the submitted module in ExampleGroup subclasses" do
- mod = Module.new
- @config.include mod
- Class.new(@example_group_class).included_modules.should include(mod)
- end
-
- it "should let you define modules to be included for a specific type" do
- mod = Module.new
- @config.include mod, :type => :foobar
- Class.new(@example_group_class).included_modules.should include(mod)
- end
-
- it "should not include modules in a type they are not intended for" do
- mod = Module.new
- @other_example_group_class = Class.new(ExampleGroup)
- ExampleGroupFactory.register(:baz, @other_example_group_class)
-
- @config.include mod, :type => :foobar
-
- Class.new(@other_example_group_class).included_modules.should_not include(mod)
- end
-
- end
-
- end
-
- describe Configuration do
-
- before(:each) do
- @config = Configuration.new
- @special_example_group = Class.new(ExampleGroup)
- @special_child_example_group = Class.new(@special_example_group)
- @nonspecial_example_group = Class.new(ExampleGroup)
- ExampleGroupFactory.register(:special, @special_example_group)
- ExampleGroupFactory.register(:special_child, @special_child_example_group)
- ExampleGroupFactory.register(:non_special, @nonspecial_example_group)
- @example_group = @special_child_example_group.describe "Special Example Group"
- @unselected_example_group = Class.new(@nonspecial_example_group).describe "Non Special Example Group"
- end
-
- after(:each) do
- ExampleGroupFactory.reset
- end
-
- describe "#prepend_before" do
- it "prepends the before block on all instances of the passed in type" do
- order = []
- @config.prepend_before(:all) do
- order << :prepend__before_all
- end
- @config.prepend_before(:all, :type => :special) do
- order << :special_prepend__before_all
- end
- @config.prepend_before(:all, :type => :special_child) do
- order << :special_child_prepend__before_all
- end
- @config.prepend_before(:each) do
- order << :prepend__before_each
- end
- @config.prepend_before(:each, :type => :special) do
- order << :special_prepend__before_each
- end
- @config.prepend_before(:each, :type => :special_child) do
- order << :special_child_prepend__before_each
- end
- @config.prepend_before(:all, :type => :non_special) do
- order << :special_prepend__before_all
- end
- @config.prepend_before(:each, :type => :non_special) do
- order << :special_prepend__before_each
- end
- @example_group.it "calls prepend_before" do
- end
-
- @example_group.run
- order.should == [
- :prepend__before_all,
- :special_prepend__before_all,
- :special_child_prepend__before_all,
- :prepend__before_each,
- :special_prepend__before_each,
- :special_child_prepend__before_each
- ]
- end
- end
-
- describe "#append_before" do
-
- it "calls append_before on the type" do
- order = []
- @config.append_before(:all) do
- order << :append_before_all
- end
- @config.append_before(:all, :type => :special) do
- order << :special_append_before_all
- end
- @config.append_before(:all, :type => :special_child) do
- order << :special_child_append_before_all
- end
- @config.append_before(:each) do
- order << :append_before_each
- end
- @config.append_before(:each, :type => :special) do
- order << :special_append_before_each
- end
- @config.append_before(:each, :type => :special_child) do
- order << :special_child_append_before_each
- end
- @config.append_before(:all, :type => :non_special) do
- order << :special_append_before_all
- end
- @config.append_before(:each, :type => :non_special) do
- order << :special_append_before_each
- end
- @example_group.it "calls append_before" do
- end
-
- @example_group.run
- order.should == [
- :append_before_all,
- :special_append_before_all,
- :special_child_append_before_all,
- :append_before_each,
- :special_append_before_each,
- :special_child_append_before_each
- ]
- end
- end
-
- describe "#prepend_after" do
-
- it "prepends the after block on all instances of the passed in type" do
- order = []
- @config.prepend_after(:all) do
- order << :prepend__after_all
- end
- @config.prepend_after(:all, :type => :special) do
- order << :special_prepend__after_all
- end
- @config.prepend_after(:all, :type => :special) do
- order << :special_child_prepend__after_all
- end
- @config.prepend_after(:each) do
- order << :prepend__after_each
- end
- @config.prepend_after(:each, :type => :special) do
- order << :special_prepend__after_each
- end
- @config.prepend_after(:each, :type => :special) do
- order << :special_child_prepend__after_each
- end
- @config.prepend_after(:all, :type => :non_special) do
- order << :special_prepend__after_all
- end
- @config.prepend_after(:each, :type => :non_special) do
- order << :special_prepend__after_each
- end
- @example_group.it "calls prepend_after" do
- end
-
- @example_group.run
- order.should == [
- :special_child_prepend__after_each,
- :special_prepend__after_each,
- :prepend__after_each,
- :special_child_prepend__after_all,
- :special_prepend__after_all,
- :prepend__after_all
- ]
- end
- end
-
- describe "#append_after" do
-
- it "calls append_after on the type" do
- order = []
- @config.append_after(:all) do
- order << :append__after_all
- end
- @config.append_after(:all, :type => :special) do
- order << :special_append__after_all
- end
- @config.append_after(:all, :type => :special_child) do
- order << :special_child_append__after_all
- end
- @config.append_after(:each) do
- order << :append__after_each
- end
- @config.append_after(:each, :type => :special) do
- order << :special_append__after_each
- end
- @config.append_after(:each, :type => :special_child) do
- order << :special_child_append__after_each
- end
- @config.append_after(:all, :type => :non_special) do
- order << :non_special_append_after_all
- end
- @config.append_after(:each, :type => :non_special) do
- order << :non_special_append_after_each
- end
- @example_group.it "calls append_after" do
- end
-
- @example_group.run
- order.should == [
- :special_child_append__after_each,
- :special_append__after_each,
- :append__after_each,
- :special_child_append__after_all,
- :special_append__after_all,
- :append__after_all
- ]
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/example/example_group/described_module_spec.rb b/vendor/plugins/rspec/spec/spec/example/example_group/described_module_spec.rb
deleted file mode 100644
index 55b02f53f..000000000
--- a/vendor/plugins/rspec/spec/spec/example/example_group/described_module_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.dirname(__FILE__) + "/../../../spec_helper"
-
-module Spec
- module Example
- module AModule; end
- class AClass; end
-
- describe "With", AModule do
- it "should have the described_type as 'AModule'" do
- self.class.described_module.should == AModule
- end
- end
-
- describe "With", AClass do
- it "should have the described_module as nil" do
- self.class.described_module.should be_nil
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/example/example_group/warning_messages_spec.rb b/vendor/plugins/rspec/spec/spec/example/example_group/warning_messages_spec.rb
deleted file mode 100644
index 79ac3722a..000000000
--- a/vendor/plugins/rspec/spec/spec/example/example_group/warning_messages_spec.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-require File.dirname(__FILE__) + "/../../../spec_helper"
-
-module Spec
- module Example
- module AModuleAutomaticallyIncluded
- def call_method
- @method_called = true
- return "a string"
- end
-
- def method_called?
- @method_called ? true : false
- end
- end
-
- describe "Including modules in an example group" do
- describe AModuleAutomaticallyIncluded do
- before :each do
- Kernel.stub!(:warn)
- end
-
- it "should return the correct values" do
- self.method_called?.should be_false
- self.call_method.should eql("a string")
- self.method_called?.should be_true
- end
-
- it "should respond_to? the methods from the module" do
- self.should respond_to(:method_called?)
- self.should respond_to(:call_method)
- end
-
- it "should not respond_to? methods which do not come from the module (or are in Spec::ExampleGroup)" do
- self.should_not respond_to(:adsfadfadadf_a_method_which_does_not_exist)
- end
-
- it "should respond_to? a method in Spec::ExampleGroup" do
- self.should respond_to(:describe)
- end
-
- it "should issue a warning with Kernel.warn" do
- Kernel.should_receive(:warn)
- self.call_method
- end
-
- it "should issue a warning when the example calls the method which is automatically included" do
- Kernel.should_receive(:warn).with("Modules will no longer be automatically included in RSpec version 1.1.4. Called from #{__FILE__}:#{__LINE__+1}")
- self.method_called?
- end
-
- it "should issue a warning with the correct file and line numbers" do
- Kernel.should_receive(:warn).with("Modules will no longer be automatically included in RSpec version 1.1.4. Called from #{__FILE__}:#{__LINE__+1}")
- self.method_called?
- end
- end
-
- describe AModuleAutomaticallyIncluded, "which is also manually included" do
- include AModuleAutomaticallyIncluded
-
- before :each do
- Kernel.stub!(:warn)
- end
-
- it "should respond to the methods since it is included" do
- self.should respond_to(:method_called?)
- self.should respond_to(:call_method)
- end
-
- it "should not issue a warning, since the module is manually included" do
- Kernel.should_not_receive(:warn)
- self.method_called?
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/example/example_group_class_definition_spec.rb b/vendor/plugins/rspec/spec/spec/example/example_group_class_definition_spec.rb
index 0b00e1397..96bd21110 100644
--- a/vendor/plugins/rspec/spec/spec/example/example_group_class_definition_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/example_group_class_definition_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Example
@@ -7,36 +7,39 @@ module Spec
attr_accessor :examples_ran
end
- @@klass_variable_set = true
- CONSTANT = :foobar
+ @@class_variable = :class_variable
+ CONSTANT = :constant
- before do
- @instance_variable = :hello
+ before(:each) do
+ @instance_variable = :instance_variable
end
-
- it "should run" do
+
+ after(:all) do
self.class.examples_ran = true
end
- it "should have access to instance variables" do
- @instance_variable.should == :hello
+ def a_method
+ 22
end
- it "should have access to class variables" do
- @@klass_variable_set.should == true
+ it "can access instance variables defined before(:each)" do
+ @instance_variable.should == :instance_variable
end
- it "should have access to constants" do
- CONSTANT.should == :foobar
+ it "can access class variables (Ruby 1.8 only)" do
+ with_ruby 1.8 do
+ @@class_variable.should == :class_variable
+ end
end
- it "should have access to methods defined in the Example Group" do
- a_method.should == 22
+ it "can access constants" do
+ CONSTANT.should == :constant
end
- def a_method
- 22
+ it "can access methods defined in the Example Group" do
+ a_method.should == 22
end
+
end
describe ExampleGroupSubclass do
diff --git a/vendor/plugins/rspec/spec/spec/example/example_group_factory_spec.rb b/vendor/plugins/rspec/spec/spec/example/example_group_factory_spec.rb
index da461cdfc..0819d3a3e 100644
--- a/vendor/plugins/rspec/spec/spec/example/example_group_factory_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/example_group_factory_spec.rb
@@ -1,46 +1,42 @@
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
+require 'spec_helper'
module Spec
module Example
describe ExampleGroupFactory do
describe "#get" do
attr_reader :example_group
- before do
- @example_group = Class.new(ExampleGroup)
- ExampleGroupFactory.register(:registered_type, @example_group)
+ before(:each) do
+ @example_group_class = Class.new(ExampleGroupDouble)
+ ExampleGroupFactory.register(:registered_type, @example_group_class)
end
- after do
+ after(:each) do
ExampleGroupFactory.reset
end
- it "should #get the default ExampleGroup type when passed nil" do
- ExampleGroupFactory.get(nil).should == ExampleGroup
- end
-
- it "should #get the default ExampleGroup for unregistered non-nil values" do
- ExampleGroupFactory.get(:does_not_exist).should == ExampleGroup
+ it "should return the default ExampleGroup type for nil" do
+ ExampleGroupFactory[nil].should == ExampleGroup
end
- it "should #get custom type for :registered_type" do
- ExampleGroupFactory.get(:registered_type).should == @example_group
+ it "should return the default ExampleGroup for an unregistered non-nil value" do
+ ExampleGroupFactory[:does_not_exist].should == ExampleGroup
end
- it "should #get the actual type when that is passed in" do
- ExampleGroupFactory.get(@example_group).should == @example_group
+ it "should return custom type if registered" do
+ ExampleGroupFactory[:registered_type].should == @example_group_class
end
it "should get the custom type after setting the default" do
- @example_group2 = Class.new(ExampleGroup)
- ExampleGroupFactory.default(@example_group2)
- ExampleGroupFactory.get(:registered_type).should == @example_group
+ @alternate_example_group_class = Class.new(ExampleGroupDouble)
+ ExampleGroupFactory.default(@alternate_example_group_class)
+ ExampleGroupFactory[:registered_type].should == @example_group_class
end
end
describe "#create_example_group" do
attr_reader :parent_example_group
before do
- @parent_example_group = Class.new(ExampleGroup) do
+ @parent_example_group = Class.new(ExampleGroupDouble) do
def initialize(*args, &block)
;
end
@@ -57,15 +53,28 @@ module Spec
example_group.superclass.should == Spec::Example::ExampleGroup
end
- describe "when :type => :default" do
- it "should create a Spec::Example::Example" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "example_group", :type => :default
- ) {}
- example_group.superclass.should == Spec::Example::ExampleGroup
- end
+ it "should raise when no description is given" do
+ lambda {
+ Spec::Example::ExampleGroupFactory.create_example_group do; end
+ }.should raise_error(ArgumentError)
+ end
+
+ it "should raise when no block is given" do
+ lambda { Spec::Example::ExampleGroupFactory.create_example_group "foo" }.should raise_error(ArgumentError)
+ end
- it "should create a Spec::Example::Example" do
+ it "should run registered ExampleGroups" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group "The ExampleGroup" do end
+ Spec::Runner.options.example_groups.should include(example_group)
+ end
+
+ it "should not run unregistered ExampleGroups" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group "The ExampleGroup" do Spec::Runner.options.remove_example_group self; end
+ Spec::Runner.options.example_groups.should_not include(example_group)
+ end
+
+ describe "with :type => :default" do
+ it "should create a Spec::Example::ExampleGroup" do
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
"example_group", :type => :default
) {}
@@ -73,8 +82,8 @@ module Spec
end
end
- describe "when :type => :something_other_than_default" do
- it "should create specified type" do
+ describe "with :type => :something_other_than_default" do
+ it "should create the specified type" do
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
non_default_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
"example_group", :type => :something_other_than_default
@@ -83,41 +92,59 @@ module Spec
end
end
- it "should create a type indicated by :spec_path" do
+ it "should create a type indicated by :location" do
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "example_group", :spec_path => "./spec/something_other_than_default/some_spec.rb"
+ "example_group", :location => "./spec/something_other_than_default/some_spec.rb"
) {}
custom_example_group.superclass.should == parent_example_group
end
- it "should create a type indicated by :spec_path (with spec_path generated by caller on windows)" do
+ it "should create a type indicated by :location (with location generated by caller on windows)" do
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
"example_group",
- :spec_path => "./spec\\something_other_than_default\\some_spec.rb"
+ :location => "./spec\\something_other_than_default\\some_spec.rb"
) {}
custom_example_group.superclass.should == parent_example_group
end
- describe "when :shared => true" do
- attr_reader :shared_example_group
- before do
- @shared_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller, :shared => true
+ it "should create a type indicated by location for a path-like key" do
+ Spec::Example::ExampleGroupFactory.register('path/to/custom/', parent_example_group)
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :location => "./spec/path/to/custom/some_spec.rb"
+ ) {}
+ custom_example_group.superclass.should == parent_example_group
+ end
+
+ it "should use the longest key that matches when creating a type indicated by location" do
+ longer = Class.new parent_example_group
+ Spec::Example::ExampleGroupFactory.register(:longer, longer)
+ long = Class.new parent_example_group
+ Spec::Example::ExampleGroupFactory.register(:long, long)
+ custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :location => "./spec/longer/some_spec.rb"
+ ) {}
+ custom_example_group.superclass.should == longer
+ end
+
+ describe "with :shared => true" do
+ def shared_example_group
+ @shared_example_group ||= Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :location => '/blah/spec/models/blah.rb', :type => :controller, :shared => true
) {}
end
- it "should create and register a Spec::Example::Example" do
+ it "should create and register a Spec::Example::SharedExampleGroup" do
shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
- SharedExampleGroup.shared_example_groups.should include(shared_example_group)
+ SharedExampleGroup.should include(shared_example_group)
end
end
- it "should favor the :type over the :spec_path" do
+ it "should favor the :type over the :location" do
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, parent_example_group)
custom_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '/blah/spec/models/blah.rb', :type => :something_other_than_default
+ "name", :location => '/blah/spec/models/blah.rb', :type => :something_other_than_default
) {}
custom_example_group.superclass.should == parent_example_group
end
@@ -125,20 +152,29 @@ module Spec
it "should register ExampleGroup by default" do
example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
end
- rspec_options.example_groups.should include(example_group)
+ Spec::Runner.options.example_groups.should include(example_group)
end
it "should enable unregistering of ExampleGroups" do
example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
- unregister
+ Spec::Runner.options.remove_example_group self
end
- rspec_options.example_groups.should_not include(example_group)
+ Spec::Runner.options.example_groups.should_not include(example_group)
end
after(:each) do
Spec::Example::ExampleGroupFactory.reset
end
end
+
+ describe "#create_shared_example_group" do
+ it "registers a new shared example group" do
+ shared_example_group = Spec::Example::ExampleGroupFactory.create_shared_example_group("something shared") {}
+ shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
+ SharedExampleGroup.should include(shared_example_group)
+ end
+ end
+
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/example/example_group_methods_spec.rb b/vendor/plugins/rspec/spec/spec/example/example_group_methods_spec.rb
index 55c746ece..c9f10b8c1 100644
--- a/vendor/plugins/rspec/spec/spec/example/example_group_methods_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/example_group_methods_spec.rb
@@ -1,523 +1,758 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Example
describe 'ExampleGroupMethods' do
- it_should_behave_like "sandboxed rspec_options"
- attr_reader :example_group, :result, :reporter
- before(:each) do
- options.formatters << mock("formatter", :null_object => true)
- options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
- @reporter = FakeReporter.new(@options)
- options.reporter = reporter
- @example_group = Class.new(ExampleGroup) do
- describe("ExampleGroup")
- it "does nothing"
+ with_sandboxed_options do
+ attr_reader :example_group, :result, :reporter
+ before(:each) do
+ # See http://rspec.lighthouseapp.com/projects/5645-rspec/tickets/525-arity-changed-on-partial-mocks#ticket-525-2
+ method_with_three_args = lambda { |arg1, arg2, arg3| }
+ options.formatters << mock("formatter", :null_object => true, :example_pending => method_with_three_args)
+ options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
+ @reporter = FakeReporter.new(@options)
+ options.reporter = reporter
+ @example_group = Class.new(ExampleGroupDouble) do
+ describe("ExampleGroup")
+ it "does nothing"
+ end
end
- class << example_group
- public :include
+
+ after(:each) do
+ ExampleGroupDouble.reset
end
- @result = nil
- end
- after(:each) do
- ExampleGroup.reset
- end
-
- ["describe","context"].each do |method|
- describe "#{method}" do
- describe "when creating an ExampleGroup" do
- attr_reader :child_example_group
- before do
- @child_example_group = @example_group.send method, "Another ExampleGroup" do
- it "should pass" do
- true.should be_true
+ ["describe","context"].each do |method|
+ describe "##{method}" do
+ describe "when creating an ExampleGroup" do
+ before(:each) do
+ @parent_example_group = Class.new(ExampleGroupDouble) do
+ example "first example" do; end
+ end
+ @child_example_group = @parent_example_group.__send__ method, "Child" do
+ example "second example" do; end
end
end
- end
- it "should create a subclass of the ExampleGroup when passed a block" do
- child_example_group.superclass.should == @example_group
- @options.example_groups.should include(child_example_group)
+ it "should create a subclass of the ExampleGroup when passed a block" do
+ @child_example_group.superclass.should == @parent_example_group
+ options.example_groups.should include(@child_example_group)
+ end
+
+ it "should not inherit examples" do
+ @child_example_group.should have(1).examples
+ end
+
+ it "records the spec path" do
+ @child_example_group.location.should =~ /#{__FILE__}:#{__LINE__ - 15}/
+ end
+ end
+
+ describe "when creating an example group with no description" do
+ it "raises an ArgumentError" do
+ lambda do
+ Class.new(ExampleGroupDouble).describe
+ end.should raise_error(Spec::Example::NoDescriptionError, /No description supplied for example group declared on #{__FILE__}:#{__LINE__ - 1}/)
+ end
end
- it "should not inherit examples" do
- child_example_group.examples.length.should == 1
+ describe "when creating a SharedExampleGroup" do
+ before(:each) do
+ @shared_example_group = @example_group.__send__ method, "A Shared ExampleGroup", :shared => true do; end
+ end
+
+ after(:each) do
+ SharedExampleGroup.instance_eval{@shared_example_groups}.delete @shared_example_group
+ end
+
+ it "should create a SharedExampleGroup" do
+ @shared_example_group.should_not be_nil
+ SharedExampleGroup.find("A Shared ExampleGroup").should == @shared_example_group
+ end
end
+
end
+ end
+
+ [:example, :specify, :it].each do |method|
+ describe "##{method.to_s}" do
+ it "should add an example" do
+ lambda {
+ @example_group.__send__(method, "")
+ }.should change { @example_group.examples.length }.by(1)
+ end
+
+ describe "with no location supplied" do
+ describe "creates an ExampleProxy" do
+ before(:all) do
+ @example_group = Class.new(ExampleGroupDouble).describe("bar")
+ @example_proxy = @example_group.__send__(method, "foo", {:this => :that}) {}
+ @location = "#{__FILE__}:#{__LINE__ - 1}"
+ end
- describe "when creating a SharedExampleGroup" do
- attr_reader :name, :shared_example_group
- before do
- @name = "A Shared ExampleGroup"
- @shared_example_group = @example_group.send method, name, :shared => true do
- it "should pass" do
- true.should be_true
+ specify "with a description" do
+ @example_proxy.description.should == "foo"
+ end
+
+ specify "with options" do
+ @example_proxy.options.should == {:this => :that}
end
- end
- end
- after do
- SharedExampleGroup.shared_example_groups.delete_if do |registered_shared_example_group|
- registered_shared_example_group == shared_example_group
+ specify "with a default backtrace (DEPRECATED)" do
+ Spec.stub!(:deprecate)
+ @example_proxy.backtrace.should =~ /#{@location}/
+ end
+
+ specify "with a default location" do
+ @example_proxy.location.should =~ /#{@location}/
+ end
end
end
+
+ describe "with a location supplied" do
+ describe "creates an ExampleProxy" do
+ before(:all) do
+ @example_group = Class.new(ExampleGroupDouble).describe("bar")
+ @example_proxy = @example_group.__send__(method, "foo", {:this => :that}, "the location") {}
+ end
- it "should create a SharedExampleGroup" do
- SharedExampleGroup.find_shared_example_group(name).should == shared_example_group
+ specify "with the supplied location as #backtrace (DEPRECATED)" do
+ Spec.stub!(:deprecate)
+ @example_proxy.backtrace.should == "the location"
+ end
+
+ specify "with the supplied location as #location" do
+ @example_proxy.location.should == "the location"
+ end
+ end
end
+
+
end
-
end
- end
-
- describe "#it" do
- it "should should create an example instance" do
- lambda {
- @example_group.it("")
- }.should change { @example_group.examples.length }.by(1)
- end
- end
+
+ [:xexample, :xit, :xspecify].each do |method|
+ describe "##{method.to_s}" do
+ before(:each) do
+ Kernel.stub!(:warn)
+ end
- describe "#xit and #xspecify" do
- before(:each) do
- Kernel.stub!(:warn)
+ it "should NOT create an example" do
+ lambda {
+ @example_group.__send__(method,"")
+ }.should_not change(@example_group.examples, :length)
+ end
+
+ it "should warn that the example is disabled" do
+ Kernel.should_receive(:warn).with("Example disabled: foo")
+ @example_group.__send__(method,"foo")
+ end
+ end
end
+
+ describe "#examples" do
+ it "should have Examples" do
+ example_group = Class.new(ExampleGroupDouble) do
+ it "should exist" do; end
+ end
+ example_group.examples.length.should == 1
+ example_group.examples.first.description.should == "should exist"
+ end
- it "should NOT create an example instance" do
- lambda {
- @example_group.xit("")
- }.should_not change(@example_group.examples, :length)
+ it "should not include methods that begin with test (only when TU interop is loaded)" do
+ example_group = Class.new(ExampleGroupDouble) do
+ def test_any_args(*args)
+ true.should be_true
+ end
+ def test_something
+ 1.should == 1
+ end
+ def test
+ raise "This is not a real test"
+ end
+ def testify
+ raise "This is not a real test"
+ end
+ def should_something
+ # forces the run
+ end
+ end
+
+ example_group.examples.length.should == 1
+ example_group.run(options).should be_true
+ end
- lambda {
- @example_group.xspecify("")
- }.should_not change(@example_group.examples, :length)
- end
+ it "should include methods that begin with should and has an arity of 0 in suite" do
+ example_group = Class.new(ExampleGroupDouble) do
+ def shouldCamelCase
+ true.should be_true
+ end
+ def should_any_args(*args)
+ true.should be_true
+ end
+ def should_something
+ 1.should == 1
+ end
+ def should_not_something
+ 1.should_not == 2
+ end
+ def should
+ raise "This is not a real example"
+ end
+ def should_not
+ raise "This is not a real example"
+ end
+ end
+ example_group.should have(4).examples
+ descriptions = example_group.examples.collect {|e| e.description}
+ descriptions.should include(
+ "shouldCamelCase",
+ "should_any_args",
+ "should_something",
+ "should_not_something")
+ descriptions.should_not include(
+ "should",
+ "should_not"
+ )
+ end
+
+ it "should not include methods that begin with test_ and has an arity > 0 in suite" do
+ example_group = Class.new(ExampleGroupDouble) do
+ def test_invalid(foo)
+ 1.should == 1
+ end
+ def testInvalidCamelCase(foo)
+ 1.should == 1
+ end
+ end
+ example_group.should have(:no).examples
+ end
- it "should warn that it is disabled" do
- Kernel.should_receive(:warn).with("Example disabled: foo").twice
- @example_group.xit("foo")
- @example_group.xspecify("foo")
- end
- end
+ it "should not include methods that begin with should_ and has an arity > 0 in suite" do
+ example_group = Class.new(ExampleGroupDouble) do
+ def should_invalid(foo)
+ 1.should == 2
+ end
+ def shouldInvalidCamelCase(foo)
+ 1.should == 3
+ end
+ def should_not_invalid(foo)
+ 1.should == 4
+ end
+ def should_valid
+ 1.should == 1
+ end
+ end
+ example_group.should have(1).examples
+ example_group.run(options).should be_true
+ end
- describe "#examples" do
- it "should have Examples" do
- example_group = Class.new(ExampleGroup) do
- describe('example')
- it "should pass" do
- 1.should == 1
+ it "should run should_methods" do
+ example_group = Class.new(ExampleGroupDouble) do
+ def should_valid
+ 1.should == 2
+ end
end
+ example_group.should have(1).examples
+ example_group.run(options).should be_false
end
- example_group.examples.length.should == 1
- example_group.examples.first.description.should == "should pass"
end
- it "should not include methods that begin with test (only when TU interop is loaded)" do
- example_group = Class.new(ExampleGroup) do
- describe('example')
- def test_any_args(*args)
- true.should be_true
+ describe "#set_description" do
+ attr_reader :example_group
+ before do
+ class << example_group
+ public :set_description
end
- def test_something
- 1.should == 1
+ end
+
+ describe "given a String" do
+ before(:each) do
+ example_group.set_description("abc")
end
- def test
- raise "This is not a real test"
+
+ specify ".description should return the String passed into .set_description" do
+ example_group.description.should == "abc"
end
- def testify
- raise "This is not a real test"
+
+ specify ".described_type should provide nil as its type" do
+ example_group.described_type.should be_nil
end
end
- example_group.examples.length.should == 0
- example_group.run.should be_true
- end
- it "should include methods that begin with should and has an arity of 0 in suite" do
- example_group = Class.new(ExampleGroup) do
- describe('example')
- def shouldCamelCase
- true.should be_true
+ describe "given a Class" do
+ before(:each) do
+ example_group.set_description(ExampleGroup)
end
- def should_any_args(*args)
- true.should be_true
+
+ specify ".description should return a String representation of that type (fully qualified) as its name" do
+ example_group.description.should == "Spec::Example::ExampleGroup"
end
- def should_something
- 1.should == 1
+
+ specify ".described_type should return the passed in type" do
+ example_group.described_type.should == Spec::Example::ExampleGroup
end
- def should_not_something
- 1.should_not == 2
+ end
+
+ describe "given a String and a Class" do
+ before(:each) do
+ example_group.set_description("behaving", ExampleGroup)
end
- def should
- raise "This is not a real example"
+
+ specify ".description should return String then space then Type" do
+ example_group.description.should == "behaving Spec::Example::ExampleGroup"
end
- def should_not
- raise "This is not a real example"
+
+ specify ".described_type should return the passed in type" do
+ example_group.described_type.should == Spec::Example::ExampleGroup
end
end
- example_group = example_group.dup
- example_group.examples.length.should == 4
- descriptions = example_group.examples.collect {|example| example.description}.sort
- descriptions.should include("shouldCamelCase")
- descriptions.should include("should_any_args")
- descriptions.should include("should_something")
- descriptions.should include("should_not_something")
- end
- it "should not include methods that begin with test_ and has an arity > 0 in suite" do
- example_group = Class.new(ExampleGroup) do
- describe('example')
- def test_invalid(foo)
- 1.should == 1
+ describe "given a Class and a String (starting with an alpha char)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, "behaving")
end
- def testInvalidCamelCase(foo)
- 1.should == 1
+
+ specify ".description should return the Type then space then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup behaving"
end
end
- example_group.examples.length.should == 0
- end
- it "should not include methods that begin with should_ and has an arity > 0 in suite" do
- example_group = Class.new(ExampleGroup) do
- describe('example')
- def should_invalid(foo)
- 1.should == 2
+ describe "given a Class and a String (starting with a '.')" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, ".behaving")
end
- def shouldInvalidCamelCase(foo)
- 1.should == 3
+
+ specify ".description should return the Type then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup.behaving"
end
- def should_not_invalid(foo)
- 1.should == 4
+ end
+
+ describe "#set_description(Class, String starting with #)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, "#behaving")
end
- def should_valid
- 1.should == 1
+
+ specify "should return the Class then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup#behaving"
end
end
- example_group.examples.length.should == 1
- example_group.run.should be_true
- end
- it "should run should_methods" do
- example_group = Class.new(ExampleGroup) do
- def should_valid
- 1.should == 2
+ describe "#set_description(Class, String containing .)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, "calling a.b")
end
- end
- example_group.examples.length.should == 1
- example_group.run.should be_false
- end
- end
- describe "#set_description" do
- attr_reader :example_group
- before do
- class << example_group
- public :set_description
+ specify ".description should return the Type then space then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup calling a.b"
+ end
end
- end
- describe "#set_description(String)" do
- before(:each) do
- example_group.set_description("abc")
- end
+ describe "#set_description(Class, String containing #)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, "is #1")
+ end
- specify ".description should return the String passed into .set_description" do
- example_group.description.should == "abc"
+ specify ".description should return the Type then space then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup is #1"
+ end
end
- specify ".described_type should provide nil as its type" do
- example_group.described_type.should be_nil
- end
- end
+ describe "#set_description(String, Type, String)" do
+ before(:each) do
+ example_group.set_description("A", Hash, "with one entry")
+ end
- describe "#set_description(Type)" do
- before(:each) do
- example_group.set_description(ExampleGroup)
+ specify ".description should return the first String then space then Type then second String" do
+ example_group.description.should == "A Hash with one entry"
+ end
end
- specify ".description should return a String representation of that type (fully qualified) as its name" do
- example_group.description.should == "Spec::Example::ExampleGroup"
- end
+ describe "#set_description(Hash representing options)" do
+ before(:each) do
+ example_group.set_description(:a => "b", :location => "blah")
+ end
+
+ it ".location should expand the passed in :location option passed into the constructor" do
+ example_group.location.should == File.expand_path("blah")
+ end
+
+ it ".options should return all the options passed in" do
+ example_group.options.should == {:a => "b", :location => "blah"}
+ end
- specify ".described_type should return the passed in type" do
- example_group.described_type.should == Spec::Example::ExampleGroup
end
end
- describe "#set_description(String, Type)" do
- before(:each) do
- example_group.set_description("behaving", ExampleGroup)
+ describe "#description" do
+ it "should return the same description instance for each call" do
+ example_group.description.should eql(example_group.description)
end
- specify ".description should return String then space then Type" do
- example_group.description.should == "behaving Spec::Example::ExampleGroup"
+ it "should not add a space when description begins with #" do
+ child_example_group = Class.new(example_group) do
+ describe("#foobar", "Does something")
+ end
+ child_example_group.description.should == "ExampleGroup#foobar Does something"
end
- specify ".described_type should return the passed in type" do
- example_group.described_type.should == Spec::Example::ExampleGroup
+ it "should not add a space when description begins with ." do
+ child_example_group = Class.new(example_group) do
+ describe(".foobar", "Does something")
+ end
+ child_example_group.description.should == "ExampleGroup.foobar Does something"
+ end
+
+ it "should return the class name if nil" do
+ example_group.set_description(nil)
+ example_group.description.should =~ /Class:/
+ end
+
+ it "should return the class name if nil" do
+ example_group.set_description("")
+ example_group.description.should =~ /Class:/
+ end
+
+ it "is cached" do
+ example_group.set_description("describe me")
+ example_group.description.should be(example_group.description)
end
end
- describe "#set_description(Type, String not starting with a space)" do
- before(:each) do
- example_group.set_description(ExampleGroup, "behaving")
+ describe "#description_parts" do
+ it "should return an Array of the current class description args" do
+ example_group.description_parts.should == [example_group.description]
end
- specify ".description should return the Type then space then String" do
- example_group.description.should == "Spec::Example::ExampleGroup behaving"
+ it "should return an Array of the description args from each class in the hierarchy" do
+ parent_example_group = Class.new(ExampleGroupDouble) do
+ describe("Parent")
+ end
+
+ child_example_group = Class.new(parent_example_group)
+ child_example_group.describe("Child", ExampleGroup)
+ child_example_group.description.should_not be_empty
+
+ grand_child_example_group = Class.new(child_example_group)
+ grand_child_example_group.describe("GrandChild", ExampleGroup)
+ grand_child_example_group.description.should_not be_empty
+
+ grand_child_example_group.description_parts.should == [
+ "Parent",
+ "Child",
+ Spec::Example::ExampleGroup,
+ "GrandChild",
+ Spec::Example::ExampleGroup
+ ]
+ end
+
+ it "caches the description parts" do
+ example_group.description_parts.should equal(example_group.description_parts)
end
end
- describe "#set_description(Type, String starting with .)" do
- before(:each) do
- example_group.set_description(ExampleGroup, ".behaving")
+ describe "#described_type" do
+ it "should return passed in type" do
+ child_example_group = Class.new(example_group) do
+ describe Object
+ end
+ child_example_group.described_type.should == Object
end
- specify ".description should return the Type then String" do
- example_group.description.should == "Spec::Example::ExampleGroup.behaving"
+ it "should return #described_type of superclass when no passed in type" do
+ parent_example_group = Class.new(ExampleGroupDouble) do
+ describe Object, "#foobar"
+ end
+ child_example_group = Class.new(parent_example_group) do
+ describe "not a type"
+ end
+ child_example_group.described_type.should == Object
+ end
+
+ it "is cached per example group" do
+ klass = Class.new
+ group = Class.new(ExampleGroupDouble) do
+ describe(klass)
+ end
+ group.should_receive(:description_parts).once.and_return([klass])
+ group.described_type
+ group.described_type
end
end
- describe "#set_description(Type, String containing .)" do
- before(:each) do
- example_group.set_description(ExampleGroup, "calling a.b")
- end
+ describe "#include" do
+ it "should have accessible class methods from included module" do
+ mod_method_called = false
+ mod = Module.new do
+ class_methods = Module.new do
+ define_method :mod_method do
+ mod_method_called = true
+ end
+ end
+
+ self.class.class_eval do
+ define_method(:included) do |receiver|
+ receiver.extend class_methods
+ end
+ end
+ end
+
+ @example_group.__send__ :include, mod
- specify ".description should return the Type then space then String" do
- example_group.description.should == "Spec::Example::ExampleGroup calling a.b"
+ @example_group.mod_method
+ mod_method_called.should be_true
end
end
- describe "#set_description(Type, String starting with .)" do
- before(:each) do
- example_group.set_description(ExampleGroup, ".behaving")
+ describe "#number_of_examples" do
+ it "should count number of examples" do
+ proc do
+ @example_group.it("one") {}
+ @example_group.it("two") {}
+ @example_group.it("three") {}
+ @example_group.it("four") {}
+ end.should change {@example_group.number_of_examples}.by(4)
end
+ end
- specify "should return the Type then String" do
- example_group.description.should == "Spec::Example::ExampleGroup.behaving"
+ describe "#class_eval" do
+ it "should allow constants to be defined" do
+ example_group = Class.new(ExampleGroupDouble) do
+ FOO = 1
+ it "should reference FOO" do
+ FOO.should == 1
+ end
+ end
+ success = example_group.run(options)
+ success.should be_true
+ Object.const_defined?(:FOO).should == false
end
end
- describe "#set_description(Type, String containing .)" do
- before(:each) do
- example_group.set_description(ExampleGroup, "is #1")
+ describe '#register' do
+ after(:each) do
+ Spec::Runner.options.remove_example_group example_group
end
-
- specify ".description should return the Type then space then String" do
- example_group.description.should == "Spec::Example::ExampleGroup is #1"
+ it "should add ExampleGroup to set of ExampleGroups to be run" do
+ Spec::Runner.options.add_example_group example_group
+ options.example_groups.should include(example_group)
end
end
- describe "#set_description(String, Type, String)" do
+ describe '#remove_example_group' do
before(:each) do
- example_group.set_description("A", Hash, "with one entry")
+ Spec::Runner.options.add_example_group example_group
end
-
- specify ".description should return the first String then space then Type then second String" do
- example_group.description.should == "A Hash with one entry"
+ it "should remove ExampleGroup from set of ExampleGroups to be run" do
+ Spec::Runner.options.remove_example_group example_group
+ options.example_groups.should_not include(example_group)
end
end
-
- describe "#set_description(Hash representing options)" do
- before(:each) do
- example_group.set_description(:a => "b", :spec_path => "blah")
+
+ describe "#run" do
+ describe "given an example group with at least one example" do
+ it "should call add_example_group" do
+ example_group = Class.new(ExampleGroupDouble) do
+ example("anything") {}
+ end
+ reporter.should_receive(:add_example_group)
+ example_group.run(options)
+ end
end
- it ".spec_path should expand the passed in :spec_path option passed into the constructor" do
- example_group.spec_path.should == File.expand_path("blah")
+ describe "given an example group with no examples" do
+ it "should NOT call add_example_group" do
+ example_group = Class.new(ExampleGroupDouble) do end
+ reporter.should_not_receive(:add_example_group)
+ example_group.run(options)
+ end
end
+ end
- it ".description_options should return all the options passed in" do
- example_group.description_options.should == {:a => "b", :spec_path => "blah"}
- end
+ describe "#matcher_class=" do
+ it "should call new and matches? on the class used for matching examples" do
+ example_group = Class.new(ExampleGroupDouble) do
+ it "should do something" do end
+ def self.specified_examples
+ ["something"]
+ end
+ def self.to_s
+ "TestMatcher"
+ end
+ end
- end
- end
+ matcher = mock("matcher")
+ matcher.should_receive(:matches?).with(["something"]).any_number_of_times
+
+ matcher_class = Class.new
+ matcher_class.should_receive(:new).with("TestMatcher", "should do something").and_return(matcher)
- describe "#description" do
- it "should return the same description instance for each call" do
- example_group.description.should eql(example_group.description)
- end
+ begin
+ ExampleGroupMethods.matcher_class = matcher_class
- it "should not add a space when description_text begins with #" do
- child_example_group = Class.new(example_group) do
- describe("#foobar", "Does something")
+ example_group.run(options)
+ ensure
+ ExampleGroupMethods.matcher_class = ExampleMatcher
+ end
end
- child_example_group.description.should == "ExampleGroup#foobar Does something"
end
- it "should not add a space when description_text begins with ." do
- child_example_group = Class.new(example_group) do
- describe(".foobar", "Does something")
+ describe "#options" do
+ it "should expose the options hash" do
+ group = describe("group", :this => 'hash') {}
+ group.options[:this].should == 'hash'
end
- child_example_group.description.should == "ExampleGroup.foobar Does something"
- end
-
- it "should return the class name if nil" do
- example_group.set_description(nil)
- example_group.description.should =~ /Class:/
- end
-
- it "should return the class name if nil" do
- example_group.set_description("")
- example_group.description.should =~ /Class:/
end
- end
- describe "#description_parts" do
- it "should return an Array of the current class description args" do
- example_group.description_parts.should == [example_group.description]
- end
+ describe "#before" do
+ it "stores before(:each) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ block = lambda {}
+ example_group.before(:each, &block)
+ example_group.before_each_parts.should include(block)
+ end
- it "should return an Array of the description args from each class in the hierarchy" do
- child_example_group = Class.new(example_group)
- child_example_group.describe("Child", ExampleGroup)
- child_example_group.description.should_not be_empty
-
- grand_child_example_group = Class.new(child_example_group)
- grand_child_example_group.describe("GrandChild", ExampleGroup)
- grand_child_example_group.description.should_not be_empty
-
- grand_child_example_group.description_parts.should == [
- "ExampleGroup",
- "Child",
- Spec::Example::ExampleGroup,
- "GrandChild",
- Spec::Example::ExampleGroup
- ]
- end
- end
+ it "stores before(:all) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ block = lambda {}
+ example_group.before(:all, &block)
+ example_group.before_all_parts.should include(block)
+ end
- describe "#described_type" do
- it "should return passed in type" do
- child_example_group = Class.new(example_group) do
- describe Object
+ it "stores before(:suite) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ parts = []
+ ExampleGroupMethods.stub!(:before_suite_parts).and_return(parts)
+ block = lambda {}
+ example_group.before(:suite, &block)
+ example_group.before_suite_parts.should include(block)
end
- child_example_group.described_type.should == Object
end
- it "should return #described_type of superclass when no passed in type" do
- parent_example_group = Class.new(ExampleGroup) do
- describe Object, "#foobar"
+
+ describe "#after" do
+ it "stores after(:each) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ block = lambda {}
+ example_group.after(:each, &block)
+ example_group.after_each_parts.should include(block)
end
- child_example_group = Class.new(parent_example_group) do
- describe "not a type"
+
+ it "stores after(:all) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ block = lambda {}
+ example_group.after(:all, &block)
+ example_group.after_all_parts.should include(block)
end
- child_example_group.described_type.should == Object
- end
- end
- describe "#remove_after" do
- it "should unregister a given after(:each) block" do
- after_all_ran = false
- @example_group.it("example") {}
- proc = Proc.new { after_all_ran = true }
- ExampleGroup.after(:each, &proc)
- @example_group.run
- after_all_ran.should be_true
-
- after_all_ran = false
- ExampleGroup.remove_after(:each, &proc)
- @example_group.run
- after_all_ran.should be_false
+ it "stores after(:suite) blocks" do
+ example_group = Class.new(ExampleGroupDouble) {}
+ parts = []
+ ExampleGroupMethods.stub!(:after_suite_parts).and_return(parts)
+ block = lambda {}
+ example_group.after(:suite, &block)
+ example_group.after_suite_parts.should include(block)
+ end
end
- end
-
- describe "#include" do
- it "should have accessible class methods from included module" do
- mod1_method_called = false
- mod1 = Module.new do
- extend Spec::MetaClass
- class_methods = Module.new do
- define_method :mod1_method do
- mod1_method_called = true
- end
- end
- metaclass.class_eval do
- define_method(:included) do |receiver|
- receiver.extend class_methods
+ describe "#run_before_all" do
+ it "does not create an instance if before_all_parts are empty" do
+ example_group = Class.new(ExampleGroupDouble) { example("one example") {} }
+ example_group.should_not_receive(:new)
+ example_group.__send__ :run_before_all, nil
+ end
+ end
+
+ describe "#run_after_all" do
+ it "does not create an instance if after_all_parts are empty" do
+ example_group = Class.new(ExampleGroupDouble) { example("one example") {} }
+ example_group.should_not_receive(:new)
+ example_group.__send__ :run_after_all, true, {}, nil
+ end
+ end
+
+ describe "#examples_to_run" do
+ it "runs only the example identified by a line number" do
+ example_group = Class.new(ExampleGroupDouble).describe("this") do
+ it { 3.should == 3 }
+ it "has another example which raises" do
+ raise "this shouldn't have run"
end
end
+ options.examples << :ignore
+ options.line_number = __LINE__ - 6
+ options.files << __FILE__
+ example_group.run(options).should be_true
end
- mod2_method_called = false
- mod2 = Module.new do
- extend Spec::MetaClass
- class_methods = Module.new do
- define_method :mod2_method do
- mod2_method_called = true
- end
- end
+ it "runs the example identified by a line number even if it's not the example line number" do
+ example_group = Class.new(ExampleGroupDouble).describe("this") do
+
+ it { raise "foo" }
- metaclass.class_eval do
- define_method(:included) do |receiver|
- receiver.extend class_methods
- end
end
+ options.examples << :ignore
+ options.line_number = __LINE__ - 3
+ options.files << __FILE__
+ example_group.run(options).should be_false
end
- @example_group.include mod1, mod2
-
- @example_group.mod1_method
- @example_group.mod2_method
- mod1_method_called.should be_true
- mod2_method_called.should be_true
- end
- end
+ it "runs all the examples in the group " do
+ first_example_ran = false
+ second_example_ran = false
+ example_group = Class.new(ExampleGroupDouble).describe("this") do
- describe "#number_of_examples" do
- it "should count number of specs" do
- proc do
- @example_group.it("one") {}
- @example_group.it("two") {}
- @example_group.it("three") {}
- @example_group.it("four") {}
- end.should change {@example_group.number_of_examples}.by(4)
- end
- end
+ it { first_example_ran = true }
+ it { second_example_ran = true }
- describe "#class_eval" do
- it "should allow constants to be defined" do
- example_group = Class.new(ExampleGroup) do
- describe('example')
- FOO = 1
- it "should reference FOO" do
- FOO.should == 1
end
+ options.line_number = __LINE__ - 6
+ options.files << __FILE__
+ options.examples << :ignore
+ example_group.run(options)
+ first_example_ran.should be_true
+ second_example_ran.should be_true
+ end
+
+ it "doesn't run any examples in another group" do
+ example_ran = false
+ example_group_1 = Class.new(ExampleGroupDouble).describe("this") do
+ it "ignore" do
+ example_ran = true
+ end
+ end
+ example_group_2 = Class.new(ExampleGroupDouble).describe("that") do
+ end
+ options.examples << :ignore
+ options.line_number = __LINE__ - 3
+ options.files << __FILE__
+ example_group_1.run(options)
+ example_group_2.run(options)
+ example_ran.should be_false
end
- example_group.run
- Object.const_defined?(:FOO).should == false
end
- end
- describe '#register' do
- it "should add ExampleGroup to set of ExampleGroups to be run" do
- options.example_groups.delete(example_group)
- options.example_groups.should_not include(example_group)
+ describe "#define" do
+ let(:counter) do
+ Class.new do
+ def initialize
+ @count = 0
+ end
+ def count
+ @count += 1
+ end
+ end.new
+ end
+ it "generates an instance method" do
+ counter.count.should == 1
+ end
- example_group.register {}
- options.example_groups.should include(example_group)
- end
- end
-
- describe '#unregister' do
- before do
- options.example_groups.should include(example_group)
- end
-
- it "should remove ExampleGroup from set of ExampleGroups to be run" do
- example_group.unregister
- options.example_groups.should_not include(example_group)
- end
- end
-
- describe "#registration_backtrace" do
- it "returns the backtrace of where the ExampleGroup was registered" do
- example_group = Class.new(ExampleGroup)
- example_group.registration_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-1}")
+ it "caches the value" do
+ counter.count.should == 1
+ counter.count.should == 2
+ end
end
end
end
end
-end \ No newline at end of file
+end
diff --git a/vendor/plugins/rspec/spec/spec/example/example_group_spec.rb b/vendor/plugins/rspec/spec/spec/example/example_group_spec.rb
index 36e1cdf0d..086c166ca 100644
--- a/vendor/plugins/rspec/spec/spec/example/example_group_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/example_group_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Example
@@ -7,9 +7,7 @@ module Spec
module Foo
module Bar
- def self.loaded?
- true
- end
+ def self.loaded?; true; end
end
end
include Foo
@@ -18,11 +16,23 @@ module Spec
Bar.should be_loaded
end
- @@foo = 1
+ @@class_variable = "a class variable"
- it "should allow class variables to be defined" do
- @@foo.should == 1
+ it "can access class variables in examples in Ruby 1.8" do
+ with_ruby 1.8 do
+ @@class_variable.should == "a class variable"
+ end
+ end
+
+ it "can NOT access class variables in examples in Ruby 1.9" do
+ with_ruby 1.9 do
+ lambda do
+ @@class_variable.should == "a class variable"
+ end.should raise_error(NameError)
+ end
end
+
+
end
class ExampleClassVariablePollutionSpec < ExampleGroup
@@ -30,7 +40,7 @@ module Spec
it "should not retain class variables from other Example classes" do
proc do
- @@foo
+ @@class_variable
end.should raise_error
end
end
@@ -60,663 +70,573 @@ module Spec
describe ExampleGroup, "#run with failure in example", :shared => true do
it "should add an example failure to the TestResult" do
- example_group.run.should be_false
+ example_group.run(options).should be_false
end
end
describe ExampleGroup, "#run" do
- it_should_behave_like "sandboxed rspec_options"
- attr_reader :example_group, :formatter, :reporter
- before :each do
- @formatter = mock("formatter", :null_object => true)
- options.formatters << formatter
- options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
- @reporter = FakeReporter.new(options)
- options.reporter = reporter
- @example_group = Class.new(ExampleGroup) do
- describe("example")
- it "does nothing" do
- end
- end
- class << example_group
- public :include
- end
- end
-
- after :each do
- ExampleGroup.reset
- end
-
- it "should not run when there are no examples" do
- example_group = Class.new(ExampleGroup) do
- describe("Foobar")
- end
- example_group.examples.should be_empty
-
- reporter = mock("Reporter")
- reporter.should_not_receive(:add_example_group)
- example_group.run
- end
-
- describe "when before_each fails" do
- before(:each) do
- $example_ran = $after_each_ran = false
- @example_group = describe("Foobar") do
- before(:each) {raise}
- it "should not be run" do
- $example_ran = true
- end
- after(:each) do
- $after_each_ran = true
+ with_sandboxed_options do
+ attr_reader :example_group, :formatter, :reporter
+ before :each do
+ method_with_three_args = lambda { |arg1, arg2, arg3| }
+ @formatter = mock("formatter", :null_object => true, :example_pending => method_with_three_args)
+ options.formatters << formatter
+ options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
+ @reporter = FakeReporter.new(options)
+ options.reporter = reporter
+ @example_group = Class.new(ExampleGroupDouble) do
+ describe("example")
+ it "does nothing" do
end
end
+ class << example_group
+ public :include
+ end
end
- it "should not run example block" do
- example_group.run
- $example_ran.should be_false
- end
-
- it "should run after_each" do
- example_group.run
- $after_each_ran.should be_true
+ after :each do
+ ExampleGroup.reset
end
- it "should report failure location when in before_each" do
- reporter.should_receive(:example_finished) do |example_group, error|
- error.message.should eql("in before_each")
+ it "should not run when there are no examples" do
+ example_group = Class.new(ExampleGroupDouble) do
+ describe("Foobar")
end
- example_group.run
- end
- end
-
- describe ExampleGroup, "#run on dry run" do
- before do
- @options.dry_run = true
- end
+ example_group.examples.should be_empty
- it "should not run before(:all) or after(:all)" do
- before_all_ran = false
- after_all_ran = false
- ExampleGroup.before(:all) { before_all_ran = true }
- ExampleGroup.after(:all) { after_all_ran = true }
- example_group.it("should") {}
- example_group.run
- before_all_ran.should be_false
- after_all_ran.should be_false
+ reporter = mock("Reporter")
+ reporter.should_not_receive(:add_example_group)
+ example_group.run(options)
end
- it "should not run example" do
- example_ran = false
- example_group.it("should") {example_ran = true}
- example_group.run
- example_ran.should be_false
+ it "should report the start of an example run" do
+ reporter.should_receive(:example_started) do |example|
+ example.should equal(example_group.examples[0])
+ end
+ example_group.run(options)
end
- end
- describe ExampleGroup, "#run with specified examples" do
- attr_reader :examples_that_were_run
- before do
- @examples_that_were_run = []
+ it "should report the end of an example run" do
+ reporter.should_receive(:example_finished) do |example, execution_error|
+ example.should equal(example_group.examples[0])
+ execution_error.should be_nil
+ end
+ example_group.run(options)
end
-
- describe "when specified_examples matches entire ExampleGroup" do
- before do
- examples_that_were_run = @examples_that_were_run
- @example_group = Class.new(ExampleGroup) do
- describe("the ExampleGroup")
- it("should be run") do
- examples_that_were_run << 'should be run'
+
+ describe "when before_each fails" do
+ before(:each) do
+ $example_ran = $after_each_ran = false
+ @example_group = describe("Foobar") do
+ before(:each) {raise}
+ it "should not be run" do
+ $example_ran = true
end
-
- it("should also be run") do
- examples_that_were_run << 'should also be run'
+ after(:each) do
+ $after_each_ran = true
end
end
- options.examples = ["the ExampleGroup"]
end
- it "should not run the Examples in the ExampleGroup" do
- example_group.run
- examples_that_were_run.should == ['should be run', 'should also be run']
+ it "should not run example block" do
+ example_group.run(options)
+ $example_ran.should be_false
end
- end
-
- describe ExampleGroup, "#run when specified_examples matches only Example description" do
- before do
- examples_that_were_run = @examples_that_were_run
- @example_group = Class.new(ExampleGroup) do
- describe("example")
- it("should be run") do
- examples_that_were_run << 'should be run'
- end
- end
- options.examples = ["should be run"]
+
+ it "should run after_each" do
+ example_group.run(options)
+ $after_each_ran.should be_true
end
- it "should not run the example" do
- example_group.run
- examples_that_were_run.should == ['should be run']
- end
- end
-
- describe ExampleGroup, "#run when specified_examples does not match an Example description" do
- before do
- examples_that_were_run = @examples_that_were_run
- @example_group = Class.new(ExampleGroup) do
- describe("example")
- it("should be something else") do
- examples_that_were_run << 'should be something else'
- end
+ it "should report failure location when in before_each" do
+ reporter.should_receive(:example_finished) do |example_group, error|
+ error.message.should eql("in before_each")
end
- options.examples = ["does not match anything"]
- end
-
- it "should not run the example" do
- example_group.run
- examples_that_were_run.should == []
+ example_group.run(options)
end
end
- describe ExampleGroup, "#run when specified_examples matches an Example description" do
+ describe ExampleGroup, "#run on dry run" do
before do
- examples_that_were_run = @examples_that_were_run
- @example_group = Class.new(ExampleGroup) do
- describe("example")
- it("should be run") do
- examples_that_were_run << 'should be run'
- end
- it("should not be run") do
- examples_that_were_run << 'should not be run'
- end
- end
- options.examples = ["should be run"]
+ @options.dry_run = true
end
- it "should run only the example, when there in only one" do
- example_group.run
- examples_that_were_run.should == ["should be run"]
+ it "should not run before(:all) or after(:all)" do
+ before_all_ran = false
+ after_all_ran = false
+ ExampleGroup.before(:all) { before_all_ran = true }
+ ExampleGroup.after(:all) { after_all_ran = true }
+ example_group.it("should") {}
+ example_group.run(options)
+ before_all_ran.should be_false
+ after_all_ran.should be_false
end
- it "should run only the one example" do
- example_group.run
- examples_that_were_run.should == ["should be run"] end
+ it "should not run example" do
+ example_ran = false
+ example_group.it("should") {example_ran = true}
+ example_group.run(options)
+ example_ran.should be_false
+ end
end
- end
- describe ExampleGroup, "#run with success" do
- before do
- @special_example_group = Class.new(ExampleGroup)
- ExampleGroupFactory.register(:special, @special_example_group)
- @not_special_example_group = Class.new(ExampleGroup)
- ExampleGroupFactory.register(:not_special, @not_special_example_group)
- end
+ describe ExampleGroup, "#run with specified examples" do
+ attr_reader :examples_that_were_run
+ before do
+ @examples_that_were_run = []
+ end
- after do
- ExampleGroupFactory.reset
- end
+ describe "when specified_examples matches entire ExampleGroup" do
+ before do
+ examples_that_were_run = @examples_that_were_run
+ @example_group = Class.new(ExampleGroupDouble) do
+ describe("the ExampleGroup")
+ it("should be run") do
+ examples_that_were_run << 'should be run'
+ end
- it "should send reporter add_example_group" do
- example_group.run
- reporter.example_groups.should == [example_group]
- end
+ it("should also be run") do
+ examples_that_were_run << 'should also be run'
+ end
+ end
+ options.parse_example "the ExampleGroup"
+ end
- it "should run example on run" do
- example_ran = false
- example_group.it("should") {example_ran = true}
- example_group.run
- example_ran.should be_true
- end
+ it "should not run the Examples in the ExampleGroup" do
+ example_group.run(options)
+ examples_that_were_run.should == ['should be run', 'should also be run']
+ end
+ end
- it "should run before(:all) block only once" do
- before_all_run_count_run_count = 0
- example_group.before(:all) {before_all_run_count_run_count += 1}
- example_group.it("test") {true}
- example_group.it("test2") {true}
- example_group.run
- before_all_run_count_run_count.should == 1
- end
+ describe ExampleGroup, "#run when specified_examples matches only Example description" do
+ before do
+ examples_that_were_run = @examples_that_were_run
+ @example_group = Class.new(ExampleGroupDouble) do
+ describe("example")
+ it("should be run") do
+ examples_that_were_run << 'should be run'
+ end
+ end
+ options.parse_example "should be run"
+ end
- it "should run after(:all) block only once" do
- after_all_run_count = 0
- example_group.after(:all) {after_all_run_count += 1}
- example_group.it("test") {true}
- example_group.it("test2") {true}
- example_group.run
- after_all_run_count.should == 1
- @reporter.rspec_verify
- end
+ it "should not run the example" do
+ example_group.run(options)
+ examples_that_were_run.should == ['should be run']
+ end
+ end
- it "after(:all) should have access to all instance variables defined in before(:all)" do
- context_instance_value_in = "Hello there"
- context_instance_value_out = ""
- example_group.before(:all) { @instance_var = context_instance_value_in }
- example_group.after(:all) { context_instance_value_out = @instance_var }
- example_group.it("test") {true}
- example_group.run
- context_instance_value_in.should == context_instance_value_out
- end
+ describe ExampleGroup, "#run when specified_examples does not match an Example description" do
+ before do
+ examples_that_were_run = @examples_that_were_run
+ @example_group = Class.new(ExampleGroupDouble) do
+ describe("example")
+ it("should be something else") do
+ examples_that_were_run << 'should be something else'
+ end
+ end
+ options.parse_example "does not match anything"
+ end
- it "should copy instance variables from before(:all)'s execution context into spec's execution context" do
- context_instance_value_in = "Hello there"
- context_instance_value_out = ""
- example_group.before(:all) { @instance_var = context_instance_value_in }
- example_group.it("test") {context_instance_value_out = @instance_var}
- example_group.run
- context_instance_value_in.should == context_instance_value_out
- end
+ it "should not run the example" do
+ example_group.run(options)
+ examples_that_were_run.should == []
+ end
+ end
- it "should not add global before callbacks for untargetted example_group" do
- fiddle = []
-
- ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
- ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
- @special_example_group.before(:each) { fiddle << "Example.before(:each, :type => :special)" }
- @special_example_group.prepend_before(:each) { fiddle << "Example.prepend_before(:each, :type => :special)" }
- @special_example_group.before(:all) { fiddle << "Example.before(:all, :type => :special)" }
- @special_example_group.prepend_before(:all) { fiddle << "Example.prepend_before(:all, :type => :special)" }
-
- example_group = Class.new(ExampleGroup) do
- describe("I'm not special", :type => :not_special)
- it "does nothing"
- end
- example_group.run
- fiddle.should == [
- 'Example.prepend_before(:all)',
- 'Example.before(:all)',
- ]
- end
+ describe ExampleGroup, "#run when specified_examples matches an Example description" do
+ before do
+ examples_that_were_run = @examples_that_were_run
+ @example_group = Class.new(ExampleGroupDouble) do
+ describe("example")
+ it("should be run") do
+ examples_that_were_run << 'should be run'
+ end
+ it("should not be run") do
+ examples_that_were_run << 'should not be run'
+ end
+ end
+ options.parse_example "should be run"
+ end
- it "should add global before callbacks for targetted example_groups" do
- fiddle = []
-
- ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
- ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
- @special_example_group.before(:each) { fiddle << "special.before(:each, :type => :special)" }
- @special_example_group.prepend_before(:each) { fiddle << "special.prepend_before(:each, :type => :special)" }
- @special_example_group.before(:all) { fiddle << "special.before(:all, :type => :special)" }
- @special_example_group.prepend_before(:all) { fiddle << "special.prepend_before(:all, :type => :special)" }
- @special_example_group.append_before(:each) { fiddle << "special.append_before(:each, :type => :special)" }
-
- example_group = Class.new(@special_example_group).describe("I'm a special example_group") {}
- example_group.it("test") {true}
- example_group.run
- fiddle.should == [
- 'Example.prepend_before(:all)',
- 'Example.before(:all)',
- 'special.prepend_before(:all, :type => :special)',
- 'special.before(:all, :type => :special)',
- 'special.prepend_before(:each, :type => :special)',
- 'special.before(:each, :type => :special)',
- 'special.append_before(:each, :type => :special)',
- ]
+ it "should run only the example" do
+ example_group.run(options)
+ examples_that_were_run.should == ["should be run"]
+ end
+ end
end
- it "should order before callbacks from global to local" do
- fiddle = []
- ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
- ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
- example_group.prepend_before(:all) { fiddle << "prepend_before(:all)" }
- example_group.before(:all) { fiddle << "before(:all)" }
- example_group.prepend_before(:each) { fiddle << "prepend_before(:each)" }
- example_group.before(:each) { fiddle << "before(:each)" }
- example_group.run
- fiddle.should == [
- 'Example.prepend_before(:all)',
- 'Example.before(:all)',
- 'prepend_before(:all)',
- 'before(:all)',
- 'prepend_before(:each)',
- 'before(:each)'
- ]
- end
+ describe ExampleGroup, "#run with success" do
+ before do
+ @special_example_group = Class.new(ExampleGroupDouble)
+ ExampleGroupFactory.register(:special, @special_example_group)
+ @not_special_example_group = Class.new(ExampleGroupDouble)
+ ExampleGroupFactory.register(:not_special, @not_special_example_group)
+ end
- it "should order after callbacks from local to global" do
- fiddle = []
- example_group.after(:each) { fiddle << "after(:each)" }
- example_group.append_after(:each) { fiddle << "append_after(:each)" }
- example_group.after(:all) { fiddle << "after(:all)" }
- example_group.append_after(:all) { fiddle << "append_after(:all)" }
- ExampleGroup.after(:all) { fiddle << "Example.after(:all)" }
- ExampleGroup.append_after(:all) { fiddle << "Example.append_after(:all)" }
- example_group.run
- fiddle.should == [
- 'after(:each)',
- 'append_after(:each)',
- 'after(:all)',
- 'append_after(:all)',
- 'Example.after(:all)',
- 'Example.append_after(:all)'
- ]
- end
+ after do
+ ExampleGroupFactory.reset
+ end
- it "should have accessible instance methods from included module" do
- mod1_method_called = false
- mod1 = Module.new do
- define_method :mod1_method do
- mod1_method_called = true
- end
+ it "should send reporter example_group_started" do
+ reporter.should_receive(:example_group_started)
+ example_group.run(options)
end
- mod2_method_called = false
- mod2 = Module.new do
- define_method :mod2_method do
- mod2_method_called = true
- end
+ it "should run example on run" do
+ example_ran = false
+ example_group.it("should") {example_ran = true}
+ example_group.run(options)
+ example_ran.should be_true
end
- example_group.include mod1, mod2
+ it "should run before(:all) block only once" do
+ before_all_run_count_run_count = 0
+ example_group.before(:all) {before_all_run_count_run_count += 1}
+ example_group.it("test") {true}
+ example_group.it("test2") {true}
+ example_group.run(options)
+ before_all_run_count_run_count.should == 1
+ end
- example_group.it("test") do
- mod1_method
- mod2_method
+ it "should run after(:all) block only once" do
+ after_all_run_count = 0
+ example_group.after(:all) {after_all_run_count += 1}
+ example_group.it("test") {true}
+ example_group.it("test2") {true}
+ example_group.run(options)
+ after_all_run_count.should == 1
+ @reporter.rspec_verify
end
- example_group.run
- mod1_method_called.should be_true
- mod2_method_called.should be_true
- end
- it "should include targetted modules included using configuration" do
- mod1 = Module.new
- mod2 = Module.new
- mod3 = Module.new
- Spec::Runner.configuration.include(mod1, mod2)
- Spec::Runner.configuration.include(mod3, :type => :not_special)
+ it "after(:all) should have access to all instance variables defined in before(:all)" do
+ context_instance_value_in = "Hello there"
+ context_instance_value_out = ""
+ example_group.before(:all) { @instance_var = context_instance_value_in }
+ example_group.after(:all) { context_instance_value_out = @instance_var }
+ example_group.it("test") {true}
+ example_group.run(options)
+ context_instance_value_in.should == context_instance_value_out
+ end
- example_group = Class.new(@special_example_group).describe("I'm special", :type => :special) do
- it "does nothing"
+ it "should copy instance variables from before(:all)'s execution context into spec's execution context" do
+ context_instance_value_in = "Hello there"
+ context_instance_value_out = ""
+ example_group.before(:all) { @instance_var = context_instance_value_in }
+ example_group.it("test") {context_instance_value_out = @instance_var}
+ example_group.run(options)
+ context_instance_value_in.should == context_instance_value_out
end
- example_group.run
- example_group.included_modules.should include(mod1)
- example_group.included_modules.should include(mod2)
- example_group.included_modules.should_not include(mod3)
- end
+ it "should not add global before callbacks for untargetted example_group" do
+ fiddle = []
+
+ ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
+ ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
+ @special_example_group.before(:each) { fiddle << "Example.before(:each, :type => :special)" }
+ @special_example_group.prepend_before(:each) { fiddle << "Example.prepend_before(:each, :type => :special)" }
+ @special_example_group.before(:all) { fiddle << "Example.before(:all, :type => :special)" }
+ @special_example_group.prepend_before(:all) { fiddle << "Example.prepend_before(:all, :type => :special)" }
- it "should include any predicate_matchers included using configuration" do
- $included_predicate_matcher_found = false
- Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something?
- example_group = Class.new(ExampleGroup) do
- describe('example')
- it "should respond to do_something" do
- $included_predicate_matcher_found = respond_to?(:do_something)
+ example_group = Class.new(ExampleGroupDouble) do
+ describe("I'm not special", :type => :not_special)
+ it "does nothing"
+ end
+ example_group.run(options)
+ fiddle.should == [
+ 'Example.prepend_before(:all)',
+ 'Example.before(:all)',
+ ]
+ end
+
+ it "should add global before callbacks for targetted example_groups" do
+ fiddle = []
+
+ ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
+ ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
+ @special_example_group.before(:each) { fiddle << "special.before(:each, :type => :special)" }
+ @special_example_group.prepend_before(:each) { fiddle << "special.prepend_before(:each, :type => :special)" }
+ @special_example_group.before(:all) { fiddle << "special.before(:all, :type => :special)" }
+ @special_example_group.prepend_before(:all) { fiddle << "special.prepend_before(:all, :type => :special)" }
+ @special_example_group.append_before(:each) { fiddle << "special.append_before(:each, :type => :special)" }
+
+ example_group = Class.new(@special_example_group).describe("I'm a special example_group") {}
+ example_group.it("test") {true}
+ example_group.run(options)
+ fiddle.should == [
+ 'Example.prepend_before(:all)',
+ 'Example.before(:all)',
+ 'special.prepend_before(:all, :type => :special)',
+ 'special.before(:all, :type => :special)',
+ 'special.prepend_before(:each, :type => :special)',
+ 'special.before(:each, :type => :special)',
+ 'special.append_before(:each, :type => :special)',
+ ]
+ end
+
+ it "should order before callbacks from global to local" do
+ fiddle = []
+ ExampleGroup.prepend_before(:all) { fiddle << "Example.prepend_before(:all)" }
+ ExampleGroup.before(:all) { fiddle << "Example.before(:all)" }
+ example_group.prepend_before(:all) { fiddle << "prepend_before(:all)" }
+ example_group.before(:all) { fiddle << "before(:all)" }
+ example_group.prepend_before(:each) { fiddle << "prepend_before(:each)" }
+ example_group.before(:each) { fiddle << "before(:each)" }
+ example_group.run(options)
+ fiddle.should == [
+ 'Example.prepend_before(:all)',
+ 'Example.before(:all)',
+ 'prepend_before(:all)',
+ 'before(:all)',
+ 'prepend_before(:each)',
+ 'before(:each)'
+ ]
+ end
+
+ it "should order after callbacks from local to global" do
+ fiddle = []
+ example_group.after(:each) { fiddle << "after(:each)" }
+ example_group.append_after(:each) { fiddle << "append_after(:each)" }
+ example_group.after(:all) { fiddle << "after(:all)" }
+ example_group.append_after(:all) { fiddle << "append_after(:all)" }
+ ExampleGroup.after(:all) { fiddle << "Example.after(:all)" }
+ ExampleGroup.append_after(:all) { fiddle << "Example.append_after(:all)" }
+ example_group.run(options)
+ fiddle.should == [
+ 'after(:each)',
+ 'append_after(:each)',
+ 'after(:all)',
+ 'append_after(:all)',
+ 'Example.after(:all)',
+ 'Example.append_after(:all)'
+ ]
+ end
+
+ it "should have accessible instance methods from included module" do
+ mod1_method_called = false
+ mod1 = Module.new do
+ define_method :mod1_method do
+ mod1_method_called = true
+ end
end
- end
- example_group.run
- $included_predicate_matcher_found.should be(true)
- end
- it "should use a mock framework set up in config" do
- mod = Module.new do
- class << self
- def included(mod)
- $included_module = mod
+ mod2_method_called = false
+ mod2 = Module.new do
+ define_method :mod2_method do
+ mod2_method_called = true
end
end
- def teardown_mocks_for_rspec
- $torn_down = true
+ example_group.include mod1, mod2
+
+ example_group.it("test") do
+ mod1_method
+ mod2_method
end
+ example_group.run(options)
+ mod1_method_called.should be_true
+ mod2_method_called.should be_true
end
- begin
- $included_module = nil
- $torn_down = true
- Spec::Runner.configuration.mock_with mod
+ it "should include targetted modules included using configuration" do
+ mod1 = Module.new
+ mod2 = Module.new
+ mod3 = Module.new
+ Spec::Runner.configuration.include(mod1, mod2)
+ Spec::Runner.configuration.include(mod3, :type => :not_special)
- example_group = Class.new(ExampleGroup) do
- describe('example')
+ example_group = Class.new(@special_example_group).describe("I'm special", :type => :special) do
it "does nothing"
end
- example_group.run
+ example_group.run(options)
- $included_module.should_not be_nil
- $torn_down.should == true
- ensure
- Spec::Runner.configuration.mock_with :rspec
+ example_group.included_modules.should include(mod1)
+ example_group.included_modules.should include(mod2)
+ example_group.included_modules.should_not include(mod3)
end
+
end
- end
- describe ExampleGroup, "#run with pending example that has a failing assertion" do
- before do
- example_group.it("should be pending") do
- pending("Example fails") {false.should be_true}
+ describe ExampleGroup, "#run with pending example that has a failing assertion" do
+ before do
+ example_group.it("should be pending") do
+ pending("Example fails") {false.should be_true}
+ end
end
- end
- it "should send example_pending to formatter" do
- @formatter.should_receive(:example_pending).with("example", "should be pending", "Example fails")
- example_group.run
+ it "should send example_pending to formatter" do
+ @formatter.should_receive(:example_pending).with("example", "should be pending", "Example fails")
+ example_group.run(options)
+ end
end
- end
- describe ExampleGroup, "#run with pending example that does not have a failing assertion" do
- it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
+ describe ExampleGroup, "#run with pending example that does not have a failing assertion" do
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
- before do
- example_group.it("should be pending") do
- pending("Example passes") {true.should be_true}
+ before do
+ example_group.it("should be pending") do
+ pending("Example passes") {true.should be_true}
+ end
end
- end
- it "should send example_pending to formatter" do
- @formatter.should_receive(:example_pending).with("example", "should be pending", "Example passes")
- example_group.run
+ it "should send example_pending to formatter" do
+ @formatter.should_receive(:example_pending).with("example", "should be pending", "Example passes")
+ example_group.run(options)
+ end
end
- end
- describe ExampleGroup, "#run when before(:all) fails" do
- it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
+ describe ExampleGroup, "#run when before(:all) fails" do
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
- before do
- ExampleGroup.before(:all) { raise NonStandardError, "before(:all) failure" }
- end
-
- it "should not run any example" do
- spec_ran = false
- example_group.it("test") {spec_ran = true}
- example_group.run
- spec_ran.should be_false
- end
+ before do
+ ExampleGroup.before(:all) { raise NonStandardError, "before(:all) failure" }
+ end
- it "should run ExampleGroup after(:all)" do
- after_all_ran = false
- ExampleGroup.after(:all) { after_all_ran = true }
- example_group.run
- after_all_ran.should be_true
- end
+ it "should not run any example" do
+ spec_ran = false
+ example_group.it("test") {spec_ran = true}
+ example_group.run(options)
+ spec_ran.should be_false
+ end
- it "should run example_group after(:all)" do
- after_all_ran = false
- example_group.after(:all) { after_all_ran = true }
- example_group.run
- after_all_ran.should be_true
- end
+ it "should run ExampleGroup after(:all)" do
+ after_all_ran = false
+ ExampleGroup.after(:all) { after_all_ran = true }
+ example_group.run(options)
+ after_all_ran.should be_true
+ end
- it "should supply before(:all) as description" do
- @reporter.should_receive(:failure) do |example, error|
- example.description.should eql("before(:all)")
- error.message.should eql("before(:all) failure")
+ it "should run example_group after(:all)" do
+ after_all_ran = false
+ example_group.after(:all) { after_all_ran = true }
+ example_group.run(options)
+ after_all_ran.should be_true
end
- example_group.it("test") {true}
- example_group.run
+ it "should supply before(:all) as description" do
+ @reporter.should_receive(:example_failed) do |example, error|
+ example.description.should eql("before(:all)")
+ error.message.should eql("before(:all) failure")
+ end
+
+ example_group.it("test") {true}
+ example_group.run(options)
+ end
end
- end
- describe ExampleGroup, "#run when before(:each) fails" do
- it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
+ describe ExampleGroup, "#run when before(:each) fails" do
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
- before do
- ExampleGroup.before(:each) { raise NonStandardError }
- end
+ before do
+ ExampleGroup.before(:each) { raise NonStandardError }
+ end
- it "should run after(:all)" do
- after_all_ran = false
- ExampleGroup.after(:all) { after_all_ran = true }
- example_group.run
- after_all_ran.should be_true
+ it "should run after(:all)" do
+ after_all_ran = false
+ ExampleGroup.after(:all) { after_all_ran = true }
+ example_group.run(options)
+ after_all_ran.should be_true
+ end
end
- end
- describe ExampleGroup, "#run when any example fails" do
- it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
+ describe ExampleGroup, "#run when any example fails" do
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
- before do
- example_group.it("should") { raise NonStandardError }
- end
+ before do
+ example_group.it("should") { raise NonStandardError }
+ end
- it "should run after(:all)" do
- after_all_ran = false
- ExampleGroup.after(:all) { after_all_ran = true }
- example_group.run
- after_all_ran.should be_true
+ it "should run after(:all)" do
+ after_all_ran = false
+ ExampleGroup.after(:all) { after_all_ran = true }
+ example_group.run(options)
+ after_all_ran.should be_true
+ end
end
- end
- describe ExampleGroup, "#run when first after(:each) block fails" do
- it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
+ describe ExampleGroup, "#run when first after(:each) block fails" do
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
- before do
- class << example_group
- attr_accessor :first_after_ran, :second_after_ran
- end
- example_group.first_after_ran = false
- example_group.second_after_ran = false
+ before do
+ class << example_group
+ attr_accessor :first_after_ran, :second_after_ran
+ end
+ example_group.first_after_ran = false
+ example_group.second_after_ran = false
- example_group.after(:each) do
- self.class.second_after_ran = true
- end
- example_group.after(:each) do
- self.class.first_after_ran = true
- raise "first"
+ example_group.after(:each) do
+ self.class.second_after_ran = true
+ end
+ example_group.after(:each) do
+ self.class.first_after_ran = true
+ raise "first"
+ end
end
- end
- it "should run second after(:each) block" do
- reporter.should_receive(:example_finished) do |example, error|
- example.should equal(example)
- error.message.should eql("first")
+ it "should run second after(:each) block" do
+ reporter.should_receive(:example_finished) do |example, error|
+ example.should equal(example)
+ error.message.should eql("first")
+ end
+ example_group.run(options)
+ example_group.first_after_ran.should be_true
+ example_group.second_after_ran.should be_true
end
- example_group.run
- example_group.first_after_ran.should be_true
- example_group.second_after_ran.should be_true
end
- end
- describe ExampleGroup, "#run when first before(:each) block fails" do
- it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
+ describe ExampleGroup, "#run when first before(:each) block fails" do
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
- before do
- class << example_group
- attr_accessor :first_before_ran, :second_before_ran
- end
- example_group.first_before_ran = false
- example_group.second_before_ran = false
+ before do
+ class << example_group
+ attr_accessor :first_before_ran, :second_before_ran
+ end
+ example_group.first_before_ran = false
+ example_group.second_before_ran = false
- example_group.before(:each) do
- self.class.first_before_ran = true
- raise "first"
- end
- example_group.before(:each) do
- self.class.second_before_ran = true
+ example_group.before(:each) do
+ self.class.first_before_ran = true
+ raise "first"
+ end
+ example_group.before(:each) do
+ self.class.second_before_ran = true
+ end
end
- end
- it "should not run second before(:each)" do
- reporter.should_receive(:example_finished) do |name, error|
- error.message.should eql("first")
+ it "should not run second before(:each)" do
+ reporter.should_receive(:example_finished) do |name, error|
+ error.message.should eql("first")
+ end
+ example_group.run(options)
+ example_group.first_before_ran.should be_true
+ example_group.second_before_ran.should be_false
end
- example_group.run
- example_group.first_before_ran.should be_true
- example_group.second_before_ran.should be_false
end
- end
- describe ExampleGroup, "#run when failure in after(:all)" do
- it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
+ describe ExampleGroup, "#run when failure in after(:all)" do
+ it_should_behave_like "Spec::Example::ExampleGroup#run with failure in example"
- before do
- ExampleGroup.after(:all) { raise NonStandardError, "in after(:all)" }
- end
+ before do
+ ExampleGroup.after(:all) { raise NonStandardError, "in after(:all)" }
+ end
- it "should return false" do
- example_group.run.should be_false
+ it "should return false" do
+ example_group.run(options).should be_false
+ end
end
end
end
- class ExampleSubclass < ExampleGroup
- end
-
describe ExampleGroup, "subclasses" do
- after do
- ExampleGroupFactory.reset
- end
-
it "should have access to the described_type" do
- example_group = Class.new(ExampleSubclass) do
- describe(Array)
- end
- example_group.send(:described_type).should == Array
+ example_group = Class.new(ExampleGroupDouble).describe(Array)
+ example_group.__send__(:described_type).should == Array
end
it "should concat descriptions when nested" do
- example_group = Class.new(ExampleSubclass) do
- describe(Array)
- $nested_group = describe("when empty") do
- end
- end
- $nested_group.description.to_s.should == "Array when empty"
- end
- end
-
- describe Enumerable do
- before(:each) do
- Kernel.stub!(:warn)
- end
-
- def each(&block)
- ["4", "2", "1"].each(&block)
- end
-
- it "should be included in examples because it is a module" do
- map{|e| e.to_i}.should == [4,2,1]
- end
- end
-
- describe "An", Enumerable, "as a second argument" do
- before(:each) do
- Kernel.stub!(:warn)
- end
-
- def each(&block)
- ["4", "2", "1"].each(&block)
- end
-
- it "should be included in examples because it is a module" do
- map{|e| e.to_i}.should == [4,2,1]
- end
- end
-
- describe Enumerable do
- describe "as the parent of nested example groups" do
- before(:each) do
- Kernel.stub!(:warn)
- end
-
- it "should be included in examples because it is a module" do
- pending("need to make sure nested groups know the described type") do
- map{|e| e.to_i}.should == [4,2,1]
- end
- end
- end
- end
-
- describe String do
- it "should not be included in examples because it is not a module" do
- lambda{self.map}.should raise_error(NoMethodError, /undefined method `map' for/)
+ example_group = Class.new(ExampleGroupDouble).describe(Array)
+ nested_group = example_group.describe("when empty") do; end
+ nested_group.description.to_s.should == "Array when empty"
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/example/example_matcher_spec.rb b/vendor/plugins/rspec/spec/spec/example/example_matcher_spec.rb
index ea0dfe019..1a7e5da25 100644
--- a/vendor/plugins/rspec/spec/spec/example/example_matcher_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/example_matcher_spec.rb
@@ -1,71 +1,54 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Example
- module ExampleMatcherSpecHelper
- class MatchDescription
- def initialize(description)
- @description = description
- end
-
- def matches?(matcher)
- matcher.matches?(@description)
- end
-
- def failure_message
- "expected matcher.matches?(#{@description.inspect}) to return true, got false"
- end
-
- def negative_failure_message
- "expected matcher.matches?(#{@description.inspect}) to return false, got true"
+ describe ExampleMatcher, "#matches?" do
+ def match_examples(examples)
+ simple_matcher do |actual, matcher|
+ matcher.failure_message = "expected matcher.matches?(#{description.inspect}) to return true, got false"
+ matcher.negative_failure_message = "expected matcher.matches?(#{description.inspect}) to return false, got true"
+ actual.matches?(examples)
end
end
- def match_description(description)
- MatchDescription.new(description)
- end
- end
-
- describe ExampleMatcher, "#matches?" do
- include ExampleMatcherSpecHelper
it "should match correct example_group and example" do
matcher = ExampleMatcher.new("example_group", "example")
- matcher.should match_description("example_group example")
+ matcher.should match_examples(["example_group example"])
end
it "should not match wrong example" do
matcher = ExampleMatcher.new("example_group", "other example")
- matcher.should_not match_description("example_group example")
+ matcher.should_not match_examples(["example_group example"])
end
it "should not match wrong example_group" do
matcher = ExampleMatcher.new("other example_group", "example")
- matcher.should_not match_description("example_group example")
+ matcher.should_not match_examples(["example_group example"])
end
it "should match example only" do
matcher = ExampleMatcher.new("example_group", "example")
- matcher.should match_description("example")
+ matcher.should match_examples(["example"])
end
it "should match example_group only" do
matcher = ExampleMatcher.new("example_group", "example")
- matcher.should match_description("example_group")
+ matcher.should match_examples(["example_group"])
end
it "should match example_group ending with before(:all)" do
matcher = ExampleMatcher.new("example_group", "example")
- matcher.should match_description("example_group before(:all)")
+ matcher.should match_examples(["example_group before(:all)"])
end
it "should escape regexp chars" do
matcher = ExampleMatcher.new("(con|text)", "[example]")
- matcher.should_not match_description("con p")
+ matcher.should_not match_examples(["con p"])
end
it "should match when example_group is modularized" do
matcher = ExampleMatcher.new("MyModule::MyClass", "example")
- matcher.should match_description("MyClass example")
+ matcher.should match_examples(["MyClass example"])
end
end
@@ -92,5 +75,12 @@ module Spec
matcher.matches?(["no match1", "no match2"]).should == false
end
end
+
+ describe ExampleMatcher, "called with nil example" do
+ it "does not puke" do
+ matcher = ExampleMatcher.new("Foo::Bar", nil)
+ matcher.matches?(["anything"]).should == false
+ end
+ end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/example/example_methods_spec.rb b/vendor/plugins/rspec/spec/spec/example/example_methods_spec.rb
index dd33c57f0..9a6810952 100644
--- a/vendor/plugins/rspec/spec/spec/example/example_methods_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/example_methods_spec.rb
@@ -1,126 +1,162 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
+
+class Thing
+ attr_reader :arg
+ def initialize(arg=nil)
+ @arg = arg || :default
+ end
+ def ==(other)
+ @arg == other.arg
+ end
+ def eql?(other)
+ @arg == other.arg
+ end
+end
module Spec
module Example
- module ModuleThatIsReopened
- end
-
- module ExampleMethods
- include ModuleThatIsReopened
- end
+ describe ExampleMethods do
+ module ModuleThatIsReopened; end
- module ModuleThatIsReopened
- def module_that_is_reopened_method
+ module Spec::Example::ExampleMethods
+ include ModuleThatIsReopened
end
- end
- describe ExampleMethods do
+ module ModuleThatIsReopened
+ def module_that_is_reopened_method; end
+ end
+
describe "with an included module that is reopened" do
- it "should have repoened methods" do
+ it "should have reopened methods" do
method(:module_that_is_reopened_method).should_not be_nil
end
end
- describe "lifecycle" do
- before do
- @original_rspec_options = $rspec_options
+ describe "#should" do
+ before(:each) do
+ @example_group = Class.new(ExampleGroupDouble)
@options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
- $rspec_options = @options
- @options.formatters << mock("formatter", :null_object => true)
- @options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
- @reporter = FakeReporter.new(@options)
- @options.reporter = @reporter
-
- ExampleMethods.before_all_parts.should == []
- ExampleMethods.before_each_parts.should == []
- ExampleMethods.after_each_parts.should == []
- ExampleMethods.after_all_parts.should == []
- def ExampleMethods.count
- @count ||= 0
- @count = @count + 1
- @count
- end
end
-
- after do
- $rspec_options = @original_rspec_options
- ExampleMethods.instance_variable_set("@before_all_parts", [])
- ExampleMethods.instance_variable_set("@before_each_parts", [])
- ExampleMethods.instance_variable_set("@after_each_parts", [])
- ExampleMethods.instance_variable_set("@after_all_parts", [])
- end
-
- it "should pass before and after callbacks to all ExampleGroup subclasses" do
- ExampleMethods.before(:suite) do
- ExampleMethods.count.should == 1
- end
-
- ExampleMethods.before(:all) do
- ExampleMethods.count.should == 2
- end
-
- ExampleMethods.before(:each) do
- ExampleMethods.count.should == 3
+
+ context "in an ExampleGroup with an implicit subject" do
+ it "delegates matcher to the implied subject" do
+ @example_group.describe(::Thing)
+ @example_group.example { should == ::Thing.new(:default) }
+ @example_group.example { should eql(::Thing.new(:default)) }
+ @example_group.run(@options).should be_true
end
-
- ExampleMethods.after(:each) do
- ExampleMethods.count.should == 4
- end
-
- ExampleMethods.after(:all) do
- ExampleMethods.count.should == 5
- end
-
- ExampleMethods.after(:suite) do
- ExampleMethods.count.should == 6
+ end
+
+ context "in an ExampleGroup using an explicit subject" do
+ it "delegates matcher to the declared subject" do
+ @example_group.describe(::Thing)
+ @example_group.subject { ::Thing.new(:other) }
+ @example_group.example { should == ::Thing.new(:other) }
+ @example_group.example { should eql(::Thing.new(:other)) }
+ @example_group.run(@options).should be_true
end
-
- @example_group = Class.new(ExampleGroup) do
- it "should use ExampleMethods callbacks" do
+ end
+
+ context "in an ExampleGroup using 'self' as an explicit subject" do
+ it "delegates matcher to the ExampleGroup" do
+ @example_group.describe(::Thing)
+ @example_group.subject { self }
+ @example_group.example { should == self }
+ @example_group.example { should eql(self) }
+ @example_group.example do
+ self.instance_eval("def method_ok?; true end")
+ should be_method_ok
end
+ @example_group.run(@options).should be_true
end
- @options.run_examples
- ExampleMethods.count.should == 7
end
+ end
- describe "run_with_description_capturing" do
- before(:each) do
- @example_group = Class.new(ExampleGroup) do end
- @example = @example_group.new("foo", &(lambda { 2.should == 2 }))
- @example.run_with_description_capturing
- end
+ describe "#should_not" do
+ before(:each) do
+ @example_group = Class.new(ExampleGroupDouble)
+ @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
+ end
- it "should provide the generated description" do
- @example.instance_eval { @_matcher_description }.should == "should == 2"
+ context "in an ExampleGroup with an implicit subject" do
+ it "delegates matcher to the implied subject" do
+ @example_group.describe(::Thing)
+ @example_group.example { should_not == ::Thing.new(:other) }
+ @example_group.example { should_not eql(::Thing.new(:other)) }
+ @example_group.run(@options).should be_true
end
-
- it "should clear the global generated_description" do
- Spec::Matchers.generated_description.should == nil
+ end
+
+ context "in an ExampleGroup using an explicit subject" do
+ it "delegates matcher to the declared subject" do
+ @example_group.describe(::Thing)
+ @example_group.subject { ::Thing.new(:other) }
+ @example_group.example { should_not == ::Thing.new(:default) }
+ @example_group.example { should_not eql(::Thing.new(:default)) }
+ @example_group.run(@options).should be_true
end
end
- end
-
- describe "#implementation_backtrace" do
- it "returns the backtrace of where the implementation was defined" do
- example_group = Class.new(ExampleGroup) do
- it "should use ExampleMethods callbacks" do
+
+ context "in an ExampleGroup using 'self' as an explicit subject" do
+ it "delegates matcher to the ExampleGroup" do
+ @example_group.describe(::Thing)
+ @example_group.subject { self }
+ @example_group.example { should_not == ::Thing.new(:default) }
+ @example_group.example { should_not eql(::Thing.new(:default)) }
+ @example_group.example do
+ self.instance_eval("def method_ok?; false end")
+ should_not be_method_ok
end
+ @example_group.run(@options).should be_true
end
- example = example_group.examples.first
- example.implementation_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-4}")
end
end
+ end
- describe "#__full_description" do
- it "should return the full description of the ExampleGroup and Example" do
- example_group = Class.new(ExampleGroup).describe("An ExampleGroup") do
- it "should do something" do
- end
- end
- example = example_group.examples.first
- example.__full_description.should == "An ExampleGroup should do something"
- end
+ describe "#options" do
+ it "should expose the options hash" do
+ example = ExampleGroupDouble.new ExampleProxy.new("name", :this => 'that') do; end
+ example.options[:this].should == 'that'
+ end
+ end
+
+ describe "#set_instance_variables_from_hash" do
+ it "preserves the options" do
+ example = ExampleGroupDouble.new ExampleProxy.new("name", :this => 'that') do; end
+ example.set_instance_variables_from_hash({:@_options => {}})
+ example.options[:this].should == 'that'
+ end
+ end
+
+ describe "#description" do
+ it "returns the supplied description" do
+ example = ExampleGroupDouble.new ExampleProxy.new("name") do; end
+ example.description.should == "name"
+ end
+ it "returns the generated description if there is no description supplied" do
+ example = ExampleGroupDouble.new ExampleProxy.new do; end
+ Spec::Matchers.stub!(:generated_description).and_return('this message')
+ example.description.should == "this message"
+ end
+ it "warns if there is no supplied or generated description" do
+ example = ExampleGroupDouble.new ExampleProxy.new(nil, {}, "this backtrace") do; end
+ Spec::Matchers.stub!(:generated_description).and_return(nil)
+ Spec.should_receive(:warn).with("No description supplied for example declared on this backtrace")
+ example.description
+ end
+ end
+
+ describe "#expect" do
+ it "aliases #should with #to on the proc" do
+ a = 3
+ expect { a += 1 }.to change{a}.from(3).to(4)
+ end
+
+ it "aliases #should_not with #to_not on the proc" do
+ a = 3
+ expect { nil }.to_not change{a}
end
end
+
end
-end \ No newline at end of file
+end
diff --git a/vendor/plugins/rspec/spec/spec/example/example_runner_spec.rb b/vendor/plugins/rspec/spec/spec/example/example_runner_spec.rb
deleted file mode 100644
index 1b5abdf0f..000000000
--- a/vendor/plugins/rspec/spec/spec/example/example_runner_spec.rb
+++ /dev/null
@@ -1,194 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module Example
- # describe "Spec::Example::ExampleRunner", "#run", :shared => true do
- # before(:each) do
- # @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
- # @reporter = ::Spec::Runner::Reporter.new(@options)
- # @options.reporter = @reporter
- # @example_group_class = Class.new(ExampleGroup) do
- # plugin_mock_framework
- # describe("Some Examples")
- # end
- # end
- #
- # def create_runner(example_definition)
- # example = @example_group_class.new(example_definition)
- # runner = ExampleGroup.new(@options, example)
- # runner.stub!(:verify_mocks)
- # runner.stub!(:teardown_mocks)
- # runner
- # end
- # end
- #
- # describe ExampleRunner, "#run with blank passing example" do
- # it_should_behave_like "Spec::Example::ExampleRunner#run"
- #
- # before do
- # @e = @example_group_class.it("example") {}
- # @runner = create_runner(@e)
- # end
- #
- # it "should send reporter example_started" do
- # @reporter.should_receive(:example_started).with(equal(@e))
- # @runner.run
- # end
- #
- # it "should report its name for dry run" do
- # @options.dry_run = true
- # @reporter.should_receive(:example_finished).with(equal(@e), nil)
- # @runner.run
- # end
- #
- # it "should report success" do
- # @reporter.should_receive(:example_finished).with(equal(@e), nil)
- # @runner.run
- # end
- # end
- #
- # describe ExampleRunner, "#run with a failing example" do
- # predicate_matchers[:is_a] = [:is_a?]
- # it_should_behave_like "Spec::Example::ExampleRunner#run"
- #
- # before do
- # @e = @example_group_class.it("example") do
- # (2+2).should == 5
- # end
- # @runner = create_runner(@e)
- # end
- #
- # it "should report failure due to failure" do
- # @reporter.should_receive(:example_finished).with(
- # equal(@e),
- # is_a(Spec::Expectations::ExpectationNotMetError)
- # )
- # @runner.run
- # end
- # end
- #
- # describe ExampleRunner, "#run with a erroring example" do
- # it_should_behave_like "Spec::Example::ExampleRunner#run"
- #
- # before do
- # @error = error = NonStandardError.new("in body")
- # @example_definition = @example_group_class.it("example") do
- # raise(error)
- # end
- # @runner = create_runner(@example_definition)
- # end
- #
- # it "should report failure due to error" do
- # @reporter.should_receive(:example_finished).with(
- # equal(@example_definition),
- # @error
- # )
- # @runner.run
- # end
- #
- # it "should run after_each block" do
- # @example_group_class.after(:each) do
- # raise("in after_each")
- # end
- # @reporter.should_receive(:example_finished) do |example_definition, error|
- # example_definition.should equal(@example_definition)
- # error.message.should eql("in body")
- # end
- # @runner.run
- # end
- # end
- #
- # describe ExampleRunner, "#run where after_each fails" do
- # it_should_behave_like "Spec::Example::ExampleRunner#run"
- #
- # before do
- # @example_ran = example_ran = false
- # @example_definition = @example_group_class.it("should not run") do
- # example_ran = true
- # end
- # @runner = create_runner(@example_definition)
- # @example_group_class.after(:each) { raise(NonStandardError.new("in after_each")) }
- # end
- #
- # it "should report failure location when in after_each" do
- # @reporter.should_receive(:example_finished) do |example_definition, error|
- # example_definition.should equal(@example_definition)
- # error.message.should eql("in after_each")
- # end
- # @runner.run
- # end
- # end
- #
- # describe ExampleRunner, "#run with use cases" do
- # predicate_matchers[:is_a] = [:is_a?]
- # it_should_behave_like "Spec::Example::ExampleRunner#run"
- #
- # it "should report NO NAME when told to use generated description with --dry-run" do
- # @options.dry_run = true
- # example_definition = @example_group_class.it() do
- # 5.should == 5
- # end
- # runner = create_runner(example_definition)
- #
- # @reporter.should_receive(:example_finished) do |example_definition, error|
- # example_definition.description.should == "NO NAME (Because of --dry-run)"
- # end
- # runner.run
- # end
- #
- # it "should report given name if present with --dry-run" do
- # @options.dry_run = true
- # example_definition = @example_group_class.it("example name") do
- # 5.should == 5
- # end
- # runner = create_runner(example_definition)
- #
- # @reporter.should_receive(:example_finished) do |example_definition, error|
- # example_definition.description.should == "example name"
- # end
- # runner.run
- # end
- #
- # it "should report NO NAME when told to use generated description with no expectations" do
- # example_definition = @example_group_class.it() {}
- # runner = create_runner(example_definition)
- # @reporter.should_receive(:example_finished) do |example, error|
- # example.description.should == "NO NAME (Because there were no expectations)"
- # end
- # runner.run
- # end
- #
- # it "should report NO NAME when told to use generated description and matcher fails" do
- # example_definition = @example_group_class.it() do
- # 5.should "" # Has no matches? method..
- # end
- # runner = create_runner(example_definition)
- #
- # @reporter.should_receive(:example_finished) do |example, error|
- # example_definition.description.should == "NO NAME (Because of Error raised in matcher)"
- # end
- # runner.run
- # end
- #
- # it "should report generated description when told to and it is available" do
- # example_definition = @example_group_class.it() {
- # 5.should == 5
- # }
- # runner = create_runner(example_definition)
- #
- # @reporter.should_receive(:example_finished) do |example_definition, error|
- # example_definition.description.should == "should == 5"
- # end
- # runner.run
- # end
- #
- # it "should unregister description_generated callback (lest a memory leak should build up)" do
- # example_definition = @example_group_class.it("something")
- # runner = create_runner(example_definition)
- #
- # Spec::Matchers.should_receive(:example_finished)
- # runner.run
- # end
- # end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/example/example_spec.rb b/vendor/plugins/rspec/spec/spec/example/example_spec.rb
deleted file mode 100644
index c8125b447..000000000
--- a/vendor/plugins/rspec/spec/spec/example/example_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
- module Example
- # describe Example do
- # before(:each) do
- # @example = Example.new "example" do
- # foo
- # end
- # end
- #
- # it "should tell you its docstring" do
- # @example.description.should == "example"
- # end
- #
- # it "should execute its block in the context provided" do
- # context = Class.new do
- # def foo
- # "foo"
- # end
- # end.new
- # @example.run_in(context).should == "foo"
- # end
- # end
- #
- # describe Example, "#description" do
- # it "should default to NO NAME when not passed anything when there are no matchers" do
- # example = Example.new {}
- # example.run_in(Object.new)
- # example.description.should == "NO NAME"
- # end
- #
- # it "should default to NO NAME description (Because of --dry-run) when passed nil and there are no matchers" do
- # example = Example.new(nil) {}
- # example.run_in(Object.new)
- # example.description.should == "NO NAME"
- # end
- #
- # it "should allow description to be overridden" do
- # example = Example.new("Test description")
- # example.description.should == "Test description"
- # end
- #
- # it "should use description generated from matcher when there is no passed in description" do
- # example = Example.new(nil) do
- # 1.should == 1
- # end
- # example.run_in(Object.new)
- # example.description.should == "should == 1"
- # end
- # end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/example/nested_example_group_spec.rb b/vendor/plugins/rspec/spec/spec/example/nested_example_group_spec.rb
index 559467d6d..83e4a9d7c 100644
--- a/vendor/plugins/rspec/spec/spec/example/nested_example_group_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/nested_example_group_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Example
@@ -58,12 +58,12 @@ module Spec
describe "Nested Example Groups" do
describe "description options", :other_options => "other options" do
- it "should have a spec_path" do
- self.class.description_options[:spec_path].should match(/#{__FILE__}/)
+ it "includes :location" do
+ self.class.options[:location].should match(/#{__FILE__}/)
end
- it "should pass other options" do
- self.class.description_options[:other_options].should == "other options"
+ it "includes any other options" do
+ self.class.options[:other_options].should == "other options"
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/example/pending_module_spec.rb b/vendor/plugins/rspec/spec/spec/example/pending_module_spec.rb
index c3ab0126b..275abc7d6 100644
--- a/vendor/plugins/rspec/spec/spec/example/pending_module_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/pending_module_spec.rb
@@ -2,29 +2,56 @@ module Spec
module Example
describe Pending do
- it 'should raise an ExamplePendingError if no block is supplied' do
- lambda {
- include Pending
- pending "TODO"
- }.should raise_error(ExamplePendingError, /TODO/)
+ context "when no block is supplied" do
+ it "raises an ExamplePendingError if no block is supplied" do
+ lambda {
+ pending "TODO"
+ }.should raise_error(ExamplePendingError, /TODO/)
+ end
end
- it 'should raise an ExamplePendingError if a supplied block fails as expected' do
- lambda {
- include Pending
- pending "TODO" do
- raise "oops"
- end
- }.should raise_error(ExamplePendingError, /TODO/)
+ context "when the supplied block fails" do
+ it "raises an ExamplePendingError if a supplied block fails as expected" do
+ lambda {
+ pending "TODO" do
+ raise "oops"
+ end
+ }.should raise_error(ExamplePendingError, /TODO/)
+ end
end
- it 'should raise a PendingExampleFixedError if a supplied block starts working' do
- lambda {
- include Pending
- pending "TODO" do
- # success!
- end
- }.should raise_error(PendingExampleFixedError, /TODO/)
+ context "when the supplied block fails with a mock" do
+ it "raises an ExamplePendingError if a supplied block fails as expected with a mock" do
+ lambda {
+ pending "TODO" do
+ m = mock("thing")
+ m.should_receive(:foo)
+ m.rspec_verify
+ end
+ }.should raise_error(ExamplePendingError, /TODO/)
+ end
+ end
+
+ context "when the supplied block passes" do
+ it "raises a PendingExampleFixedError" do
+ lambda {
+ pending "TODO" do
+ # success!
+ end
+ }.should raise_error(PendingExampleFixedError, /TODO/)
+ end
+ end
+ end
+
+ describe ExamplePendingError do
+ it "should have the message provided" do
+ ExamplePendingError.new("a message").message.should == "a message"
+ end
+ end
+
+ describe NotYetImplementedError do
+ it "should have the message 'Not Yet Implemented'" do
+ NotYetImplementedError.new.message.should == "Not Yet Implemented"
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/example/predicate_matcher_spec.rb b/vendor/plugins/rspec/spec/spec/example/predicate_matcher_spec.rb
index 7c4638b4b..a01858502 100644
--- a/vendor/plugins/rspec/spec/spec/example/predicate_matcher_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/predicate_matcher_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Example
@@ -9,12 +9,32 @@ module Spec
end
describe "predicate_matcher[method_on_object] = matcher_method" do
- predicate_matchers[:swim] = :can_swim?
+ before(:each) do
+ Spec.stub!(:deprecate)
+ end
+
+ it "is deprecated" do
+ Spec.should_receive(:deprecate)
+ group = ExampleGroupDouble.describe("foo") do
+ predicate_matchers[:swim] = :can_swim?
+ end
+ group.run(Spec::Runner::Options.new(StringIO.new, StringIO.new))
+ end
+
it "should match matcher_method if method_on_object returns true" do
- swim(100).matches?(Fish.new).should be_true
+ group = ExampleGroupDouble.describe(Fish) do
+ predicate_matchers[:swim] = :can_swim?
+ it { should swim(100) }
+ end
+ group.run(Spec::Runner::Options.new(StringIO.new, StringIO.new))
end
+
it "should not match matcher_method if method_on_object returns false" do
- swim(10000).matches?(Fish.new).should be_false
+ group = ExampleGroupDouble.describe(Fish) do
+ predicate_matchers[:swim] = :can_swim?
+ it { should_not swim(1000) }
+ end
+ group.run(Spec::Runner::Options.new(StringIO.new, StringIO.new))
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/example/shared_example_group_spec.rb b/vendor/plugins/rspec/spec/spec/example/shared_example_group_spec.rb
index 803536ab5..bbebbf15c 100644
--- a/vendor/plugins/rspec/spec/spec/example/shared_example_group_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/shared_example_group_spec.rb
@@ -1,264 +1,256 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Example
describe ExampleGroup, "with :shared => true" do
- it_should_behave_like "sandboxed rspec_options"
- attr_reader :formatter, :example_group
- before(:each) do
- @formatter = Spec::Mocks::Mock.new("formatter", :null_object => true)
- options.formatters << formatter
- @example_group = Class.new(ExampleGroup).describe("example_group")
- class << example_group
- public :include
+ with_sandboxed_options do
+ attr_reader :formatter, :example_group
+ before(:each) do
+ @formatter = Spec::Mocks::Mock.new("formatter", :null_object => true)
+ options.formatters << formatter
+ @example_group = Class.new(ExampleGroupDouble).describe("example_group")
+ class << example_group
+ public :include
+ end
end
- end
-
- after(:each) do
- @formatter.rspec_verify
- @example_group = nil
- $shared_example_groups.clear unless $shared_example_groups.nil?
- end
-
- def make_shared_example_group(name, opts=nil, &block)
- example_group = SharedExampleGroup.new(name, :shared => true, &block)
- SharedExampleGroup.add_shared_example_group(example_group)
- example_group
- end
-
- def non_shared_example_group()
- @non_shared_example_group ||= Class.new(ExampleGroup).describe("example_group")
- end
-
- it "should accept an optional options hash" do
- lambda { Class.new(ExampleGroup).describe("context") }.should_not raise_error(Exception)
- lambda { Class.new(ExampleGroup).describe("context", :shared => true) }.should_not raise_error(Exception)
- end
- it "should return all shared example_groups" do
- b1 = make_shared_example_group("b1", :shared => true) {}
- b2 = make_shared_example_group("b2", :shared => true) {}
+ after(:each) do
+ @formatter.rspec_verify
+ @example_group = nil
+ Spec::Example::SharedExampleGroup.clear
+ end
+
+ describe "#register" do
+ it "creates a new shared example group with the submitted args" do
+ block = lambda {|a|}
+ group = SharedExampleGroup.new("shared group") do end
+ Spec::Example::SharedExampleGroup.should_receive(:new).with("share me", &block).and_return(group)
+ Spec::Example::SharedExampleGroup.register("share me", &block)
+ end
- b1.should_not be(nil)
- b2.should_not be(nil)
+ it "registers the shared example group" do
+ lambda do
+ Spec::Example::SharedExampleGroup.register "share me" do end
+ end.should change {Spec::Example::SharedExampleGroup.count}.by(1)
+ end
+ end
- SharedExampleGroup.find_shared_example_group("b1").should equal(b1)
- SharedExampleGroup.find_shared_example_group("b2").should equal(b2)
- end
+ it "complains when adding a second shared example_group with the same description" do
+ describe "shared example_group", :shared => true do
+ end
+ lambda do
+ describe "shared example_group", :shared => true do
+ end
+ end.should raise_error(ArgumentError)
+ end
+
+ it "does NOT add the same group twice" do
+ lambda do
+ 2.times do
+ describe "shared example_group which gets loaded twice", :shared => true do
+ end
+ end
+ end.should change {Spec::Example::SharedExampleGroup.count}.by(1)
+ end
- it "should register as shared example_group" do
- example_group = make_shared_example_group("example_group") {}
- SharedExampleGroup.shared_example_groups.should include(example_group)
- end
+ it "does NOT complain when adding the same shared example_group again (i.e. file gets reloaded)" do
+ lambda do
+ 2.times do
+ describe "shared example_group which gets loaded twice", :shared => true do
+ end
+ end
+ end.should_not raise_error(ArgumentError)
+ end
- it "should not be shared when not configured as shared" do
- example_group = non_shared_example_group
- SharedExampleGroup.shared_example_groups.should_not include(example_group)
- end
+ it "does NOT complain when adding the same shared example_group in same file with different absolute path" do
+ SharedExampleGroup.register(
+ "shared example_group",
+ :shared => true,
+ :location => "/my/spec/a/../shared.rb"
+ )
+ SharedExampleGroup.register(
+ "shared example_group",
+ :shared => true,
+ :location => "/my/spec/b/../shared.rb"
+ )
+ end
- it "should complain when adding a second shared example_group with the same description" do
- describe "shared example_group", :shared => true do
+ it "complains when adding a different shared example_group with the same name in a different file with the same basename" do
+ SharedExampleGroup.register(
+ "shared example_group",
+ :shared => true,
+ :location => "/my/spec/a/shared.rb"
+ )
+ lambda do
+ SharedExampleGroup.register(
+ "shared example_group",
+ :shared => true,
+ :location => "/my/spec/b/shared.rb"
+ )
+ end.should raise_error(ArgumentError, /already exists/)
end
- lambda do
- describe "shared example_group", :shared => true do
+
+ it "adds examples to current example_group using it_should_behave_like" do
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
+ it("shared example") {}
+ it("shared example 2") {}
end
- end.should raise_error(ArgumentError)
- end
- it "should NOT complain when adding the same shared example_group instance again" do
- shared_example_group = Class.new(ExampleGroup).describe("shared example_group", :shared => true)
- SharedExampleGroup.add_shared_example_group(shared_example_group)
- SharedExampleGroup.add_shared_example_group(shared_example_group)
- end
+ example_group.it("example") {}
+ example_group.number_of_examples.should == 1
+ example_group.it_should_behave_like("shared example_group")
+ example_group.number_of_examples.should == 3
+ end
- it "should NOT complain when adding the same shared example_group again (i.e. file gets reloaded)" do
- lambda do
- 2.times do
- describe "shared example_group which gets loaded twice", :shared => true do
- end
+ it "adds examples to from two shared groups" do
+ shared_example_group_1 = SharedExampleGroup.register("shared example_group 1") do
+ it("shared example 1") {}
end
- end.should_not raise_error(ArgumentError)
- end
-
- it "should NOT complain when adding the same shared example_group in same file with different absolute path" do
- shared_example_group_1 = Class.new(ExampleGroup).describe(
- "shared example_group",
- :shared => true,
- :spec_path => "/my/spec/a/../shared.rb"
- )
- shared_example_group_2 = Class.new(ExampleGroup).describe(
- "shared example_group",
- :shared => true,
- :spec_path => "/my/spec/b/../shared.rb"
- )
-
- SharedExampleGroup.add_shared_example_group(shared_example_group_1)
- SharedExampleGroup.add_shared_example_group(shared_example_group_2)
- end
- it "should complain when adding a different shared example_group with the same name in a different file with the same basename" do
- shared_example_group_1 = Class.new(ExampleGroup).describe(
- "shared example_group",
- :shared => true,
- :spec_path => "/my/spec/a/shared.rb"
- )
- shared_example_group_2 = Class.new(ExampleGroup).describe(
- "shared example_group",
- :shared => true,
- :spec_path => "/my/spec/b/shared.rb"
- )
-
- SharedExampleGroup.add_shared_example_group(shared_example_group_1)
- lambda do
- SharedExampleGroup.add_shared_example_group(shared_example_group_2)
- end.should raise_error(ArgumentError, /already exists/)
- end
+ shared_example_group_1 = SharedExampleGroup.register("shared example_group 2") do
+ it("shared example 2") {}
+ end
- it "should add examples to current example_group using it_should_behave_like" do
- shared_example_group = make_shared_example_group("shared example_group") do
- it("shared example") {}
- it("shared example 2") {}
+ example_group.it("example") {}
+ example_group.number_of_examples.should == 1
+ example_group.it_should_behave_like("shared example_group 1", "shared example_group 2")
+ example_group.number_of_examples.should == 3
end
- example_group.it("example") {}
- example_group.number_of_examples.should == 1
- example_group.it_should_behave_like("shared example_group")
- example_group.number_of_examples.should == 3
- end
-
- it "should add examples to current example_group using include" do
- shared_example_group = describe "all things", :shared => true do
- it "should do stuff" do end
- end
+ it "adds examples to current example_group using include" do
+ shared_example_group = describe "all things", :shared => true do
+ it "should do stuff" do end
+ end
- example_group = describe "one thing" do
- include shared_example_group
- end
+ example_group = describe "one thing" do
+ include shared_example_group
+ end
- example_group.number_of_examples.should == 1
- end
-
- it "should add examples to current example_group using it_should_behave_like with a module" do
- AllThings = describe "all things", :shared => true do
- it "should do stuff" do end
+ example_group.number_of_examples.should == 1
end
+
+ it "adds examples to current example_group using it_should_behave_like with a module" do
+ ::AllThings = describe "all things", :shared => true do
+ it "should do stuff" do end
+ end
- example_group = describe "one thing" do
- it_should_behave_like AllThings
- end
+ example_group = describe "one thing" do
+ it_should_behave_like ::AllThings
+ end
- example_group.number_of_examples.should == 1
- end
-
- it "should run shared examples" do
- shared_example_ran = false
- shared_example_group = make_shared_example_group("shared example_group") do
- it("shared example") { shared_example_ran = true }
+ example_group.number_of_examples.should == 1
end
- example_ran = false
+ it "runs shared examples" do
+ shared_example_ran = false
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
+ it("shared example") { shared_example_ran = true }
+ end
- example_group.it_should_behave_like("shared example_group")
- example_group.it("example") {example_ran = true}
- example_group.run
- example_ran.should be_true
- shared_example_ran.should be_true
- end
+ example_ran = false
- it "should run setup and teardown from shared example_group" do
- shared_setup_ran = false
- shared_teardown_ran = false
- shared_example_group = make_shared_example_group("shared example_group") do
- before { shared_setup_ran = true }
- after { shared_teardown_ran = true }
- it("shared example") { shared_example_ran = true }
+ example_group.it_should_behave_like("shared example_group")
+ example_group.it("example") {example_ran = true}
+ example_group.run(options)
+ example_ran.should be_true
+ shared_example_ran.should be_true
end
- example_ran = false
+ it "runs before(:each) and after(:each) from shared example_group" do
+ shared_setup_ran = false
+ shared_teardown_ran = false
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
+ before(:each) { shared_setup_ran = true }
+ after(:each) { shared_teardown_ran = true }
+ it("shared example") { shared_example_ran = true }
+ end
- example_group.it_should_behave_like("shared example_group")
- example_group.it("example") {example_ran = true}
- example_group.run
- example_ran.should be_true
- shared_setup_ran.should be_true
- shared_teardown_ran.should be_true
- end
+ example_ran = false
- it "should run before(:all) and after(:all) only once from shared example_group" do
- shared_before_all_run_count = 0
- shared_after_all_run_count = 0
- shared_example_group = make_shared_example_group("shared example_group") do
- before(:all) { shared_before_all_run_count += 1}
- after(:all) { shared_after_all_run_count += 1}
- it("shared example") { shared_example_ran = true }
+ example_group.it_should_behave_like("shared example_group")
+ example_group.it("example") {example_ran = true}
+ example_group.run(options)
+ example_ran.should be_true
+ shared_setup_ran.should be_true
+ shared_teardown_ran.should be_true
end
- example_ran = false
-
- example_group.it_should_behave_like("shared example_group")
- example_group.it("example") {example_ran = true}
- example_group.run
- example_ran.should be_true
- shared_before_all_run_count.should == 1
- shared_after_all_run_count.should == 1
- end
+ it "should run before(:all) and after(:all) only once from shared example_group" do
+ shared_before_all_run_count = 0
+ shared_after_all_run_count = 0
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
+ before(:all) { shared_before_all_run_count += 1}
+ after(:all) { shared_after_all_run_count += 1}
+ it("shared example") { shared_example_ran = true }
+ end
- it "should include modules, included into shared example_group, into current example_group" do
- @formatter.should_receive(:add_example_group).with(any_args)
+ example_ran = false
- shared_example_group = make_shared_example_group("shared example_group") do
- it("shared example") { shared_example_ran = true }
+ example_group.it_should_behave_like("shared example_group")
+ example_group.it("example") {example_ran = true}
+ example_group.run(options)
+ example_ran.should be_true
+ shared_before_all_run_count.should == 1
+ shared_after_all_run_count.should == 1
end
- mod1_method_called = false
- mod1 = Module.new do
- define_method :mod1_method do
- mod1_method_called = true
+ it "should include modules, included into shared example_group, into current example_group" do
+ @formatter.should_receive(:add_example_group).with(any_args)
+
+ shared_example_group = SharedExampleGroup.register("shared example_group") do
+ it("shared example") { shared_example_ran = true }
end
- end
- mod2_method_called = false
- mod2 = Module.new do
- define_method :mod2_method do
- mod2_method_called = true
+ mod1_method_called = false
+ mod1 = Module.new do
+ define_method :mod1_method do
+ mod1_method_called = true
+ end
+ end
+
+ mod2_method_called = false
+ mod2 = Module.new do
+ define_method :mod2_method do
+ mod2_method_called = true
+ end
end
- end
- shared_example_group.include mod2
+ shared_example_group.__send__ :include, mod2
- example_group.it_should_behave_like("shared example_group")
- example_group.include mod1
+ example_group.it_should_behave_like("shared example_group")
+ example_group.include mod1
- example_group.it("test") do
- mod1_method
- mod2_method
+ example_group.it("test") do
+ mod1_method
+ mod2_method
+ end
+ example_group.run(options)
+ mod1_method_called.should be_true
+ mod2_method_called.should be_true
end
- example_group.run
- mod1_method_called.should be_true
- mod2_method_called.should be_true
- end
- it "should make methods defined in the shared example_group available in consuming example_group" do
- shared_example_group = make_shared_example_group("shared example_group xyz") do
- def a_shared_helper_method
- "this got defined in a shared example_group"
+ it "should make methods defined in the shared example_group available in consuming example_group" do
+ shared_example_group = SharedExampleGroup.register("shared example_group xyz") do
+ def a_shared_helper_method
+ "this got defined in a shared example_group"
+ end
end
+ example_group.it_should_behave_like("shared example_group xyz")
+ success = false
+ example_group.it("should access a_shared_helper_method") do
+ a_shared_helper_method
+ success = true
+ end
+ example_group.run(options)
+ success.should be_true
end
- example_group.it_should_behave_like("shared example_group xyz")
- success = false
- example_group.it("should access a_shared_helper_method") do
- a_shared_helper_method
- success = true
- end
- example_group.run
- success.should be_true
- end
- it "should raise when named shared example_group can not be found" do
- lambda {
- example_group.it_should_behave_like("non-existent shared example group")
- violated
- }.should raise_error("Shared Example Group 'non-existent shared example group' can not be found")
+ it "should raise when named shared example_group can not be found" do
+ lambda {
+ example_group.it_should_behave_like("non-existent shared example group")
+ violated
+ }.should raise_error("Shared Example Group 'non-existent shared example group' can not be found")
+ end
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/example/subclassing_example_group_spec.rb b/vendor/plugins/rspec/spec/spec/example/subclassing_example_group_spec.rb
index 888f2ceb3..969014a73 100644
--- a/vendor/plugins/rspec/spec/spec/example/subclassing_example_group_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/example/subclassing_example_group_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Example
diff --git a/vendor/plugins/rspec/spec/spec/expectations/differs/default_spec.rb b/vendor/plugins/rspec/spec/spec/expectations/differs/default_spec.rb
index ba76cbd47..3bc3c45ab 100644
--- a/vendor/plugins/rspec/spec/spec/expectations/differs/default_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/expectations/differs/default_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Fixtures
@@ -73,6 +73,73 @@ EOD
diff = @differ.diff_as_object(expected,actual)
diff.should == expected_diff
end
+
+ it "should output a friendly message if comparing simple hashes" do
+ expected = { "foo" => "bar" }
+ actual = { "foo" => "baz" }
+
+ expected_diff = <<'EOD'
+
+Expected the key "foo" to be "bar", but was "baz"
+
+EOD
+
+
+ diff = @differ.diff_as_hash(actual, expected)
+ diff.should == expected_diff
+ end
+
+
+ it "should output a friendly message if comparing simple hashes that contain different keys" do
+ expected = { "bar" => "foo" }
+ actual = { "foo" => "baz" }
+
+ expected_diff = <<'EOD'
+
+Expected hash contains keys that target hash does not: ["bar"]
+Target hash contains keys that expected hash does not: ["foo"]
+Expected the key "bar" to be "foo", but was nil
+
+EOD
+
+
+ diff = @differ.diff_as_hash(actual, expected)
+ diff.should == expected_diff
+ end
+
+ it "should output diff message if the hash is complex (containing Array or Hash)" do
+ expected = { "foo" => "bar", "fizz" => [1, 2, 3] }
+ actual = { "foo" => "baz", "fizz" => [1, 2] }
+
+ # UGH - 1.8.7 seems to order hash keys differently than the others
+ if RUBY_VERSION =~ /^1.8.7/
+ expected_diff = <<'EOD'
+
+Expected the key "fizz" to be [1, 2, 3], but was [1, 2]
+Expected the key "foo" to be "bar", but was "baz"
+
+
+@@ -1,2 +1,2 @@
+-{"fizz"=>[1, 2, 3], "foo"=>"bar"}
++{"fizz"=>[1, 2], "foo"=>"baz"}
+EOD
+ else
+ expected_diff = <<'EOD'
+
+Expected the key "fizz" to be [1, 2, 3], but was [1, 2]
+Expected the key "foo" to be "bar", but was "baz"
+
+
+@@ -1,2 +1,2 @@
+-{"foo"=>"bar", "fizz"=>[1, 2, 3]}
++{"foo"=>"baz", "fizz"=>[1, 2]}
+EOD
+ end
+
+ diff = @differ.diff_as_hash(actual, expected)
+ diff.should == expected_diff
+ end
+
it "should output unified diff message of two objects" do
expected = Spec::Fixtures::Animal.new "bob", "giraffe"
diff --git a/vendor/plugins/rspec/spec/spec/expectations/extensions/object_spec.rb b/vendor/plugins/rspec/spec/spec/expectations/extensions/object_spec.rb
deleted file mode 100644
index 0d9335bdb..000000000
--- a/vendor/plugins/rspec/spec/spec/expectations/extensions/object_spec.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-describe Object, "#should" do
- before(:each) do
- @target = "target"
- @matcher = mock("matcher")
- @matcher.stub!(:matches?).and_return(true)
- @matcher.stub!(:failure_message)
- end
-
- it "should accept and interact with a matcher" do
- @matcher.should_receive(:matches?).with(@target).and_return(true)
- @target.should @matcher
- end
-
- it "should ask for a failure_message when matches? returns false" do
- @matcher.should_receive(:matches?).with(@target).and_return(false)
- @matcher.should_receive(:failure_message).and_return("the failure message")
- lambda {
- @target.should @matcher
- }.should fail_with("the failure message")
- end
-
- it "should raise error if it receives false directly" do
- lambda {
- @target.should false
- }.should raise_error(Spec::Expectations::InvalidMatcherError)
- end
-
- it "should raise error if it receives false (evaluated)" do
- lambda {
- @target.should eql?("foo")
- }.should raise_error(Spec::Expectations::InvalidMatcherError)
- end
-
- it "should raise error if it receives true" do
- lambda {
- @target.should true
- }.should raise_error(Spec::Expectations::InvalidMatcherError)
- end
-
- it "should raise error if it receives nil" do
- lambda {
- @target.should nil
- }.should raise_error(Spec::Expectations::InvalidMatcherError)
- end
-
- it "should raise error if it receives no argument and it is not used as a left side of an operator" do
- pending "Is it even possible to catch this?"
- lambda {
- @target.should
- }.should raise_error(Spec::Expectations::InvalidMatcherError)
- end
-end
-
-describe Object, "#should_not" do
- before(:each) do
- @target = "target"
- @matcher = mock("matcher")
- end
-
- it "should accept and interact with a matcher" do
- @matcher.should_receive(:matches?).with(@target).and_return(false)
- @matcher.stub!(:negative_failure_message)
-
- @target.should_not @matcher
- end
-
- it "should ask for a negative_failure_message when matches? returns true" do
- @matcher.should_receive(:matches?).with(@target).and_return(true)
- @matcher.should_receive(:negative_failure_message).and_return("the negative failure message")
- lambda {
- @target.should_not @matcher
- }.should fail_with("the negative failure message")
- end
-
- it "should raise error if it receives false directly" do
- lambda {
- @target.should_not false
- }.should raise_error(Spec::Expectations::InvalidMatcherError)
- end
-
- it "should raise error if it receives false (evaluated)" do
- lambda {
- @target.should_not eql?("foo")
- }.should raise_error(Spec::Expectations::InvalidMatcherError)
- end
-
- it "should raise error if it receives true" do
- lambda {
- @target.should_not true
- }.should raise_error(Spec::Expectations::InvalidMatcherError)
- end
-
- it "should raise error if it receives nil" do
- lambda {
- @target.should_not nil
- }.should raise_error(Spec::Expectations::InvalidMatcherError)
- end
-
- it "should raise error if it receives no argument and it is not used as a left side of an operator" do
- pending "Is it even possible to catch this?"
- lambda {
- @target.should_not
- }.should raise_error(Spec::Expectations::InvalidMatcherError)
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/expectations/fail_with_spec.rb b/vendor/plugins/rspec/spec/spec/expectations/fail_with_spec.rb
index 4c369ce3a..639b7f950 100644
--- a/vendor/plugins/rspec/spec/spec/expectations/fail_with_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/expectations/fail_with_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe Spec::Expectations, "#fail_with with no diff" do
before(:each) do
@@ -12,17 +12,24 @@ describe Spec::Expectations, "#fail_with with no diff" do
}.should fail_with("the message")
end
- it "should handle an Array" do
- lambda {
- Spec::Expectations.fail_with ["the message","expected","actual"]
- }.should fail_with("the message")
- end
-
after(:each) do
Spec::Expectations.differ = @old_differ
end
end
+describe Spec::Expectations, "#fail_with with Array" do
+ before(:each) do
+ Spec.stub!(:warn)
+ end
+
+ it "is deprecated" do
+ Spec.should_receive(:warn)
+ lambda {
+ Spec::Expectations.fail_with ["message", "expected", "actual"]
+ }.should raise_error
+ end
+end
+
describe Spec::Expectations, "#fail_with with diff" do
before(:each) do
@old_differ = Spec::Expectations.differ
@@ -40,31 +47,49 @@ describe Spec::Expectations, "#fail_with with diff" do
@differ.should_receive(:diff_as_string).and_return("diff")
lambda {
Spec::Expectations.fail_with "the message", "expected", "actual"
- }.should fail_with("the message\nDiff:diff")
+ }.should fail_with("the message\n\n Diff:diff")
end
it "should call differ if expected/actual are not strings" do
@differ.should_receive(:diff_as_object).and_return("diff")
lambda {
Spec::Expectations.fail_with "the message", :expected, :actual
- }.should fail_with("the message\nDiff:diff")
+ }.should fail_with("the message\n\n Diff:diff")
+ end
+
+ it "should call differ if expected/actual are both hashes" do
+ @differ.should_receive(:diff_as_hash).and_return("diff")
+ lambda {
+ Spec::Expectations.fail_with "the message", {:a => :b}, {:a => 'b'}
+ }.should fail_with("the message\n\n Diff:diff")
end
it "should not call differ if expected or actual are procs" do
@differ.should_not_receive(:diff_as_string)
@differ.should_not_receive(:diff_as_object)
+ @differ.should_not_receive(:diff_as_hash)
lambda {
Spec::Expectations.fail_with "the message", lambda {}, lambda {}
}.should fail_with("the message")
end
-
- it "should call differ if expected/actual are presented in an Array with message" do
- @differ.should_receive(:diff_as_string).with("actual","expected").and_return("diff")
+
+ after(:each) do
+ Spec::Expectations.differ = @old_differ
+ end
+end
+
+describe Spec::Expectations, "#fail_with with a nil message" do
+ before(:each) do
+ @old_differ = Spec::Expectations.differ
+ Spec::Expectations.differ = nil
+ end
+
+ it "should handle just a message" do
lambda {
- Spec::Expectations.fail_with(["the message", "expected", "actual"])
- }.should fail_with(/the message\nDiff:diff/)
+ Spec::Expectations.fail_with nil
+ }.should raise_error(ArgumentError, /Failure message is nil\. Does your matcher define the appropriate failure_message_for_\* method to return a string\?/)
end
-
+
after(:each) do
Spec::Expectations.differ = @old_differ
end
diff --git a/vendor/plugins/rspec/spec/spec/extensions/main_spec.rb b/vendor/plugins/rspec/spec/spec/extensions/main_spec.rb
deleted file mode 100644
index aabb616e9..000000000
--- a/vendor/plugins/rspec/spec/spec/extensions/main_spec.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module Extensions
- describe Main do
- it_should_behave_like "sandboxed rspec_options"
- before(:each) do
- @main = Class.new do; include Main; end
- end
-
- after(:each) do
- $rspec_story_steps = @original_rspec_story_steps
- end
-
- it "should create an Options object" do
- @main.send(:rspec_options).should be_instance_of(Spec::Runner::Options)
- @main.send(:rspec_options).should === $rspec_options
- end
-
- specify {@main.should respond_to(:describe)}
- specify {@main.should respond_to(:context)}
-
- it "should raise when no block given to describe" do
- lambda { @main.describe "foo" }.should raise_error(ArgumentError)
- end
-
- it "should raise when no description given to describe" do
- lambda { @main.describe do; end }.should raise_error(ArgumentError)
- end
-
- it "should registered ExampleGroups by default" do
- example_group = @main.describe("The ExampleGroup") do end
- rspec_options.example_groups.should include(example_group)
- end
-
- it "should not run unregistered ExampleGroups" do
- example_group = @main.describe("The ExampleGroup") do
- unregister
- end
-
- rspec_options.example_groups.should_not include(example_group)
- end
-
- it "should create a shared ExampleGroup with share_examples_for" do
- group = @main.share_examples_for "all things" do end
- group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
- end
-
- describe "#share_as" do
- before(:each) do
- $share_as_examples_example_module_number ||= 1
- $share_as_examples_example_module_number += 1
- t = Time.new.to_i
- @group_name = "Group#{$share_as_examples_example_module_number}"
- end
-
- it "should create a shared ExampleGroup" do
- group = @main.share_as @group_name do end
- group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
- end
-
- it "should create a constant that points to a Module" do
- group = @main.share_as @group_name do end
- Object.const_get(@group_name).should equal(group)
- end
-
- it "should bark if you pass it something not-constantizable" do
- lambda do
- @group = @main.share_as "Non Constant" do end
- end.should raise_error(NameError, /The first argument to share_as must be a legal name for a constant/)
- end
-
- end
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb
index d6f5564bf..b2c484109 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb
@@ -1,7 +1,7 @@
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
+require 'spec/autorun'
+require 'spec/test/unit'
describe "example group with failures" do
it "should fail" do
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb
index ccd2488bc..4203af3a5 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb
@@ -1,7 +1,7 @@
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
+require 'spec/autorun'
+require 'spec/test/unit'
describe "example group with passing examples" do
it "should pass" do
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb
index 71427dbaa..a18ce72f7 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb
@@ -1,7 +1,7 @@
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
+require 'spec/autorun'
+require 'spec/test/unit'
describe "example group with errors" do
it "should raise errors" do
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb
index 3fb6515a8..0a977cb15 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb
@@ -1,7 +1,7 @@
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
+require 'spec/autorun'
+require 'spec/test/unit'
class TestCaseThatFails < Test::Unit::TestCase
def test_that_fails
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb
index 69239c0b5..078a5f778 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb
@@ -1,7 +1,7 @@
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
+require 'spec/autorun'
+require 'spec/test/unit'
class TestCaseThatPasses < Test::Unit::TestCase
def test_that_passes
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb
index 35dcb6b2e..dc5f52e47 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb
@@ -1,7 +1,7 @@
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require 'test/unit'
-require 'spec'
+require 'spec/autorun'
+require 'spec/test/unit'
class TestCaseWithErrors < Test::Unit::TestCase
def test_with_error
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb
index 0c2167a99..5182b8203 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb
@@ -1,7 +1,7 @@
rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
$:.unshift rspec_lib unless $:.include?(rspec_lib)
-require "test/unit"
-require "spec"
+require 'spec/autorun'
+require 'spec/test/unit'
module Test
module Unit
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/spec_spec.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/spec_spec.rb
index 8a1e1300c..83ff52264 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/spec_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/spec_spec.rb
@@ -1,45 +1,48 @@
-require File.dirname(__FILE__) + '/test_unit_spec_helper'
+require 'spec/interop/test/unit/test_unit_spec_helper'
describe "ExampleGroup with test/unit/interop" do
include TestUnitSpecHelper
-
- before(:each) do
- @dir = File.dirname(__FILE__) + "/resources"
- end
-
+
describe "with passing examples" do
it "should output 0 failures" do
- output = ruby("#{@dir}/spec_that_passes.rb")
+ output = ruby("#{resources}/spec_that_passes.rb")
output.should include("1 example, 0 failures")
end
it "should return an exit code of 0" do
- ruby("#{@dir}/spec_that_passes.rb")
+ ruby("#{resources}/spec_that_passes.rb")
$?.should == 0
end
end
describe "with failing examples" do
it "should output 1 failure" do
- output = ruby("#{@dir}/spec_that_fails.rb")
+ output = ruby("#{resources}/spec_that_fails.rb")
output.should include("1 example, 1 failure")
end
it "should return an exit code of 256" do
- ruby("#{@dir}/spec_that_fails.rb")
+ ruby("#{resources}/spec_that_fails.rb")
$?.should == 256
end
end
describe "with example that raises an error" do
it "should output 1 failure" do
- output = ruby("#{@dir}/spec_with_errors.rb")
+ output = ruby("#{resources}/spec_with_errors.rb")
output.should include("1 example, 1 failure")
end
it "should return an exit code of 256" do
- ruby("#{@dir}/spec_with_errors.rb")
+ ruby("#{resources}/spec_with_errors.rb")
$?.should == 256
end
end
+
+ describe "options hash" do
+ it "should be exposed" do
+ output = ruby("#{resources}/spec_with_options_hash.rb")
+ output.should include("1 example, 0 failures")
+ end
+ end
end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb
index 04d5d2713..1f6c223eb 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb
@@ -1,8 +1,12 @@
-require File.dirname(__FILE__) + '/../../../../spec_helper'
-require File.dirname(__FILE__) + '/../../../../ruby_forker'
+require 'spec_helper'
+require 'ruby_forker'
module TestUnitSpecHelper
include RubyForker
+
+ def resources
+ File.dirname(__FILE__) + "/resources"
+ end
def run_script(file_name)
output = ruby(file_name)
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/testcase_spec.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/testcase_spec.rb
index f40111a58..c1b252609 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/testcase_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/testcase_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/test_unit_spec_helper'
+require 'spec/interop/test/unit/test_unit_spec_helper'
describe "Test::Unit::TestCase" do
include TestUnitSpecHelper
@@ -42,4 +42,9 @@ describe "Test::Unit::TestCase" do
$?.should == 256
end
end
-end \ No newline at end of file
+
+ it "should find all Test::Unit test methods" do
+ output = ruby("#{@dir}/test_case_with_various_names.rb")
+ output.should include("4 examples, 0 failures")
+ end
+end
diff --git a/vendor/plugins/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb b/vendor/plugins/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb
index 722126bc9..59743039a 100644
--- a/vendor/plugins/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/test_unit_spec_helper'
+require 'spec/interop/test/unit/test_unit_spec_helper'
describe "TestSuiteAdapter" do
include TestUnitSpecHelper
diff --git a/vendor/plugins/rspec/spec/spec/matchers/be_close_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/be_close_spec.rb
index d8452d408..cc0e5bd44 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/be_close_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/be_close_spec.rb
@@ -1,38 +1,49 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Matchers
- describe BeClose do
- it "should match when value == target" do
- BeClose.new(5.0, 0.5).matches?(5.0).should be_true
+ describe "[actual.should] be_close(expected, delta)" do
+ it "matches when actual == expected" do
+ be_close(5.0, 0.5).matches?(5.0).should be_true
end
- it "should match when value < (target + delta)" do
- BeClose.new(5.0, 0.5).matches?(5.49).should be_true
+ it "matches when actual < (expected + delta)" do
+ be_close(5.0, 0.5).matches?(5.49).should be_true
end
- it "should match when value > (target - delta)" do
- BeClose.new(5.0, 0.5).matches?(4.51).should be_true
+ it "matches when actual > (expected - delta)" do
+ be_close(5.0, 0.5).matches?(4.51).should be_true
end
- it "should not match when value == (target - delta)" do
- BeClose.new(5.0, 0.5).matches?(4.5).should be_false
+ it "does not match when actual == (expected - delta)" do
+ be_close(5.0, 0.5).matches?(4.5).should be_false
end
- it "should not match when value < (target - delta)" do
- BeClose.new(5.0, 0.5).matches?(4.49).should be_false
+ it "does not match when actual < (expected - delta)" do
+ be_close(5.0, 0.5).matches?(4.49).should be_false
end
- it "should not match when value == (target + delta)" do
- BeClose.new(5.0, 0.5).matches?(5.5).should be_false
+ it "does not match when actual == (expected + delta)" do
+ be_close(5.0, 0.5).matches?(5.5).should be_false
end
- it "should not match when value > (target + delta)" do
- BeClose.new(5.0, 0.5).matches?(5.51).should be_false
+ it "does not match when actual > (expected + delta)" do
+ be_close(5.0, 0.5).matches?(5.51).should be_false
end
- it "should provide a useful failure message" do
+ it "provides a failure message for should" do
#given
- matcher = BeClose.new(5.0, 0.5)
+ matcher = be_close(5.0, 0.5)
#when
matcher.matches?(5.51)
#then
- matcher.failure_message.should == "expected 5.0 +/- (< 0.5), got 5.51"
+ matcher.failure_message_for_should.should == "expected 5.0 +/- (< 0.5), got 5.51"
end
- it "should describe itself" do
- BeClose.new(5.0, 0.5).description.should == "be close to 5.0 (within +- 0.5)"
+
+ it "provides a failure message for should tno" do
+ #given
+ matcher = be_close(5.0, 0.5)
+ #when
+ matcher.matches?(5.49)
+ #then
+ matcher.failure_message_for_should_not.should == "expected 5.0 +/- (< 0.5), got 5.49"
+ end
+ it "provides a description" do
+ matcher = be_close(5.0, 0.5)
+ matcher.matches?(5.1)
+ matcher.description.should == "be close to 5.0 (within +- 0.5)"
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/be_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/be_spec.rb
index ba2a0f165..db6258abf 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/be_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/be_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "should be_predicate" do
it "should pass when actual returns true for :predicate?" do
@@ -7,7 +7,7 @@ describe "should be_predicate" do
end
it "should pass when actual returns true for :predicates? (present tense)" do
- actual = stub("actual", :exists? => true)
+ actual = stub("actual", :exists? => true, :exist? => true)
actual.should be_exist
end
@@ -18,10 +18,33 @@ describe "should be_predicate" do
}.should fail_with("expected happy? to return true, got false")
end
+ it "should fail when actual returns false for :predicate?" do
+ actual = stub("actual", :happy? => nil)
+ lambda {
+ actual.should be_happy
+ }.should fail_with("expected happy? to return true, got nil")
+ end
+
it "should fail when actual does not respond to :predicate?" do
lambda {
Object.new.should be_happy
- }.should raise_error(NameError)
+ }.should raise_error(NameError, /happy\?/)
+ end
+
+ it "should fail on error other than NameError" do
+ actual = stub("actual")
+ actual.should_receive(:foo?).and_raise("aaaah")
+ lambda {
+ actual.should be_foo
+ }.should raise_error(/aaaah/)
+ end
+
+ it "should fail on error other than NameError (with the present tense predicate)" do
+ actual = Object.new
+ actual.should_receive(:foos?).and_raise("aaaah")
+ lambda {
+ actual.should be_foo
+ }.should raise_error(/aaaah/)
end
end
@@ -31,6 +54,11 @@ describe "should_not be_predicate" do
actual.should_not be_happy
end
+ it "should pass when actual returns nil for :sym?" do
+ actual = stub("actual", :happy? => nil)
+ actual.should_not be_happy
+ end
+
it "should fail when actual returns true for :sym?" do
actual = stub("actual", :happy? => true)
lambda {
@@ -195,7 +223,15 @@ describe "should be ===" do
end
it "should fail when === operator returns false" do
- lambda { Hash.should be === "not a hash" }.should fail_with(%[expected === "not a hash", got Hash])
+ lambda { Hash.should be === "not a hash" }.should fail_with(%[expected === not a hash, got Hash])
+ end
+end
+
+describe "should_not with operators" do
+ it "should coach user to stop using operators with should_not" do
+ lambda {
+ 5.should_not be < 6
+ }.should raise_error(/not only FAILED,\nit is a bit confusing./m)
end
end
@@ -206,11 +242,11 @@ describe "should be" do
end
it "should fail if actual is false" do
- lambda {false.should be}.should fail_with("expected if to be satisfied, got false")
+ lambda {false.should be}.should fail_with("expected true, got false")
end
it "should fail if actual is nil" do
- lambda {nil.should be}.should fail_with("expected if to be satisfied, got nil")
+ lambda {nil.should be}.should fail_with("expected true, got nil")
end
end
@@ -223,13 +259,18 @@ describe "should be(value)" do
end
end
+describe "'should be' with operator" do
+ it "should include 'be' in the description" do
+ (be > 6).description.should =~ /be > 6/
+ (be >= 6).description.should =~ /be >= 6/
+ (be <= 6).description.should =~ /be <= 6/
+ (be < 6).description.should =~ /be < 6/
+ end
+end
+
describe "arbitrary predicate with DelegateClass" do
it "should access methods defined in the delegating class (LH[#48])" do
- pending(%{
- Looks like DelegateClass is delegating #should to the
- delegate. Not sure how to fix this one. Or if we even should."
- })
require 'delegate'
class ArrayDelegate < DelegateClass(Array)
def initialize(array)
@@ -246,3 +287,25 @@ describe "arbitrary predicate with DelegateClass" do
delegate.should be_large
end
end
+
+describe "be_a, be_an" do
+ it "should pass when class matches" do
+ "foobar".should be_a(String)
+ [1,2,3].should be_an(Array)
+ end
+
+ it "should fail when class does not match" do
+ "foobar".should_not be_a(Hash)
+ [1,2,3].should_not be_an(Integer)
+ end
+end
+
+describe "be_an_instance_of" do
+ it "passes when direct class matches" do
+ 5.should be_an_instance_of(Fixnum)
+ end
+
+ it "fails when class is higher up hierarchy" do
+ 5.should_not be_an_instance_of(Numeric)
+ end
+end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/matchers/change_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/change_spec.rb
index d95aa6da4..e70daf37d 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/change_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/change_spec.rb
@@ -1,6 +1,6 @@
#Based on patch from Wilson Bilkovich
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
class SomethingExpected
attr_accessor :some_value
end
@@ -12,13 +12,17 @@ describe "should change(actual, message)" do
end
it "should pass when actual is modified by the block" do
- lambda {@instance.some_value = 6}.should change(@instance, :some_value)
+ expect {@instance.some_value = 6}.to change(@instance, :some_value)
end
it "should fail when actual is not modified by the block" do
- lambda do
- lambda {}.should change(@instance, :some_value)
- end.should fail_with("some_value should have changed, but is still 5")
+ expect do
+ expect {}.to change(@instance, :some_value)
+ end.to fail_with("some_value should have changed, but is still 5")
+ end
+
+ it "provides a #description" do
+ change(@instance, :some_value).description.should == "change #some_value"
end
end
@@ -29,13 +33,13 @@ describe "should_not change(actual, message)" do
end
it "should pass when actual is not modified by the block" do
- lambda { }.should_not change(@instance, :some_value)
+ expect { }.to_not change(@instance, :some_value)
end
it "should fail when actual is not modified by the block" do
- lambda do
- lambda {@instance.some_value = 6}.should_not change(@instance, :some_value)
- end.should fail_with("some_value should not have changed, but did change from 5 to 6")
+ expect do
+ expect {@instance.some_value = 6}.to_not change(@instance, :some_value)
+ end.to fail_with("some_value should not have changed, but did change from 5 to 6")
end
end
@@ -46,20 +50,23 @@ describe "should change { block }" do
end
it "should pass when actual is modified by the block" do
- lambda {@instance.some_value = 6}.should change { @instance.some_value }
+ expect {@instance.some_value = 6}.to change { @instance.some_value }
end
it "should fail when actual is not modified by the block" do
- lambda do
- lambda {}.should change{ @instance.some_value }
- end.should fail_with("result should have changed, but is still 5")
+ expect do
+ expect {}.to change{ @instance.some_value }
+ end.to fail_with("result should have changed, but is still 5")
+ end
+
+ it "should warn if passed a block using do/end instead of {}" do
+ expect do
+ expect {}.to change do; end
+ end.to raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
end
- it "should warn if passed a block using do/end" do
- lambda do
- lambda {}.should change do
- end
- end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
+ it "provides a #description" do
+ change { @instance.some_value }.description.should == "change #result"
end
end
@@ -70,20 +77,19 @@ describe "should_not change { block }" do
end
it "should pass when actual is modified by the block" do
- lambda {}.should_not change{ @instance.some_value }
+ expect {}.to_not change{ @instance.some_value }
end
it "should fail when actual is not modified by the block" do
- lambda do
- lambda {@instance.some_value = 6}.should_not change { @instance.some_value }
- end.should fail_with("result should not have changed, but did change from 5 to 6")
+ expect do
+ expect {@instance.some_value = 6}.to_not change { @instance.some_value }
+ end.to fail_with("result should not have changed, but did change from 5 to 6")
end
- it "should warn if passed a block using do/end" do
- lambda do
- lambda {}.should_not change do
- end
- end.should raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
+ it "should warn if passed a block using do/end instead of {}" do
+ expect do
+ expect {}.to_not change do; end
+ end.to raise_error(Spec::Matchers::MatcherError, /block passed to should or should_not/)
end
end
@@ -94,19 +100,19 @@ describe "should change(actual, message).by(expected)" do
end
it "should pass when attribute is changed by expected amount" do
- lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by(1)
+ expect { @instance.some_value += 1 }.to change(@instance, :some_value).by(1)
end
it "should fail when the attribute is changed by unexpected amount" do
- lambda do
- lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by(1)
- end.should fail_with("some_value should have been changed by 1, but was changed by 2")
+ expect do
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by(1)
+ end.to fail_with("some_value should have been changed by 1, but was changed by 2")
end
it "should fail when the attribute is changed by unexpected amount in the opposite direction" do
- lambda do
- lambda { @instance.some_value -= 1 }.should change(@instance, :some_value).by(1)
- end.should fail_with("some_value should have been changed by 1, but was changed by -1")
+ expect do
+ expect { @instance.some_value -= 1 }.to change(@instance, :some_value).by(1)
+ end.to fail_with("some_value should have been changed by 1, but was changed by -1")
end
end
@@ -117,19 +123,19 @@ describe "should change{ block }.by(expected)" do
end
it "should pass when attribute is changed by expected amount" do
- lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by(1)
+ expect { @instance.some_value += 1 }.to change{@instance.some_value}.by(1)
end
it "should fail when the attribute is changed by unexpected amount" do
- lambda do
- lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by(1)
- end.should fail_with("result should have been changed by 1, but was changed by 2")
+ expect do
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by(1)
+ end.to fail_with("result should have been changed by 1, but was changed by 2")
end
it "should fail when the attribute is changed by unexpected amount in the opposite direction" do
- lambda do
- lambda { @instance.some_value -= 1 }.should change{@instance.some_value}.by(1)
- end.should fail_with("result should have been changed by 1, but was changed by -1")
+ expect do
+ expect { @instance.some_value -= 1 }.to change{@instance.some_value}.by(1)
+ end.to fail_with("result should have been changed by 1, but was changed by -1")
end
end
@@ -140,17 +146,17 @@ describe "should change(actual, message).by_at_least(expected)" do
end
it "should pass when attribute is changed by greater than the expected amount" do
- lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(1)
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_least(1)
end
it "should pass when attribute is changed by the expected amount" do
- lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_least(2)
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_least(2)
end
it "should fail when the attribute is changed by less than the expected amount" do
- lambda do
- lambda { @instance.some_value += 1 }.should change(@instance, :some_value).by_at_least(2)
- end.should fail_with("some_value should have been changed by at least 2, but was changed by 1")
+ expect do
+ expect { @instance.some_value += 1 }.to change(@instance, :some_value).by_at_least(2)
+ end.to fail_with("some_value should have been changed by at least 2, but was changed by 1")
end
end
@@ -162,17 +168,17 @@ describe "should change{ block }.by_at_least(expected)" do
end
it "should pass when attribute is changed by greater than expected amount" do
- lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(1)
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_least(1)
end
it "should pass when attribute is changed by the expected amount" do
- lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_least(2)
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_least(2)
end
it "should fail when the attribute is changed by less than the unexpected amount" do
- lambda do
- lambda { @instance.some_value += 1 }.should change{@instance.some_value}.by_at_least(2)
- end.should fail_with("result should have been changed by at least 2, but was changed by 1")
+ expect do
+ expect { @instance.some_value += 1 }.to change{@instance.some_value}.by_at_least(2)
+ end.to fail_with("result should have been changed by at least 2, but was changed by 1")
end
end
@@ -184,17 +190,17 @@ describe "should change(actual, message).by_at_most(expected)" do
end
it "should pass when attribute is changed by less than the expected amount" do
- lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(3)
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_most(3)
end
it "should pass when attribute is changed by the expected amount" do
- lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(2)
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_most(2)
end
it "should fail when the attribute is changed by greater than the expected amount" do
- lambda do
- lambda { @instance.some_value += 2 }.should change(@instance, :some_value).by_at_most(1)
- end.should fail_with("some_value should have been changed by at most 1, but was changed by 2")
+ expect do
+ expect { @instance.some_value += 2 }.to change(@instance, :some_value).by_at_most(1)
+ end.to fail_with("some_value should have been changed by at most 1, but was changed by 2")
end
end
@@ -206,17 +212,17 @@ describe "should change{ block }.by_at_most(expected)" do
end
it "should pass when attribute is changed by less than expected amount" do
- lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(3)
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_most(3)
end
it "should pass when attribute is changed by the expected amount" do
- lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(2)
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_most(2)
end
it "should fail when the attribute is changed by greater than the unexpected amount" do
- lambda do
- lambda { @instance.some_value += 2 }.should change{@instance.some_value}.by_at_most(1)
- end.should fail_with("result should have been changed by at most 1, but was changed by 2")
+ expect do
+ expect { @instance.some_value += 2 }.to change{@instance.some_value}.by_at_most(1)
+ end.to fail_with("result should have been changed by at most 1, but was changed by 2")
end
end
@@ -227,13 +233,13 @@ describe "should change(actual, message).from(old)" do
end
it "should pass when attribute is == to expected value before executing block" do
- lambda { @instance.some_value = "astring" }.should change(@instance, :some_value).from("string")
+ expect { @instance.some_value = "astring" }.to change(@instance, :some_value).from("string")
end
it "should fail when attribute is not == to expected value before executing block" do
- lambda do
- lambda { @instance.some_value = "knot" }.should change(@instance, :some_value).from("cat")
- end.should fail_with("some_value should have initially been \"cat\", but was \"string\"")
+ expect do
+ expect { @instance.some_value = "knot" }.to change(@instance, :some_value).from("cat")
+ end.to fail_with("some_value should have initially been \"cat\", but was \"string\"")
end
end
@@ -244,13 +250,13 @@ describe "should change{ block }.from(old)" do
end
it "should pass when attribute is == to expected value before executing block" do
- lambda { @instance.some_value = "astring" }.should change{@instance.some_value}.from("string")
+ expect { @instance.some_value = "astring" }.to change{@instance.some_value}.from("string")
end
it "should fail when attribute is not == to expected value before executing block" do
- lambda do
- lambda { @instance.some_value = "knot" }.should change{@instance.some_value}.from("cat")
- end.should fail_with("result should have initially been \"cat\", but was \"string\"")
+ expect do
+ expect { @instance.some_value = "knot" }.to change{@instance.some_value}.from("cat")
+ end.to fail_with("result should have initially been \"cat\", but was \"string\"")
end
end
@@ -261,13 +267,13 @@ describe "should change(actual, message).to(new)" do
end
it "should pass when attribute is == to expected value after executing block" do
- lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat")
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).to("cat")
end
it "should fail when attribute is not == to expected value after executing block" do
- lambda do
- lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("dog")
- end.should fail_with("some_value should have been changed to \"dog\", but is now \"cat\"")
+ expect do
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("string").to("dog")
+ end.to fail_with("some_value should have been changed to \"dog\", but is now \"cat\"")
end
end
@@ -278,13 +284,13 @@ describe "should change{ block }.to(new)" do
end
it "should pass when attribute is == to expected value after executing block" do
- lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat")
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.to("cat")
end
it "should fail when attribute is not == to expected value after executing block" do
- lambda do
- lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("dog")
- end.should fail_with("result should have been changed to \"dog\", but is now \"cat\"")
+ expect do
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.from("string").to("dog")
+ end.to fail_with("result should have been changed to \"dog\", but is now \"cat\"")
end
end
@@ -295,11 +301,23 @@ describe "should change(actual, message).from(old).to(new)" do
end
it "should pass when #to comes before #from" do
- lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).to("cat").from("string")
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).to("cat").from("string")
end
it "should pass when #from comes before #to" do
- lambda { @instance.some_value = "cat" }.should change(@instance, :some_value).from("string").to("cat")
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("string").to("cat")
+ end
+
+ it "should show the correct messaging when #after and #to are different" do
+ expect do
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("string").to("dog")
+ end.to fail_with("some_value should have been changed to \"dog\", but is now \"cat\"")
+ end
+
+ it "should show the correct messaging when #before and #from are different" do
+ expect do
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value).from("not_string").to("cat")
+ end.to fail_with("some_value should have initially been \"not_string\", but was \"string\"")
end
end
@@ -310,10 +328,22 @@ describe "should change{ block }.from(old).to(new)" do
end
it "should pass when #to comes before #from" do
- lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.to("cat").from("string")
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.to("cat").from("string")
end
it "should pass when #from comes before #to" do
- lambda { @instance.some_value = "cat" }.should change{@instance.some_value}.from("string").to("cat")
+ expect { @instance.some_value = "cat" }.to change{@instance.some_value}.from("string").to("cat")
+ end
+end
+
+describe Spec::Matchers::Change do
+ it "should work when the receiver has implemented #send" do
+ @instance = SomethingExpected.new
+ @instance.some_value = "string"
+ def @instance.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+
+ expect {
+ expect { @instance.some_value = "cat" }.to change(@instance, :some_value)
+ }.to_not raise_error
end
end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/description_generation_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/description_generation_spec.rb
index c494e2165..51b483c74 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/description_generation_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/description_generation_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "Matchers should be able to generate their own descriptions" do
after(:each) do
@@ -50,18 +50,6 @@ describe "Matchers should be able to generate their own descriptions" do
Spec::Matchers.generated_description.should == "should be between 0 and 10"
end
- it "should be_few_words predicate should be transformed to 'be few words'" do
- 5.should be_kind_of(Fixnum)
- Spec::Matchers.generated_description.should == "should be kind of Fixnum"
- end
-
- it "should preserve a proper prefix for be predicate" do
- 5.should be_a_kind_of(Fixnum)
- Spec::Matchers.generated_description.should == "should be a kind of Fixnum"
- 5.should be_an_instance_of(Fixnum)
- Spec::Matchers.generated_description.should == "should be an instance of Fixnum"
- end
-
it "should equal" do
expected = "expected"
expected.should equal(expected)
@@ -107,6 +95,11 @@ describe "Matchers should be able to generate their own descriptions" do
[1,2,3].should include(3)
Spec::Matchers.generated_description.should == "should include 3"
end
+
+ it "array.should =~ [1,2,3]" do
+ [1,2,3].should =~ [1,2,3]
+ Spec::Matchers.generated_description.should == "should contain exactly 1, 2 and 3"
+ end
it "should match" do
"this string".should match(/this string/)
@@ -151,3 +144,17 @@ describe "Matchers should be able to generate their own descriptions" do
end.new
end
end
+
+describe "a Matcher with no description" do
+ def matcher
+ Class.new do
+ def matches?(ignore); true; end
+ def failure_message; ""; end
+ end.new
+ end
+
+ it "should provide a helpful message when used in a string-less example block" do
+ 5.should matcher
+ Spec::Matchers.generated_description.should =~ /When you call.*description method/m
+ end
+end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/eql_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/eql_spec.rb
index 3f265d700..5cdf541eb 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/eql_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/eql_spec.rb
@@ -1,27 +1,32 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Matchers
- describe Eql do
+ describe "eql" do
it "should match when actual.eql?(expected)" do
- Eql.new(1).matches?(1).should be_true
+ 1.should eql(1)
end
+
it "should not match when !actual.eql?(expected)" do
- Eql.new(1).matches?(2).should be_false
+ 1.should_not eql(2)
end
+
it "should describe itself" do
- matcher = Eql.new(1)
+ matcher = eql(1)
+ matcher.matches?(1)
matcher.description.should == "eql 1"
end
+
it "should provide message, expected and actual on #failure_message" do
- matcher = Eql.new("1")
+ matcher = eql("1")
matcher.matches?(1)
- matcher.failure_message.should == ["expected \"1\", got 1 (using .eql?)", "1", 1]
+ matcher.failure_message_for_should.should == "\nexpected \"1\"\n got 1\n\n(compared using eql?)\n"
end
+
it "should provide message, expected and actual on #negative_failure_message" do
- matcher = Eql.new(1)
+ matcher = eql(1)
matcher.matches?(1)
- matcher.negative_failure_message.should == ["expected 1 not to equal 1 (using .eql?)", 1, 1]
+ matcher.failure_message_for_should_not.should == "\nexpected 1 not to equal 1\n\n(compared using eql?)\n"
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/equal_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/equal_spec.rb
index 7667bdc38..cb2fc1e51 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/equal_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/equal_spec.rb
@@ -1,27 +1,56 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
+require 'spec_helper'
module Spec
module Matchers
- describe Equal do
+ describe "equal" do
+
+ def inspect_object(o)
+ "#<#{o.class}:#{o.object_id}> => #{o.inspect}"
+ end
+
it "should match when actual.equal?(expected)" do
- Equal.new(1).matches?(1).should be_true
+ 1.should equal(1)
end
+
it "should not match when !actual.equal?(expected)" do
- Equal.new("1").matches?("1").should be_false
+ 1.should_not equal("1")
end
+
it "should describe itself" do
- matcher = Equal.new(1)
+ matcher = equal(1)
+ matcher.matches?(1)
matcher.description.should == "equal 1"
end
- it "should provide message, expected and actual on #failure_message" do
- matcher = Equal.new("1")
- matcher.matches?(1)
- matcher.failure_message.should == ["expected \"1\", got 1 (using .equal?)", "1", 1]
+
+ it "should provide message on #failure_message" do
+ expected, actual = "1", "1"
+ matcher = equal(expected)
+ matcher.matches?(actual)
+
+ matcher.failure_message_for_should.should == <<-MESSAGE
+
+expected #{inspect_object(expected)}
+ got #{inspect_object(actual)}
+
+Compared using equal?, which compares object identity,
+but expected and actual are not the same object. Use
+'actual.should == expected' if you don't care about
+object identity in this example.
+
+MESSAGE
end
- it "should provide message, expected and actual on #negative_failure_message" do
- matcher = Equal.new(1)
- matcher.matches?(1)
- matcher.negative_failure_message.should == ["expected 1 not to equal 1 (using .equal?)", 1, 1]
+
+ it "should provide message on #negative_failure_message" do
+ expected = actual = "1"
+ matcher = equal(expected)
+ matcher.matches?(actual)
+ matcher.failure_message_for_should_not.should == <<-MESSAGE
+
+expected not #{inspect_object(expected)}
+ got #{inspect_object(actual)}
+
+Compared using equal?, which compares object identity.
+
+MESSAGE
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/exist_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/exist_spec.rb
index 0a509726e..f95c86ff8 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/exist_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/exist_spec.rb
@@ -1,11 +1,11 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
class Substance
def initialize exists, description
@exists = exists
@description = description
end
- def exist?
+ def exist?(arg=nil)
@exists
end
def inspect
@@ -23,7 +23,7 @@ class SubstanceTester
end
end
-describe "should exist," do
+describe "should exist" do
before(:each) do
@real = Substance.new true, 'something real'
@@ -32,15 +32,23 @@ describe "should exist," do
describe "within an example group" do
- it "should pass if target exists" do
+ it "passes if target exists" do
@real.should exist
end
- it "should fail if target does not exist" do
+ it "passes if target exists with args" do
+ @real.should exist('this arg')
+ end
+
+ it "fails if target does not exist" do
lambda { @imaginary.should exist }.should fail
end
- it "should pass if target doesn't exist" do
+ it "describes itself" do
+ exist.description.should == "exist"
+ end
+
+ it "passes should_not exist if target doesn't exist" do
lambda { @real.should_not exist }.should fail
end
end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/handler_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/handler_spec.rb
deleted file mode 100644
index ad4fe6f85..000000000
--- a/vendor/plugins/rspec/spec/spec/matchers/handler_spec.rb
+++ /dev/null
@@ -1,129 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module ExampleExpectations
-
- class ArbitraryMatcher
- def initialize(*args, &block)
- if args.last.is_a? Hash
- @expected = args.last[:expected]
- end
- if block_given?
- @expected = block.call
- end
- @block = block
- end
-
- def matches?(target)
- @target = target
- return @expected == target
- end
-
- def with(new_value)
- @expected = new_value
- self
- end
-
- def failure_message
- "expected #{@expected}, got #{@target}"
- end
-
- def negative_failure_message
- "expected not #{@expected}, got #{@target}"
- end
- end
-
- class PositiveOnlyMatcher < ArbitraryMatcher
- undef negative_failure_message rescue nil
- end
-
- def arbitrary_matcher(*args, &block)
- ArbitraryMatcher.new(*args, &block)
- end
-
- def positive_only_matcher(*args, &block)
- PositiveOnlyMatcher.new(*args, &block)
- end
-
-end
-
-module Spec
- module Expectations
- describe ExpectationMatcherHandler, ".handle_matcher" do
- it "should ask the matcher if it matches" do
- matcher = mock("matcher")
- actual = Object.new
- matcher.should_receive(:matches?).with(actual).and_return(true)
- ExpectationMatcherHandler.handle_matcher(actual, matcher)
- end
-
- it "should explain when the matcher parameter is not a matcher" do
- begin
- nonmatcher = mock("nonmatcher")
- actual = Object.new
- ExpectationMatcherHandler.handle_matcher(actual, nonmatcher)
- rescue Spec::Expectations::InvalidMatcherError => e
- end
-
- e.message.should =~ /^Expected a matcher, got /
- end
- end
-
- describe NegativeExpectationMatcherHandler, ".handle_matcher" do
- it "should explain when matcher does not support should_not" do
- matcher = mock("matcher")
- matcher.stub!(:matches?)
- actual = Object.new
- lambda {
- NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
- }.should fail_with(/Matcher does not support should_not.\n/)
- end
-
- it "should ask the matcher if it matches" do
- matcher = mock("matcher")
- actual = Object.new
- matcher.stub!(:negative_failure_message)
- matcher.should_receive(:matches?).with(actual).and_return(false)
- NegativeExpectationMatcherHandler.handle_matcher(actual, matcher)
- end
-
- it "should explain when the matcher parameter is not a matcher" do
- begin
- nonmatcher = mock("nonmatcher")
- actual = Object.new
- NegativeExpectationMatcherHandler.handle_matcher(actual, nonmatcher)
- rescue Spec::Expectations::InvalidMatcherError => e
- end
-
- e.message.should =~ /^Expected a matcher, got /
- end
- end
-
- describe ExpectationMatcherHandler do
- include ExampleExpectations
-
- it "should handle submitted args" do
- 5.should arbitrary_matcher(:expected => 5)
- 5.should arbitrary_matcher(:expected => "wrong").with(5)
- lambda { 5.should arbitrary_matcher(:expected => 4) }.should fail_with("expected 4, got 5")
- lambda { 5.should arbitrary_matcher(:expected => 5).with(4) }.should fail_with("expected 4, got 5")
- 5.should_not arbitrary_matcher(:expected => 4)
- 5.should_not arbitrary_matcher(:expected => 5).with(4)
- lambda { 5.should_not arbitrary_matcher(:expected => 5) }.should fail_with("expected not 5, got 5")
- lambda { 5.should_not arbitrary_matcher(:expected => 4).with(5) }.should fail_with("expected not 5, got 5")
- end
-
- it "should handle the submitted block" do
- 5.should arbitrary_matcher { 5 }
- 5.should arbitrary_matcher(:expected => 4) { 5 }
- 5.should arbitrary_matcher(:expected => 4).with(5) { 3 }
- end
-
- it "should explain when matcher does not support should_not" do
- lambda {
- 5.should_not positive_only_matcher(:expected => 5)
- }.should fail_with(/Matcher does not support should_not.\n/)
- end
-
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/has_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/has_spec.rb
index 648ad8653..b6f259913 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/has_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/has_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "should have_sym(*args)" do
it "should pass if #has_sym?(*args) returns true" do
@@ -11,6 +11,16 @@ describe "should have_sym(*args)" do
}.should fail_with("expected #has_key?(:a) to return true, got false")
end
+ it "should fail if #has_sym?(*args) returns nil" do
+ klass = Class.new do
+ def has_foo?
+ end
+ end
+ lambda {
+ klass.new.should have_foo
+ }.should fail_with("expected #has_foo?(nil) to return true, got false")
+ end
+
it "should fail if target does not respond to #has_sym?" do
lambda {
Object.new.should have_key(:a)
@@ -31,6 +41,14 @@ describe "should_not have_sym(*args)" do
{:a => "A"}.should_not have_key(:b)
end
+ it "should pass if #has_sym?(*args) returns nil" do
+ klass = Class.new do
+ def has_foo?
+ end
+ end
+ klass.new.should_not have_foo
+ end
+
it "should fail if #has_sym?(*args) returns true" do
lambda {
{:a => "A"}.should_not have_key(:a)
@@ -51,3 +69,13 @@ describe "should_not have_sym(*args)" do
lambda { o.should_not have_sym(:foo) }.should raise_error("Funky exception")
end
end
+
+describe "has" do
+ it "should work when the target implements #send" do
+ o = {:a => "A"}
+ def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+ lambda {
+ o.should have_key(:a)
+ }.should_not raise_error
+ end
+end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/have_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/have_spec.rb
index 27083c294..07c294976 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/have_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/have_spec.rb
@@ -1,16 +1,31 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
-module HaveSpecHelper
+share_as :HaveSpecHelper do
def create_collection_owner_with(n)
owner = Spec::Expectations::Helper::CollectionOwner.new
- (1..n).each do |n|
- owner.add_to_collection_with_length_method(n)
- owner.add_to_collection_with_size_method(n)
+ (1..n).each do |number|
+ owner.add_to_collection_with_length_method(number)
+ owner.add_to_collection_with_size_method(number)
end
owner
end
+ before(:each) do
+ if defined?(::ActiveSupport::Inflector)
+ @active_support_was_defined = true
+ else
+ @active_support_was_defined = false
+ module ::ActiveSupport
+ class Inflector
+ def self.pluralize(string)
+ string.to_s + 's'
+ end
+ end
+ end
+ end
+ end
end
+
describe "should have(n).items" do
include HaveSpecHelper
@@ -47,12 +62,30 @@ describe "should have(n).items" do
end
end
+describe 'should have(1).item when ActiveSupport::Inflector is defined' do
+ include HaveSpecHelper
+
+ it 'should pluralize the collection name' do
+ owner = create_collection_owner_with(1)
+ owner.should have(1).item
+ end
+
+ after(:each) do
+ unless @active_support_was_defined
+ Object.__send__ :remove_const, :ActiveSupport
+ end
+ end
+end
+
describe 'should have(1).item when Inflector is defined' do
include HaveSpecHelper
- before do
- unless Object.const_defined?(:Inflector)
- class Inflector
+ before(:each) do
+ if defined?(Inflector)
+ @inflector_was_defined = true
+ else
+ @inflector_was_defined = false
+ class ::Inflector
def self.pluralize(string)
string.to_s + 's'
end
@@ -64,6 +97,12 @@ describe 'should have(1).item when Inflector is defined' do
owner = create_collection_owner_with(1)
owner.should have(1).item
end
+
+ after(:each) do
+ unless @inflector_was_defined
+ Object.__send__ :remove_const, :Inflector
+ end
+ end
end
describe "should have(n).items where result responds to items but returns something other than a collection" do
@@ -177,7 +216,7 @@ describe "should have_at_least(n).items" do
size_matcher.matches?(owner)
#then
- length_matcher.negative_failure_message.should == <<-EOF
+ length_matcher.failure_message_for_should_not.should == <<-EOF
Isn't life confusing enough?
Instead of having to figure out the meaning of this:
should_not have_at_least(3).items_in_collection_with_length_method
@@ -185,7 +224,7 @@ We recommend that you use this instead:
should have_at_most(2).items_in_collection_with_length_method
EOF
- size_matcher.negative_failure_message.should == <<-EOF
+ size_matcher.failure_message_for_should_not.should == <<-EOF
Isn't life confusing enough?
Instead of having to figure out the meaning of this:
should_not have_at_least(3).items_in_collection_with_size_method
@@ -231,7 +270,7 @@ describe "should have_at_most(n).items" do
size_matcher.matches?(owner)
#then
- length_matcher.negative_failure_message.should == <<-EOF
+ length_matcher.failure_message_for_should_not.should == <<-EOF
Isn't life confusing enough?
Instead of having to figure out the meaning of this:
should_not have_at_most(3).items_in_collection_with_length_method
@@ -239,7 +278,7 @@ We recommend that you use this instead:
should have_at_least(4).items_in_collection_with_length_method
EOF
- size_matcher.negative_failure_message.should == <<-EOF
+ size_matcher.failure_message_for_should_not.should == <<-EOF
Isn't life confusing enough?
Instead of having to figure out the meaning of this:
should_not have_at_most(3).items_in_collection_with_size_method
@@ -289,3 +328,69 @@ describe "have(n).things on an object which is not a collection nor contains one
lambda { Object.new.should have(2).things }.should raise_error(NoMethodError, /undefined method `things' for #<Object:/)
end
end
+
+describe Spec::Matchers::Have, "for a collection owner that implements #send" do
+ include HaveSpecHelper
+
+ before(:each) do
+ @collection = Object.new
+ def @collection.floozles; [1,2] end
+ def @collection.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+ end
+
+ it "should work in the straightforward case" do
+ lambda {
+ @collection.should have(2).floozles
+ }.should_not raise_error
+ end
+
+ it "should work when doing automatic pluralization" do
+ lambda {
+ @collection.should have_at_least(1).floozle
+ }.should_not raise_error
+ end
+
+ it "should blow up when the owner doesn't respond to that method" do
+ lambda {
+ @collection.should have(99).problems
+ }.should raise_error(NoMethodError, /problems/)
+ end
+end
+
+module Spec
+ module Matchers
+ describe Have do
+ treats_method_missing_as_private :noop => false
+
+ describe "respond_to?" do
+ before :each do
+ @have = Have.new(:foo)
+ @a_method_which_have_defines = Have.instance_methods.first
+ @a_method_which_object_defines = Object.instance_methods.first
+ end
+
+ it "should be true for a method which Have defines" do
+ @have.should respond_to(@a_method_which_have_defines)
+ end
+
+ it "should be true for a method that it's superclass (Object) defines" do
+ @have.should respond_to(@a_method_which_object_defines)
+ end
+
+ it "should be false for a method which neither Object nor nor Have defines" do
+ @have.should_not respond_to(:foo_bar_baz)
+ end
+
+ it "should be false if the owner doesn't respond to the method" do
+ have = Have.new(99)
+ have.should_not respond_to(:problems)
+ end
+
+ it "should be true if the owner responds to the method" do
+ have = Have.new(:a_symbol)
+ have.should respond_to(:to_sym)
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/include_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/include_spec.rb
index f1057f3fd..2b959b589 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/include_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/include_spec.rb
@@ -1,10 +1,14 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "should include(expected)" do
it "should pass if target includes expected" do
[1,2,3].should include(3)
"abc".should include("a")
end
+
+ it 'should pass if target is a Hash and has the expected as a key' do
+ {:key => 'value'}.should include(:key)
+ end
it "should fail if target does not include expected" do
lambda {
@@ -13,6 +17,9 @@ describe "should include(expected)" do
lambda {
"abc".should include("d")
}.should fail_with("expected \"abc\" to include \"d\"")
+ lambda {
+ {:key => 'value'}.should include(:other)
+ }.should fail_with(%Q|expected {:key=>"value"} to include :other|)
end
end
@@ -20,11 +27,21 @@ describe "should include(with, multiple, args)" do
it "should pass if target includes all items" do
[1,2,3].should include(1,2,3)
end
+
+ it 'should pass if target is a Hash including all items as keys' do
+ {:key => 'value', :other => 'value'}.should include(:key, :other)
+ end
it "should fail if target does not include any one of the items" do
lambda {
[1,2,3].should include(1,2,4)
- }.should fail_with("expected [1, 2, 3] to include 1, 2 and 4")
+ }.should fail_with("expected [1, 2, 3] to include 1, 2, and 4")
+ end
+
+ it 'should pass if target is a Hash missing any item as a key' do
+ lambda {
+ {:key => 'value'}.should include(:key, :other)
+ }.should fail_with(%Q|expected {:key=>"value"} to include :key and :other|)
end
end
@@ -33,6 +50,10 @@ describe "should_not include(expected)" do
[1,2,3].should_not include(4)
"abc".should_not include("d")
end
+
+ it 'should pass if target is a Hash and does not have the expected as a key' do
+ {:other => 'value'}.should_not include(:key)
+ end
it "should fail if target includes expected" do
lambda {
@@ -41,5 +62,27 @@ describe "should_not include(expected)" do
lambda {
"abc".should_not include("c")
}.should fail_with("expected \"abc\" not to include \"c\"")
+ lambda {
+ {:key => 'value'}.should_not include(:key)
+ }.should fail_with(%Q|expected {:key=>"value"} not to include :key|)
+ end
+end
+
+describe "should include(:key => value)" do
+ it "should pass if target is a Hash and includes the key/value pair" do
+ {:key => 'value'}.should include(:key => 'value')
+ end
+ it "should pass if target is a Hash and includes the key/value pair among others" do
+ {:key => 'value', :other => 'different'}.should include(:key => 'value')
+ end
+ it "should fail if target is a Hash and has a different value for key" do
+ lambda {
+ {:key => 'different'}.should include(:key => 'value')
+ }.should fail_with(%Q|expected {:key=>"different"} to include {:key=>"value"}|)
+ end
+ it "should fail if target is a Hash and has a different key" do
+ lambda {
+ {:other => 'value'}.should include(:key => 'value')
+ }.should fail_with(%Q|expected {:other=>"value"} to include {:key=>"value"}|)
end
end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/match_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/match_spec.rb
index f69f7efad..e5dc800a6 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/match_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/match_spec.rb
@@ -1,20 +1,30 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "should match(expected)" do
it "should pass when target (String) matches expected (Regexp)" do
"string".should match(/tri/)
end
+ it "should pass when target (String) matches expected (String)" do
+ "string".should match("tri")
+ end
+
it "should fail when target (String) does not match expected (Regexp)" do
lambda {
"string".should match(/rings/)
}.should fail
end
+
+ it "should fail when target (String) does not match expected (String)" do
+ lambda {
+ "string".should match("rings")
+ }.should fail
+ end
it "should provide message, expected and actual on failure" do
matcher = match(/rings/)
matcher.matches?("string")
- matcher.failure_message.should == ["expected \"string\" to match /rings/", /rings/, "string"]
+ matcher.failure_message_for_should.should == "expected \"string\" to match /rings/"
end
end
@@ -23,15 +33,25 @@ describe "should_not match(expected)" do
"string".should_not match(/rings/)
end
+ it "should pass when target (String) matches does not match (String)" do
+ "string".should_not match("rings")
+ end
+
it "should fail when target (String) matches expected (Regexp)" do
lambda {
"string".should_not match(/tri/)
}.should fail
end
+ it "should fail when target (String) matches expected (String)" do
+ lambda {
+ "string".should_not match("tri")
+ }.should fail
+ end
+
it "should provide message, expected and actual on failure" do
matcher = match(/tri/)
matcher.matches?("string")
- matcher.negative_failure_message.should == ["expected \"string\" not to match /tri/", /tri/, "string"]
+ matcher.failure_message_for_should_not.should == "expected \"string\" not to match /tri/"
end
end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/matcher_methods_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/matcher_methods_spec.rb
index 80cc9855a..291a2afa4 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/matcher_methods_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/matcher_methods_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Matchers
@@ -16,18 +16,9 @@ This module should provide the following methods, each of which returns a Matche
it "be_arbitrary_predicate" do
be_arbitrary_predicate.should be_an_instance_of(Be)
end
- it "be_close" do
- be_close(1,2).should be_an_instance_of(BeClose)
- end
it "change" do
change("target", :message).should be_an_instance_of(Change)
end
- it "eql" do
- eql(:expected).should be_an_instance_of(Eql)
- end
- it "equal" do
- equal(:expected).should be_an_instance_of(Equal)
- end
it "have" do
have(0).should be_an_instance_of(Have)
end
@@ -40,12 +31,6 @@ This module should provide the following methods, each of which returns a Matche
it "have_at_most" do
have_at_most(0).should be_an_instance_of(Have)
end
- it "include" do
- include(:value).should be_an_instance_of(Include)
- end
- it "match" do
- match(:value).should be_an_instance_of(Match)
- end
it "raise_error" do
raise_error.should be_an_instance_of(RaiseError)
raise_error(NoMethodError).should be_an_instance_of(RaiseError)
diff --git a/vendor/plugins/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb
deleted file mode 100644
index 1292918c7..000000000
--- a/vendor/plugins/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "The anything() mock argument constraint matcher" do
- specify { anything.should == Object.new }
- specify { anything.should == Class }
- specify { anything.should == 1 }
- specify { anything.should == "a string" }
- specify { anything.should == :a_symbol }
-end
-
-describe "The boolean() mock argument constraint matcher" do
- specify { boolean.should == true }
- specify { boolean.should == false }
- specify { boolean.should_not == Object.new }
- specify { boolean.should_not == Class }
- specify { boolean.should_not == 1 }
- specify { boolean.should_not == "a string" }
- specify { boolean.should_not == :a_symbol }
-end
-
-describe "The an_instance_of() mock argument constraint matcher" do
- # NOTE - this is implemented as a predicate_matcher - see example_group_methods.rb
- specify { an_instance_of(String).should == "string" }
-end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/operator_matcher_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/operator_matcher_spec.rb
index 1985df0d9..86e637e0f 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/operator_matcher_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/operator_matcher_spec.rb
@@ -1,6 +1,6 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
-require 'spec/expectations/differs/default'
+require 'spec/runner/differs/default'
describe "should ==" do
@@ -10,12 +10,17 @@ describe "should ==" do
subject.should == "apple"
end
+ it "should return true on success" do
+ subject = "apple"
+ (subject.should == "apple").should be_true
+ end
+
it "should fail when target.==(actual) returns false" do
subject = "apple"
Spec::Expectations.should_receive(:fail_with).with(%[expected: "orange",\n got: "apple" (using ==)], "orange", "apple")
subject.should == "orange"
end
-
+
end
describe "should_not ==" do
@@ -26,12 +31,17 @@ describe "should_not ==" do
subject.should_not == "apple"
end
+ it "should return true on success" do
+ subject = "apple"
+ (subject.should_not == "orange").should be_false
+ end
+
it "should fail when target.==(actual) returns false" do
subject = "apple"
Spec::Expectations.should_receive(:fail_with).with(%[expected not: == "apple",\n got: "apple"], "apple", "apple")
subject.should_not == "apple"
end
-
+
end
describe "should ===" do
@@ -156,3 +166,26 @@ describe "should <=" do
end
+describe Spec::Matchers::PositiveOperatorMatcher do
+
+ it "should work when the target has implemented #send" do
+ o = Object.new
+ def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+ lambda {
+ o.should == o
+ }.should_not raise_error
+ end
+
+end
+
+describe Spec::Matchers::NegativeOperatorMatcher do
+
+ it "should work when the target has implemented #send" do
+ o = Object.new
+ def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
+ lambda {
+ o.should_not == :foo
+ }.should_not raise_error
+ end
+
+end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/raise_error_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/raise_error_spec.rb
index a500d3b50..785065adc 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/raise_error_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/raise_error_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "should raise_error" do
it "should pass if anything is raised" do
@@ -12,6 +12,24 @@ describe "should raise_error" do
end
end
+describe "should raise_error {|err| ... }" do
+ it "passes if there is an error" do
+ ran = false
+ lambda { non_existent_method }.should raise_error {|e|
+ ran = true
+ }
+ ran.should be_true
+ end
+
+ it "passes the error to the block" do
+ error = nil
+ lambda { non_existent_method }.should raise_error {|e|
+ error = e
+ }
+ error.should be_kind_of(NameError)
+ end
+end
+
describe "should_not raise_error" do
it "should pass if nothing is raised" do
lambda {}.should_not raise_error
@@ -100,8 +118,8 @@ describe "should_not raise_error(NamedError)" do
it "should fail if named error is raised" do
lambda {
- lambda { non_existent_method }.should_not raise_error(NameError)
- }.should fail_with(/expected no NameError, got #<NameError: undefined/)
+ lambda { 1 + 'b' }.should_not raise_error(TypeError)
+ }.should fail_with(/expected no TypeError, got #<TypeError: String can't be/)
end
end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/respond_to_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/respond_to_spec.rb
index 2cdbbcd63..8d8f3c1ac 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/respond_to_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/respond_to_spec.rb
@@ -1,54 +1,116 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "should respond_to(:sym)" do
- it "should pass if target responds to :sym" do
+ it "passes if target responds to :sym" do
Object.new.should respond_to(:methods)
end
- it "should fail target does not respond to :sym" do
+ it "fails if target does not respond to :sym" do
lambda {
- Object.new.should respond_to(:some_method)
- }.should fail_with("expected target to respond to :some_method")
+ "this string".should respond_to(:some_method)
+ }.should fail_with(%q|expected "this string" to respond to :some_method|)
end
end
+describe "should respond_to(:sym).with(1).argument" do
+ it "passes if target responds to :sym with 1 arg" do
+ obj = Object.new
+ def obj.foo(arg); end
+ obj.should respond_to(:foo).with(1).argument
+ end
+
+ it "fails if target does not respond to :sym" do
+ obj = Object.new
+ lambda {
+ obj.should respond_to(:some_method).with(1).argument
+ }.should fail_with(/expected .* to respond to :some_method/)
+ end
+
+ it "fails if :sym expects 0 args" do
+ obj = Object.new
+ def obj.foo; end
+ lambda {
+ obj.should respond_to(:foo).with(1).argument
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 1 argument/)
+ end
+
+ it "fails if :sym expects 2 args" do
+ obj = Object.new
+ def obj.foo(arg, arg2); end
+ lambda {
+ obj.should respond_to(:foo).with(1).argument
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 1 argument/)
+ end
+end
+
describe "should respond_to(message1, message2)" do
- it "should pass if target responds to both messages" do
+ it "passes if target responds to both messages" do
Object.new.should respond_to('methods', 'inspect')
end
- it "should fail target does not respond to first message" do
+ it "fails if target does not respond to first message" do
lambda {
Object.new.should respond_to('method_one', 'inspect')
- }.should fail_with('expected target to respond to "method_one"')
+ }.should fail_with(/expected #<Object:.*> to respond to "method_one"/)
end
- it "should fail target does not respond to second message" do
+ it "fails if target does not respond to second message" do
lambda {
Object.new.should respond_to('inspect', 'method_one')
- }.should fail_with('expected target to respond to "method_one"')
+ }.should fail_with(/expected #<Object:.*> to respond to "method_one"/)
end
- it "should fail target does not respond to either message" do
+ it "fails if target does not respond to either message" do
lambda {
Object.new.should respond_to('method_one', 'method_two')
- }.should fail_with('expected target to respond to "method_one", "method_two"')
+ }.should fail_with(/expected #<Object:.*> to respond to "method_one", "method_two"/)
+ end
+end
+
+describe "should respond_to(:sym).with(2).arguments" do
+ it "passes if target responds to :sym with 2 args" do
+ obj = Object.new
+ def obj.foo(a1, a2); end
+ obj.should respond_to(:foo).with(2).arguments
+ end
+
+ it "fails if target does not respond to :sym" do
+ obj = Object.new
+ lambda {
+ obj.should respond_to(:some_method).with(2).arguments
+ }.should fail_with(/expected .* to respond to :some_method/)
+ end
+
+ it "fails if :sym expects 0 args" do
+ obj = Object.new
+ def obj.foo; end
+ lambda {
+ obj.should respond_to(:foo).with(2).arguments
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 2 arguments/)
+ end
+
+ it "fails if :sym expects 2 args" do
+ obj = Object.new
+ def obj.foo(arg); end
+ lambda {
+ obj.should respond_to(:foo).with(2).arguments
+ }.should fail_with(/expected #<Object.*> to respond to :foo with 2 arguments/)
end
end
describe "should_not respond_to(:sym)" do
- it "should pass if target does not respond to :sym" do
+ it "passes if target does not respond to :sym" do
Object.new.should_not respond_to(:some_method)
end
- it "should fail target responds to :sym" do
+ it "fails if target responds to :sym" do
lambda {
Object.new.should_not respond_to(:methods)
- }.should fail_with("expected target not to respond to :methods")
+ }.should fail_with(/expected #<Object:.*> not to respond to :methods/)
end
end
diff --git a/vendor/plugins/rspec/spec/spec/matchers/satisfy_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/satisfy_spec.rb
index 7e8d6f972..e50c395a6 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/satisfy_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/satisfy_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "should satisfy { block }" do
it "should pass if block returns true" do
diff --git a/vendor/plugins/rspec/spec/spec/matchers/simple_matcher_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/simple_matcher_spec.rb
index b731af92d..8071a9f31 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/simple_matcher_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/simple_matcher_spec.rb
@@ -1,9 +1,9 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Matchers
describe SimpleMatcher do
- it "should match pass match arg to block" do
+ it "should pass match arg to block" do
actual = nil
matcher = simple_matcher("message") do |given| actual = given end
matcher.matches?("foo")
@@ -22,10 +22,72 @@ module Spec
matcher.negative_failure_message.should =~ /expected not to get \"thing\", but got \"other\"/
end
- it "should provide a description" do
+ it "should provide the given description" do
matcher = simple_matcher("thing") do end
matcher.description.should =="thing"
end
+
+ it "should fail if a wrapped 'should' fails" do
+ matcher = simple_matcher("should fail") do
+ 2.should == 3
+ end
+ lambda do
+ matcher.matches?("anything").should be_true
+ end.should fail_with(/expected: 3/)
+ end
+ end
+
+ describe "with arity of 2" do
+ it "should provide the matcher so you can access its messages" do
+ provided_matcher = nil
+ matcher = simple_matcher("thing") do |given, matcher|
+ provided_matcher = matcher
+ end
+ matcher.matches?("anything")
+ provided_matcher.should equal(matcher)
+ end
+
+ it "should support a custom failure message" do
+ matcher = simple_matcher("thing") do |given, matcher|
+ matcher.failure_message = "custom message"
+ end
+ matcher.matches?("other")
+ matcher.failure_message.should == "custom message"
+ end
+
+ it "should complain when asked for a failure message if you don't give it a description or a message" do
+ matcher = simple_matcher do |given, matcher| end
+ matcher.matches?("other")
+ matcher.failure_message.should =~ /No description provided/
+ end
+
+ it "should support a custom negative failure message" do
+ matcher = simple_matcher("thing") do |given, matcher|
+ matcher.negative_failure_message = "custom message"
+ end
+ matcher.matches?("other")
+ matcher.negative_failure_message.should == "custom message"
+ end
+
+ it "should complain when asked for a negative failure message if you don't give it a description or a message" do
+ matcher = simple_matcher do |given, matcher| end
+ matcher.matches?("other")
+ matcher.negative_failure_message.should =~ /No description provided/
+ end
+
+ it "should support a custom description" do
+ matcher = simple_matcher("thing") do |given, matcher|
+ matcher.description = "custom message"
+ end
+ matcher.matches?("description")
+ matcher.description.should == "custom message"
+ end
+
+ it "should tell you no description was provided when it doesn't receive one" do
+ matcher = simple_matcher do end
+ matcher.description.should =~ /No description provided/
+ end
end
+
end
end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/matchers/throw_symbol_spec.rb b/vendor/plugins/rspec/spec/spec/matchers/throw_symbol_spec.rb
index 74595659a..402f812fc 100644
--- a/vendor/plugins/rspec/spec/spec/matchers/throw_symbol_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/matchers/throw_symbol_spec.rb
@@ -1,53 +1,95 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Matchers
- describe ThrowSymbol, "(constructed with no Symbol)" do
- before(:each) { @matcher = ThrowSymbol.new }
-
- it "should match if any Symbol is thrown" do
- @matcher.matches?(lambda{ throw :sym }).should be_true
- end
- it "should not match if no Symbol is thrown" do
- @matcher.matches?(lambda{ }).should be_false
- end
- it "should provide a failure message" do
- @matcher.matches?(lambda{})
- @matcher.failure_message.should == "expected a Symbol but nothing was thrown"
- end
- it "should provide a negative failure message" do
- @matcher.matches?(lambda{ throw :sym})
- @matcher.negative_failure_message.should == "expected no Symbol, got :sym"
- end
- end
-
- describe ThrowSymbol, "(constructed with a Symbol)" do
- before(:each) { @matcher = ThrowSymbol.new(:sym) }
+ describe ThrowSymbol do
+ describe "with no args" do
+ before(:each) { @matcher = ThrowSymbol.new }
- it "should match if correct Symbol is thrown" do
- @matcher.matches?(lambda{ throw :sym }).should be_true
+ it "should match if any Symbol is thrown" do
+ @matcher.matches?(lambda{ throw :sym }).should be_true
+ end
+ it "should match if any Symbol is thrown with an arg" do
+ @matcher.matches?(lambda{ throw :sym, "argument" }).should be_true
+ end
+ it "should not match if no Symbol is thrown" do
+ @matcher.matches?(lambda{ }).should be_false
+ end
+ it "should provide a failure message" do
+ @matcher.matches?(lambda{})
+ @matcher.failure_message_for_should.should == "expected a Symbol but nothing was thrown"
+ end
+ it "should provide a negative failure message" do
+ @matcher.matches?(lambda{ throw :sym})
+ @matcher.failure_message_for_should_not.should == "expected no Symbol, got :sym"
+ end
end
- it "should not match if no Symbol is thrown" do
- @matcher.matches?(lambda{ }).should be_false
- end
- it "should not match if correct Symbol is thrown" do
- @matcher.matches?(lambda{ throw :other_sym }).should be_false
- @matcher.failure_message.should == "expected :sym, got :other_sym"
- end
- it "should provide a failure message when no Symbol is thrown" do
- @matcher.matches?(lambda{})
- @matcher.failure_message.should == "expected :sym but nothing was thrown"
- end
- it "should provide a failure message when wrong Symbol is thrown" do
- @matcher.matches?(lambda{ throw :other_sym })
- @matcher.failure_message.should == "expected :sym, got :other_sym"
- end
- it "should provide a negative failure message" do
- @matcher.matches?(lambda{ throw :sym })
- @matcher.negative_failure_message.should == "expected :sym not to be thrown"
+
+ describe "with a symbol" do
+ before(:each) { @matcher = ThrowSymbol.new(:sym) }
+
+ it "should match if correct Symbol is thrown" do
+ @matcher.matches?(lambda{ throw :sym }).should be_true
+ end
+ it "should match if correct Symbol is thrown with an arg" do
+ @matcher.matches?(lambda{ throw :sym, "argument" }).should be_true
+ end
+ it "should not match if no Symbol is thrown" do
+ @matcher.matches?(lambda{ }).should be_false
+ end
+ it "should not match if correct Symbol is thrown" do
+ @matcher.matches?(lambda{ throw :other_sym }).should be_false
+ end
+ it "should provide a failure message when no Symbol is thrown" do
+ @matcher.matches?(lambda{})
+ @matcher.failure_message_for_should.should == "expected :sym but nothing was thrown"
+ end
+ it "should provide a failure message when wrong Symbol is thrown" do
+ @matcher.matches?(lambda{ throw :other_sym })
+ @matcher.failure_message_for_should.should == "expected :sym, got :other_sym"
+ end
+ it "should provide a negative failure message" do
+ @matcher.matches?(lambda{ throw :sym })
+ @matcher.failure_message_for_should_not.should == "expected :sym not to be thrown"
+ end
+ it "should only match NameErrors raised by uncaught throws" do
+ @matcher.matches?(lambda{ sym }).should be_false
+ end
end
- it "should only match NameErrors raised by uncaught throws" do
- @matcher.matches?(lambda{ sym }).should be_false
+
+ describe "with a symbol and an arg" do
+ before(:each) { @matcher = ThrowSymbol.new(:sym, "a") }
+
+ it "should match if correct Symbol and args are thrown" do
+ @matcher.matches?(lambda{ throw :sym, "a" }).should be_true
+ end
+ it "should not match if nothing is thrown" do
+ @matcher.matches?(lambda{ }).should be_false
+ end
+ it "should not match if other Symbol is thrown" do
+ @matcher.matches?(lambda{ throw :other_sym, "a" }).should be_false
+ end
+ it "should not match if no arg is thrown" do
+ @matcher.matches?(lambda{ throw :sym }).should be_false
+ end
+ it "should not match if wrong arg is thrown" do
+ @matcher.matches?(lambda{ throw :sym, "b" }).should be_false
+ end
+ it "should provide a failure message when no Symbol is thrown" do
+ @matcher.matches?(lambda{})
+ @matcher.failure_message_for_should.should == %q[expected :sym with "a" but nothing was thrown]
+ end
+ it "should provide a failure message when wrong Symbol is thrown" do
+ @matcher.matches?(lambda{ throw :other_sym })
+ @matcher.failure_message_for_should.should == %q[expected :sym with "a", got :other_sym]
+ end
+ it "should provide a negative failure message" do
+ @matcher.matches?(lambda{ throw :sym })
+ @matcher.failure_message_for_should_not.should == %q[expected :sym with "a" not to be thrown]
+ end
+ it "should only match NameErrors raised by uncaught throws" do
+ @matcher.matches?(lambda{ sym }).should be_false
+ end
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/any_number_of_times_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/any_number_of_times_spec.rb
index 3f50dcfc5..9a3f6edaf 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/any_number_of_times_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/any_number_of_times_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
@@ -23,6 +23,13 @@ module Spec
it "should pass if any number of times method is not called" do
@mock.should_receive(:random_call).any_number_of_times
end
+
+ it "should return the mocked value when called after a similar stub" do
+ @mock.stub!(:message).and_return :stub_value
+ @mock.should_receive(:message).any_number_of_times.and_return(:mock_value)
+ @mock.message.should == :mock_value
+ @mock.message.should == :mock_value
+ end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/argument_expectation_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/argument_expectation_spec.rb
index 2bebbdd4f..496f7507c 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/argument_expectation_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/argument_expectation_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
diff --git a/vendor/plugins/rspec/spec/spec/mocks/at_least_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/at_least_spec.rb
index 01b133dc3..0b76d3213 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/at_least_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/at_least_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
diff --git a/vendor/plugins/rspec/spec/spec/mocks/at_most_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/at_most_spec.rb
index f3c5e2150..744c9ff1b 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/at_most_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/at_most_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
diff --git a/vendor/plugins/rspec/spec/spec/mocks/bug_report_10260_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/bug_report_10260_spec.rb
index 2f7b5803d..783782f64 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/bug_report_10260_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/bug_report_10260_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "An RSpec Mock" do
it "should hide internals in its inspect representation" do
diff --git a/vendor/plugins/rspec/spec/spec/mocks/bug_report_10263_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/bug_report_10263_spec.rb
index e32192257..8a0bc505f 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/bug_report_10263_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/bug_report_10263_spec.rb
@@ -7,7 +7,10 @@ describe "Mock" do
@mock.should_receive(:msg) do |b|
b.should be_true #this call exposes the problem
end
- @mock.msg(false) rescue nil
+ begin
+ @mock.msg(false)
+ rescue Exception
+ end
end
specify "then the next example should behave as expected instead of saying" do
@@ -17,7 +20,7 @@ describe "Mock" do
begin
@mock.foobar
rescue Exception => e
- e.message.should == "Mock 'test mock' received unexpected message :foobar with (no args)"
+ e.message.should == "Mock \"test mock\" received unexpected message :foobar with (no args)"
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/bug_report_11545_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/bug_report_11545_spec.rb
index 212a50e9f..7eb7c6e45 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/bug_report_11545_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/bug_report_11545_spec.rb
@@ -1,13 +1,11 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
class LiarLiarPantsOnFire
- include Spec::MetaClass
- extend Spec::MetaClass
- def respond_to?(sym)
+ def respond_to?(sym, incl_private=false)
true
end
- def self.respond_to?(sym)
+ def self.respond_to?(sym, incl_private=false)
true
end
end
@@ -28,6 +26,7 @@ describe 'should_receive' do
end
it 'should cleanup after itself' do
- LiarLiarPantsOnFire.metaclass.instance_methods.should_not include("something")
+ (class << LiarLiarPantsOnFire; self; end).instance_methods.should_not include("something")
end
end
+
diff --git a/vendor/plugins/rspec/spec/spec/mocks/bug_report_15719_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/bug_report_15719_spec.rb
index 82d49ea97..efd7a7824 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/bug_report_15719_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/bug_report_15719_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
@@ -9,7 +9,7 @@ module Spec
m.should_receive(:bar).with("message")
lambda {
m.bar("different message")
- }.should raise_error(Spec::Mocks::MockExpectationError, %Q{Mock 'foo' expected :bar with ("message") but received it with ("different message")})
+ }.should raise_error(Spec::Mocks::MockExpectationError, %Q{Mock "foo" received :bar with unexpected arguments\n expected: ("message")\n got: ("different message")})
m.bar("message") # allows the spec to pass
end
@@ -22,7 +22,7 @@ module Spec
m.should_receive(:bar).with("message")
lambda {
m.bar("different message")
- }.should raise_error(Spec::Mocks::MockExpectationError, %Q{Mock 'foo' expected :bar with ("message") but received it with ("different message")})
+ }.should raise_error(Spec::Mocks::MockExpectationError, %Q{Mock "foo" received :bar with unexpected arguments\n expected: ("message")\n got: ("different message")})
m.bar("message") # allows the spec to pass
end
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/bug_report_7611_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/bug_report_7611_spec.rb
index 6c9705bcc..ff1ef8795 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/bug_report_7611_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/bug_report_7611_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Bug7611
class Foo
diff --git a/vendor/plugins/rspec/spec/spec/mocks/bug_report_7805_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/bug_report_7805_spec.rb
index f7edfac17..9a3d493d9 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/bug_report_7805_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/bug_report_7805_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Bug7805
#This is really a duplicate of 8302
diff --git a/vendor/plugins/rspec/spec/spec/mocks/bug_report_8165_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/bug_report_8165_spec.rb
index 7edc3c076..8d8d01772 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/bug_report_8165_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/bug_report_8165_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "An object where respond_to? is true and does not have method" do
# When should_receive(:sym) is sent to any object, the Proxy sends
diff --git a/vendor/plugins/rspec/spec/spec/mocks/bug_report_8302_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/bug_report_8302_spec.rb
index a41df43d8..55d8d3acd 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/bug_report_8302_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/bug_report_8302_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Bug8302
class Foo
diff --git a/vendor/plugins/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb
deleted file mode 100644
index 3993cbfc6..000000000
--- a/vendor/plugins/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb
+++ /dev/null
@@ -1,123 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module Mocks
- describe "failing MockArgumentConstraints" do
- before(:each) do
- @mock = mock("test mock")
- @reporter = Mock.new("reporter", :null_object => true)
- end
-
- after(:each) do
- @mock.rspec_reset
- end
-
- it "should reject non boolean" do
- @mock.should_receive(:random_call).with(boolean())
- lambda do
- @mock.random_call("false")
- end.should raise_error(MockExpectationError)
- end
-
- it "should reject non numeric" do
- @mock.should_receive(:random_call).with(an_instance_of(Numeric))
- lambda do
- @mock.random_call("1")
- end.should raise_error(MockExpectationError)
- end
-
- it "should reject non string" do
- @mock.should_receive(:random_call).with(an_instance_of(String))
- lambda do
- @mock.random_call(123)
- end.should raise_error(MockExpectationError)
- end
-
- it "should reject goose when expecting a duck" do
- @mock.should_receive(:random_call).with(duck_type(:abs, :div))
- lambda { @mock.random_call("I don't respond to :abs or :div") }.should raise_error(MockExpectationError)
- end
-
- it "should fail if regexp does not match submitted string" do
- @mock.should_receive(:random_call).with(/bcd/)
- lambda { @mock.random_call("abc") }.should raise_error(MockExpectationError)
- end
-
- it "should fail if regexp does not match submitted regexp" do
- @mock.should_receive(:random_call).with(/bcd/)
- lambda { @mock.random_call(/bcde/) }.should raise_error(MockExpectationError)
- end
-
- it "should fail for a hash w/ wrong values" do
- @mock.should_receive(:random_call).with(:a => "b", :c => "d")
- lambda do
- @mock.random_call(:a => "b", :c => "e")
- end.should raise_error(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(:a=>\"b\", :c=>\"e\"|:c=>\"e\", :a=>\"b\")\}\)/)
- end
-
- it "should fail for a hash w/ wrong keys" do
- @mock.should_receive(:random_call).with(:a => "b", :c => "d")
- lambda do
- @mock.random_call("a" => "b", "c" => "d")
- end.should raise_error(MockExpectationError, /Mock 'test mock' expected :random_call with \(\{(:a=>\"b\", :c=>\"d\"|:c=>\"d\", :a=>\"b\")\}\) but received it with \(\{(\"a\"=>\"b\", \"c\"=>\"d\"|\"c\"=>\"d\", \"a\"=>\"b\")\}\)/)
- end
-
- it "should match against a Matcher" do
- lambda do
- @mock.should_receive(:msg).with(equal(3))
- @mock.msg(37)
- end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (equal 3) but received it with (37)")
- end
-
- it "should fail no_args with one arg" do
- lambda do
- @mock.should_receive(:msg).with(no_args)
- @mock.msg(37)
- end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (no args) but received it with (37)")
- end
-
- it "should fail hash_including with missing key" do
- lambda do
- @mock.should_receive(:msg).with(hash_including(:a => 1))
- @mock.msg({})
- end.should raise_error(MockExpectationError, "Mock 'test mock' expected :msg with (hash_including(:a=>1)) but received it with ({})")
- end
-
- end
-
- describe "failing deprecated MockArgumentConstraints" do
- before(:each) do
- @mock = mock("test mock")
- @reporter = Mock.new("reporter", :null_object => true)
- Kernel.stub!(:warn)
- end
-
- after(:each) do
- @mock.rspec_reset
- end
-
- it "should reject non boolean" do
- @mock.should_receive(:random_call).with(:boolean)
- lambda do
- @mock.random_call("false")
- end.should raise_error(MockExpectationError)
- end
-
- it "should reject non numeric" do
- @mock.should_receive(:random_call).with(:numeric)
- lambda do
- @mock.random_call("1")
- end.should raise_error(MockExpectationError)
- end
-
- it "should reject non string" do
- @mock.should_receive(:random_call).with(:string)
- lambda do
- @mock.random_call(123)
- end.should raise_error(MockExpectationError)
- end
-
-
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/hash_including_matcher_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/hash_including_matcher_spec.rb
index 29fae3101..d757f619a 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/hash_including_matcher_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/hash_including_matcher_spec.rb
@@ -1,32 +1,90 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
- describe HashIncludingConstraint do
-
- it "should match the same hash" do
- hash_including(:a => 1).matches?(:a => 1).should be_true
- end
-
- it "should not match a non-hash" do
- hash_including(:a => 1).matches?(1).should_not be_true
- end
+ module ArgumentMatchers
+ describe HashIncludingMatcher do
+
+ it "should describe itself properly" do
+ HashIncludingMatcher.new(:a => 1).description.should == "hash_including(:a=>1)"
+ end
- it "should match a hash with extra stuff" do
- hash_including(:a => 1).matches?(:a => 1, :b => 2).should be_true
- end
-
- it "should not match a hash with a missing key" do
- hash_including(:a => 1).matches?(:b => 2).should_not be_true
- end
+ describe "passing" do
+ it "should match the same hash" do
+ hash_including(:a => 1).should == {:a => 1}
+ end
- it "should not match a hash with an incorrect value" do
- hash_including(:a => 1, :b => 2).matches?(:a => 1, :b => 3).should_not be_true
- end
+ it "should match a hash with extra stuff" do
+ hash_including(:a => 1).should == {:a => 1, :b => 2}
+ end
+
+ describe "when matching against other matchers" do
+ it "should match an int against anything()" do
+ hash_including(:a => anything, :b => 2).should == {:a => 1, :b => 2}
+ end
- it "should describe itself properly" do
- HashIncludingConstraint.new(:a => 1).description.should == "hash_including(:a=>1)"
- end
+ it "should match a string against anything()" do
+ hash_including(:a => anything, :b => 2).should == {:a => "1", :b => 2}
+ end
+ end
+
+ describe "when passed only keys or keys mixed with key/value pairs" do
+ it "should match if the key is present" do
+ hash_including(:a).should == {:a => 1, :b => 2}
+ end
+
+ it "should match if more keys are present" do
+ hash_including(:a, :b).should == {:a => 1, :b => 2, :c => 3}
+ end
+
+ it "should match a string against a given key" do
+ hash_including(:a).should == {:a => "1", :b => 2}
+ end
+
+ it "should match if passed one key and one key/value pair" do
+ hash_including(:a, :b => 2).should == {:a => 1, :b => 2}
+ end
+
+ it "should match if passed many keys and one key/value pair" do
+ hash_including(:a, :b, :c => 3).should == {:a => 1, :b => 2, :c => 3, :d => 4}
+ end
+
+ it "should match if passed many keys and many key/value pairs" do
+ hash_including(:a, :b, :c => 3, :e => 5).should == {:a => 1, :b => 2, :c => 3, :d => 4, :e => 5}
+ end
+ end
+ end
+
+ describe "failing" do
+ it "should not match a non-hash" do
+ hash_including(:a => 1).should_not == 1
+ end
+
+ it "should not match a hash with a missing key" do
+ hash_including(:a => 1).should_not == {:b => 2}
+ end
+
+ it "should not match a hash with a missing key" do
+ hash_including(:a).should_not == {:b => 2}
+ end
+
+ it "should not match an empty hash with a given key" do
+ hash_including(:a).should_not == {}
+ end
+
+ it "should not match a hash with a missing key when one pair is matching" do
+ hash_including(:a, :b => 2).should_not == {:b => 2}
+ end
+
+ it "should not match a hash with an incorrect value" do
+ hash_including(:a => 1, :b => 2).should_not == {:a => 1, :b => 3}
+ end
+
+ it "should not match when values are nil but keys are different" do
+ hash_including(:a => nil).should_not == {:b => nil}
+ end
+ end
+ end
end
- end
-end \ No newline at end of file
+ end
+end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/mock_ordering_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/mock_ordering_spec.rb
index 919da2970..4bd15478f 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/mock_ordering_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/mock_ordering_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Mocks
@@ -36,7 +36,7 @@ module Spec
@mock.should_receive(:two).ordered
lambda do
@mock.two
- end.should raise_error(MockExpectationError, "Mock 'test mock' received :two out of order")
+ end.should raise_error(MockExpectationError, "Mock \"test mock\" received :two out of order")
end
it "should fail if third call comes first" do
@@ -46,7 +46,7 @@ module Spec
@mock.one
lambda do
@mock.three
- end.should raise_error(MockExpectationError, "Mock 'test mock' received :three out of order")
+ end.should raise_error(MockExpectationError, "Mock \"test mock\" received :three out of order")
end
it "should fail if third call comes second" do
@@ -56,7 +56,7 @@ module Spec
@mock.one
lambda do
@mock.three
- end.should raise_error(MockExpectationError, "Mock 'test mock' received :three out of order")
+ end.should raise_error(MockExpectationError, "Mock \"test mock\" received :three out of order")
end
it "should ignore order of non ordered calls" do
@@ -78,6 +78,16 @@ module Spec
@mock.ignored_1
@mock.rspec_verify
end
+
+ it "should pass when duplicates exist" do
+ @mock.should_receive(:a).ordered
+ @mock.should_receive(:b).ordered
+ @mock.should_receive(:a).ordered
+
+ @mock.a
+ @mock.b
+ @mock.a
+ end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/mock_space_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/mock_space_spec.rb
index 23ffd01bc..878239307 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/mock_space_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/mock_space_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
require 'spec/mocks'
module Spec
diff --git a/vendor/plugins/rspec/spec/spec/mocks/mock_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/mock_spec.rb
index f6d377f7d..9c636a338 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/mock_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/mock_spec.rb
@@ -1,17 +1,33 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Mocks
describe Mock do
-
+ treats_method_missing_as_private :subject => Mock.new, :noop => false
+
before(:each) do
@mock = mock("test mock")
end
-
+
after(:each) do
@mock.rspec_reset
end
-
+
+ describe "deprecated #stub_everything method" do
+ before(:each) do
+ Kernel.stub!(:warn)
+ end
+
+ it "creates a mock that behaves as a null object" do
+ stub_everything.should be_null_object
+ end
+
+ it "provides deprecation warning" do
+ Kernel.should_receive(:warn).with(/DEPRECATION: stub_everything.* is deprecated./)
+ stub_everything
+ end
+ end
+
it "should report line number of expectation of unreceived message" do
expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
begin
@@ -22,92 +38,104 @@ module Spec
e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
end
end
-
+
+ it "should report line number of expectation of unreceived message after #should_receive after similar stub" do
+ @mock.stub!(:wont_happen)
+ expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
+ begin
+ @mock.rspec_verify
+ violated
+ rescue MockExpectationError => e
+ # NOTE - this regexp ended w/ $, but jruby adds extra info at the end of the line
+ e.backtrace[0].should match(/#{File.basename(__FILE__)}:#{expected_error_line}/)
+ end
+ end
+
it "should pass when not receiving message specified as not to be received" do
@mock.should_not_receive(:not_expected)
@mock.rspec_verify
end
-
+
it "should pass when receiving message specified as not to be received with different args" do
@mock.should_not_receive(:message).with("unwanted text")
@mock.should_receive(:message).with("other text")
@mock.message "other text"
@mock.rspec_verify
end
-
+
it "should fail when receiving message specified as not to be received" do
@mock.should_not_receive(:not_expected)
lambda {
@mock.not_expected
violated
- }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (no args) 0 times, but received it once")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no args) 0 times, but received it once")
end
-
+
it "should fail when receiving message specified as not to be received with args" do
@mock.should_not_receive(:not_expected).with("unexpected text")
lambda {
@mock.not_expected("unexpected text")
violated
- }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (\"unexpected text\") 0 times, but received it once")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (\"unexpected text\") 0 times, but received it once")
end
-
+
it "should pass when receiving message specified as not to be received with wrong args" do
@mock.should_not_receive(:not_expected).with("unexpected text")
@mock.not_expected "really unexpected text"
@mock.rspec_verify
end
-
+
it "should allow block to calculate return values" do
@mock.should_receive(:something).with("a","b","c").and_return { |a,b,c| c+b+a }
@mock.something("a","b","c").should == "cba"
@mock.rspec_verify
end
-
+
it "should allow parameter as return value" do
@mock.should_receive(:something).with("a","b","c").and_return("booh")
@mock.something("a","b","c").should == "booh"
@mock.rspec_verify
end
-
+
it "should return nil if no return value set" do
@mock.should_receive(:something).with("a","b","c")
@mock.something("a","b","c").should be_nil
@mock.rspec_verify
end
-
+
it "should raise exception if args don't match when method called" do
@mock.should_receive(:something).with("a","b","c").and_return("booh")
lambda {
@mock.something("a","d","c")
violated
- }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: (\"a\", \"d\", \"c\")")
end
-
+
it "should raise exception if args don't match when method called even when the method is stubbed" do
@mock.stub!(:something)
@mock.should_receive(:something).with("a","b","c")
lambda {
@mock.something("a","d","c")
@mock.rspec_verify
- }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: ([\"a\", \"d\", \"c\"])")
end
-
+
it "should raise exception if args don't match when method called even when using null_object" do
@mock = mock("test mock", :null_object => true)
@mock.should_receive(:something).with("a","b","c")
lambda {
@mock.something("a","d","c")
@mock.rspec_verify
- }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (\"a\", \"b\", \"c\")\n got: ([\"a\", \"d\", \"c\"])")
end
-
+
it "should fail if unexpected method called" do
lambda {
@mock.something("a","b","c")
violated
- }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :something with (\"a\", \"b\", \"c\")")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received unexpected message :something with (\"a\", \"b\", \"c\")")
end
-
+
it "should use block for expectation if provided" do
@mock.should_receive(:something) do | a, b |
a.should == "a"
@@ -117,35 +145,35 @@ module Spec
@mock.something("a", "b").should == "booh"
@mock.rspec_verify
end
-
+
it "should fail if expectation block fails" do
@mock.should_receive(:something) {| bool | bool.should be_true}
lambda {
@mock.something false
- }.should raise_error(MockExpectationError, /Mock 'test mock' received :something but passed block failed with: expected true, got false/)
+ }.should raise_error(MockExpectationError, /Mock "test mock" received :something but passed block failed with: expected true, got false/)
end
-
+
it "should fail right away when method defined as never is received" do
@mock.should_receive(:not_expected).never
lambda {
@mock.not_expected
- }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (no args) 0 times, but received it once")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no args) 0 times, but received it once")
end
-
+
it "should eventually fail when method defined as never is received" do
@mock.should_receive(:not_expected).never
lambda {
@mock.not_expected
- }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (no args) 0 times, but received it once")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" expected :not_expected with (no args) 0 times, but received it once")
end
-
+
it "should raise when told to" do
@mock.should_receive(:something).and_raise(RuntimeError)
lambda do
@mock.something
end.should raise_error(RuntimeError)
end
-
+
it "should raise passed an Exception instance" do
error = RuntimeError.new("error message")
@mock.should_receive(:something).and_raise(error)
@@ -153,28 +181,28 @@ module Spec
@mock.something
}.should raise_error(RuntimeError, "error message")
end
-
+
it "should raise RuntimeError with passed message" do
@mock.should_receive(:something).and_raise("error message")
lambda {
@mock.something
}.should raise_error(RuntimeError, "error message")
end
-
+
it "should not raise when told to if args dont match" do
@mock.should_receive(:something).with(2).and_raise(RuntimeError)
lambda {
@mock.something 1
}.should raise_error(MockExpectationError)
end
-
+
it "should throw when told to" do
@mock.should_receive(:something).and_throw(:blech)
lambda {
@mock.something
}.should throw_symbol(:blech)
end
-
+
it "should raise when explicit return and block constrained" do
lambda {
@mock.should_receive(:fruit) do |colour|
@@ -182,7 +210,7 @@ module Spec
end.and_return :apple
}.should raise_error(AmbiguousReturnError)
end
-
+
it "should ignore args on any args" do
@mock.should_receive(:something).at_least(:once).with(any_args)
@mock.something
@@ -191,35 +219,35 @@ module Spec
@mock.something [], {}, "joe", 7
@mock.rspec_verify
end
-
+
it "should fail on no args if any args received" do
@mock.should_receive(:something).with(no_args())
lambda {
@mock.something 1
- }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (no args) but received it with (1)")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (no args)\n got: (1)")
end
-
+
it "should fail when args are expected but none are received" do
@mock.should_receive(:something).with(1)
lambda {
@mock.something
- }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (1) but received it with (no args)")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received :something with unexpected arguments\n expected: (1)\n got: (no args)")
end
-
+
it "should return value from block by default" do
@mock.stub!(:method_that_yields).and_yield
@mock.method_that_yields { :returned_obj }.should == :returned_obj
@mock.rspec_verify
end
-
+
it "should yield 0 args to blocks that take a variable number of arguments" do
@mock.should_receive(:yield_back).with(no_args()).once.and_yield
a = nil
- @mock.yield_back {|*a|}
+ @mock.yield_back {|*x| a = x}
a.should == []
@mock.rspec_verify
end
-
+
it "should yield 0 args multiple times to blocks that take a variable number of arguments" do
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield.
and_yield
@@ -229,15 +257,15 @@ module Spec
b.should == [ [], [] ]
@mock.rspec_verify
end
-
+
it "should yield one arg to blocks that take a variable number of arguments" do
@mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
a = nil
- @mock.yield_back {|*a|}
+ @mock.yield_back {|*x| a = x}
a.should == [99]
@mock.rspec_verify
end
-
+
it "should yield one arg 3 times consecutively to blocks that take a variable number of arguments" do
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99).
and_yield(43).
@@ -248,15 +276,15 @@ module Spec
b.should == [[99], [43], ["something fruity"]]
@mock.rspec_verify
end
-
+
it "should yield many args to blocks that take a variable number of arguments" do
@mock.should_receive(:yield_back).with(no_args()).once.and_yield(99, 27, "go")
a = nil
- @mock.yield_back {|*a|}
+ @mock.yield_back {|*x| a = x}
a.should == [99, 27, "go"]
@mock.rspec_verify
end
-
+
it "should yield many args 3 times consecutively to blocks that take a variable number of arguments" do
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99, :green, "go").
and_yield("wait", :amber).
@@ -267,15 +295,15 @@ module Spec
b.should == [[99, :green, "go"], ["wait", :amber], ["stop", 12, :red]]
@mock.rspec_verify
end
-
+
it "should yield single value" do
@mock.should_receive(:yield_back).with(no_args()).once.and_yield(99)
a = nil
- @mock.yield_back {|a|}
+ @mock.yield_back {|x| a = x}
a.should == 99
@mock.rspec_verify
end
-
+
it "should yield single value 3 times consecutively" do
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield(99).
and_yield(43).
@@ -286,16 +314,16 @@ module Spec
b.should == [99, 43, "something fruity"]
@mock.rspec_verify
end
-
+
it "should yield two values" do
@mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
a, b = nil
- @mock.yield_back {|a,b|}
+ @mock.yield_back {|x,y| a=x; b=y}
a.should == 'wha'
b.should == 'zup'
@mock.rspec_verify
end
-
+
it "should yield two values 3 times consecutively" do
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
and_yield('not', 'down').
@@ -306,14 +334,14 @@ module Spec
c.should == [['wha', 'zup'], ['not', 'down'], [14, 65]]
@mock.rspec_verify
end
-
+
it "should fail when calling yielding method with wrong arity" do
@mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
lambda {
@mock.yield_back {|a|}
- }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"wha\", \"zup\"| to block with arity of 1")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" yielded |\"wha\", \"zup\"| to block with arity of 1")
end
-
+
it "should fail when calling yielding method consecutively with wrong arity" do
@mock.should_receive(:yield_back).once.with(no_args()).once.and_yield('wha', 'zup').
and_yield('down').
@@ -322,79 +350,79 @@ module Spec
a, b = nil
c = []
@mock.yield_back {|a,b| c << [a, b]}
- }.should raise_error(MockExpectationError, "Mock 'test mock' yielded |\"down\"| to block with arity of 2")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" yielded |\"down\"| to block with arity of 2")
end
-
+
it "should fail when calling yielding method without block" do
@mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
lambda {
@mock.yield_back
- }.should raise_error(MockExpectationError, "Mock 'test mock' asked to yield |[\"wha\", \"zup\"]| but no block was passed")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" asked to yield |[\"wha\", \"zup\"]| but no block was passed")
end
-
+
it "should be able to mock send" do
@mock.should_receive(:send).with(any_args)
@mock.send 'hi'
@mock.rspec_verify
end
-
+
it "should be able to raise from method calling yielding mock" do
@mock.should_receive(:yield_me).and_yield 44
-
+
lambda {
@mock.yield_me do |x|
raise "Bang"
end
}.should raise_error(StandardError, "Bang")
-
+
@mock.rspec_verify
end
-
+
it "should clear expectations after verify" do
@mock.should_receive(:foobar)
@mock.foobar
@mock.rspec_verify
lambda {
@mock.foobar
- }.should raise_error(MockExpectationError, "Mock 'test mock' received unexpected message :foobar with (no args)")
+ }.should raise_error(MockExpectationError, "Mock \"test mock\" received unexpected message :foobar with (no args)")
end
-
+
it "should restore objects to their original state on rspec_reset" do
mock = mock("this is a mock")
mock.should_receive(:blah)
mock.rspec_reset
mock.rspec_verify #should throw if reset didn't work
end
-
+
it "should work even after method_missing starts raising NameErrors instead of NoMethodErrors" do
# Object#method_missing throws either NameErrors or NoMethodErrors.
#
- # On a fresh ruby program Object#method_missing:
+ # On a fresh ruby program Object#method_missing:
# * raises a NoMethodError when called directly
# * raises a NameError when called indirectly
#
# Once Object#method_missing has been called at least once (on any object)
- # it starts behaving differently:
+ # it starts behaving differently:
# * raises a NameError when called directly
# * raises a NameError when called indirectly
#
# There was a bug in Mock#method_missing that relied on the fact
# that calling Object#method_missing directly raises a NoMethodError.
# This example tests that the bug doesn't exist anymore.
-
-
+
+
# Ensures that method_missing always raises NameErrors.
a_method_that_doesnt_exist rescue
-
-
+
+
@mock.should_receive(:foobar)
@mock.foobar
@mock.rspec_verify
-
+
lambda { @mock.foobar }.should_not raise_error(NameError)
lambda { @mock.foobar }.should raise_error(MockExpectationError)
end
-
+
it "should temporarily replace a method stub on a mock" do
@mock.stub!(:msg).and_return(:stub_value)
@mock.should_receive(:msg).with(:arg).and_return(:mock_value)
@@ -403,7 +431,22 @@ module Spec
@mock.msg.should equal(:stub_value)
@mock.rspec_verify
end
-
+
+ it "should not require a different signature to replace a method stub" do
+ @mock.stub!(:msg).and_return(:stub_value)
+ @mock.should_receive(:msg).and_return(:mock_value)
+ @mock.msg(:arg).should equal(:mock_value)
+ @mock.msg.should equal(:stub_value)
+ @mock.msg.should equal(:stub_value)
+ @mock.rspec_verify
+ end
+
+ it "should raise an error when a previously stubbed method has a negative expectation" do
+ @mock.stub!(:msg).and_return(:stub_value)
+ @mock.should_not_receive(:msg).and_return(:mock_value)
+ lambda {@mock.msg(:arg)}.should raise_error(MockExpectationError)
+ end
+
it "should temporarily replace a method stub on a non-mock" do
non_mock = Object.new
non_mock.stub!(:msg).and_return(:stub_value)
@@ -413,82 +456,139 @@ module Spec
non_mock.msg.should equal(:stub_value)
non_mock.rspec_verify
end
-
+
+ it "should return the stubbed value when no new value specified" do
+ @mock.stub!(:msg).and_return(:stub_value)
+ @mock.should_receive(:msg)
+ @mock.msg.should equal(:stub_value)
+ @mock.rspec_verify
+ end
+
+ it "should not mess with the stub's yielded values when also mocked" do
+ @mock.stub!(:yield_back).and_yield(:stub_value)
+ @mock.should_receive(:yield_back).and_yield(:mock_value)
+ @mock.yield_back{|v| v.should == :mock_value }
+ @mock.yield_back{|v| v.should == :stub_value }
+ @mock.rspec_verify
+ end
+
+ it "should yield multiple values after a similar stub" do
+ File.stub!(:open).and_yield(:stub_value)
+ File.should_receive(:open).and_yield(:first_call).and_yield(:second_call)
+ yielded_args = []
+ File.open {|v| yielded_args << v }
+ yielded_args.should == [:first_call, :second_call]
+ File.open {|v| v.should == :stub_value }
+ File.rspec_verify
+ end
+
it "should assign stub return values" do
mock = Mock.new('name', :message => :response)
mock.message.should == :response
end
-
+
end
-
+
describe "a mock message receiving a block" do
before(:each) do
@mock = mock("mock")
@calls = 0
end
-
+
def add_call
@calls = @calls + 1
end
-
+
it "should call the block after #should_receive" do
@mock.should_receive(:foo) { add_call }
-
+
+ @mock.foo
+
+ @calls.should == 1
+ end
+
+ it "should call the block after #should_receive after a similar stub" do
+ @mock.stub!(:foo).and_return(:bar)
+ @mock.should_receive(:foo) { add_call }
+
@mock.foo
-
+
@calls.should == 1
end
-
+
it "should call the block after #once" do
@mock.should_receive(:foo).once { add_call }
-
+
@mock.foo
-
+
@calls.should == 1
end
-
+
it "should call the block after #twice" do
@mock.should_receive(:foo).twice { add_call }
-
+
@mock.foo
@mock.foo
-
+
@calls.should == 2
end
-
+
it "should call the block after #times" do
@mock.should_receive(:foo).exactly(10).times { add_call }
-
+
(1..10).each { @mock.foo }
-
+
@calls.should == 10
end
-
+
it "should call the block after #any_number_of_times" do
@mock.should_receive(:foo).any_number_of_times { add_call }
-
+
(1..7).each { @mock.foo }
-
+
@calls.should == 7
end
-
- it "should call the block after #with" do
- @mock.should_receive(:foo).with(:arg) { add_call }
-
- @mock.foo(:arg)
-
- @calls.should == 1
- end
-
+
it "should call the block after #ordered" do
@mock.should_receive(:foo).ordered { add_call }
@mock.should_receive(:bar).ordered { add_call }
-
+
@mock.foo
@mock.bar
-
+
@calls.should == 2
end
end
+
+ describe 'string representation generated by #to_s' do
+ it 'should not contain < because that might lead to invalid HTML in some situations' do
+ mock = mock("Dog")
+ valid_html_str = "#{mock}"
+ valid_html_str.should_not include('<')
+ end
+ end
+
+ describe "mock created with no name" do
+ it "should not use a name in a failure message" do
+ mock = mock()
+ expect {mock.foo}.to raise_error(/Mock received/)
+ end
+
+ it "should respond to initially stubbed methods" do
+ mock = mock(:foo => "woo", :bar => "car")
+ mock.foo.should == "woo"
+ mock.bar.should == "car"
+ end
+ end
+
+ describe "==" do
+ it "sends '== self' to the comparison object" do
+ first = mock('first')
+ second = mock('second')
+
+ first.should_receive(:==).with(second)
+ second == first
+ end
+ end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/multiple_return_value_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/multiple_return_value_spec.rb
index 3e26b73f4..08a6b066c 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/multiple_return_value_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/multiple_return_value_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Mocks
@@ -20,7 +20,7 @@ module Spec
third = Object.new
@mock.message.should == @return_values[0]
@mock.message.should == @return_values[1]
- lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it twice")
+ lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock \"mock\" expected :message with (any args) 3 times, but received it twice")
end
it "should complain when there are too many calls" do
@@ -29,7 +29,7 @@ module Spec
@mock.message.should == @return_values[1]
@mock.message.should == @return_values[2]
@mock.message.should == @return_values[2]
- lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times")
+ lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock \"mock\" expected :message with (any args) 3 times, but received it 4 times")
end
end
@@ -51,7 +51,7 @@ module Spec
third = Object.new
@mock.message.should == @return_values[0]
@mock.message.should == @return_values[1]
- lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it twice")
+ lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock \"mock\" expected :message with (any args) 3 times, but received it twice")
end
it "should complain when there are too many calls" do
@@ -60,7 +60,7 @@ module Spec
@mock.message.should == @return_values[1]
@mock.message.should == @return_values[2]
@mock.message.should == @return_values[2]
- lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times")
+ lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock \"mock\" expected :message with (any args) 3 times, but received it 4 times")
end
end
@@ -79,7 +79,7 @@ module Spec
it "should fail when called less than the specified number" do
@mock.message.should equal(11)
- lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (no args) twice, but received it once")
+ lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock \"mock\" expected :message with (no args) twice, but received it once")
end
end
describe "a Mock expectation with multiple return values with a specified count larger than the number of values" do
@@ -97,7 +97,7 @@ module Spec
it "should fail when called less than the specified number" do
@mock.message.should equal(11)
- lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it once")
+ lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock \"mock\" expected :message with (any args) 3 times, but received it once")
end
it "should fail when called greater than the specified number" do
@@ -105,7 +105,7 @@ module Spec
@mock.message.should equal(22)
@mock.message.should equal(22)
@mock.message.should equal(22)
- lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock 'mock' expected :message with (any args) 3 times, but received it 4 times")
+ lambda { @mock.rspec_verify }.should raise_error(MockExpectationError, "Mock \"mock\" expected :message with (any args) 3 times, but received it 4 times")
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/null_object_mock_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/null_object_mock_spec.rb
index 57e8ca31c..8af6b49d7 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/null_object_mock_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/null_object_mock_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
@@ -36,5 +36,19 @@ module Spec
@mock.message(:unexpected_arg)
end
end
+
+ describe "#null_object?" do
+ it "should default to false" do
+ obj = mock('anything')
+ obj.should_not be_null_object
+ end
+ end
+
+ describe "#as_null_object" do
+ it "should set the object to null_object" do
+ obj = mock('anything').as_null_object
+ obj.should be_null_object
+ end
+ end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/once_counts_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/once_counts_spec.rb
index 2c15d5c2e..951298321 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/once_counts_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/once_counts_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
diff --git a/vendor/plugins/rspec/spec/spec/mocks/options_hash_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/options_hash_spec.rb
index 0bfab26d7..f82757827 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/options_hash_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/options_hash_spec.rb
@@ -1,44 +1,34 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
describe "calling :should_receive with an options hash" do
- it_should_behave_like "sandboxed rspec_options"
- attr_reader :reporter, :example_group
- before do
- @reporter = ::Spec::Runner::Reporter.new(options)
- @example_group = Class.new(::Spec::Example::ExampleGroup) do
- plugin_mock_framework
- describe("Some Examples")
- end
- reporter.add_example_group example_group
- end
-
it "should report the file and line submitted with :expected_from" do
- example_definition = example_group.it "spec" do
+ begin
mock = Spec::Mocks::Mock.new("a mock")
mock.should_receive(:message, :expected_from => "/path/to/blah.ext:37")
mock.rspec_verify
+ rescue Exception => e
+ ensure
+ e.backtrace.to_s.should =~ /\/path\/to\/blah.ext:37/m
end
- example = example_group.new(example_definition)
-
- reporter.should_receive(:example_finished) do |spec, error|
- error.backtrace.detect {|line| line =~ /\/path\/to\/blah.ext:37/}.should_not be_nil
- end
- example.execute(options, {})
end
it "should use the message supplied with :message" do
- example_definition = @example_group.it "spec" do
- mock = Spec::Mocks::Mock.new("a mock")
- mock.should_receive(:message, :message => "recebi nada")
- mock.rspec_verify
- end
- example = @example_group.new(example_definition)
- @reporter.should_receive(:example_finished) do |spec, error|
- error.message.should == "recebi nada"
- end
- example.execute(@options, {})
+ lambda {
+ m = Spec::Mocks::Mock.new("a mock")
+ m.should_receive(:message, :message => "recebi nada")
+ m.rspec_verify
+ }.should raise_error("recebi nada")
+ end
+
+ it "should use the message supplied with :message after a similar stub" do
+ lambda {
+ m = Spec::Mocks::Mock.new("a mock")
+ m.stub!(:message)
+ m.should_receive(:message, :message => "from mock")
+ m.rspec_verify
+ }.should raise_error("from mock")
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/partial_mock_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/partial_mock_spec.rb
index 25472557f..c19ecd304 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/partial_mock_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/partial_mock_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
@@ -11,7 +11,14 @@ module Spec
@object.should_receive(:foo)
lambda do
@object.rspec_verify
- end.should raise_error(Spec::Mocks::MockExpectationError, /Object/)
+ end.should raise_error(Spec::Mocks::MockExpectationError, /<Object:.*> expected/)
+ end
+
+ it "should name the class in the failure message when expectation is on class" do
+ Object.should_receive(:foo)
+ lambda do
+ Object.rspec_verify
+ end.should raise_error(Spec::Mocks::MockExpectationError, /<Object \(class\)>/)
end
it "should not conflict with @options in the object" do
@@ -21,11 +28,10 @@ module Spec
end
it "should_not_receive should mock out the method" do
- pending("example raises the expected error, yet fails")
@object.should_not_receive(:fuhbar)
lambda do
@object.fuhbar
- end.should raise_error(MockExpectationError, "Mock 'Object' expected :fuhbar with (no args) 0 times, but received it once")
+ end.should raise_error(MockExpectationError, /<Object:.*> expected :fuhbar with \(no args\) 0 times/)
end
it "should_not_receive should return a negative message expectation" do
@@ -66,7 +72,6 @@ module Spec
end
it "should_not_receive should also take a String argument" do
- pending("example raises the expected error, yet fails")
@object.should_not_receive('foobar')
lambda do
@object.foobar
@@ -74,10 +79,12 @@ module Spec
end
it "should use report nil in the error message" do
+ allow_message_expectations_on_nil
+
@this_will_resolve_to_nil.should_receive(:foobar)
lambda do
@this_will_resolve_to_nil.rspec_verify
- end.should raise_error(Spec::Mocks::MockExpectationError, /NilClass.*expected :foobar with/)
+ end.should raise_error(Spec::Mocks::MockExpectationError, /nil expected :foobar with/)
end
end
@@ -121,19 +128,34 @@ module Spec
it 'should keep public methods public' do
@object.should_receive(:public_method)
- @object.public_methods.should include('public_method')
+ with_ruby('1.9') do
+ @object.public_methods.should include(:public_method)
+ end
+ with_ruby('1.8') do
+ @object.public_methods.should include('public_method')
+ end
@object.public_method
end
it 'should keep private methods private' do
@object.should_receive(:private_method)
- @object.private_methods.should include('private_method')
+ with_ruby('1.9') do
+ @object.private_methods.should include(:private_method)
+ end
+ with_ruby('1.8') do
+ @object.private_methods.should include('private_method')
+ end
@object.public_method
end
it 'should keep protected methods protected' do
@object.should_receive(:protected_method)
- @object.protected_methods.should include('protected_method')
+ with_ruby('1.9') do
+ @object.protected_methods.should include(:protected_method)
+ end
+ with_ruby('1.8') do
+ @object.protected_methods.should include('protected_method')
+ end
@object.public_method
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb
index c857d8380..a69aa6ac0 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
diff --git a/vendor/plugins/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb
deleted file mode 100644
index 057af44fa..000000000
--- a/vendor/plugins/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb
+++ /dev/null
@@ -1,160 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module Mocks
- describe "mock argument constraints", :shared => true do
- before(:each) do
- @mock = Mock.new("test mock")
- Kernel.stub!(:warn)
- end
-
- after(:each) do
- @mock.rspec_verify
- end
- end
-
- describe Methods, "handling argument constraints with DEPRECATED symbols" do
- it_should_behave_like "mock argument constraints"
-
- it "should accept true as boolean" do
- @mock.should_receive(:random_call).with(:boolean)
- @mock.random_call(true)
- end
-
- it "should accept false as boolean" do
- @mock.should_receive(:random_call).with(:boolean)
- @mock.random_call(false)
- end
-
- it "should accept fixnum as numeric" do
- @mock.should_receive(:random_call).with(:numeric)
- @mock.random_call(1)
- end
-
- it "should accept float as numeric" do
- @mock.should_receive(:random_call).with(:numeric)
- @mock.random_call(1.5)
- end
-
- it "should accept string as anything" do
- @mock.should_receive(:random_call).with("a", :anything, "c")
- @mock.random_call("a", "whatever", "c")
- end
-
- it "should match string" do
- @mock.should_receive(:random_call).with(:string)
- @mock.random_call("a string")
- end
-
- it "should match no args against any_args" do
- @mock.should_receive(:random_call).with(:any_args)
- @mock.random_call("a string")
- end
-
- it "should match no args against no_args" do
- @mock.should_receive(:random_call).with(:no_args)
- @mock.random_call
- end
- end
-
- describe Methods, "handling argument constraints" do
- it_should_behave_like "mock argument constraints"
-
- it "should accept true as boolean()" do
- @mock.should_receive(:random_call).with(boolean())
- @mock.random_call(true)
- end
-
- it "should accept false as boolean()" do
- @mock.should_receive(:random_call).with(boolean())
- @mock.random_call(false)
- end
-
- it "should accept fixnum as an_instance_of(Numeric)" do
- @mock.should_receive(:random_call).with(an_instance_of(Numeric))
- @mock.random_call(1)
- end
-
- it "should accept float as an_instance_of(Numeric)" do
- @mock.should_receive(:random_call).with(an_instance_of(Numeric))
- @mock.random_call(1.5)
- end
-
- it "should accept string as anything()" do
- @mock.should_receive(:random_call).with("a", anything(), "c")
- @mock.random_call("a", "whatever", "c")
- end
-
- it "should match duck type with one method" do
- @mock.should_receive(:random_call).with(duck_type(:length))
- @mock.random_call([])
- end
-
- it "should match duck type with two methods" do
- @mock.should_receive(:random_call).with(duck_type(:abs, :div))
- @mock.random_call(1)
- end
-
- it "should match no args against any_args()" do
- @mock.should_receive(:random_call).with(any_args)
- @mock.random_call()
- end
-
- it "should match one arg against any_args()" do
- @mock.should_receive(:random_call).with(any_args)
- @mock.random_call("a string")
- end
-
- it "should match no args against no_args()" do
- @mock.should_receive(:random_call).with(no_args)
- @mock.random_call()
- end
-
- it "should match hash with hash_including same hash" do
- @mock.should_receive(:random_call).with(hash_including(:a => 1))
- @mock.random_call(:a => 1)
- end
-
- end
-
- describe Methods, "handling non-constraint arguments" do
-
- it "should match non special symbol (can be removed when deprecated symbols are removed)" do
- @mock.should_receive(:random_call).with(:some_symbol)
- @mock.random_call(:some_symbol)
- end
-
- it "should match string against regexp" do
- @mock.should_receive(:random_call).with(/bcd/)
- @mock.random_call("abcde")
- end
-
- it "should match regexp against regexp" do
- @mock.should_receive(:random_call).with(/bcd/)
- @mock.random_call(/bcd/)
- end
-
- it "should match against a hash submitted and received by value" do
- @mock.should_receive(:random_call).with(:a => "a", :b => "b")
- @mock.random_call(:a => "a", :b => "b")
- end
-
- it "should match against a hash submitted by reference and received by value" do
- opts = {:a => "a", :b => "b"}
- @mock.should_receive(:random_call).with(opts)
- @mock.random_call(:a => "a", :b => "b")
- end
-
- it "should match against a hash submitted by value and received by reference" do
- opts = {:a => "a", :b => "b"}
- @mock.should_receive(:random_call).with(:a => "a", :b => "b")
- @mock.random_call(opts)
- end
-
- it "should match against a Matcher" do
- @mock.should_receive(:msg).with(equal(37))
- @mock.msg(37)
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/precise_counts_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/precise_counts_spec.rb
index ba3898943..5b64ef281 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/precise_counts_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/precise_counts_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
diff --git a/vendor/plugins/rspec/spec/spec/mocks/record_messages_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/record_messages_spec.rb
index ec247726d..bed2fbff6 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/record_messages_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/record_messages_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
+require 'spec_helper'
module Spec
module Mocks
diff --git a/vendor/plugins/rspec/spec/spec/mocks/stub_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/stub_spec.rb
index d6e23d71e..e0b7b2640 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/stub_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/stub_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
@@ -14,12 +14,17 @@ module Spec
end
end
@instance = @class.new
+ @stub = Object.new
end
- it "should return expected value when expected message is received" do
- @instance.stub!(:msg).and_return(:return_value)
- @instance.msg.should equal(:return_value)
- @instance.rspec_verify
+ [:stub!, :stub].each do |method|
+ context "using #{method}" do
+ it "should return expected value when expected message is received" do
+ @instance.send(method, :msg).and_return(:return_value)
+ @instance.msg.should equal(:return_value)
+ @instance.rspec_verify
+ end
+ end
end
it "should ignore when expected message is received" do
@@ -44,7 +49,13 @@ module Spec
@instance.rspec_verify
end.should_not raise_error
end
-
+
+ it "should handle multiple stubbed methods" do
+ @instance.stub!(:msg1 => 1, :msg2 => 2)
+ @instance.msg1.should == 1
+ @instance.msg2.should == 2
+ end
+
it "should clear itself when verified" do
@instance.stub!(:this_should_go).and_return(:blah)
@instance.this_should_go.should == :blah
@@ -79,7 +90,7 @@ module Spec
@instance.rspec_verify
@instance.existing_instance_method.should equal(:original_value)
end
-
+
it "should revert to original class method if there is one" do
@class.existing_class_method.should equal(:original_value)
@class.stub!(:existing_class_method).and_return(:mock_value)
@@ -104,7 +115,7 @@ module Spec
current_value.should == [:yielded_value, :another_value]
@instance.rspec_verify
end
-
+
it "should yield a specified object and return another specified object" do
yielded_obj = mock("my mock")
yielded_obj.should_receive(:foo).with(:bar)
@@ -118,20 +129,26 @@ module Spec
@mock.something
end.should throw_symbol(:up)
end
-
+
it "should override a pre-existing stub" do
@stub.stub!(:existing_instance_method).and_return(:updated_stub_value)
@stub.existing_instance_method.should == :updated_stub_value
end
-
+
it "should limit " do
@stub.stub!(:foo).with("bar")
@stub.should_receive(:foo).with("baz")
@stub.foo("bar")
@stub.foo("baz")
end
+
+ it "calculates return value by executing block passed to #and_return" do
+ @mock.stub!(:something).with("a","b","c").and_return { |a,b,c| c+b+a }
+ @mock.something("a","b","c").should == "cba"
+ @mock.rspec_verify
+ end
end
-
+
describe "A method stub with args" do
before(:each) do
@stub = Object.new
@@ -171,10 +188,15 @@ module Spec
@stub.foo("other")
end.should raise_error
end
-
+
it "should support options" do
@stub.stub!(:foo, :expected_from => "bar")
end
+
+ it "should use 'Stub' in the failure message" do
+ stub = stub('name')
+ expect {stub.foo}.to raise_error(/Stub "name" received/)
+ end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/mocks/twice_counts_spec.rb b/vendor/plugins/rspec/spec/spec/mocks/twice_counts_spec.rb
index d07e45736..4538eb8f9 100644
--- a/vendor/plugins/rspec/spec/spec/mocks/twice_counts_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/mocks/twice_counts_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Mocks
diff --git a/vendor/plugins/rspec/spec/spec/package/bin_spec_spec.rb b/vendor/plugins/rspec/spec/spec/package/bin_spec_spec.rb
index 44bfd96a0..6628fad72 100644
--- a/vendor/plugins/rspec/spec/spec/package/bin_spec_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/package/bin_spec_spec.rb
@@ -1,14 +1,16 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require File.dirname(__FILE__) + '/../../ruby_forker'
+require 'spec_helper'
+require 'ruby_forker'
describe "The bin/spec script" do
include RubyForker
it "should have no warnings" do
- pending "Hangs on JRuby" if PLATFORM =~ /java/
- spec_path = "#{File.dirname(__FILE__)}/../../../bin/spec"
-
- output = ruby "-w #{spec_path} --help 2>&1"
+ output = ruby "-w -Ilib bin/spec --help"
output.should_not =~ /warning/n
end
+
+ it "should show the help w/ no args" do
+ output = ruby "-w -Ilib bin/spec"
+ output.should =~ /^Usage: spec/
+ end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/class_and_argument_parser_spec.rb b/vendor/plugins/rspec/spec/spec/runner/class_and_argument_parser_spec.rb
index b4e9e7f53..1168818f0 100644
--- a/vendor/plugins/rspec/spec/spec/runner/class_and_argument_parser_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/class_and_argument_parser_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Runner
diff --git a/vendor/plugins/rspec/spec/spec/runner/command_line_spec.rb b/vendor/plugins/rspec/spec/spec/runner/command_line_spec.rb
index 3c3be8cea..c22b30668 100644
--- a/vendor/plugins/rspec/spec/spec/runner/command_line_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/command_line_spec.rb
@@ -1,146 +1,140 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Runner
describe CommandLine, ".run" do
- it_should_behave_like "sandboxed rspec_options"
- attr_reader :options, :err, :out
- before do
- @err = options.error_stream
- @out = options.output_stream
- end
-
- it "should run directory" do
- file = File.dirname(__FILE__) + '/../../../examples/pure'
- Spec::Runner::CommandLine.run(OptionParser.parse([file,"-p","**/*.rb"], @err, @out))
+ with_sandboxed_options do
+ attr_reader :err, :out
+ before do
+ @err = options.error_stream
+ @out = options.output_stream
+ end
+
+ it "should run directory" do
+ file = File.dirname(__FILE__) + '/../../../examples/passing'
+ run_with(OptionParser.parse([file,"-p","**/*_spec.rb,**/*_example.rb"], @err, @out))
- @out.rewind
- @out.read.should =~ /\d+ examples, 0 failures, 3 pending/n
- end
+ @out.rewind
+ @out.read.should =~ /\d+ examples, 0 failures, 3 pending/n
+ end
- it "should run file" do
- file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb'
- Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out))
+ it "should run file" do
+ file = File.dirname(__FILE__) + '/../../../examples/failing/predicate_example.rb'
+ run_with(OptionParser.parse([file], @err, @out))
- @out.rewind
- @out.read.should =~ /2 examples, 1 failure/n
- end
+ @out.rewind
+ @out.read.should =~ /3 examples, 2 failures/n
+ end
- it "should raise when file does not exist" do
- file = File.dirname(__FILE__) + '/doesntexist'
+ it "should raise when file does not exist" do
+ file = File.dirname(__FILE__) + '/doesntexist'
- lambda {
- Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out))
- }.should raise_error
- end
+ lambda {
+ Spec::Runner::CommandLine.run(OptionParser.parse([file], @err, @out))
+ }.should raise_error
+ end
- it "should return true when in --generate-options mode" do
- # NOTE - this used to say /dev/null but jruby hangs on that for some reason
- Spec::Runner::CommandLine.run(
- OptionParser.parse(['--generate-options', '/tmp/foo'], @err, @out)
- ).should be_true
- end
+ it "should return true when in --generate-options mode" do
+ # NOTE - this used to say /dev/null but jruby hangs on that for some reason
+ Spec::Runner::CommandLine.run(
+ OptionParser.parse(['--generate-options', '/tmp/foo'], @err, @out)
+ ).should be_true
+ end
- it "should dump even if Interrupt exception is occurred" do
- example_group = Class.new(::Spec::Example::ExampleGroup) do
- describe("example_group")
- it "no error" do
- end
+ it "should dump even if Interrupt exception is occurred" do
+ example_group = Class.new(::Spec::Example::ExampleGroup) do
+ describe("example_group")
+ it "no error" do
+ end
- it "should interrupt" do
- raise Interrupt, "I'm interrupting"
+ it "should interrupt" do
+ raise Interrupt, "I'm interrupting"
+ end
end
- end
- options = ::Spec::Runner::Options.new(@err, @out)
- ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
- options.reporter.should_receive(:dump)
- options.add_example_group(example_group)
+ options = ::Spec::Runner::Options.new(@err, @out)
+ ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
+ options.reporter.should_receive(:dump)
+ options.add_example_group(example_group)
- Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
- end
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
+ end
- it "should heckle when options have heckle_runner" do
- example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do
- it "no error" do
+ it "should heckle when options have heckle_runner" do
+ example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do
+ it "no error" do
+ end
end
- end
- options = ::Spec::Runner::Options.new(@err, @out)
- ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
- options.add_example_group example_group
+ options = ::Spec::Runner::Options.new(@err, @out)
+ ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
+ options.add_example_group example_group
- heckle_runner = mock("heckle_runner")
- heckle_runner.should_receive(:heckle_with)
- $rspec_mocks.__send__(:mocks).delete(heckle_runner)
+ heckle_runner = mock("heckle_runner")
+ heckle_runner.should_receive(:heckle_with)
+ $rspec_mocks.__send__(:mocks).delete(heckle_runner)
- options.heckle_runner = heckle_runner
- options.add_example_group(example_group)
+ options.heckle_runner = heckle_runner
+ options.add_example_group(example_group)
- Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
- heckle_runner.rspec_verify
- end
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
+ heckle_runner.rspec_verify
+ end
- it "should run examples backwards if options.reverse is true" do
- options = ::Spec::Runner::Options.new(@err, @out)
- ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
- options.reverse = true
+ it "should run examples backwards if options.reverse is true" do
+ options = ::Spec::Runner::Options.new(@err, @out)
+ ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
+ options.reverse = true
- b1 = Class.new(Spec::Example::ExampleGroup)
- b2 = Class.new(Spec::Example::ExampleGroup)
+ b1 = Class.new(Spec::Example::ExampleGroup)
+ b2 = Class.new(Spec::Example::ExampleGroup)
- b2.should_receive(:run).ordered
- b1.should_receive(:run).ordered
+ b2.should_receive(:run).ordered
+ b1.should_receive(:run).ordered
- options.add_example_group(b1)
- options.add_example_group(b2)
+ options.add_example_group(b1)
+ options.add_example_group(b2)
- Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
- end
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
+ end
- it "should pass its ExampleGroup to the reporter" do
- example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do
- it "should" do
+ it "should pass its ExampleGroup to the reporter" do
+ example_group = describe("example_group") do
+ it "should" do
+ end
end
- end
- options = ::Spec::Runner::Options.new(@err, @out)
- options.add_example_group(example_group)
+ options = ::Spec::Runner::Options.new(@err, @out)
+ options.add_example_group(example_group)
- ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
- options.reporter.should_receive(:add_example_group).with(example_group)
+ ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
+ options.reporter.should_receive(:add_example_group).with(Spec::Example::ExampleGroupProxy.new(example_group))
- Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
- end
-
- it "runs only selected Examples when options.examples is set" do
- options = ::Spec::Runner::Options.new(@err, @out)
- ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
-
- options.examples << "example_group should"
- should_has_run = false
- should_not_has_run = false
- example_group = Class.new(::Spec::Example::ExampleGroup).describe("example_group") do
- it "should" do
- should_has_run = true
- end
- it "should not" do
- should_not_has_run = true
- end
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
end
- options.reporter.should_receive(:add_example_group).with(example_group)
+ it "runs only selected Examples when options.examples is set" do
+ options = ::Spec::Runner::Options.new(@err, @out)
+ ::Spec::Runner::Options.should_receive(:new).with(@err, @out).and_return(options)
+
+ options.examples << "example group expected example"
+ expected_example_was_run = false
+ unexpected_example_was_run = false
+ example_group = describe("example group") do
+ it "expected example" do
+ expected_example_was_run = true
+ end
+ it "unexpected example" do
+ unexpected_example_was_run = true
+ end
+ end
- options.add_example_group example_group
- Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
+ options.reporter.should_receive(:add_example_group).with(Spec::Example::ExampleGroupProxy.new(example_group))
- should_has_run.should be_true
- should_not_has_run.should be_false
- end
+ options.add_example_group example_group
+ run_with(options)
- it "sets Spec.run to true" do
- ::Spec.run = false
- ::Spec.should_not be_run
- Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
- ::Spec.should be_run
+ expected_example_was_run.should be_true
+ unexpected_example_was_run.should be_false
+ end
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/drb_command_line_spec.rb b/vendor/plugins/rspec/spec/spec/runner/drb_command_line_spec.rb
index 760ec37a9..0c17a7f68 100644
--- a/vendor/plugins/rspec/spec/spec/runner/drb_command_line_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/drb_command_line_spec.rb
@@ -1,92 +1,107 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Runner
- describe DrbCommandLine, "without running local server" do
- unless Config::CONFIG['ruby_install_name'] == 'jruby'
- it "should print error when there is no running local server" do
- err = StringIO.new
- out = StringIO.new
- DrbCommandLine.run(OptionParser.parse(['--version'], err, out))
-
- err.rewind
- err.read.should =~ /No server is running/
- end
- end
- end
+ unless jruby?
+ describe DrbCommandLine do
- class DrbCommandLineSpec < ::Spec::Example::ExampleGroup
- describe DrbCommandLine, "with local server"
+ context "without server running" do
+ it "prints error" do
+ err = out = StringIO.new
+ DrbCommandLine.run(OptionParser.parse(['--version'], err, out))
- class CommandLineForSpec
- def self.run(argv, stderr, stdout)
- exit Spec::Runner::CommandLine.run(OptionParser.parse(argv, stderr, stdout))
- end
- end
-
- unless Config::CONFIG['ruby_install_name'] == 'jruby'
- before(:all) do
- DRb.start_service("druby://localhost:8989", CommandLineForSpec)
- @@drb_example_file_counter = 0
- end
+ err.rewind
+ err.read.should =~ /No server is running/
+ end
+
+ it "returns nil" do
+ err = out = StringIO.new
+ result = DrbCommandLine.run(OptionParser.parse(['--version'], err, out))
+ result.should be_false
+ end
+ end
- before(:each) do
- create_dummy_spec_file
- @@drb_example_file_counter = @@drb_example_file_counter + 1
- end
+ context "with server running" do
+ class ::CommandLineForDrbSpec
+ def self.run(argv, stderr, stdout)
+ orig_options = Spec::Runner.options
+ tmp_options = Spec::Runner::OptionParser.parse(argv, stderr, stdout)
+ Spec::Runner.use tmp_options
+ Spec::Runner::CommandLine.run(tmp_options)
+ ensure
+ Spec::Runner.use orig_options
+ end
+ end
- after(:each) do
- File.delete(@dummy_spec_filename)
- end
+ before(:all) do
+ DRb.start_service("druby://127.0.0.1:8989", ::CommandLineForDrbSpec)
+ @@drb_example_file_counter = 0
+ end
- after(:all) do
- DRb.stop_service
- end
+ before(:each) do
+ create_dummy_spec_file
+ @@drb_example_file_counter = @@drb_example_file_counter + 1
+ end
- it "should run against local server" do
- out = run_spec_via_druby(['--version'])
- out.should =~ /RSpec/n
- end
+ after(:each) do
+ File.delete(@dummy_spec_filename)
+ end
- it "should output green colorized text when running with --colour option" do
- out = run_spec_via_druby(["--colour", @dummy_spec_filename])
- out.should =~ /\e\[32m/n
- end
+ after(:all) do
+ DRb.stop_service
+ end
- it "should output red colorized text when running with -c option" do
- out = run_spec_via_druby(["-c", @dummy_spec_filename])
- out.should =~ /\e\[31m/n
- end
+ it "returns true" do
+ err = out = StringIO.new
+ result = DrbCommandLine.run(OptionParser.parse(['--version'], err, out))
+ result.should be_true
+ end
- def create_dummy_spec_file
- @dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + "/_dummy_spec#{@@drb_example_file_counter}.rb"
- File.open(@dummy_spec_filename, 'w') do |f|
- f.write %{
- describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do
- it "should be output with green bar" do
- true.should be_true
- end
+ it "should run against local server" do
+ out = run_spec_via_druby(['--version'])
+ out.should =~ /rspec \d+\.\d+\.\d+.*/n
+ end
+
+ it "should output green colorized text when running with --colour option" do
+ out = run_spec_via_druby(["--colour", @dummy_spec_filename])
+ out.should =~ /\e\[32m/n
+ end
+
+ it "should output red colorized text when running with -c option" do
+ out = run_spec_via_druby(["-c", @dummy_spec_filename])
+ out.should =~ /\e\[31m/n
+ end
+
+ def create_dummy_spec_file
+ @dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + "/_dummy_spec#{@@drb_example_file_counter}.rb"
+ File.open(@dummy_spec_filename, 'w') do |f|
+ f.write %{
+ describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do
+ it "should be output with green bar" do
+ true.should be_true
+ end
- it "should be output with red bar" do
- violated("I want to see a red bar!")
+ it "should be output with red bar" do
+ violated("I want to see a red bar!")
+ end
end
- end
- }
+ }
+ end
end
- end
- def run_spec_via_druby(argv)
- err, out = StringIO.new, StringIO.new
- out.instance_eval do
- def tty?; true end
+ def run_spec_via_druby(argv)
+ err, out = StringIO.new, StringIO.new
+ out.instance_eval do
+ def tty?; true end
+ end
+ options = ::Spec::Runner::Options.new(err, out)
+ options.argv = argv
+ Spec::Runner::DrbCommandLine.run(options)
+ out.rewind; out.read
end
- options = ::Spec::Runner::Options.new(err, out)
- options.argv = argv
- Spec::Runner::DrbCommandLine.run(options)
- out.rewind; out.read
end
- end
+ end
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/execution_context_spec.rb b/vendor/plugins/rspec/spec/spec/runner/execution_context_spec.rb
deleted file mode 100644
index 2c8c23f18..000000000
--- a/vendor/plugins/rspec/spec/spec/runner/execution_context_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "ExecutionContext" do
-
- it "should provide duck_type()" do
- dt = duck_type(:length)
- dt.should be_an_instance_of(Spec::Mocks::DuckTypeArgConstraint)
- dt.matches?([]).should be_true
- end
-
- it "should provide hash_including" do
- hi = hash_including(:a => 1)
- hi.should be_an_instance_of(Spec::Mocks::HashIncludingConstraint)
- hi.matches?(:a => 1).should be_true
- end
-
- it "should violate when violated()" do
- lambda do
- violated
- end.should raise_error(Spec::Expectations::ExpectationNotMetError)
- end
-
- it "should provide mock()" do
- mock("thing").should be_an_instance_of(Spec::Mocks::Mock)
- end
-
- it "should provide stub()" do
- thing_stub = stub("thing").should be_an_instance_of(Spec::Mocks::Mock)
- end
-
- it "should add method stubs to stub()" do
- thing_stub = stub("thing", :a => "A", :b => "B")
- thing_stub.a.should == "A"
- thing_stub.b.should == "B"
- end
-
-end
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
index e54cdb09f..b390131ad 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require 'spec_helper'
require 'spec/runner/formatter/failing_example_groups_formatter'
module Spec
@@ -15,11 +15,11 @@ module Spec
end
it "should add example name for each failure" do
- formatter.add_example_group(Class.new(ExampleGroup).describe("b 1"))
- formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new))
- formatter.add_example_group(Class.new(ExampleGroup).describe("b 2"))
- formatter.example_failed("e 2", nil, Reporter::Failure.new(nil, RuntimeError.new))
- formatter.example_failed("e 3", nil, Reporter::Failure.new(nil, RuntimeError.new))
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(Class.new(::Spec::Example::ExampleGroupDouble).describe("b 1")))
+ formatter.example_failed("e 1", nil, Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(Class.new(::Spec::Example::ExampleGroupDouble).describe("b 2")))
+ formatter.example_failed("e 2", nil, Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
+ formatter.example_failed("e 3", nil, Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
io.string.should include("b 1")
io.string.should include("b 2")
end
@@ -29,14 +29,14 @@ module Spec
child_example_group = Class.new(parent_example_group).describe("#child_method")
grand_child_example_group = Class.new(child_example_group).describe("GrandChild")
- formatter.add_example_group(grand_child_example_group)
- formatter.example_failed("failure", nil, Reporter::Failure.new(nil, RuntimeError.new))
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grand_child_example_group))
+ formatter.example_failed("failure", nil, ::Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
io.string.should == "Parent#child_method GrandChild\n"
end
it "should remove druby url, which is used by Spec::Distributed" do
- @formatter.add_example_group(Class.new(ExampleGroup).describe("something something (druby://99.99.99.99:99)"))
- @formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new))
+ @formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(Class.new(::Spec::Example::ExampleGroupDouble).describe("something something (druby://99.99.99.99:99)")))
+ @formatter.example_failed("e 1", nil, ::Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
io.string.should == "something something\n"
end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb
index fda64f95f..76d03fa39 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../../spec_helper'
+require 'spec_helper'
require 'spec/runner/formatter/failing_examples_formatter'
module Spec
@@ -12,14 +12,14 @@ module Spec
end
it "should add example name for each failure" do
- example_group_1 = Class.new(ExampleGroup).describe("A")
+ example_group_1 = Class.new(::Spec::Example::ExampleGroupDouble).describe("A")
example_group_2 = Class.new(example_group_1).describe("B")
- @formatter.add_example_group(example_group_1)
- @formatter.example_failed(example_group_1.it("a1"){}, nil, Reporter::Failure.new(nil, RuntimeError.new))
- @formatter.add_example_group(example_group_2)
- @formatter.example_failed(example_group_2.it("b2"){}, nil, Reporter::Failure.new(nil, RuntimeError.new))
- @formatter.example_failed(example_group_2.it("b3"){}, nil, Reporter::Failure.new(nil, RuntimeError.new))
+ @formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group_1))
+ @formatter.example_failed(example_group_1.it("a1"){}, nil, ::Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
+ @formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group_2))
+ @formatter.example_failed(example_group_2.it("b2"){}, nil, ::Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
+ @formatter.example_failed(example_group_2.it("b3"){}, nil, ::Spec::Runner::Reporter::Failure.new("g", nil, RuntimeError.new))
@io.string.should eql(<<-EOF
A a1
A B b2
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html
deleted file mode 100644
index 9cc458fdb..000000000
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html
+++ /dev/null
@@ -1,365 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>RSpec results</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Expires" content="-1" />
- <meta http-equiv="Pragma" content="no-cache" />
- <style type="text/css">
- body {
- margin: 0;
- padding: 0;
- background: #fff;
- font-size: 80%;
- }
- </style>
-</head>
-<body>
-<div class="rspec-report">
- <script type="text/javascript">
- // <![CDATA[
-function moveProgressBar(percentDone) {
- document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
- document.getElementById(element_id).style.background = '#C40D0D';
- document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
- if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
- {
- document.getElementById(element_id).style.background = '#FAF834';
- document.getElementById(element_id).style.color = '#000000';
- }
- else
- {
- document.getElementById(element_id).style.background = '#FAF834';
- document.getElementById(element_id).style.color = '#000000';
- }
-}
-
- // ]]>
- </script>
- <style type="text/css">
-#rspec-header {
- background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
- margin: 0px 10px 0px 10px;
- padding: 10px;
- font-family: "Lucida Grande", Helvetica, sans-serif;
- font-size: 1.8em;
-}
-
-#summary {
- margin: 0; padding: 5px 10px;
- font-family: "Lucida Grande", Helvetica, sans-serif;
- text-align: right;
- position: absolute;
- top: 0px;
- right: 0px;
-}
-
-#summary p {
- margin: 0 0 0 2px;
-}
-
-#summary #totals {
- font-size: 1.2em;
-}
-
-.example_group {
- margin: 0 10px 5px;
- background: #fff;
-}
-
-dl {
- margin: 0; padding: 0 0 5px;
- font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
- padding: 3px;
- background: #65C400;
- color: #fff;
- font-weight: bold;
-}
-
-dd {
- margin: 5px 0 5px 5px;
- padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
- border-left: 5px solid #65C400;
- border-bottom: 1px solid #65C400;
- background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
- border-left: 5px solid #C20000;
- border-bottom: 1px solid #C20000;
- color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
- border-left: 5px solid #FAF834;
- border-bottom: 1px solid #FAF834;
- background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
- border-left: 5px solid #0000C2;
- border-bottom: 1px solid #0000C2;
- color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
- color: #000;
- font-size: 12px;
-}
-
-a {
- color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
- font-size: 12px;
- font-family: monospace;
- color: white;
- background-color: black;
- padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
- width: 75px;
- padding: 0.1em 1em 0.2em 0;
- color: #000000;
- background-color: #FFFBD3;
-}
-
- </style>
-
-<div id="rspec-header">
- <h1>RSpec Results</h1>
-
- <div id="summary">
- <p id="totals">&nbsp;</p>
- <p id="duration">&nbsp;</p>
- </div>
-</div>
-
-<div class="results">
-<div class="example_group">
- <dl>
- <dt id="example_group_1">Mocker</dt>
- <script type="text/javascript">moveProgressBar('5.8');</script>
- <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
- <script type="text/javascript">makeRed('rspec-header');</script>
- <script type="text/javascript">makeRed('example_group_1');</script>
- <script type="text/javascript">moveProgressBar('11.7');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should fail when expected message not received</span>
- <div class="failure" id="failure_1">
- <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
- <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</span>
-<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span> <span class="keyword">end</span>
-<span class="linenum">15</span> </code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('17.6');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should fail when messages are received out of order</span>
- <div class="failure" id="failure_2">
- <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
- <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span> <span class="keyword">end</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('23.5');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
- <div class="failure" id="failure_3">
- <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
- <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</span>
-<span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span>
-<span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span>
-<span class="linenum">30</span> <span class="keyword">end</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('29.4');</script>
- <dd class="spec pending_fixed">
- <span class="failed_spec_name">has a bug we need to fix</span>
- <div class="failure" id="failure_4">
- <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
- <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</span></code></pre>
- </div>
- </dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_2">Running specs with --diff</dt>
- <script type="text/javascript">makeRed('example_group_2');</script>
- <script type="text/javascript">moveProgressBar('35.2');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should print diff of different strings</span>
- <div class="failure" id="failure_5">
- <div class="message"><pre>expected: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
- got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behavior driven development
-+behaviour driven development
- framework for Ruby
-</pre></div>
- <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
- <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
-<span class="linenum">12</span><span class="constant">EOF</span>
-<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
-<span class="linenum">14</span> <span class="keyword">end</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('41.1');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
- <div class="failure" id="failure_6">
- <div class="message"><pre>expected &lt;Animal
-name=bob,
-species=tortoise
-&gt;
-, got &lt;Animal
-name=bob,
-species=giraffe
-&gt;
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- &lt;Animal
- name=bob,
--species=giraffe
-+species=tortoise
- &gt;
-</pre></div>
- <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34:
-./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-./spec/spec/runner/formatter/html_formatter_spec.rb:20:</pre></div>
- <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</span>
-<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</span>
-<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
-<span class="linenum">35</span> <span class="keyword">end</span>
-<span class="linenum">36</span><span class="keyword">end</span></code></pre>
- </div>
- </dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_3">A consumer of a stub</dt>
- <script type="text/javascript">moveProgressBar('47.0');</script>
- <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_4">A stubbed method on a class</dt>
- <script type="text/javascript">moveProgressBar('52.9');</script>
- <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
- <script type="text/javascript">moveProgressBar('58.8');</script>
- <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
- <script type="text/javascript">moveProgressBar('64.7');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_5">A mock</dt>
- <script type="text/javascript">moveProgressBar('70.5');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
- <script type="text/javascript">moveProgressBar('76.4');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
- <script type="text/javascript">moveProgressBar('82.3');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_6">pending example (using pending method)</dt>
- <script type="text/javascript">makeYellow('example_group_6');</script>
- <script type="text/javascript">moveProgressBar('88.2');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as &quot;PENDING: for some reason&quot; (PENDING: for some reason)</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_7">pending example (with no block)</dt>
- <script type="text/javascript">makeYellow('example_group_7');</script>
- <script type="text/javascript">moveProgressBar('94.1');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as &quot;PENDING: Not Yet Implemented&quot; (PENDING: Not Yet Implemented)</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_8">pending example (with block for pending)</dt>
- <script type="text/javascript">makeYellow('example_group_8');</script>
- <script type="text/javascript">moveProgressBar('100.0');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as &quot;PENDING: for some reason&quot; (PENDING: for some reason)</span></dd>
- </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html
deleted file mode 100644
index 8bf1ed9cd..000000000
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html
+++ /dev/null
@@ -1,387 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>RSpec results</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Expires" content="-1" />
- <meta http-equiv="Pragma" content="no-cache" />
- <style type="text/css">
- body {
- margin: 0;
- padding: 0;
- background: #fff;
- font-size: 80%;
- }
- </style>
-</head>
-<body>
-<div class="rspec-report">
- <script type="text/javascript">
- // <![CDATA[
-function moveProgressBar(percentDone) {
- document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
- document.getElementById(element_id).style.background = '#C40D0D';
- document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
- if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
- {
- document.getElementById(element_id).style.background = '#FAF834';
- document.getElementById(element_id).style.color = '#000000';
- }
- else
- {
- document.getElementById(element_id).style.background = '#FAF834';
- document.getElementById(element_id).style.color = '#000000';
- }
-}
-
- // ]]>
- </script>
- <style type="text/css">
-#rspec-header {
- background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
- margin: 0px 10px 0px 10px;
- padding: 10px;
- font-family: "Lucida Grande", Helvetica, sans-serif;
- font-size: 1.8em;
-}
-
-#summary {
- margin: 0; padding: 5px 10px;
- font-family: "Lucida Grande", Helvetica, sans-serif;
- text-align: right;
- position: absolute;
- top: 0px;
- right: 0px;
-}
-
-#summary p {
- margin: 0 0 0 2px;
-}
-
-#summary #totals {
- font-size: 1.2em;
-}
-
-.example_group {
- margin: 0 10px 5px;
- background: #fff;
-}
-
-dl {
- margin: 0; padding: 0 0 5px;
- font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
- padding: 3px;
- background: #65C400;
- color: #fff;
- font-weight: bold;
-}
-
-dd {
- margin: 5px 0 5px 5px;
- padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
- border-left: 5px solid #65C400;
- border-bottom: 1px solid #65C400;
- background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
- border-left: 5px solid #C20000;
- border-bottom: 1px solid #C20000;
- color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
- border-left: 5px solid #FAF834;
- border-bottom: 1px solid #FAF834;
- background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
- border-left: 5px solid #0000C2;
- border-bottom: 1px solid #0000C2;
- color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
- color: #000;
- font-size: 12px;
-}
-
-a {
- color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
- font-size: 12px;
- font-family: monospace;
- color: white;
- background-color: black;
- padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
- width: 75px;
- padding: 0.1em 1em 0.2em 0;
- color: #000000;
- background-color: #FFFBD3;
-}
-
- </style>
-
-<div id="rspec-header">
- <h1>RSpec Results</h1>
-
- <div id="summary">
- <p id="totals">&nbsp;</p>
- <p id="duration">&nbsp;</p>
- </div>
-</div>
-
-<div class="results">
-<div class="example_group">
- <dl>
- <dt id="example_group_1">Mocker</dt>
- <script type="text/javascript">moveProgressBar('5.8');</script>
- <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
- <script type="text/javascript">makeRed('rspec-header');</script>
- <script type="text/javascript">makeRed('example_group_1');</script>
- <script type="text/javascript">moveProgressBar('11.7');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should fail when expected message not received</span>
- <div class="failure" id="failure_1">
- <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:13:in `should_receive'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
- <pre class="ruby"><code><span class="linenum">11</span> it "should fail when expected message not received" do
-<span class="linenum">12</span> mock = mock("poke me")
-<span class="offending"><span class="linenum">13</span> mock.should_receive(:poke)</span>
-<span class="linenum">14</span> end
-<span class="linenum">15</span>
-<span class="linenum">16</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('17.6');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should fail when messages are received out of order</span>
- <div class="failure" id="failure_2">
- <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:22:in `three'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:16:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
- <pre class="ruby"><code><span class="linenum">20</span> mock.should_receive(:three).ordered
-<span class="linenum">21</span> mock.one
-<span class="offending"><span class="linenum">22</span> mock.three</span>
-<span class="linenum">23</span> mock.two
-<span class="linenum">24</span> end
-<span class="linenum">25</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('23.5');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
- <div class="failure" id="failure_3">
- <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:28:in `should_not_receive'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
- <pre class="ruby"><code><span class="linenum">26</span> it "should get yelled at when sending unexpected messages" do
-<span class="linenum">27</span> mock = mock("don't talk to me")
-<span class="offending"><span class="linenum">28</span> mock.should_not_receive(:any_message_at_all)</span>
-<span class="linenum">29</span> mock.any_message_at_all
-<span class="linenum">30</span> end
-<span class="linenum">31</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('29.4');</script>
- <dd class="spec pending_fixed">
- <span class="failed_spec_name">has a bug we need to fix</span>
- <div class="failure" id="failure_4">
- <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `pending'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
- <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span> it "has a bug we need to fix" do
-<span class="offending"><span class="linenum">33</span> pending "here is the bug" do</span>
-<span class="linenum">34</span> # Actually, no. It's fixed. This will fail because it passes :-)
-<span class="linenum">35</span> mock = mock("Bug")
-<span class="linenum">36</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
- </div>
- </dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_2">Running specs with --diff</dt>
- <script type="text/javascript">makeRed('example_group_2');</script>
- <script type="text/javascript">moveProgressBar('35.2');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should print diff of different strings</span>
- <div class="failure" id="failure_5">
- <div class="message"><pre>expected: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
- got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behavior driven development
-+behaviour driven development
- framework for Ruby
-</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:13:in `=='
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
- <pre class="ruby"><code><span class="linenum">11</span>framework for Ruby
-<span class="linenum">12</span>EOF
-<span class="offending"><span class="linenum">13</span> usa.should == uk</span>
-<span class="linenum">14</span> end
-<span class="linenum">15</span>
-<span class="linenum">16</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('41.1');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
- <div class="failure" id="failure_6">
- <div class="message"><pre>expected &lt;Animal
-name=bob,
-species=tortoise
-&gt;
-, got &lt;Animal
-name=bob,
-species=giraffe
-&gt;
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- &lt;Animal
- name=bob,
--species=giraffe
-+species=tortoise
- &gt;
-</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:34:in `should'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:31:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:24:in `run'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:20:in `instance_eval'</pre></div>
- <pre class="ruby"><code><span class="linenum">32</span> expected = Animal.new "bob", "giraffe"
-<span class="linenum">33</span> actual = Animal.new "bob", "tortoise"
-<span class="offending"><span class="linenum">34</span> expected.should eql(actual)</span>
-<span class="linenum">35</span> end
-<span class="linenum">36</span>end
-<span class="linenum">37</span><span class="comment"># gem install syntax to get syntax highlighting</span></code></pre>
- </div>
- </dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_3">A consumer of a stub</dt>
- <script type="text/javascript">moveProgressBar('47.0');</script>
- <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_4">A stubbed method on a class</dt>
- <script type="text/javascript">moveProgressBar('52.9');</script>
- <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
- <script type="text/javascript">moveProgressBar('58.8');</script>
- <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
- <script type="text/javascript">moveProgressBar('64.7');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_5">A mock</dt>
- <script type="text/javascript">moveProgressBar('70.5');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
- <script type="text/javascript">moveProgressBar('76.4');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
- <script type="text/javascript">moveProgressBar('82.3');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_6">pending example (using pending method)</dt>
- <script type="text/javascript">makeYellow('example_group_6');</script>
- <script type="text/javascript">moveProgressBar('88.2');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as &quot;PENDING: for some reason&quot; (PENDING: for some reason)</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_7">pending example (with no block)</dt>
- <script type="text/javascript">makeYellow('example_group_7');</script>
- <script type="text/javascript">moveProgressBar('94.1');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as &quot;PENDING: Not Yet Implemented&quot; (PENDING: Not Yet Implemented)</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_8">pending example (with block for pending)</dt>
- <script type="text/javascript">makeYellow('example_group_8');</script>
- <script type="text/javascript">moveProgressBar('100.0');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as &quot;PENDING: for some reason&quot; (PENDING: for some reason)</span></dd>
- </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html
deleted file mode 100644
index cda7226bf..000000000
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html
+++ /dev/null
@@ -1,371 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>RSpec results</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Expires" content="-1" />
- <meta http-equiv="Pragma" content="no-cache" />
- <style type="text/css">
- body {
- margin: 0;
- padding: 0;
- background: #fff;
- font-size: 80%;
- }
- </style>
-</head>
-<body>
-<div class="rspec-report">
- <script type="text/javascript">
- // <![CDATA[
-function moveProgressBar(percentDone) {
- document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
- document.getElementById(element_id).style.background = '#C40D0D';
- document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
- if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
- {
- document.getElementById(element_id).style.background = '#FAF834';
- document.getElementById(element_id).style.color = '#000000';
- }
- else
- {
- document.getElementById(element_id).style.background = '#FAF834';
- document.getElementById(element_id).style.color = '#000000';
- }
-}
-
- // ]]>
- </script>
- <style type="text/css">
-#rspec-header {
- background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
- margin: 0px 10px 0px 10px;
- padding: 10px;
- font-family: "Lucida Grande", Helvetica, sans-serif;
- font-size: 1.8em;
-}
-
-#summary {
- margin: 0; padding: 5px 10px;
- font-family: "Lucida Grande", Helvetica, sans-serif;
- text-align: right;
- position: absolute;
- top: 0px;
- right: 0px;
-}
-
-#summary p {
- margin: 0 0 0 2px;
-}
-
-#summary #totals {
- font-size: 1.2em;
-}
-
-.example_group {
- margin: 0 10px 5px;
- background: #fff;
-}
-
-dl {
- margin: 0; padding: 0 0 5px;
- font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
- padding: 3px;
- background: #65C400;
- color: #fff;
- font-weight: bold;
-}
-
-dd {
- margin: 5px 0 5px 5px;
- padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
- border-left: 5px solid #65C400;
- border-bottom: 1px solid #65C400;
- background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
- border-left: 5px solid #C20000;
- border-bottom: 1px solid #C20000;
- color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
- border-left: 5px solid #FAF834;
- border-bottom: 1px solid #FAF834;
- background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
- border-left: 5px solid #0000C2;
- border-bottom: 1px solid #0000C2;
- color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
- color: #000;
- font-size: 12px;
-}
-
-a {
- color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
- font-size: 12px;
- font-family: monospace;
- color: white;
- background-color: black;
- padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
- width: 75px;
- padding: 0.1em 1em 0.2em 0;
- color: #000000;
- background-color: #FFFBD3;
-}
-
- </style>
-
-<div id="rspec-header">
- <h1>RSpec Results</h1>
-
- <div id="summary">
- <p id="totals">&nbsp;</p>
- <p id="duration">&nbsp;</p>
- </div>
-</div>
-
-<div class="results">
-<div class="example_group">
- <dl>
- <dt id="example_group_1">Mocker</dt>
- <script type="text/javascript">moveProgressBar('5.8');</script>
- <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
- <script type="text/javascript">makeRed('rspec-header');</script>
- <script type="text/javascript">makeRed('example_group_1');</script>
- <script type="text/javascript">moveProgressBar('11.7');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should fail when expected message not received</span>
- <div class="failure" id="failure_1">
- <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
- <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</span>
-<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span> <span class="keyword">end</span>
-<span class="linenum">15</span> </code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('17.6');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should fail when messages are received out of order</span>
- <div class="failure" id="failure_2">
- <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
- <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span> <span class="keyword">end</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('23.5');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
- <div class="failure" id="failure_3">
- <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:28:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
- <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</span>
-<span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span>
-<span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span>
-<span class="linenum">30</span> <span class="keyword">end</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('29.4');</script>
- <dd class="spec pending_fixed">
- <span class="failed_spec_name">has a bug we need to fix</span>
- <div class="failure" id="failure_4">
- <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
- <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</span></code></pre>
- </div>
- </dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_2">Running specs with --diff</dt>
- <script type="text/javascript">makeRed('example_group_2');</script>
- <script type="text/javascript">moveProgressBar('35.2');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should print diff of different strings</span>
- <div class="failure" id="failure_5">
- <div class="message"><pre>expected: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
- got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behavior driven development
-+behaviour driven development
- framework for Ruby
-</pre></div>
- <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
- <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
-<span class="linenum">12</span><span class="constant">EOF</span>
-<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
-<span class="linenum">14</span> <span class="keyword">end</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('41.1');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
- <div class="failure" id="failure_6">
- <div class="message"><pre>expected &lt;Animal
-name=bob,
-species=tortoise
-&gt;
-, got &lt;Animal
-name=bob,
-species=giraffe
-&gt;
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- &lt;Animal
- name=bob,
--species=giraffe
-+species=tortoise
- &gt;
-</pre></div>
- <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34:
-./spec/spec/runner/formatter/html_formatter_spec.rb:17:
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:in `chdir'
-./spec/spec/runner/formatter/html_formatter_spec.rb:13:</pre></div>
- <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</span>
-<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</span>
-<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
-<span class="linenum">35</span> <span class="keyword">end</span>
-<span class="linenum">36</span><span class="keyword">end</span></code></pre>
- </div>
- </dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_3">A consumer of a stub</dt>
- <script type="text/javascript">moveProgressBar('47.0');</script>
- <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_4">A stubbed method on a class</dt>
- <script type="text/javascript">moveProgressBar('52.9');</script>
- <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
- <script type="text/javascript">moveProgressBar('58.8');</script>
- <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
- <script type="text/javascript">moveProgressBar('64.7');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_5">A mock</dt>
- <script type="text/javascript">moveProgressBar('70.5');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
- <script type="text/javascript">moveProgressBar('76.4');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
- <script type="text/javascript">moveProgressBar('82.3');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_6">pending example (using pending method)</dt>
- <script type="text/javascript">makeYellow('example_group_6');</script>
- <script type="text/javascript">moveProgressBar('88.2');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as &quot;PENDING: for some reason&quot; (PENDING: for some reason)</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_7">pending example (with no block)</dt>
- <script type="text/javascript">makeYellow('example_group_7');</script>
- <script type="text/javascript">moveProgressBar('94.1');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as &quot;PENDING: Not Yet Implemented&quot; (PENDING: Not Yet Implemented)</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_8">pending example (with block for pending)</dt>
- <script type="text/javascript">makeYellow('example_group_8');</script>
- <script type="text/javascript">moveProgressBar('100.0');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as &quot;PENDING: for some reason&quot; (PENDING: for some reason)</span></dd>
- </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
index 466621865..029cee62e 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
@@ -16,9 +16,6 @@
font-size: 80%;
}
</style>
-</head>
-<body>
-<div class="rspec-report">
<script type="text/javascript">
// <![CDATA[
function moveProgressBar(percentDone) {
@@ -46,7 +43,7 @@ function makeYellow(element_id) {
</script>
<style type="text/css">
#rspec-header {
- background: #65C400; color: #fff;
+ background: #65C400; color: #fff; height: 4em;
}
.rspec-report h1 {
@@ -54,15 +51,16 @@ function makeYellow(element_id) {
padding: 10px;
font-family: "Lucida Grande", Helvetica, sans-serif;
font-size: 1.8em;
+ position: absolute;
}
#summary {
margin: 0; padding: 5px 10px;
font-family: "Lucida Grande", Helvetica, sans-serif;
text-align: right;
- position: absolute;
top: 0px;
right: 0px;
+ float:right;
}
#summary p {
@@ -165,9 +163,14 @@ a {
}
</style>
+</head>
+<body>
+<div class="rspec-report">
<div id="rspec-header">
- <h1>RSpec Results</h1>
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
<div id="summary">
<p id="totals">&nbsp;</p>
@@ -187,52 +190,50 @@ a {
<dd class="spec failed">
<span class="failed_spec_name">should fail when expected message not received</span>
<div class="failure" id="failure_1">
- <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:13:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
- <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</span>
-<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span> <span class="keyword">end</span>
-<span class="linenum">15</span> </code></pre>
+ <div class="message"><pre>Mock &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre>examples/failing/mocking_example.rb:11:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">9</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="linenum">10</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</span>
+<span class="offending"><span class="linenum">11</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
+<span class="linenum">12</span> <span class="keyword">end</span>
+<span class="linenum">13</span> </code></pre>
</div>
</dd>
<script type="text/javascript">moveProgressBar('17.6');</script>
<dd class="spec failed">
<span class="failed_spec_name">should fail when messages are received out of order</span>
<div class="failure" id="failure_2">
- <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:22:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:16:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
- <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span> <span class="keyword">end</span></code></pre>
+ <div class="message"><pre>Mock &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre>examples/failing/mocking_example.rb:20:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">18</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
+<span class="linenum">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</span> <span class="keyword">end</span></code></pre>
</div>
</dd>
<script type="text/javascript">moveProgressBar('23.5');</script>
<dd class="spec failed">
<span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
<div class="failure" id="failure_3">
- <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
- <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</span>
-<span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span>
-<span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span>
-<span class="linenum">30</span> <span class="keyword">end</span></code></pre>
+ <div class="message"><pre>Mock &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre>examples/failing/mocking_example.rb:27:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">25</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</span>
+<span class="linenum">26</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span>
+<span class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</span> <span class="keyword">end</span></code></pre>
</div>
</dd>
<script type="text/javascript">moveProgressBar('29.4');</script>
@@ -240,17 +241,16 @@ a {
<span class="failed_spec_name">has a bug we need to fix</span>
<div class="failure" id="failure_4">
<div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/mocking_example.rb:33:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
- <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</span></code></pre>
+ <div class="backtrace"><pre>examples/failing/mocking_example.rb:31:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="offending"><span class="linenum">31</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</span> <span class="keyword">do</span></span>
+<span class="linenum">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</span></code></pre>
</div>
</dd>
</dl>
@@ -265,19 +265,19 @@ a {
<div class="failure" id="failure_5">
<div class="message"><pre>expected: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (using ==)
-Diff:
+
+ Diff:
@@ -1,4 +1,4 @@
RSpec is a
--behavior driven development
-+behaviour driven development
+-behaviour driven development
++behavior driven development
framework for Ruby
</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:13:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:2:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
+ <div class="backtrace"><pre>examples/failing/diffing_spec.rb:13:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
<pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
<span class="linenum">12</span><span class="constant">EOF</span>
<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
@@ -288,29 +288,25 @@ Diff:
<dd class="spec failed">
<span class="failed_spec_name">should print diff of different objects' pretty representation</span>
<div class="failure" id="failure_6">
- <div class="message"><pre>expected &lt;Animal
+ <div class="message"><pre>
+expected &lt;Animal
name=bob,
species=tortoise
&gt;
-, got &lt;Animal
+
+ got &lt;Animal
name=bob,
species=giraffe
&gt;
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- &lt;Animal
- name=bob,
--species=giraffe
-+species=tortoise
- &gt;
+
+
+(compared using eql?)
</pre></div>
- <div class="backtrace"><pre>/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:34:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./failing_examples/diffing_spec.rb:31:in `instance_eval'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:28:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `chdir'
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:
-/Users/david/projects/ruby/jruby/testsuites/rspec/target/rspec/./spec/spec/runner/formatter/html_formatter_spec.rb:24:in `instance_eval'</pre></div>
+ <div class="backtrace"><pre>examples/failing/diffing_spec.rb:34:
+spec/spec_helper.rb:42:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
<pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</span>
<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</span>
<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html
index bc6637583..1461d03e4 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html
@@ -16,9 +16,6 @@
font-size: 80%;
}
</style>
-</head>
-<body>
-<div class="rspec-report">
<script type="text/javascript">
// <![CDATA[
function moveProgressBar(percentDone) {
@@ -46,7 +43,7 @@ function makeYellow(element_id) {
</script>
<style type="text/css">
#rspec-header {
- background: #65C400; color: #fff;
+ background: #65C400; color: #fff; height: 4em;
}
.rspec-report h1 {
@@ -54,15 +51,16 @@ function makeYellow(element_id) {
padding: 10px;
font-family: "Lucida Grande", Helvetica, sans-serif;
font-size: 1.8em;
+ position: absolute;
}
#summary {
margin: 0; padding: 5px 10px;
font-family: "Lucida Grande", Helvetica, sans-serif;
text-align: right;
- position: absolute;
top: 0px;
right: 0px;
+ float:right;
}
#summary p {
@@ -165,9 +163,14 @@ a {
}
</style>
+</head>
+<body>
+<div class="rspec-report">
<div id="rspec-header">
- <h1>RSpec Results</h1>
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
<div id="summary">
<p id="totals">&nbsp;</p>
@@ -187,47 +190,50 @@ a {
<dd class="spec failed">
<span class="failed_spec_name">should fail when expected message not received</span>
<div class="failure" id="failure_1">
- <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:13:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
- <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</span>
-<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span> <span class="keyword">end</span>
-<span class="linenum">15</span> </code></pre>
+ <div class="message"><pre>Mock &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:11:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">9</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="linenum">10</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</span>
+<span class="offending"><span class="linenum">11</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
+<span class="linenum">12</span> <span class="keyword">end</span>
+<span class="linenum">13</span> </code></pre>
</div>
</dd>
<script type="text/javascript">moveProgressBar('17.6');</script>
<dd class="spec failed">
<span class="failed_spec_name">should fail when messages are received out of order</span>
<div class="failure" id="failure_2">
- <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:22:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
- <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span> <span class="keyword">end</span></code></pre>
+ <div class="message"><pre>Mock &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:20:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">18</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
+<span class="linenum">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</span> <span class="keyword">end</span></code></pre>
</div>
</dd>
<script type="text/javascript">moveProgressBar('23.5');</script>
<dd class="spec failed">
<span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
<div class="failure" id="failure_3">
- <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:29:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
- <pre class="ruby"><code><span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</span>
-<span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span>
-<span class="offending"><span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
-<span class="linenum">30</span> <span class="keyword">end</span></code></pre>
+ <div class="message"><pre>Mock &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:27:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">25</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</span>
+<span class="linenum">26</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span>
+<span class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</span> <span class="keyword">end</span></code></pre>
</div>
</dd>
<script type="text/javascript">moveProgressBar('29.4');</script>
@@ -235,15 +241,16 @@ a {
<span class="failed_spec_name">has a bug we need to fix</span>
<div class="failure" id="failure_4">
<div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
- <div class="backtrace"><pre>./failing_examples/mocking_example.rb:33:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
- <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</span></code></pre>
+ <div class="backtrace"><pre>./examples/failing/mocking_example.rb:31:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="offending"><span class="linenum">31</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</span> <span class="keyword">do</span></span>
+<span class="linenum">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</span></code></pre>
</div>
</dd>
</dl>
@@ -258,17 +265,19 @@ a {
<div class="failure" id="failure_5">
<div class="message"><pre>expected: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (using ==)
-Diff:
+
+ Diff:
@@ -1,4 +1,4 @@
RSpec is a
-behaviour driven development
+behavior driven development
framework for Ruby
</pre></div>
- <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:13:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
+ <div class="backtrace"><pre>./examples/failing/diffing_spec.rb:13:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
<pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
<span class="linenum">12</span><span class="constant">EOF</span>
<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
@@ -279,27 +288,25 @@ Diff:
<dd class="spec failed">
<span class="failed_spec_name">should print diff of different objects' pretty representation</span>
<div class="failure" id="failure_6">
- <div class="message"><pre>expected &lt;Animal
+ <div class="message"><pre>
+expected &lt;Animal
name=bob,
species=tortoise
&gt;
-, got &lt;Animal
+
+ got &lt;Animal
name=bob,
species=giraffe
&gt;
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- &lt;Animal
- name=bob,
--species=tortoise
-+species=giraffe
- &gt;
+
+
+(compared using eql?)
</pre></div>
- <div class="backtrace"><pre>./failing_examples/diffing_spec.rb:34:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:25:
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:in `chdir'
-/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/html_formatter_spec.rb:21:</pre></div>
+ <div class="backtrace"><pre>./examples/failing/diffing_spec.rb:34:
+./spec/spec_helper.rb:44:in `run_with'
+./spec/spec/runner/formatter/html_formatter_spec.rb:41:
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:29:</pre></div>
<pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</span>
<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</span>
<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatter_spec.rb
index f6388267f..bbff1ef42 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatter_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/html_formatter_spec.rb
@@ -1,63 +1,118 @@
-require File.dirname(__FILE__) + '/../../../spec_helper'
-require 'hpricot' # Needed to compare generated with wanted HTML
+# require 'spec_helper'
+
+begin # See rescue all the way at the bottom
+
+require 'nokogiri' # Needed to compare generated with wanted HTML
require 'spec/runner/formatter/html_formatter'
module Spec
module Runner
module Formatter
describe HtmlFormatter do
- ['--diff', '--dry-run'].each do |opt|
- def jruby?
- PLATFORM == 'java'
- end
-
- it "should produce HTML identical to the one we designed manually with #{opt}" do
- root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
- suffix = jruby? ? '-jruby' : ''
- expected_file = File.dirname(__FILE__) + "/html_formatted-#{::VERSION}#{suffix}.html"
- raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file)
- expected_html = File.read(expected_file)
-
- Dir.chdir(root) do
- args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'html', opt]
- err = StringIO.new
- out = StringIO.new
- CommandLine.run(
- OptionParser.parse(args, err, out)
- )
-
- seconds = /\d+\.\d+ seconds/
- html = out.string.gsub seconds, 'x seconds'
- expected_html.gsub! seconds, 'x seconds'
-
- if opt == '--diff'
- # Uncomment this line temporarily in order to overwrite the expected with actual.
- # Use with care!!!
- # File.open(expected_file, 'w') {|io| io.write(html)}
-
- doc = Hpricot(html)
- backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
- doc.search("div.backtrace").remove
-
- expected_doc = Hpricot(expected_html)
- expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
- expected_doc.search("div.backtrace").remove
-
- doc.inner_html.should == expected_doc.inner_html
-
- expected_backtraces.each_with_index do |expected_line, i|
- expected_path, expected_line_number, expected_suffix = expected_line.split(':')
- actual_path, actual_line_number, actual_suffix = backtraces[i].split(':')
- File.expand_path(actual_path).should == File.expand_path(expected_path)
- actual_line_number.should == expected_line_number
- end
- else
- html.should =~ /This was a dry-run/m
- end
+
+ treats_method_missing_as_private
+
+ attr_reader :root, :expected_file, :expected_html
+
+ before do
+ @root = File.expand_path("#{File.dirname(__FILE__)}/../../../..")
+ suffix = jruby? ? '-jruby' : ''
+ @expected_file = "#{File.dirname(__FILE__)}/html_formatted-#{::RUBY_VERSION}#{suffix}.html"
+ raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file)
+ @expected_html = File.read(expected_file)
+ end
+
+ # Uncomment this line temporarily in order to overwrite the expected with actual.
+ # Use with care!!!
+ # describe "file generator" do
+ # it "generates a new comparison file" do
+ # Dir.chdir(root) do
+ # args = [
+ # 'examples/failing/mocking_example.rb',
+ # 'examples/failing/diffing_spec.rb',
+ # 'examples/passing/stubbing_example.rb',
+ # 'examples/passing/pending_example.rb',
+ # '--format',
+ # 'html',
+ # "--diff"
+ # ]
+ # err = StringIO.new
+ # out = StringIO.new
+ # run_with ::Spec::Runner::OptionParser.parse(args, err, out)
+ #
+ # seconds = /\d+\.\d+ seconds/
+ # html = out.string.gsub seconds, 'x seconds'
+ #
+ # File.open(expected_file, 'w') {|io| io.write(html)}
+ # end
+ # end
+ # end
+
+ it "should produce HTML identical to the one we designed manually with --diff" do
+ Dir.chdir(root) do
+ args = [
+ 'examples/failing/mocking_example.rb',
+ 'examples/failing/diffing_spec.rb',
+ 'examples/passing/stubbing_example.rb',
+ 'examples/passing/pending_example.rb',
+ '--format',
+ 'html',
+ "--diff"
+ ]
+ err = StringIO.new
+ out = StringIO.new
+ run_with ::Spec::Runner::OptionParser.parse(args, err, out)
+
+ seconds = /\d+\.\d+ seconds/
+ html = out.string.gsub seconds, 'x seconds'
+ expected_html.gsub! seconds, 'x seconds'
+
+ doc = Nokogiri::HTML(html)
+ backtraces = doc.search("div.backtrace").collect {|e| e.at("pre").inner_html}
+ doc.css("div.backtrace").remove
+
+ expected_doc = Nokogiri::HTML(expected_html)
+ expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("pre").inner_html}
+ expected_doc.search("div.backtrace").remove
+
+ doc.inner_html.should == expected_doc.inner_html
+
+ expected_backtraces.each_with_index do |expected_line, i|
+ expected_path, expected_line_number, expected_suffix = expected_line.split(':')
+ actual_path, actual_line_number, actual_suffix = backtraces[i].split(':')
+ File.expand_path(actual_path).should == File.expand_path(expected_path)
+ actual_line_number.should == expected_line_number
end
end
end
+
+ it "should produce HTML identical to the one we designed manually with --dry-run" do
+ Dir.chdir(root) do
+ args = [
+ 'examples/failing/mocking_example.rb',
+ 'examples/failing/diffing_spec.rb',
+ 'examples/passing/stubbing_example.rb',
+ 'examples/passing/pending_example.rb',
+ '--format',
+ 'html',
+ "--dry-run"
+ ]
+ err = StringIO.new
+ out = StringIO.new
+ run_with ::Spec::Runner::OptionParser.parse(args, err, out)
+
+ seconds = /\d+\.\d+ seconds/
+ html = out.string.gsub seconds, 'x seconds'
+ expected_html.gsub! seconds, 'x seconds'
+
+ html.should =~ /This was a dry-run/m
+ end
+ end
end
end
end
end
+
+rescue LoadError
+ warn "nokogiri not loaded -- skipping HtmlFormatter specs"
+end
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/nested_text_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/nested_text_formatter_spec.rb
index 3a627451e..29e96ff52 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/nested_text_formatter_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/nested_text_formatter_spec.rb
@@ -1,177 +1,169 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require 'spec_helper'
require 'spec/runner/formatter/nested_text_formatter'
module Spec
module Runner
module Formatter
describe NestedTextFormatter do
- it_should_behave_like "sandboxed rspec_options"
- attr_reader :io, :options, :formatter, :example_group
- before(:each) do
- @io = StringIO.new
- options.stub!(:dry_run).and_return(false)
- options.stub!(:colour).and_return(false)
- @formatter = NestedTextFormatter.new(options, io)
- @example_group = ::Spec::Example::ExampleGroup.describe("ExampleGroup") do
- specify "example" do
- end
+ with_sandboxed_options do
+ attr_reader :io, :options, :formatter, :example_group
+ before(:each) do
+ @io = StringIO.new
+ options.stub!(:dry_run).and_return(false)
+ options.stub!(:colour).and_return(false)
+ @formatter = NestedTextFormatter.new(options, io)
+ @example_group = Class.new(::Spec::Example::ExampleGroupDouble).describe("ExampleGroup")
+ @example_group.example("example") {}
end
- end
-
- describe "where ExampleGroup has no superclasss with a description" do
- before do
- add_example_group
- end
-
- def add_example_group
- formatter.add_example_group(example_group)
- end
-
- describe "#dump_summary" do
- it "should produce standard summary without pending when pending has a 0 count" do
- formatter.dump_summary(3, 2, 1, 0)
- expected_output = <<-OUT
- ExampleGroup
-
- Finished in 3 seconds
-
- 2 examples, 1 failure
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ describe "where ExampleGroup has no superclass with a description" do
+ def example_group_started
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
end
- it "should produce standard summary" do
- formatter.dump_summary(3, 2, 1, 4)
- expected_output = <<-OUT
- ExampleGroup
+ before do
+ example_group_started
+ end
- Finished in 3 seconds
+ describe "#dump_summary" do
+ it "should produce standard summary without pending when pending has a 0 count" do
+ formatter.dump_summary(3, 2, 1, 0)
+ io.string.should == <<-OUT
+ExampleGroup
- 2 examples, 1 failure, 4 pending
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
- end
- end
+Finished in 3 seconds
- describe "#add_example_group" do
- describe "when ExampleGroup has description_args" do
- before do
- example_group.description_args.should_not be_nil
+2 examples, 1 failure
+OUT
end
- describe "when ExampleGroup has no parents with description args" do
- before do
- example_group.superclass.description_args.should be_nil
- end
+ it "should produce standard summary" do
+ formatter.dump_summary(3, 2, 1, 4)
+ io.string.should == <<-OUT
+ExampleGroup
- it "should push ExampleGroup name" do
- io.string.should eql("ExampleGroup\n")
- end
+Finished in 3 seconds
+
+2 examples, 1 failure, 4 pending
+OUT
end
+ end
- describe "when ExampleGroup has one parent with description args" do
- attr_reader :child_example_group
- def add_example_group
- example_group.description_args.should_not be_nil
- @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
+ describe "#example_group_started" do
+ describe "when ExampleGroup has a nested description" do
+
+ describe "when ExampleGroup has no parents with nested description" do
+ it "should push ExampleGroup name" do
+ io.string.should eql("ExampleGroup\n")
+ end
end
- describe "and parent ExampleGroups have not been printed" do
- before do
- formatter.add_example_group(child_example_group)
+ describe "when ExampleGroup has one parent with nested description" do
+ attr_reader :child_example_group
+ def example_group_started
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
+ end
+
+ describe "and parent ExampleGroups have not been printed" do
+ before do
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
+ end
+
+ it "should push ExampleGroup name with two spaces of indentation" do
+ io.string.should == <<-OUT
+ExampleGroup
+ Child ExampleGroup
+OUT
+ end
end
- it "should push ExampleGroup name with two spaces of indentation" do
- expected_output = <<-OUT
- ExampleGroup
- Child ExampleGroup
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ describe "and parent ExampleGroups have been printed" do
+ before do
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
+ io.string = ""
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
+ end
+
+ it "should print only the indented ExampleGroup" do
+ io.string.should == <<-OUT
+ Child ExampleGroup
+OUT
+ end
end
end
- describe "and parent ExampleGroups have been printed" do
- before do
- formatter.add_example_group(example_group)
- io.string = ""
- formatter.add_example_group(child_example_group)
+ describe "when ExampleGroup has two parents with nested description" do
+ attr_reader :child_example_group, :grand_child_example_group
+ def example_group_started
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
+ end
+
+ describe "and parent ExampleGroups have not been printed" do
+ before do
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grand_child_example_group))
+
+ end
+
+ it "should print the entire nested ExampleGroup heirarchy" do
+ io.string.should == <<-OUT
+ExampleGroup
+ Child ExampleGroup
+ GrandChild ExampleGroup
+OUT
+ end
end
- it "should print only the indented ExampleGroup" do
- expected_output = <<-OUT
- Child ExampleGroup
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ describe "and parent ExampleGroups have been printed" do
+ before do
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
+ io.string = ""
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grand_child_example_group))
+ end
+
+ it "should print only the indented ExampleGroup" do
+ io.string.should == <<-OUT
+ GrandChild ExampleGroup
+OUT
+ end
end
end
end
- describe "when ExampleGroup has two parents with description args" do
- attr_reader :child_example_group, :grand_child_example_group
- def add_example_group
- example_group.description_args.should_not be_nil
- @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
- @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
- end
+ describe "when ExampleGroup nested description is blank" do
+ attr_reader :child_example_group
describe "and parent ExampleGroups have not been printed" do
- before do
- formatter.add_example_group(grand_child_example_group)
+ def example_group_started
+ @child_example_group = Class.new(example_group)
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
end
- it "should print the entire nested ExampleGroup heirarchy" do
- expected_output = <<-OUT
- ExampleGroup
- Child ExampleGroup
- GrandChild ExampleGroup
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ it "should render only the parent ExampleGroup" do
+ io.string.should == <<-OUT
+ExampleGroup
+OUT
end
end
describe "and parent ExampleGroups have been printed" do
- before do
- formatter.add_example_group(child_example_group)
+ def example_group_started
+ @child_example_group = Class.new(example_group)
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
io.string = ""
- formatter.add_example_group(grand_child_example_group)
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
end
- it "should print only the indented ExampleGroup" do
- expected_output = <<-OUT
- GrandChild ExampleGroup
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ it "should not render anything" do
+ io.string.should == ""
end
end
end
- end
-
- describe "when ExampleGroup description_args is nil" do
- attr_reader :child_example_group
-
- describe "and parent ExampleGroups have not been printed" do
- def add_example_group
- @child_example_group = Class.new(example_group)
- child_example_group.description_args.should be_nil
- formatter.add_example_group(child_example_group)
- end
-
- it "should render only the parent ExampleGroup" do
- expected_output = <<-OUT
- ExampleGroup
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
- end
- end
- describe "and parent ExampleGroups have been printed" do
- def add_example_group
- @child_example_group = Class.new(example_group)
- child_example_group.description_args.should be_nil
- formatter.add_example_group(example_group)
- io.string = ""
- formatter.add_example_group(child_example_group)
+ describe "when ExampleGroup nested description is blank" do
+ def example_group_started
+ example_group.set_description
+ super
end
it "should not render anything" do
@@ -180,154 +172,134 @@ module Spec
end
end
- describe "when ExampleGroup description_args is empty" do
- def add_example_group
- example_group.set_description
- example_group.description_args.should be_empty
- super
- end
-
- it "should not render anything" do
- io.string.should == ""
- end
- end
- end
-
- describe "#example_failed" do
- describe "where ExampleGroup has no superclasss with a description" do
- describe "when having an error" do
- it "should push failing spec name and failure number" do
- formatter.example_failed(
- example_group.it("spec"),
- 98,
- Reporter::Failure.new("c s", RuntimeError.new)
- )
- expected_output = <<-OUT
- ExampleGroup
- spec (ERROR - 98)
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ describe "#example_failed" do
+ describe "where ExampleGroup has no superclasss with a description" do
+ describe "when having an error" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ ::Spec::Runner::Reporter::Failure.new("g", "c s", RuntimeError.new)
+ )
+ io.string.should == <<-OUT
+ExampleGroup
+ spec (FAILED - 98)
+OUT
+ end
end
- end
- describe "when having an expectation failure" do
- it "should push failing spec name and failure number" do
- formatter.example_failed(
- example_group.it("spec"),
- 98,
- Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
- )
- expected_output = <<-OUT
- ExampleGroup
- spec (FAILED - 98)
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ describe "when having an expectation failure" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ ::Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Expectations::ExpectationNotMetError.new)
+ )
+ io.string.should == <<-OUT
+ExampleGroup
+ spec (FAILED - 98)
+OUT
+ end
end
end
- end
- describe "where ExampleGroup has two superclasses with a description" do
- attr_reader :child_example_group, :grand_child_example_group
+ describe "where ExampleGroup has two superclasses with a description" do
+ attr_reader :child_example_group, :grand_child_example_group
- def add_example_group
- @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
- @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
- formatter.add_example_group(grand_child_example_group)
- end
+ def example_group_started
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grand_child_example_group))
+ end
- describe "when having an error" do
- it "should push failing spec name and failure number" do
- formatter.example_failed(
- grand_child_example_group.it("spec"),
- 98,
- Reporter::Failure.new("c s", RuntimeError.new)
- )
- expected_output = <<-OUT
- ExampleGroup
- Child ExampleGroup
- GrandChild ExampleGroup
- spec (ERROR - 98)
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ describe "when having an error" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ grand_child_example_group.it("spec"),
+ 98,
+ ::Spec::Runner::Reporter::Failure.new("g", "c s", RuntimeError.new)
+ )
+ io.string.should == <<-OUT
+ExampleGroup
+ Child ExampleGroup
+ GrandChild ExampleGroup
+ spec (FAILED - 98)
+OUT
+ end
end
- end
- describe "when having an expectation" do
- it "should push failing spec name and failure number" do
- formatter.example_failed(
- grand_child_example_group.it("spec"),
- 98,
- Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
- )
- expected_output = <<-OUT
- ExampleGroup
- Child ExampleGroup
- GrandChild ExampleGroup
- spec (FAILED - 98)
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ describe "when having an expectation" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ grand_child_example_group.it("spec"),
+ 98,
+ ::Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Expectations::ExpectationNotMetError.new)
+ )
+ io.string.should == <<-OUT
+ExampleGroup
+ Child ExampleGroup
+ GrandChild ExampleGroup
+ spec (FAILED - 98)
+OUT
+ end
end
end
end
- end
- describe "#start" do
- it "should push nothing on start" do
- formatter.start(5)
- expected_output = <<-OUT
- ExampleGroup
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ describe "#start" do
+ it "should push nothing on start" do
+ formatter.start(5)
+ io.string.should == <<-OUT
+ExampleGroup
+OUT
+ end
end
- end
- describe "#start_dump" do
- it "should push nothing on start dump" do
- formatter.start_dump
- expected_output = <<-OUT
- ExampleGroup
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ describe "#start_dump" do
+ it "should push nothing on start dump" do
+ formatter.start_dump
+ io.string.should == <<-OUT
+ExampleGroup
+OUT
+ end
end
- end
- describe "#example_passed" do
- it "should push passing spec name" do
- formatter.example_passed(example_group.it("spec"))
- expected_output = <<-OUT
- ExampleGroup
- spec
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
+ describe "#example_passed" do
+ it "should push passing spec name" do
+ formatter.example_passed(example_group.it("spec"))
+ io.string.should == <<-OUT
+ExampleGroup
+ spec
+OUT
+ end
end
- end
- describe "#example_pending" do
- it "should push pending example name and message" do
- formatter.example_pending(example_group.examples.first, 'reason')
- expected_output = <<-OUT
- ExampleGroup
- example (PENDING: reason)
- OUT
- io.string.should == expected_output.gsub(/^ /, '')
- end
+ describe "#example_pending" do
+ it "should push pending example name and message" do
+ formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
+ io.string.should == <<-OUT
+ExampleGroup
+ example (PENDING: reason)
+OUT
+ end
- it "should dump pending" do
- formatter.example_pending(example_group.examples.first, 'reason')
- io.rewind
- formatter.dump_pending
- io.string.should =~ /Pending\:\nExampleGroup example \(reason\)\n/
+ it "should dump pending" do
+ formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
+ io.rewind
+ formatter.dump_pending
+ io.string.should =~ /Pending\:\n\nExampleGroup example \(reason\)\n/
+ end
end
- end
- def have_single_level_example_group_output(expected_output)
- expected = "ExampleGroup\n #{expected_output}"
- ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
- actual == expected
+ def have_single_level_example_group_output(expected_output)
+ expected = "ExampleGroup\n #{expected_output}"
+ ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
+ actual == expected
+ end
end
end
end
end
end
end
-end
+end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb
index 981805411..338df7089 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb
@@ -1,15 +1,19 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require 'spec_helper'
require 'spec/runner/formatter/profile_formatter'
module Spec
module Runner
module Formatter
describe ProfileFormatter do
+
+ treats_method_missing_as_private
+
attr_reader :io, :formatter
before(:each) do
@io = StringIO.new
options = mock('options')
options.stub!(:colour).and_return(true)
+ options.stub!(:autospec).and_return(true)
@formatter = ProfileFormatter.new(options, io)
end
@@ -28,10 +32,10 @@ module Spec
it "should correctly record a passed example" do
now = Time.now
Time.stub!(:now).and_return(now)
- parent_example_group = Class.new(ExampleGroup).describe('Parent')
+ parent_example_group = Class.new(::Spec::Example::ExampleGroupDouble).describe('Parent')
child_example_group = Class.new(parent_example_group).describe('Child')
- formatter.add_example_group(child_example_group)
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(child_example_group))
formatter.example_started('when foo')
Time.stub!(:now).and_return(now+1)
@@ -49,7 +53,7 @@ module Spec
it "should print the top 10 results" do
example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup")
- formatter.add_example_group(example_group)
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
formatter.instance_variable_set("@time", Time.now)
15.times do
@@ -59,7 +63,8 @@ module Spec
io.should_receive(:print).exactly(10)
formatter.start_dump
end
+
end
end
end
-end \ No newline at end of file
+end
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb
index 64e11b1a5..ea96ca6c4 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb
@@ -1,15 +1,19 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require 'spec_helper'
require 'spec/runner/formatter/progress_bar_formatter'
module Spec
module Runner
module Formatter
describe ProgressBarFormatter do
+
+ treats_method_missing_as_private
+
before(:each) do
@io = StringIO.new
@options = mock('options')
@options.stub!(:dry_run).and_return(false)
@options.stub!(:colour).and_return(false)
+ @options.stub!(:autospec).and_return(false)
@formatter = ProgressBarFormatter.new(@options, @io)
end
@@ -29,7 +33,8 @@ module Spec
end
end
example = example_group.examples.first
- @formatter.example_pending(example, "message")
+ @formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
+ @formatter.example_pending(example, "message", "#{__FILE__}:#{__LINE__}")
@io.rewind
@formatter.dump_summary(3, 2, 1, 1)
@io.string.should eql(%Q|
@@ -40,30 +45,34 @@ Finished in 3 seconds
end
it "should push green dot for passing spec" do
- @io.should_receive(:tty?).and_return(true)
- @options.should_receive(:colour).and_return(true)
+ @formatter.stub(:output_to_file?) {false}
+ @io.stub(:tty?) {true}
+ @options.stub(:colour) {true}
@formatter.example_passed("spec")
@io.string.should == "\e[32m.\e[0m"
end
it "should push red F for failure spec" do
- @io.should_receive(:tty?).and_return(true)
- @options.should_receive(:colour).and_return(true)
- @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new))
+ @formatter.stub(:output_to_file?) {false}
+ @io.stub(:tty?) {true}
+ @options.stub(:colour) {true}
+ @formatter.example_failed("spec", 98, Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Expectations::ExpectationNotMetError.new))
@io.string.should eql("\e[31mF\e[0m")
end
- it "should push magenta F for error spec" do
- @io.should_receive(:tty?).and_return(true)
- @options.should_receive(:colour).and_return(true)
- @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", RuntimeError.new))
- @io.string.should eql("\e[35mF\e[0m")
+ it "should push red F for error spec" do
+ @formatter.stub(:output_to_file?) {false}
+ @io.stub(:tty?) {true}
+ @options.stub(:colour) {true}
+ @formatter.example_failed("spec", 98, Spec::Runner::Reporter::Failure.new("g", "c s", RuntimeError.new))
+ @io.string.should eql("\e[31mF\e[0m")
end
it "should push blue F for fixed pending spec" do
- @io.should_receive(:tty?).and_return(true)
- @options.should_receive(:colour).and_return(true)
- @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Example::PendingExampleFixedError.new))
+ @formatter.stub(:output_to_file?) {false}
+ @io.stub(:tty?) {true}
+ @options.stub(:colour) {true}
+ @formatter.example_failed("spec", 98, Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Example::PendingExampleFixedError.new))
@io.string.should eql("\e[34mF\e[0m")
end
@@ -88,15 +97,18 @@ EOE
EOE
end
- it "should dump pending" do
+ it "should dump pending with file and line number" do
example_group = ExampleGroup.describe("example_group") do
specify "example" do
end
end
example = example_group.examples.first
- @formatter.example_pending(example, "message")
+ file = __FILE__
+ line = __LINE__ - 5
+ @formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
+ @formatter.example_pending(example, "message", "#{__FILE__}:#{__LINE__}")
@formatter.dump_pending
- @io.string.should =~ /Pending\:\nexample_group example \(message\)\n/
+ @io.string.should =~ /Pending:\n\nexample_group example \(message\)\n#{file}:#{line}/m
end
end
@@ -106,11 +118,11 @@ EOE
@options = mock('options')
@out.stub!(:puts)
@formatter = ProgressBarFormatter.new(@options, @out)
- @formatter.class.send :public, :output_to_tty?
+ @formatter.class.__send__ :public, :output_to_tty?
end
after(:each) do
- @formatter.class.send :protected, :output_to_tty?
+ @formatter.class.__send__ :protected, :output_to_tty?
end
it "should not throw NoMethodError on output_to_tty?" do
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb
index 4bb2f1585..c683c39a8 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require 'spec_helper'
require 'spec/runner/formatter/snippet_extractor'
module Spec
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb
deleted file mode 100644
index da1b69f79..000000000
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper'
-require 'hpricot' # Needed to compare generated with wanted HTML
-require 'spec/runner/formatter/text_mate_formatter'
-
-module Spec
- module Runner
- module Formatter
- describe TextMateFormatter do
- attr_reader :root, :suffix, :expected_file
- before do
- @root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
- @suffix = jruby? ? '-jruby' : ''
- @expected_file = File.dirname(__FILE__) + "/text_mate_formatted-#{::VERSION}#{suffix}.html"
- end
-
- def jruby?
- PLATFORM == 'java'
- end
-
- def produces_html_identical_to_manually_designed_document(opt)
- root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
-
- Dir.chdir(root) do
- args = [
- 'failing_examples/mocking_example.rb',
- 'failing_examples/diffing_spec.rb',
- 'examples/pure/stubbing_example.rb',
- 'examples/pure/pending_example.rb',
- '--format',
- 'textmate',
- opt
- ]
- err = StringIO.new
- out = StringIO.new
- options = ::Spec::Runner::OptionParser.parse(args, err, out)
- Spec::Runner::CommandLine.run(options)
-
- yield(out.string)
- end
- end
-
- # # Uncomment this spec temporarily in order to overwrite the expected with actual.
- # # Use with care!!!
- # describe TextMateFormatter, "functional spec file generator" do
- # it "generates a new comparison file" do
- # Dir.chdir(root) do
- # args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/pure/stubbing_example.rb', 'examples/pure/pending_example.rb', '--format', 'textmate', '--diff']
- # err = StringIO.new
- # out = StringIO.new
- # Spec::Runner::CommandLine.run(
- # ::Spec::Runner::OptionParser.parse(args, err, out)
- # )
- #
- # seconds = /\d+\.\d+ seconds/
- # html = out.string.gsub seconds, 'x seconds'
- #
- # File.open(expected_file, 'w') {|io| io.write(html)}
- # end
- # end
- # end
-
- describe "functional spec using --diff" do
- it "should produce HTML identical to the one we designed manually with --diff" do
- produces_html_identical_to_manually_designed_document("--diff") do |html|
- suffix = jruby? ? '-jruby' : ''
- expected_file = File.dirname(__FILE__) + "/text_mate_formatted-#{::VERSION}#{suffix}.html"
- unless File.file?(expected_file)
- raise "There is no HTML file with expected content for this platform: #{expected_file}"
- end
- expected_html = File.read(expected_file)
-
- seconds = /\d+\.\d+ seconds/
- html.gsub! seconds, 'x seconds'
- expected_html.gsub! seconds, 'x seconds'
-
- doc = Hpricot(html)
- backtraces = doc.search("div.backtrace/a")
- doc.search("div.backtrace").remove
-
- expected_doc = Hpricot(expected_html)
- expected_doc.search("div.backtrace").remove
-
- doc.inner_html.should == expected_doc.inner_html
-
- backtraces.each do |backtrace_link|
- backtrace_link[:href].should include("txmt://open?url=")
- end
- end
- end
-
- end
-
- describe "functional spec using --dry-run" do
- it "should produce HTML identical to the one we designed manually with --dry-run" do
- produces_html_identical_to_manually_designed_document("--dry-run") do |html, expected_html|
- html.should =~ /This was a dry-run/m
- end
- end
- end
- end
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb
index 3974f9533..ac4e0eeea 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb
@@ -1,154 +1,155 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require 'spec_helper'
require 'spec/runner/formatter/specdoc_formatter'
module Spec
module Runner
module Formatter
describe SpecdocFormatter do
- it_should_behave_like "sandboxed rspec_options"
- attr_reader :io, :options, :formatter, :example_group
- before(:each) do
- @io = StringIO.new
- options.stub!(:dry_run).and_return(false)
- options.stub!(:colour).and_return(false)
- @formatter = SpecdocFormatter.new(options, io)
- @example_group = ::Spec::Example::ExampleGroup.describe("ExampleGroup") do
- specify "example" do
+ with_sandboxed_options do
+ attr_reader :io, :formatter, :example_group
+ before(:each) do
+ @io = StringIO.new
+ options.stub!(:dry_run).and_return(false)
+ options.stub!(:colour).and_return(false)
+ @formatter = SpecdocFormatter.new(options, io)
+ @example_group = ::Spec::Example::ExampleGroup.describe("ExampleGroup") do
+ specify "example" do
+ end
end
end
- end
- describe "where ExampleGroup has no superclasss with a description" do
- before do
- add_example_group
- end
-
- def add_example_group
- formatter.add_example_group(example_group)
- end
+ describe "where ExampleGroup has no superclasss with a description" do
+ before do
+ example_group_started
+ end
- describe "#dump_summary" do
- it "should produce standard summary without pending when pending has a 0 count" do
- formatter.dump_summary(3, 2, 1, 0)
- io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure\n")
+ def example_group_started
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(example_group))
end
- it "should produce standard summary" do
- formatter.dump_summary(3, 2, 1, 4)
- io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure, 4 pending\n")
+ describe "#dump_summary" do
+ it "should produce standard summary without pending when pending has a 0 count" do
+ formatter.dump_summary(3, 2, 1, 0)
+ io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure\n")
+ end
+
+ it "should produce standard summary" do
+ formatter.dump_summary(3, 2, 1, 4)
+ io.string.should have_example_group_output("\nFinished in 3 seconds\n\n2 examples, 1 failure, 4 pending\n")
+ end
end
- end
- describe "#add_example_group" do
- it "should push ExampleGroup name" do
- io.string.should eql("\nExampleGroup\n")
+ describe "#example_group_started" do
+ it "should push ExampleGroup name" do
+ io.string.should eql("\nExampleGroup\n")
+ end
end
- end
- describe "#example_failed" do
- describe "where ExampleGroup has no superclasss with a description" do
- describe "when having an error" do
- it "should push failing spec name and failure number" do
- formatter.example_failed(
- example_group.it("spec"),
- 98,
- Reporter::Failure.new("c s", RuntimeError.new)
- )
- io.string.should have_example_group_output("- spec (ERROR - 98)\n")
+ describe "#example_failed" do
+ describe "where ExampleGroup has no superclasss with a description" do
+ describe "when having an error" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ Spec::Runner::Reporter::Failure.new("g", "c s", RuntimeError.new)
+ )
+ io.string.should have_example_group_output("- spec (FAILED - 98)\n")
+ end
end
- end
- describe "when having an expectation failure" do
- it "should push failing spec name and failure number" do
- formatter.example_failed(
- example_group.it("spec"),
- 98,
- Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
- )
- io.string.should have_example_group_output("- spec (FAILED - 98)\n")
+ describe "when having an expectation failure" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Expectations::ExpectationNotMetError.new)
+ )
+ io.string.should have_example_group_output("- spec (FAILED - 98)\n")
+ end
end
end
- end
- describe "where ExampleGroup has two superclasses with a description" do
- attr_reader :child_example_group, :grand_child_example_group
+ describe "where ExampleGroup has two superclasses with a description" do
+ attr_reader :child_example_group, :grand_child_example_group
- def add_example_group
- @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
- @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
- formatter.add_example_group(grand_child_example_group)
- end
-
- describe "when having an error" do
- it "should push failing spec name and failure number" do
- formatter.example_failed(
- example_group.it("spec"),
- 98,
- Reporter::Failure.new("c s", RuntimeError.new)
- )
- io.string.should have_nested_example_group_output("- spec (ERROR - 98)\n")
+ def example_group_started
+ @child_example_group = Class.new(example_group).describe("Child ExampleGroup")
+ @grand_child_example_group = Class.new(child_example_group).describe("GrandChild ExampleGroup")
+ formatter.example_group_started(Spec::Example::ExampleGroupProxy.new(grand_child_example_group))
end
- end
- describe "when having an expectation" do
- it "should push failing spec name and failure number" do
- formatter.example_failed(
+ describe "when having an error" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
example_group.it("spec"),
98,
- Reporter::Failure.new("c s", Spec::Expectations::ExpectationNotMetError.new)
- )
- io.string.should have_nested_example_group_output("- spec (FAILED - 98)\n")
+ Spec::Runner::Reporter::Failure.new("g", "c s", RuntimeError.new)
+ )
+ io.string.should have_nested_example_group_output("- spec (FAILED - 98)\n")
+ end
end
- end
- def have_nested_example_group_output(expected_output)
- expected_full_output = "\nExampleGroup Child ExampleGroup GrandChild ExampleGroup\n#{expected_output}"
- ::Spec::Matchers::SimpleMatcher.new(expected_full_output) do |actual|
- actual == expected_full_output
+ describe "when having an expectation" do
+ it "should push failing spec name and failure number" do
+ formatter.example_failed(
+ example_group.it("spec"),
+ 98,
+ Spec::Runner::Reporter::Failure.new("g", "c s", Spec::Expectations::ExpectationNotMetError.new)
+ )
+ io.string.should have_nested_example_group_output("- spec (FAILED - 98)\n")
+ end
+ end
+
+ def have_nested_example_group_output(expected_output)
+ expected_full_output = "\nExampleGroup Child ExampleGroup GrandChild ExampleGroup\n#{expected_output}"
+ ::Spec::Matchers::SimpleMatcher.new(expected_full_output) do |actual|
+ actual == expected_full_output
+ end
end
end
end
- end
- describe "#start" do
- it "should push nothing on start" do
- formatter.start(5)
- io.string.should have_example_group_output("")
+ describe "#start" do
+ it "should push nothing on start" do
+ formatter.start(5)
+ io.string.should have_example_group_output("")
+ end
end
- end
- describe "#start_dump" do
- it "should push nothing on start dump" do
- formatter.start_dump
- io.string.should have_example_group_output("")
+ describe "#start_dump" do
+ it "should push nothing on start dump" do
+ formatter.start_dump
+ io.string.should have_example_group_output("")
+ end
end
- end
- describe "#example_passed" do
- it "should push passing spec name" do
- formatter.example_passed(example_group.it("spec"))
- io.string.should have_example_group_output("- spec\n")
+ describe "#example_passed" do
+ it "should push passing spec name" do
+ formatter.example_passed(example_group.it("spec"))
+ io.string.should have_example_group_output("- spec\n")
+ end
end
- end
- describe "#example_pending" do
- it "should push pending example name and message" do
- formatter.example_pending(example_group.examples.first, 'reason')
- io.string.should have_example_group_output("- example (PENDING: reason)\n")
- end
+ describe "#example_pending" do
+ it "should push pending example name and message" do
+ formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
+ io.string.should have_example_group_output("- example (PENDING: reason)\n")
+ end
- it "should dump pending" do
- formatter.example_pending(example_group.examples.first, 'reason')
- io.rewind
- formatter.dump_pending
- io.string.should =~ /Pending\:\nExampleGroup example \(reason\)\n/
+ it "should dump pending" do
+ formatter.example_pending(example_group.examples.first, 'reason', "#{__FILE__}:#{__LINE__}")
+ io.rewind
+ formatter.dump_pending
+ io.string.should =~ /Pending\:\n\nExampleGroup example \(reason\)\n/
+ end
end
- end
- def have_example_group_output(expected_output)
- expected = "\nExampleGroup\n#{expected_output}"
- ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
- actual == expected
+ def have_example_group_output(expected_output)
+ expected = "\nExampleGroup\n#{expected_output}"
+ ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
+ actual == expected
+ end
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb
deleted file mode 100644
index 37fb7c670..000000000
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-require File.dirname(__FILE__) + '/../../../../spec_helper.rb'
-require 'spec/runner/formatter/story/html_formatter'
-
-module Spec
- module Runner
- module Formatter
- module Story
- describe HtmlFormatter do
- before :each do
- @out = StringIO.new
- @options = mock('options')
- @reporter = HtmlFormatter.new(@options, @out)
- end
-
- it "should just be poked at" do
- @reporter.run_started(1)
- @reporter.story_started('story_title', 'narrative')
-
- @reporter.scenario_started('story_title', 'succeeded_scenario_name')
- @reporter.step_succeeded('given', 'succeded_step', 'one', 'two')
- @reporter.scenario_succeeded('story_title', 'succeeded_scenario_name')
-
- @reporter.scenario_started('story_title', 'pending_scenario_name')
- @reporter.step_pending('when', 'pending_step', 'un', 'deux')
- @reporter.scenario_pending('story_title', 'pending_scenario_name', 'not done')
-
- @reporter.scenario_started('story_title', 'failed_scenario_name')
- @reporter.step_failed('then', 'failed_step', 'en', 'to')
- @reporter.scenario_failed('story_title', 'failed_scenario_name', NameError.new('sup'))
-
- @reporter.scenario_started('story_title', 'scenario_with_given_scenario_name')
- @reporter.found_scenario('given scenario', 'succeeded_scenario_name')
-
- @reporter.story_ended('story_title', 'narrative')
- @reporter.run_ended
- end
-
- it "should create spans for params" do
- @reporter.step_succeeded('given', 'a $coloured $animal', 'brown', 'dog')
- @out.string.should == " <li class=\"passed\">Given a <span class=\"param\">brown</span> <span class=\"param\">dog</span></li>\n"
- end
-
- it 'should create spanes for params in regexp steps' do
- @reporter.step_succeeded :given, /a (pink|blue) (.*)/, 'brown', 'dog'
- @out.string.should == " <li class=\"passed\">Given a <span class=\"param\">brown</span> <span class=\"param\">dog</span></li>\n"
- end
-
- it "should create a ul for collected_steps" do
- @reporter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel'])
- @out.string.should == (<<-EOF)
- <ul id="stock_steps" style="display: none;">
- <li>Given a $coloured $animal</li>
- <li>Given a $n legged eel</li>
- </ul>
-EOF
- end
- end
- end
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb
deleted file mode 100644
index 626ec4628..000000000
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb
+++ /dev/null
@@ -1,439 +0,0 @@
-require File.dirname(__FILE__) + '/../../../../spec_helper.rb'
-require 'spec/runner/formatter/story/plain_text_formatter'
-
-module Spec
- module Runner
- module Formatter
- module Story
- describe PlainTextFormatter do
- before :each do
- # given
- @out = StringIO.new
- @tweaker = mock('tweaker')
- @tweaker.stub!(:tweak_backtrace)
- @options = mock('options')
- @options.stub!(:colour).and_return(false)
- @options.stub!(:backtrace_tweaker).and_return(@tweaker)
- @formatter = PlainTextFormatter.new(@options, @out)
- end
-
- it 'should summarize the number of scenarios when the run ends' do
- # when
- @formatter.run_started(3)
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario1')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario2')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario3')
- @formatter.run_ended
-
- # then
- @out.string.should include('3 scenarios')
- end
-
- it 'should summarize the number of successful scenarios when the run ends' do
- # when
- @formatter.run_started(3)
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario1')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario2')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario3')
- @formatter.run_ended
-
- # then
- @out.string.should include('3 scenarios: 3 succeeded')
- end
-
- it 'should summarize the number of failed scenarios when the run ends' do
- # when
- @formatter.run_started(3)
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario1')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
- @formatter.run_ended
-
- # then
- @out.string.should include("3 scenarios: 1 succeeded, 2 failed")
- end
-
- it 'should end cleanly (no characters on the last line) with successes' do
- # when
- @formatter.run_started(1)
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario')
- @formatter.run_ended
-
- # then
- @out.string.should =~ /\n\z/
- end
-
- it 'should end cleanly (no characters on the last line) with failures' do
- # when
- @formatter.run_started(1)
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_failed('story', 'scenario', exception_from { raise RuntimeError, 'oops' })
- @formatter.run_ended
-
- # then
- @out.string.should =~ /\n\z/
- end
-
- it 'should end cleanly (no characters on the last line) with pending steps' do
- # when
- @formatter.run_started(1)
- @formatter.scenario_started(nil, nil)
- @formatter.step_pending(:then, 'do pend')
- @formatter.scenario_pending('story', 'scenario', exception_from { raise RuntimeError, 'oops' })
- @formatter.run_ended
-
- # then
- @out.string.should =~ /\n\z/
- end
-
- it 'should summarize the number of pending scenarios when the run ends' do
- # when
- @formatter.run_started(3)
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario1')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_pending('story', 'scenario2', 'message')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_pending('story', 'scenario3', 'message')
- @formatter.run_ended
-
- # then
- @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending")
- end
-
- it "should only count the first failure in one scenario" do
- # when
- @formatter.run_started(3)
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario1')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
- @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' })
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
- @formatter.run_ended
-
- # then
- @out.string.should include("3 scenarios: 1 succeeded, 2 failed")
- end
-
- it "should only count the first pending in one scenario" do
- # when
- @formatter.run_started(3)
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario1')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_pending('story', 'scenario2', 'because ...')
- @formatter.scenario_pending('story', 'scenario2', 'because ...')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_pending('story', 'scenario3', 'because ...')
- @formatter.run_ended
-
- # then
- @out.string.should include("3 scenarios: 1 succeeded, 0 failed, 2 pending")
- end
-
- it "should only count a failure before the first pending in one scenario" do
- # when
- @formatter.run_started(3)
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario1')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_pending('story', 'scenario2', exception_from { raise RuntimeError, 'oops' })
- @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops again' })
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops' })
- @formatter.run_ended
-
- # then
- @out.string.should include("3 scenarios: 1 succeeded, 1 failed, 1 pending")
- end
-
- it 'should produce details of the first failure each failed scenario when the run ends' do
- # when
- @formatter.run_started(3)
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_succeeded('story', 'scenario1')
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2' })
- @formatter.scenario_failed('story', 'scenario2', exception_from { raise RuntimeError, 'oops2 - this one should not appear' })
- @formatter.scenario_started(nil, nil)
- @formatter.scenario_failed('story', 'scenario3', exception_from { raise RuntimeError, 'oops3' })
- @formatter.run_ended
-
- # then
- @out.string.should include("FAILURES:\n")
- @out.string.should include("1) story (scenario2) FAILED")
- @out.string.should include("RuntimeError: oops2")
- @out.string.should_not include("RuntimeError: oops2 - this one should not appear")
- @out.string.should include("2) story (scenario3) FAILED")
- @out.string.should include("RuntimeError: oops3")
- end
-
- it 'should produce details of each pending step when the run ends' do
- # when
- @formatter.run_started(2)
- @formatter.story_started('story 1', 'narrative')
- @formatter.scenario_started('story 1', 'scenario 1')
- @formatter.step_pending(:given, 'todo 1', [])
- @formatter.story_started('story 2', 'narrative')
- @formatter.scenario_started('story 2', 'scenario 2')
- @formatter.step_pending(:given, 'todo 2', [])
- @formatter.run_ended
-
- # then
- @out.string.should include("Pending Steps:\n")
- @out.string.should include("1) story 1 (scenario 1): todo 1")
- @out.string.should include("2) story 2 (scenario 2): todo 2")
- end
-
- it 'should document a story title and narrative' do
- # when
- @formatter.story_started 'story', 'narrative'
-
- # then
- @out.string.should include("Story: story\n\n narrative")
- end
-
- it 'should document a scenario name' do
- # when
- @formatter.scenario_started 'story', 'scenario'
-
- # then
- @out.string.should include("\n\n Scenario: scenario")
- end
-
- it 'should document a step by sentence-casing its name' do
- # when
- @formatter.step_succeeded :given, 'a context'
- @formatter.step_succeeded :when, 'an event'
- @formatter.step_succeeded :then, 'an outcome'
-
- # then
- @out.string.should include("\n\n Given a context\n\n When an event\n\n Then an outcome")
- end
-
- it 'should document additional givens using And' do
- # when
- @formatter.step_succeeded :given, 'step 1'
- @formatter.step_succeeded :given, 'step 2'
- @formatter.step_succeeded :given, 'step 3'
-
- # then
- @out.string.should include(" Given step 1\n And step 2\n And step 3")
- end
-
- it 'should document additional events using And' do
- # when
- @formatter.step_succeeded :when, 'step 1'
- @formatter.step_succeeded :when, 'step 2'
- @formatter.step_succeeded :when, 'step 3'
-
- # then
- @out.string.should include(" When step 1\n And step 2\n And step 3")
- end
-
- it 'should document additional outcomes using And' do
- # when
- @formatter.step_succeeded :then, 'step 1'
- @formatter.step_succeeded :then, 'step 2'
- @formatter.step_succeeded :then, 'step 3'
-
- # then
- @out.string.should include(" Then step 1\n And step 2\n And step 3")
- end
-
- it 'should document a GivenScenario followed by a Given using And' do
- # when
- @formatter.step_succeeded :'given scenario', 'a scenario'
- @formatter.step_succeeded :given, 'a context'
-
- # then
- @out.string.should include(" Given scenario a scenario\n And a context")
- end
-
- it 'should document steps with replaced params' do
- @formatter.step_succeeded :given, 'a $coloured dog with $n legs', 'pink', 21
- @out.string.should include(" Given a pink dog with 21 legs")
- end
-
- it 'should document steps that include dollar signs ($)' do
- @formatter.step_succeeded :given, 'kicks that cost $$amount', 50
- @out.string.should include("Given kicks that cost $50")
- end
-
- it 'should document regexp steps with replaced params' do
- @formatter.step_succeeded :given, /a (pink|blue) dog with (.*) legs/, 'pink', 21
- @out.string.should include(" Given a pink dog with 21 legs")
- end
-
- it 'should document regex steps that include dollar signs ($)' do
- @formatter.step_succeeded :given, /kicks that cost \$(\d+)/, 50
- @out.string.should include("Given kicks that cost $50")
- end
-
- it "should append PENDING for the first pending step" do
- @formatter.scenario_started('','')
- @formatter.step_pending(:given, 'a context')
-
- @out.string.should include('Given a context (PENDING)')
- end
-
- it "should append PENDING for pending after already pending" do
- @formatter.scenario_started('','')
- @formatter.step_pending(:given, 'a context')
- @formatter.step_pending(:when, 'I say hey')
-
- @out.string.should include('When I say hey (PENDING)')
- end
-
- it "should append FAILED for the first failiure" do
- @formatter.scenario_started('','')
- @formatter.step_failed(:given, 'a context')
-
- @out.string.should include('Given a context (FAILED)')
- end
-
- it "should append SKIPPED for the second failiure" do
- @formatter.scenario_started('','')
- @formatter.step_failed(:given, 'a context')
- @formatter.step_failed(:when, 'I say hey')
-
- @out.string.should include('When I say hey (SKIPPED)')
- end
-
- it "should append SKIPPED for a failure after PENDING" do
- @formatter.scenario_started('','')
- @formatter.step_pending(:given, 'a context')
- @formatter.step_failed(:when, 'I say hey')
-
- @out.string.should include('When I say hey (SKIPPED)')
- end
-
- it "should print steps which succeeded in green" do
- @out.stub!(:tty?).and_return(true)
- @options.stub!(:colour).and_return(true)
-
- @formatter.scenario_started('','')
- @formatter.step_succeeded(:given, 'a context')
-
- @out.string.should =~ /\e\[32m[\n\s]+Given a context\e\[0m/m
- end
-
- it "should print failed steps in red" do
- @out.stub!(:tty?).and_return(true)
- @options.stub!(:colour).and_return(true)
-
- @formatter.scenario_started('','')
- @formatter.step_failed(:given, 'a context')
-
- @out.string.should =~ /\e\[31m[\n\s]+Given a context\e\[0m/m
- end
-
- it "should print ' (FAILED)' in red" do
- @out.stub!(:tty?).and_return(true)
- @options.stub!(:colour).and_return(true)
-
- @formatter.scenario_started('','')
- @formatter.step_failed(:given, 'a context')
-
- @out.string.should =~ /\e\[31m \(FAILED\)\e\[0m/
- end
-
- it "should print pending steps in yellow" do
- @out.stub!(:tty?).and_return(true)
- @options.stub!(:colour).and_return(true)
-
- @formatter.scenario_started('','')
- @formatter.step_pending(:given, 'a context')
-
- @out.string.should =~ /\e\[33m[\n\s]+Given a context\e\[0m/m
- end
-
- it "should print ' (PENDING)' in yellow" do
- @out.stub!(:tty?).and_return(true)
- @options.stub!(:colour).and_return(true)
-
- @formatter.scenario_started('','')
- @formatter.step_pending(:given, 'a context')
-
- @out.string.should =~ /\e\[33m \(PENDING\)\e\[0m/
- end
-
- it "should print skipped steps in yellow if the scenario is already pending" do
- @out.stub!(:tty?).and_return(true)
- @options.stub!(:colour).and_return(true)
-
- @formatter.scenario_started('','')
- @formatter.step_pending(:given, 'a context')
- @formatter.step_failed(:when, 'I say hey')
-
- @out.string.should =~ /\e\[33m[\n\s]+When I say hey\e\[0m/m
- end
-
- it "should print ' (SKIPPED)' in yellow if the scenario is already pending" do
- @out.stub!(:tty?).and_return(true)
- @options.stub!(:colour).and_return(true)
-
- @formatter.scenario_started('','')
- @formatter.step_pending(:given, 'a context')
- @formatter.step_failed(:when, 'I say hey')
-
- @out.string.should =~ /\e\[33m \(SKIPPED\)\e\[0m/
- end
-
- it "should print skipped steps in red if the scenario has already failed" do
- @out.stub!(:tty?).and_return(true)
- @options.stub!(:colour).and_return(true)
-
- @formatter.scenario_started('','')
- @formatter.step_failed(:given, 'a context')
- @formatter.step_failed(:when, 'I say hey')
-
- @out.string.should =~ /\e\[31m[\n\s]+When I say hey\e\[0m/m
- end
-
- it "should print ' (SKIPPED)' in red if the scenario has already failed" do
- @out.stub!(:tty?).and_return(true)
- @options.stub!(:colour).and_return(true)
-
- @formatter.scenario_started('','')
- @formatter.step_failed(:given, 'a context')
- @formatter.step_failed(:when, 'I say hey')
-
- @out.string.should =~ /\e\[31m \(SKIPPED\)\e\[0m/m
- end
-
- it 'should print some white space after each story' do
- # when
- @formatter.story_ended 'title', 'narrative'
-
- # then
- @out.string.should include("\n\n")
- end
-
- it "should print nothing for collected_steps" do
- @formatter.collected_steps(['Given a $coloured $animal', 'Given a $n legged eel'])
- @out.string.should == ("")
- end
-
- it "should ignore messages it doesn't care about" do
- lambda {
- @formatter.this_method_does_not_exist
- }.should_not raise_error
- end
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html b/vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html
deleted file mode 100644
index 3f263747a..000000000
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html
+++ /dev/null
@@ -1,365 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>RSpec results</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Expires" content="-1" />
- <meta http-equiv="Pragma" content="no-cache" />
- <style type="text/css">
- body {
- margin: 0;
- padding: 0;
- background: #fff;
- font-size: 80%;
- }
- </style>
-</head>
-<body>
-<div class="rspec-report">
- <script type="text/javascript">
- // <![CDATA[
-function moveProgressBar(percentDone) {
- document.getElementById("rspec-header").style.width = percentDone +"%";
-}
-function makeRed(element_id) {
- document.getElementById(element_id).style.background = '#C40D0D';
- document.getElementById(element_id).style.color = '#FFFFFF';
-}
-
-function makeYellow(element_id) {
- if (element_id == "rspec-header" && document.getElementById(element_id).style.background != '#C40D0D')
- {
- document.getElementById(element_id).style.background = '#FAF834';
- document.getElementById(element_id).style.color = '#000000';
- }
- else
- {
- document.getElementById(element_id).style.background = '#FAF834';
- document.getElementById(element_id).style.color = '#000000';
- }
-}
-
- // ]]>
- </script>
- <style type="text/css">
-#rspec-header {
- background: #65C400; color: #fff;
-}
-
-.rspec-report h1 {
- margin: 0px 10px 0px 10px;
- padding: 10px;
- font-family: "Lucida Grande", Helvetica, sans-serif;
- font-size: 1.8em;
-}
-
-#summary {
- margin: 0; padding: 5px 10px;
- font-family: "Lucida Grande", Helvetica, sans-serif;
- text-align: right;
- position: absolute;
- top: 0px;
- right: 0px;
-}
-
-#summary p {
- margin: 0 0 0 2px;
-}
-
-#summary #totals {
- font-size: 1.2em;
-}
-
-.example_group {
- margin: 0 10px 5px;
- background: #fff;
-}
-
-dl {
- margin: 0; padding: 0 0 5px;
- font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
- padding: 3px;
- background: #65C400;
- color: #fff;
- font-weight: bold;
-}
-
-dd {
- margin: 5px 0 5px 5px;
- padding: 3px 3px 3px 18px;
-}
-
-dd.spec.passed {
- border-left: 5px solid #65C400;
- border-bottom: 1px solid #65C400;
- background: #DBFFB4; color: #3D7700;
-}
-
-dd.spec.failed {
- border-left: 5px solid #C20000;
- border-bottom: 1px solid #C20000;
- color: #C20000; background: #FFFBD3;
-}
-
-dd.spec.not_implemented {
- border-left: 5px solid #FAF834;
- border-bottom: 1px solid #FAF834;
- background: #FCFB98; color: #131313;
-}
-
-dd.spec.pending_fixed {
- border-left: 5px solid #0000C2;
- border-bottom: 1px solid #0000C2;
- color: #0000C2; background: #D3FBFF;
-}
-
-.backtrace {
- color: #000;
- font-size: 12px;
-}
-
-a {
- color: #BE5C00;
-}
-
-/* Ruby code, style similar to vibrant ink */
-.ruby {
- font-size: 12px;
- font-family: monospace;
- color: white;
- background-color: black;
- padding: 0.1em 0 0.2em 0;
-}
-
-.ruby .keyword { color: #FF6600; }
-.ruby .constant { color: #339999; }
-.ruby .attribute { color: white; }
-.ruby .global { color: white; }
-.ruby .module { color: white; }
-.ruby .class { color: white; }
-.ruby .string { color: #66FF00; }
-.ruby .ident { color: white; }
-.ruby .method { color: #FFCC00; }
-.ruby .number { color: white; }
-.ruby .char { color: white; }
-.ruby .comment { color: #9933CC; }
-.ruby .symbol { color: white; }
-.ruby .regex { color: #44B4CC; }
-.ruby .punct { color: white; }
-.ruby .escape { color: white; }
-.ruby .interp { color: white; }
-.ruby .expr { color: white; }
-
-.ruby .offending { background-color: gray; }
-.ruby .linenum {
- width: 75px;
- padding: 0.1em 1em 0.2em 0;
- color: #000000;
- background-color: #FFFBD3;
-}
-
- </style>
-
-<div id="rspec-header">
- <h1>RSpec Results</h1>
-
- <div id="summary">
- <p id="totals">&nbsp;</p>
- <p id="duration">&nbsp;</p>
- </div>
-</div>
-
-<div class="results">
-<div class="example_group">
- <dl>
- <dt id="example_group_1">Mocker</dt>
- <script type="text/javascript">moveProgressBar('5.8');</script>
- <dd class="spec passed"><span class="passed_spec_name">should be able to call mock()</span></dd>
- <script type="text/javascript">makeRed('rspec-header');</script>
- <script type="text/javascript">makeRed('example_group_1');</script>
- <script type="text/javascript">moveProgressBar('11.7');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should fail when expected message not received</span>
- <div class="failure" id="failure_1">
- <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=13">./failing_examples/mocking_example.rb:13</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
- <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</span>
-<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span> <span class="keyword">end</span>
-<span class="linenum">15</span> </code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('17.6');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should fail when messages are received out of order</span>
- <div class="failure" id="failure_2">
- <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=22">./failing_examples/mocking_example.rb:22</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
- <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span> <span class="keyword">end</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('23.5');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
- <div class="failure" id="failure_3">
- <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (any args) 0 times, but received it once</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=28">./failing_examples/mocking_example.rb:28</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
- <pre class="ruby"><code><span class="linenum">26</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should get yelled at when sending unexpected messages</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</span>
-<span class="offending"><span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span></span>
-<span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span>
-<span class="linenum">30</span> <span class="keyword">end</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('29.4');</script>
- <dd class="spec pending_fixed">
- <span class="failed_spec_name">has a bug we need to fix</span>
- <div class="failure" id="failure_4">
- <div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/mocking_example.rb&line=33">./failing_examples/mocking_example.rb:33</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
- <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</span></code></pre>
- </div>
- </dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_2">Running specs with --diff</dt>
- <script type="text/javascript">makeRed('example_group_2');</script>
- <script type="text/javascript">moveProgressBar('35.2');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should print diff of different strings</span>
- <div class="failure" id="failure_5">
- <div class="message"><pre>expected: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
- got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (using ==)
-Diff:
-@@ -1,4 +1,4 @@
- RSpec is a
--behavior driven development
-+behaviour driven development
- framework for Ruby
-</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/diffing_spec.rb&line=13">./failing_examples/diffing_spec.rb:13</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
- <pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
-<span class="linenum">12</span><span class="constant">EOF</span>
-<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
-<span class="linenum">14</span> <span class="keyword">end</span></code></pre>
- </div>
- </dd>
- <script type="text/javascript">moveProgressBar('41.1');</script>
- <dd class="spec failed">
- <span class="failed_spec_name">should print diff of different objects' pretty representation</span>
- <div class="failure" id="failure_6">
- <div class="message"><pre>expected &lt;Animal
-name=bob,
-species=tortoise
-&gt;
-, got &lt;Animal
-name=bob,
-species=giraffe
-&gt;
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- &lt;Animal
- name=bob,
--species=giraffe
-+species=tortoise
- &gt;
-</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/failing_examples/diffing_spec.rb&line=34">./failing_examples/diffing_spec.rb:34</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=52">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:52</a>
-<a href="txmt://open?url=file:///Users/aslakhellesoy/scm/rspec/trunk/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=48">./spec/spec/runner/formatter/spec_mate_formatter_spec.rb:48</a> </pre></div>
- <pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</span>
-<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</span>
-<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
-<span class="linenum">35</span> <span class="keyword">end</span>
-<span class="linenum">36</span><span class="keyword">end</span></code></pre>
- </div>
- </dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_3">A consumer of a stub</dt>
- <script type="text/javascript">moveProgressBar('47.0');</script>
- <dd class="spec passed"><span class="passed_spec_name">should be able to stub methods on any Object</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_4">A stubbed method on a class</dt>
- <script type="text/javascript">moveProgressBar('52.9');</script>
- <dd class="spec passed"><span class="passed_spec_name">should return the stubbed value</span></dd>
- <script type="text/javascript">moveProgressBar('58.8');</script>
- <dd class="spec passed"><span class="passed_spec_name">should revert to the original method after each spec</span></dd>
- <script type="text/javascript">moveProgressBar('64.7');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_5">A mock</dt>
- <script type="text/javascript">moveProgressBar('70.5');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub!</span></dd>
- <script type="text/javascript">moveProgressBar('76.4');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock</span></dd>
- <script type="text/javascript">moveProgressBar('82.3');</script>
- <dd class="spec passed"><span class="passed_spec_name">can stub! and mock the same message</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_6">pending example (using pending method)</dt>
- <script type="text/javascript">makeYellow('example_group_6');</script>
- <script type="text/javascript">moveProgressBar('88.2');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as &quot;PENDING: for some reason&quot; (PENDING: for some reason)</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_7">pending example (with no block)</dt>
- <script type="text/javascript">makeYellow('example_group_7');</script>
- <script type="text/javascript">moveProgressBar('94.1');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should be reported as &quot;PENDING: Not Yet Implemented&quot; (PENDING: Not Yet Implemented)</span></dd>
- </dl>
-</div>
-<div class="example_group">
- <dl>
- <dt id="example_group_8">pending example (with block for pending)</dt>
- <script type="text/javascript">makeYellow('example_group_8');</script>
- <script type="text/javascript">moveProgressBar('100.0');</script>
- <dd class="spec not_implemented"><span class="not_implemented_spec_name">should have a failing block, passed to pending, reported as &quot;PENDING: for some reason&quot; (PENDING: for some reason)</span></dd>
- </dl>
-</div>
-<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>x seconds</strong>";</script>
-<script type="text/javascript">document.getElementById('totals').innerHTML = "17 examples, 6 failures, 3 pending";</script>
-</div>
-</div>
-</body>
-</html>
diff --git a/vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html b/vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html
index 60f8d1e2e..54d761901 100644
--- a/vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html
+++ b/vendor/plugins/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html
@@ -16,9 +16,6 @@
font-size: 80%;
}
</style>
-</head>
-<body>
-<div class="rspec-report">
<script type="text/javascript">
// <![CDATA[
function moveProgressBar(percentDone) {
@@ -46,7 +43,7 @@ function makeYellow(element_id) {
</script>
<style type="text/css">
#rspec-header {
- background: #65C400; color: #fff;
+ background: #65C400; color: #fff; height: 4em;
}
.rspec-report h1 {
@@ -54,15 +51,16 @@ function makeYellow(element_id) {
padding: 10px;
font-family: "Lucida Grande", Helvetica, sans-serif;
font-size: 1.8em;
+ position: absolute;
}
#summary {
margin: 0; padding: 5px 10px;
font-family: "Lucida Grande", Helvetica, sans-serif;
text-align: right;
- position: absolute;
top: 0px;
right: 0px;
+ float:right;
}
#summary p {
@@ -165,9 +163,14 @@ a {
}
</style>
+</head>
+<body>
+<div class="rspec-report">
<div id="rspec-header">
- <h1>RSpec Results</h1>
+ <div id="label">
+ <h1>RSpec Code Examples</h1>
+ </div>
<div id="summary">
<p id="totals">&nbsp;</p>
@@ -187,47 +190,47 @@ a {
<dd class="spec failed">
<span class="failed_spec_name">should fail when expected message not received</span>
<div class="failure" id="failure_1">
- <div class="message"><pre>Mock 'poke me' expected :poke with (any args) once, but received it 0 times</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/mocking_example.rb&line=13">./failing_examples/mocking_example.rb:13</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
- <pre class="ruby"><code><span class="linenum">11</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="linenum">12</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</span>
-<span class="offending"><span class="linenum">13</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
-<span class="linenum">14</span> <span class="keyword">end</span>
-<span class="linenum">15</span> </code></pre>
+ <div class="message"><pre>Mock &quot;poke me&quot; expected :poke with (any args) once, but received it 0 times</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=11">./examples/failing/mocking_example.rb:11</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">9</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">should fail when expected message not received</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="linenum">10</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">poke me</span><span class="punct">&quot;)</span>
+<span class="offending"><span class="linenum">11</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:poke</span><span class="punct">)</span></span>
+<span class="linenum">12</span> <span class="keyword">end</span>
+<span class="linenum">13</span> </code></pre>
</div>
</dd>
<script type="text/javascript">moveProgressBar('17.6');</script>
<dd class="spec failed">
<span class="failed_spec_name">should fail when messages are received out of order</span>
<div class="failure" id="failure_2">
- <div class="message"><pre>Mock 'one two three' received :three out of order</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/mocking_example.rb&line=22">./failing_examples/mocking_example.rb:22</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
- <pre class="ruby"><code><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
-<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
-<span class="offending"><span class="linenum">22</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
-<span class="linenum">23</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
-<span class="linenum">24</span> <span class="keyword">end</span></code></pre>
+ <div class="message"><pre>Mock &quot;one two three&quot; received :three out of order</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=20">./examples/failing/mocking_example.rb:20</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">18</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_receive</span><span class="punct">(</span><span class="symbol">:three</span><span class="punct">).</span><span class="ident">ordered</span>
+<span class="linenum">19</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">one</span>
+<span class="offending"><span class="linenum">20</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">three</span></span>
+<span class="linenum">21</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">two</span>
+<span class="linenum">22</span> <span class="keyword">end</span></code></pre>
</div>
</dd>
<script type="text/javascript">moveProgressBar('23.5');</script>
<dd class="spec failed">
<span class="failed_spec_name">should get yelled at when sending unexpected messages</span>
<div class="failure" id="failure_3">
- <div class="message"><pre>Mock 'don't talk to me' expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/mocking_example.rb&line=29">./failing_examples/mocking_example.rb:29</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
- <pre class="ruby"><code><span class="linenum">27</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</span>
-<span class="linenum">28</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span>
-<span class="offending"><span class="linenum">29</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
-<span class="linenum">30</span> <span class="keyword">end</span></code></pre>
+ <div class="message"><pre>Mock &quot;don't talk to me&quot; expected :any_message_at_all with (no args) 0 times, but received it once</pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=27">./examples/failing/mocking_example.rb:27</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">25</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">don't talk to me</span><span class="punct">&quot;)</span>
+<span class="linenum">26</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">should_not_receive</span><span class="punct">(</span><span class="symbol">:any_message_at_all</span><span class="punct">)</span>
+<span class="offending"><span class="linenum">27</span> <span class="ident">mock</span><span class="punct">.</span><span class="ident">any_message_at_all</span></span>
+<span class="linenum">28</span> <span class="keyword">end</span></code></pre>
</div>
</dd>
<script type="text/javascript">moveProgressBar('29.4');</script>
@@ -235,15 +238,15 @@ a {
<span class="failed_spec_name">has a bug we need to fix</span>
<div class="failure" id="failure_4">
<div class="message"><pre>Expected pending 'here is the bug' to fail. No Error was raised.</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/mocking_example.rb&line=33">./failing_examples/mocking_example.rb:33</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
- <pre class="ruby"><code><span class="linenum">31</span>
-<span class="linenum">32</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
-<span class="offending"><span class="linenum">33</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</span> <span class="keyword">do</span></span>
-<span class="linenum">34</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
-<span class="linenum">35</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</span></code></pre>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/mocking_example.rb&line=31">./examples/failing/mocking_example.rb:31</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
+ <pre class="ruby"><code><span class="linenum">29</span>
+<span class="linenum">30</span> <span class="ident">it</span> <span class="punct">&quot;</span><span class="string">has a bug we need to fix</span><span class="punct">&quot;</span> <span class="keyword">do</span>
+<span class="offending"><span class="linenum">31</span> <span class="ident">pending</span> <span class="punct">&quot;</span><span class="string">here is the bug</span><span class="punct">&quot;</span> <span class="keyword">do</span></span>
+<span class="linenum">32</span> <span class="comment"># Actually, no. It's fixed. This will fail because it passes :-)</span>
+<span class="linenum">33</span> <span class="ident">mock</span> <span class="punct">=</span> <span class="ident">mock</span><span class="punct">(&quot;</span><span class="string">Bug</span><span class="punct">&quot;)</span></code></pre>
</div>
</dd>
</dl>
@@ -258,17 +261,18 @@ a {
<div class="failure" id="failure_5">
<div class="message"><pre>expected: &quot;RSpec is a\nbehaviour driven development\nframework for Ruby\n&quot;,
got: &quot;RSpec is a\nbehavior driven development\nframework for Ruby\n&quot; (using ==)
-Diff:
+
+ Diff:
@@ -1,4 +1,4 @@
RSpec is a
-behaviour driven development
+behavior driven development
framework for Ruby
</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/diffing_spec.rb&line=13">./failing_examples/diffing_spec.rb:13</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/diffing_spec.rb&line=13">./examples/failing/diffing_spec.rb:13</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
<pre class="ruby"><code><span class="linenum">11</span><span class="ident">framework</span> <span class="keyword">for</span> <span class="constant">Ruby</span>
<span class="linenum">12</span><span class="constant">EOF</span>
<span class="offending"><span class="linenum">13</span> <span class="ident">usa</span><span class="punct">.</span><span class="ident">should</span> <span class="punct">==</span> <span class="ident">uk</span></span>
@@ -279,27 +283,24 @@ Diff:
<dd class="spec failed">
<span class="failed_spec_name">should print diff of different objects' pretty representation</span>
<div class="failure" id="failure_6">
- <div class="message"><pre>expected &lt;Animal
+ <div class="message"><pre>
+expected &lt;Animal
name=bob,
species=tortoise
&gt;
-, got &lt;Animal
+
+ got &lt;Animal
name=bob,
species=giraffe
&gt;
- (using .eql?)
-Diff:
-@@ -1,5 +1,5 @@
- &lt;Animal
- name=bob,
--species=tortoise
-+species=giraffe
- &gt;
+
+
+(compared using eql?)
</pre></div>
- <div class="backtrace"><pre><a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/failing_examples/diffing_spec.rb&line=34">./failing_examples/diffing_spec.rb:34</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=50">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:50</a>
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> :in `chdir'
-<a href="txmt://open?url=file:///Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb&line=46">/Users/david/projects/ruby/rspec/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb:46</a> </pre></div>
+ <div class="backtrace"><pre><a href="txmt://open?url=file://./examples/failing/diffing_spec.rb&line=34">./examples/failing/diffing_spec.rb:34</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=49">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:49</a>
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> :in `chdir'
+<a href="txmt://open?url=file://./spec/spec/runner/formatter/text_mate_formatter_spec.rb&line=45">./spec/spec/runner/formatter/text_mate_formatter_spec.rb:45</a> </pre></div>
<pre class="ruby"><code><span class="linenum">32</span> <span class="ident">expected</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">giraffe</span><span class="punct">&quot;</span>
<span class="linenum">33</span> <span class="ident">actual</span> <span class="punct">=</span> <span class="constant">Animal</span><span class="punct">.</span><span class="ident">new</span> <span class="punct">&quot;</span><span class="string">bob</span><span class="punct">&quot;,</span> <span class="punct">&quot;</span><span class="string">tortoise</span><span class="punct">&quot;</span>
<span class="offending"><span class="linenum">34</span> <span class="ident">expected</span><span class="punct">.</span><span class="ident">should</span> <span class="ident">eql</span><span class="punct">(</span><span class="ident">actual</span><span class="punct">)</span></span>
diff --git a/vendor/plugins/rspec/spec/spec/runner/heckle_runner_spec.rb b/vendor/plugins/rspec/spec/spec/runner/heckle_runner_spec.rb
index 539d908c2..287ff856a 100644
--- a/vendor/plugins/rspec/spec/spec/runner/heckle_runner_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/heckle_runner_spec.rb
@@ -1,5 +1,5 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
+require 'spec_helper'
+unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} || Spec::Ruby.version.to_f == 1.9
require 'spec/runner/heckle_runner'
module Foo
@@ -21,18 +21,18 @@ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
end
it "should heckle all methods in all classes in a module" do
- @heckle_class.should_receive(:new).with("Foo::Bar", "one", rspec_options).and_return(@heckle)
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle)
- @heckle_class.should_receive(:new).with("Foo::Zap", "three", rspec_options).and_return(@heckle)
- @heckle_class.should_receive(:new).with("Foo::Zap", "four", rspec_options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Bar", "one", Spec::Runner.options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Zap", "three", Spec::Runner.options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Zap", "four", Spec::Runner.options).and_return(@heckle)
heckle_runner = Spec::Runner::HeckleRunner.new("Foo", @heckle_class)
heckle_runner.heckle_with
end
it "should heckle all methods in a class" do
- @heckle_class.should_receive(:new).with("Foo::Bar", "one", rspec_options).and_return(@heckle)
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Bar", "one", Spec::Runner.options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar", @heckle_class)
heckle_runner.heckle_with
@@ -46,14 +46,14 @@ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
end
it "should heckle specific method in a class (with #)" do
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar#two", @heckle_class)
heckle_runner.heckle_with
end
it "should heckle specific method in a class (with .)" do
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", Spec::Runner.options).and_return(@heckle)
heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar.two", @heckle_class)
heckle_runner.heckle_with
diff --git a/vendor/plugins/rspec/spec/spec/runner/heckler_spec.rb b/vendor/plugins/rspec/spec/spec/runner/heckler_spec.rb
index 7cf6606ec..00869df6e 100644
--- a/vendor/plugins/rspec/spec/spec/runner/heckler_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/heckler_spec.rb
@@ -1,13 +1,20 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
- require 'spec/runner/heckle_runner'
+if Spec::Ruby.version.to_f < 1.9
+ require 'spec_helper'
+ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
+ require 'spec/runner/heckle_runner'
- describe "Heckler" do
- it "should run examples on tests_pass?" do
- options = Spec::Runner::Options.new(StringIO.new, StringIO.new)
- options.should_receive(:run_examples).with().and_return(&options.method(:run_examples))
- heckler = Spec::Runner::Heckler.new('Array', 'push', options)
- heckler.tests_pass?
+ describe "Heckler" do
+ it "should run examples on tests_pass?" do
+ sub = Class.new(Spec::Runner::Heckler) do
+ def initialize(klass_name, method_name, rspec_options)
+ @rspec_options = rspec_options
+ end
+ end
+ opts = mock('options')
+ opts.should_receive(:run_examples).and_return(true)
+ heckler = sub.new('klass','method',opts)
+ heckler.tests_pass?
+ end
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb b/vendor/plugins/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb
index e097f2ec0..13b79432c 100644
--- a/vendor/plugins/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb
@@ -1,14 +1,26 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Runner
- describe "NoisyBacktraceTweaker" do
+ describe NoisyBacktraceTweaker do
before(:each) do
@error = RuntimeError.new
@tweaker = NoisyBacktraceTweaker.new
end
-
- it "should leave anything in lib spec dir" do
+
+ it "gracefully handles nil backtrace" do
+ lambda do
+ @tweaker.tweak_backtrace(@error)
+ end.should_not raise_error
+ end
+
+ it "cleans up double slashes" do
+ @error.set_backtrace(["/a//b/c//d.rb"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should include("/a/b/c/d.rb")
+ end
+
+ it "preserves lines in lib/spec" do
["expectations", "mocks", "runner", "stubs"].each do |child|
@error.set_backtrace(["/lib/spec/#{child}/anything.rb"])
@tweaker.tweak_backtrace(@error)
@@ -16,30 +28,24 @@ module Spec
end
end
- it "should leave anything in spec dir" do
+ it "preserves lines in spec/" do
@error.set_backtrace(["/lib/spec/expectations/anything.rb"])
@tweaker.tweak_backtrace(@error)
@error.backtrace.should_not be_empty
end
- it "should leave bin spec" do
+ it "preserves lines in bin/spec" do
@error.set_backtrace(["bin/spec:"])
@tweaker.tweak_backtrace(@error)
@error.backtrace.should_not be_empty
end
- it "should not barf on nil backtrace" do
- lambda do
- @tweaker.tweak_backtrace(@error)
- end.should_not raise_error
- end
-
- it "should clean up double slashes" do
- @error.set_backtrace(["/a//b/c//d.rb"])
+ it "ignores custom patterns" do
+ @tweaker.ignore_patterns(/custom_pattern/)
+ @error.set_backtrace(["custom_pattern"])
@tweaker.tweak_backtrace(@error)
- @error.backtrace.should include("/a/b/c/d.rb")
+ @error.backtrace.should_not be_empty
end
-
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/option_parser_spec.rb b/vendor/plugins/rspec/spec/spec/runner/option_parser_spec.rb
index 69212ff1b..a516bc686 100644
--- a/vendor/plugins/rspec/spec/spec/runner/option_parser_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/option_parser_spec.rb
@@ -1,7 +1,9 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-require 'fileutils'
+require 'spec_helper'
+require 'spec/runner/resources/custom_example_group_runner'
+require 'fakefs/safe'
+require 'fakefs/spec_helpers'
-describe "OptionParser" do
+describe "OptionParser" do
before(:each) do
@out = StringIO.new
@err = StringIO.new
@@ -13,11 +15,55 @@ describe "OptionParser" do
@parser.options
end
+ # FIXME - this entire file should run w/ fakefs
+ describe "with fakefs" do
+ extend FakeFS::SpecHelpers
+ use_fakefs
+
+ it "should not use colour by default" do
+ options = parse([])
+ options.colour.should == false
+ end
+
+ it "should use progress bar formatter by default" do
+ options = parse([])
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter)
+ end
+ end
+
+ it "should leave the submitted argv alone" do
+ args = ["--pattern", "foo"]
+ @parser.order!(args)
+ args.should == ["--pattern", "foo"]
+ end
+
it "should accept files to include" do
options = parse(["--pattern", "foo"])
options.filename_pattern.should == "foo"
end
+ it "should accept debugger option" do
+ options = parse(["--debugger"])
+ options.debug.should be_true
+ end
+
+ it "should accept -u form of debugger option" do
+ options = parse(["-u"])
+ options.debug.should be_true
+ end
+
+ it "should turn off the debugger option if drb is specified later" do
+ @parser.stub!(:parse_drb).with(no_args).and_return(true)
+ options = parse(["-u", "--drb"])
+ options.debug.should be_false
+ end
+
+ it "should turn off the debugger option if drb is specified first" do
+ @parser.stub!(:parse_drb).with(no_args).and_return(true)
+ options = parse(["--drb", "-u"])
+ options.debug.should be_false
+ end
+
it "should accept dry run option" do
options = parse(["--dry-run"])
options.dry_run.should be_true
@@ -46,23 +92,24 @@ describe "OptionParser" do
options.verbose.should be_nil
end
- it "should not use colour by default" do
+ it "should print help to stdout if no args and spec_comand?" do
+ Spec::Runner::OptionParser.stub!(:spec_command?).and_return(true)
options = parse([])
- options.colour.should == false
+ @out.rewind
+ @out.read.should match(/Usage: spec \(FILE\(:LINE\)\?\|DIRECTORY\|GLOB\)\+ \[options\]/m)
end
-
- it "should print help to stdout if no args" do
- pending 'A regression since 1.0.8' do
- options = parse([])
- @out.rewind
- @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m)
- end
+
+ it "should not print help to stdout if no args and NOT spec_command?" do
+ Spec::Runner::OptionParser.stub!(:spec_command?).and_return(false)
+ options = parse([])
+ @out.rewind
+ @out.read.should == ""
end
it "should print help to stdout" do
options = parse(["--help"])
@out.rewind
- @out.read.should match(/Usage: spec \(FILE\|DIRECTORY\|GLOB\)\+ \[options\]/m)
+ @out.read.should match(/Usage: spec \(FILE\(:LINE\)\?\|DIRECTORY\|GLOB\)\+ \[options\]/m)
end
it "should print instructions about how to require missing formatter" do
@@ -76,7 +123,7 @@ describe "OptionParser" do
it "should print version to stdout" do
options = parse(["--version"])
@out.rewind
- @out.read.should match(/RSpec-\d+\.\d+\.\d+.*\(build \d+\) - BDD for Ruby\nhttp:\/\/rspec.rubyforge.org\/\n/n)
+ @out.read.should match(/rspec \d+\.\d+\.\d+/n)
end
it "should require file when require specified" do
@@ -132,26 +179,26 @@ describe "OptionParser" do
options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
end
- it "should use html story formatter when format is h" do
- options = parse(["--format", "h"])
- options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter)
- end
-
it "should use html formatter when format is html" do
options = parse(["--format", "html"])
options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
end
- it "should use html story formatter when format is html" do
- options = parse(["--format", "html"])
- options.story_formatters[0].class.should equal(Spec::Runner::Formatter::Story::HtmlFormatter)
+ it "should use silent formatter when format is s" do
+ options = parse(["--format", "l"])
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::SilentFormatter)
+ end
+
+ it "should use silent formatter when format is silent" do
+ options = parse(["--format", "silent"])
+ options.formatters[0].class.should equal(Spec::Runner::Formatter::SilentFormatter)
end
it "should use html formatter with explicit output when format is html:test.html" do
FileUtils.rm 'test.html' if File.exist?('test.html')
options = parse(["--format", "html:test.html"])
options.formatters # creates the file
- File.should be_exist('test.html')
+ File.should exist('test.html')
options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
options.formatters[0].close
FileUtils.rm 'test.html'
@@ -172,11 +219,6 @@ describe "OptionParser" do
options.backtrace_tweaker.should be_instance_of(Spec::Runner::QuietBacktraceTweaker)
end
- it "should use progress bar formatter by default" do
- options = parse([])
- options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter)
- end
-
it "should use specdoc formatter when format is s" do
options = parse(["--format", "s"])
options.formatters[0].class.should equal(Spec::Runner::Formatter::SpecdocFormatter)
@@ -231,63 +273,116 @@ describe "OptionParser" do
describe "when attempting a focussed spec" do
attr_reader :file, :dir
- before do
- @original_rspec_options = $rspec_options
- @file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb"
+ before(:each) do
+ @original_rspec_options = Spec::Runner.options
+ @file = "#{File.dirname(__FILE__)}/line_number_query/line_number_query_fixture.rb"
@dir = File.dirname(file)
end
- after do
- $rspec_options = @original_rspec_options
+ after(:each) do
+ Spec::Runner.use @original_rspec_options
end
def parse(args)
options = super
- $rspec_options = options
+ Spec::Runner.use options
options.filename_pattern = "*_fixture.rb"
options
end
-
- it "should support --line to identify spec" do
- options = parse([file, "--line", "13"])
- options.line_number.should == 13
- options.examples.should be_empty
- options.run_examples
- options.examples.should eql(["d"])
- end
-
- it "should fail with error message if file is dir along with --line" do
- options = parse([dir, "--line", "169"])
- options.line_number.should == 169
- options.run_examples
- @err.string.should match(/You must specify one file, not a directory when using the --line option/n)
- end
-
- it "should fail with error message if file does not exist along with --line" do
- options = parse(["some file", "--line", "169"])
- proc do
+
+ describe 'with the --line flag' do
+ it "should correctly identify the spec" do
+ options = parse([file, "--line", "13"])
+ options.line_number.should == 13
+ options.examples.should be_empty
options.run_examples
- end.should raise_error
- end
-
- it "should fail with error message if more than one files are specified along with --line" do
- options = parse([file, file, "--line", "169"])
- options.run_examples
- @err.string.should match(/Only one file can be specified when using the --line option/n)
+ options.examples.should eql(["d"])
+ end
+
+ it "should fail with error message if specified file is a dir" do
+ options = parse([dir, "--line", "169"])
+ options.line_number.should == 169
+ options.run_examples
+ @err.string.should match(/You must specify one file, not a directory when providing a line number/n)
+ end
+
+
+ it "should fail with error message if file does not exist" do
+ options = parse(["some file", "--line", "169"])
+ proc do
+ options.run_examples
+ end.should raise_error
+ end
+
+ it "should fail with error message if more than one files are specified" do
+ options = parse([file, file, "--line", "169"])
+ options.run_examples
+ @err.string.should match(/Only one file can be specified when providing a line number/n)
+ end
+
+ it "should fail with error message if using simultaneously with --example" do
+ options = parse([file, "--example", "some example", "--line", "169"])
+ options.run_examples
+ @err.string.should match(/You cannot use --example and specify a line number/n)
+ end
end
-
- it "should fail with error message if --example and --line are used simultaneously" do
- options = parse([file, "--example", "some example", "--line", "169"])
- options.run_examples
- @err.string.should match(/You cannot use both --line and --example/n)
+
+ describe 'with the colon syntax (filename:LINE_NUMBER)' do
+
+ it "should strip the line number from the file name" do
+ options = parse(["#{file}:13"])
+ options.files.should include(file)
+ end
+
+ it "should correctly identify the spec" do
+ options = parse(["#{file}:13"])
+ options.line_number.should == 13
+ options.examples.should be_empty
+ options.run_examples
+ options.examples.should eql(["d"])
+ end
+
+ it "should fail with error message if specified file is a dir" do
+ options = parse(["#{dir}:169"])
+ options.line_number.should == 169
+ options.run_examples
+ @err.string.should match(/You must specify one file, not a directory when providing a line number/n)
+ end
+
+
+ it "should fail with error message if file does not exist" do
+ options = parse(["some file:169"])
+ proc do
+ options.run_examples
+ end.should raise_error
+ end
+
+ it "should fail with error message if more than one files are specified" do
+ options = parse([file, "#{file}:169"])
+ options.run_examples
+ @err.string.should match(/Only one file can be specified when providing a line number/n)
+ end
+
+ it "should fail with error message if using simultaneously with --example" do
+ options = parse(["#{file}:169", "--example", "some example"])
+ options.run_examples
+ @err.string.should match(/You cannot use --example and specify a line number/n)
+ end
end
+
end
if [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
it "should barf when --heckle is specified (and platform is windows)" do
lambda do
options = parse(["--heckle", "Spec"])
- end.should raise_error(StandardError, "Heckle not supported on Windows")
+ end.should raise_error(StandardError, /Heckle is not supported/)
+ end
+ elsif Spec::Ruby.version.to_f == 1.9
+ it "should barf when --heckle is specified (and platform is Ruby 1.9)" do
+ lambda do
+ options = parse(["--heckle", "Spec"])
+ end.should raise_error(StandardError, /Heckle is not supported/)
end
else
it "should heckle when --heckle is specified (and platform is not windows)" do
@@ -308,11 +403,36 @@ describe "OptionParser" do
end
it "should run parse drb after parsing options" do
- @parser.stub!(:parse_drb)
- @parser.should_receive(:parse_drb).with(["--drb"]).and_return(true)
+ @parser.should_receive(:parse_drb).with(no_args).and_return(true)
options = parse(["--options", File.dirname(__FILE__) + "/spec_drb.opts"])
end
+ it "should send all the arguments other than --drb back to the parser after parsing options" do
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options|
+ options.argv.should == ["example_file.rb", "--colour"]
+ end
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
+ end
+
+ it "runs specs locally if no drb is running when --drb is specified" do
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return(false)
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
+ options.__send__(:examples_should_be_run?).should be_true
+ end
+
+ it "says its running specs locally if no drb is running when --drb is specified" do
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return(false)
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
+ options.error_stream.rewind
+ options.error_stream.string.should =~ /Running specs locally/
+ end
+
+ it "does not run specs locally if drb is running when --drb is specified" do
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return(true)
+ options = parse(["example_file.rb", "--options", File.dirname(__FILE__) + "/spec_drb.opts"])
+ options.__send__(:examples_should_be_run?).should be_false
+ end
+
it "should read spaced and multi-line options from file when --options is specified" do
options = parse(["--options", File.dirname(__FILE__) + "/spec_spaced.opts"])
options.diff_format.should_not be_nil
@@ -391,4 +511,35 @@ describe "OptionParser" do
options = parse(["--runner", "Custom::ExampleGroupRunner:something"])
options.run_examples
end
+
+ it "sets options.autospec to true with --autospec" do
+ options = parse(["--autospec"])
+ options.autospec.should be(true)
+ end
+
+ describe "implicitly loading spec/spec.opts" do
+ extend FakeFS::SpecHelpers
+ use_fakefs
+ it "uses spec/spec.opts if present" do
+ File.open('spec/spec.opts', 'w') { |f| f.write "--colour" }
+ options = parse(['ignore.rb'])
+ options.colour.should be(true)
+ end
+
+ it "does not try to load spec/spec.opts if not present" do
+ FileUtils.rm 'spec/spec.opts'
+ options = parse(['ignore.rb'])
+ options.colour.should be(false)
+ end
+
+ it "uses specified opts if supplied" do
+ options = nil
+ File.open("spec/spec.opts",'w') { |f| f.write "" }
+ File.open("spec/alternate.opts",'w') { |f| f.write "--colour" }
+ options = parse(['-O','spec/alternate.opts'])
+ options.colour.should be(true)
+ end
+ end
+
+
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/options_spec.rb b/vendor/plugins/rspec/spec/spec/runner/options_spec.rb
index a64356b8c..bb1e0e8c3 100644
--- a/vendor/plugins/rspec/spec/spec/runner/options_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/options_spec.rb
@@ -1,4 +1,5 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
+require 'spec/runner/resources/custom_example_group_runner'
module Spec
module Runner
@@ -7,32 +8,45 @@ module Spec
@err = StringIO.new('')
@out = StringIO.new('')
@options = Options.new(@err, @out)
+
+ before_suite_parts = []
+ after_suite_parts = []
+ @options.stub!(:before_suite_parts).and_return(before_suite_parts)
+ @options.stub!(:after_suite_parts).and_return(after_suite_parts)
end
after(:each) do
Spec::Expectations.differ = nil
end
+
+ describe "#require_ruby_debug" do
+ it "should require ruby-debug" do
+ @options.stub!(:require)
+ @options.should_receive(:require).with("ruby-debug")
+ @options.require_ruby_debug
+ end
+ end
describe "#examples" do
it "should default to empty array" do
@options.examples.should == []
end
end
-
+
describe "#include_pattern" do
it "should default to '**/*_spec.rb'" do
@options.filename_pattern.should == "**/*_spec.rb"
end
end
-
+
describe "#files_to_load" do
-
+
it "should load files not following pattern if named explicitly" do
file = File.expand_path(File.dirname(__FILE__) + "/resources/a_bar.rb")
@options.files << file
@options.files_to_load.should include(file)
end
-
+
describe "with default --pattern" do
it "should load files named _spec.rb" do
dir = File.expand_path(File.dirname(__FILE__) + "/resources/")
@@ -40,33 +54,33 @@ module Spec
@options.files_to_load.should == ["#{dir}/a_spec.rb"]
end
end
-
+
describe "with explicit pattern (single)" do
before(:each) do
@options.filename_pattern = "**/*_foo.rb"
end
-
+
it "should load files following pattern" do
file = File.expand_path(File.dirname(__FILE__) + "/resources/a_foo.rb")
@options.files << file
@options.files_to_load.should include(file)
end
-
+
it "should load files in directories following pattern" do
dir = File.expand_path(File.dirname(__FILE__) + "/resources")
@options.files << dir
@options.files_to_load.should include("#{dir}/a_foo.rb")
end
-
+
it "should not load files in directories not following pattern" do
dir = File.expand_path(File.dirname(__FILE__) + "/resources")
@options.files << dir
@options.files_to_load.should_not include("#{dir}/a_bar.rb")
end
end
-
+
describe "with explicit pattern (comma,separated,values)" do
-
+
before(:each) do
@options.filename_pattern = "**/*_foo.rb,**/*_bar.rb"
end
@@ -77,22 +91,28 @@ module Spec
@options.files_to_load.should include("#{dir}/a_foo.rb")
@options.files_to_load.should include("#{dir}/a_bar.rb")
end
-
+
it "should support comma separated values with spaces" do
dir = File.expand_path(File.dirname(__FILE__) + "/resources")
@options.files << dir
@options.files_to_load.should include("#{dir}/a_foo.rb")
@options.files_to_load.should include("#{dir}/a_bar.rb")
end
-
+
end
-
+
end
describe "#backtrace_tweaker" do
it "should default to QuietBacktraceTweaker" do
@options.backtrace_tweaker.class.should == QuietBacktraceTweaker
end
+
+ it "adds custom ignored backtrace patterns" do
+ Spec::Runner.configuration.stub!(:ignored_backtrace_patterns).and_return([/custom_pattern/])
+ @options.run_examples
+ @options.backtrace_tweaker.ignored_patterns.should include(/custom_pattern/)
+ end
end
describe "#dry_run" do
@@ -101,6 +121,12 @@ module Spec
end
end
+ describe "#debug" do
+ it "should default to false" do
+ @options.debug.should == false
+ end
+ end
+
describe "#context_lines" do
it "should default to 3" do
@options.context_lines.should == 3
@@ -209,10 +235,26 @@ module Spec
end
end
+ describe "debug option specified" do
+ it "should cause ruby_debug to be required and do nothing" do
+ @options.debug = true
+ @options.should_receive(:require_ruby_debug)
+ @options.run_examples.should be_true
+ end
+ end
+
+ describe "debug option not specified" do
+ it "should not cause ruby_debug to be required" do
+ @options.debug = false
+ @options.should_not_receive(:require_ruby_debug)
+ @options.run_examples.should be_true
+ end
+ end
+
describe "#load_class" do
it "should raise error when not class name" do
lambda do
- @options.send(:load_class, 'foo', 'fruit', '--food')
+ @options.__send__(:load_class, 'foo', 'fruit', '--food')
end.should raise_error('"foo" is not a valid class name')
end
end
@@ -224,8 +266,23 @@ module Spec
end
end
+ describe "#number_of_examples" do
+ context "when --example is parsed" do
+ it "provides the number of examples parsed instead of the total number of examples collected" do
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
+ it "uses this example_group 1" do; end
+ it "uses this example_group 2" do; end
+ it "uses this example_group 3" do; end
+ end
+ @options.add_example_group @example_group
+ @options.parse_example("an example")
+ @options.number_of_examples.should == 1
+ end
+ end
+ end
+
describe "#add_example_group affecting passed in example_group" do
- it "runs all examples when options.examples is nil" do
+ it "runs all examples when options.examples is empty" do
example_1_has_run = false
example_2_has_run = false
@example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
@@ -237,7 +294,7 @@ module Spec
end
end
- @options.examples = nil
+ @options.examples.clear
@options.add_example_group @example_group
@options.run_examples
@@ -257,8 +314,6 @@ module Spec
end
end
- @options.examples = []
-
@options.add_example_group @example_group
@options.run_examples
example_1_has_run.should be_true
@@ -293,6 +348,40 @@ module Spec
end
describe "#run_examples" do
+ describe "with global predicate matchers" do
+ it "defines global predicate matcher methods on ExampleMethods" do
+ Spec::Runner.configuration.stub!(:predicate_matchers).and_return({:this => :that?})
+ group = Class.new(::Spec::Example::ExampleGroupDouble).describe("Some Examples")
+ example = group.new(::Spec::Example::ExampleProxy.new)
+
+ @options.run_examples
+ example.this
+ end
+
+ after(:each) do
+ Spec::Example::ExampleMethods.class_eval "undef :this"
+ end
+ end
+
+ describe "with a mock framework defined as a Symbol" do
+ it "includes Spec::Adapters::MockFramework" do
+ Spec::Runner.configuration.stub!(:mock_framework).and_return('spec/adapters/mock_frameworks/rspec')
+
+ Spec::Example::ExampleMethods.should_receive(:include).with(Spec::Adapters::MockFramework)
+
+ @options.run_examples
+ end
+ end
+
+ describe "with a mock framework defined as a Module" do
+ it "includes the module in ExampleMethods" do
+ mod = Module.new
+ Spec::Runner.configuration.stub!(:mock_framework).and_return(mod)
+ Spec::Example::ExampleMethods.should_receive(:include).with(mod)
+ @options.run_examples
+ end
+ end
+
describe "when not given a custom runner" do
it "should use the standard" do
runner = ::Spec::Runner::ExampleGroupRunner.new(@options)
@@ -355,14 +444,14 @@ module Spec
@options.after_suite_parts << lambda do |success|
success_result = success
end
-
+
@options.run_examples
success_result.should be_true
end
end
describe "and the suite fails" do
- before do
+ before(:each) do
@example_group.should_receive(:run).and_return(false)
end
@@ -382,12 +471,12 @@ module Spec
@heckle_runner_mock = mock("HeckleRunner")
@options.heckle_runner = @heckle_runner_mock
end
-
+
it "should heckle" do
@heckle_runner_mock.should_receive(:heckle_with)
@options.run_examples
end
-
+
it "shouldn't heckle recursively" do
heckled = false
@heckle_runner_mock.should_receive(:heckle_with) {
@@ -445,6 +534,14 @@ module Spec
end
end
end
+
+ describe "#add_dir_from_project_root_to_load_path" do
+ it "handles nil gracefully" do
+ load_path = double().as_null_object
+ @options.stub(:project_root).and_return(nil)
+ @options.add_dir_from_project_root_to_load_path(nil,load_path)
+ end
+ end
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/output_one_time_fixture.rb b/vendor/plugins/rspec/spec/spec/runner/output_one_time_fixture.rb
index 444730dc3..8a3a9fc72 100644
--- a/vendor/plugins/rspec/spec/spec/runner/output_one_time_fixture.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/output_one_time_fixture.rb
@@ -1,4 +1,4 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
describe "Running an Example" do
it "should not output twice" do
diff --git a/vendor/plugins/rspec/spec/spec/runner/output_one_time_fixture_runner.rb b/vendor/plugins/rspec/spec/spec/runner/output_one_time_fixture_runner.rb
index a0e61316e..b6b3761e4 100644
--- a/vendor/plugins/rspec/spec/spec/runner/output_one_time_fixture_runner.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/output_one_time_fixture_runner.rb
@@ -1,8 +1,7 @@
-dir = File.dirname(__FILE__)
-require "#{dir}/../../spec_helper"
+require "spec_helper"
-triggering_double_output = rspec_options
+triggering_double_output = Spec::Runner.options
options = Spec::Runner::OptionParser.parse(
- ["#{dir}/output_one_time_fixture.rb"], $stderr, $stdout
+ [File.dirname(__FILE__) + "/output_one_time_fixture.rb"], $stderr, $stdout
)
Spec::Runner::CommandLine.run(options)
diff --git a/vendor/plugins/rspec/spec/spec/runner/output_one_time_spec.rb b/vendor/plugins/rspec/spec/spec/runner/output_one_time_spec.rb
index 8f67a380a..c91bb0ffb 100644
--- a/vendor/plugins/rspec/spec/spec/runner/output_one_time_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/output_one_time_spec.rb
@@ -1,15 +1,14 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
+require 'ruby_forker'
module Spec
module Runner
describe CommandLine do
+ include RubyForker
it "should not output twice" do
- dir = File.dirname(__FILE__)
- Dir.chdir("#{dir}/../../..") do
- output =`ruby #{dir}/output_one_time_fixture_runner.rb`
- output.should include("1 example, 0 failures")
- output.should_not include("0 examples, 0 failures")
- end
+ output = ruby "-Ilib bin/spec spec/spec/runner/output_one_time_fixture_runner.rb"
+ output.should include("1 example, 0 failures")
+ output.should_not include("0 examples, 0 failures")
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb b/vendor/plugins/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb
index e47b6c735..30eaa7363 100644
--- a/vendor/plugins/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb
@@ -1,55 +1,104 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Runner
- describe "QuietBacktraceTweaker" do
+ describe QuietBacktraceTweaker do
before(:each) do
@error = RuntimeError.new
@tweaker = QuietBacktraceTweaker.new
end
- it "should not barf on nil backtrace" do
+ it "gracefully handles nil backtrace" do
lambda do
@tweaker.tweak_backtrace(@error)
end.should_not raise_error
end
- it "should remove anything from textmate ruby bundle" do
+ it "gracefully handle backtraces with newlines" do
+ @error.set_backtrace(["we like\nbin/spec:\nnewlines"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should include("we like\nnewlines")
+ end
+
+ it "cleans up double slashes" do
+ @error.set_backtrace(["/a//b/c//d.rb"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should include("/a/b/c/d.rb")
+ end
+
+ it "preserves lines from textmate ruby bundle" do
@error.set_backtrace(["/Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/tmruby.rb:147"])
@tweaker.tweak_backtrace(@error)
@error.backtrace.should be_empty
end
- it "should remove anything in lib spec dir" do
+ it "removes lines in lib/spec" do
["expectations", "mocks", "runner"].each do |child|
element="/lib/spec/#{child}/anything.rb"
@error.set_backtrace([element])
@tweaker.tweak_backtrace(@error)
- unless (@error.backtrace.empty?)
- raise("Should have tweaked away '#{element}'")
- end
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
end
end
- it "should remove mock_frameworks/rspec" do
+ it "removes lines in bin/spec" do
+ @error.set_backtrace(["bin/spec:"])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty
+ end
+
+ it "removes lines in mock_frameworks/rspec" do
element = "mock_frameworks/rspec"
@error.set_backtrace([element])
@tweaker.tweak_backtrace(@error)
- unless (@error.backtrace.empty?)
- raise("Should have tweaked away '#{element}'")
- end
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
end
- it "should remove bin spec" do
- @error.set_backtrace(["bin/spec:"])
+ it "removes custom patterns" do
+ element = "/vendor/lib/custom_pattern/"
+ @tweaker.ignore_patterns /custom_pattern/
+ @error.set_backtrace([element])
@tweaker.tweak_backtrace(@error)
- @error.backtrace.should be_empty
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
end
-
- it "should clean up double slashes" do
- @error.set_backtrace(["/a//b/c//d.rb"])
+
+ it "removes custom patterns added as a string" do
+ element = "/vendor/lib/custom_pattern/"
+ @tweaker.ignore_patterns "custom_pattern"
+ @error.set_backtrace([element])
@tweaker.tweak_backtrace(@error)
- @error.backtrace.should include("/a/b/c/d.rb")
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+
+ it "removes lines in mock_frameworks/rspec" do
+ element = "mock_frameworks/rspec"
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+
+ it "removes lines in rspec gem" do
+ ["/rspec-1.2.3/lib/spec.rb","/rspec-1.2.3/lib/spec/anything.rb","bin/spec:123"].each do |element|
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+ end
+
+ it "removes lines in pre-release rspec gems" do
+ ["/rspec-1.2.3.a1.gem/lib/spec.rb","/rspec-1.2.3.b1.gem/lib/spec.rb","/rspec-1.2.3.rc1.gem/lib/spec.rb"].each do |element|
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
+ end
+
+ it "removes lines in spork gem" do
+ ["/spork-1.2.3/lib/spec.rb","/spork-1.2.3/lib/spec/anything.rb","bin/spork:123"].each do |element|
+ @error.set_backtrace([element])
+ @tweaker.tweak_backtrace(@error)
+ @error.backtrace.should be_empty, "Should have removed line with '#{element}'"
+ end
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/reporter_spec.rb b/vendor/plugins/rspec/spec/spec/runner/reporter_spec.rb
index b02a4cf6f..556387dc7 100644
--- a/vendor/plugins/rspec/spec/spec/runner/reporter_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner/reporter_spec.rb
@@ -1,9 +1,9 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'spec_helper'
module Spec
module Runner
describe Reporter do
- attr_reader :formatter_output, :options, :backtrace_tweaker, :formatter, :reporter, :example_group
+ attr_reader :formatter_output, :options, :backtrace_tweaker, :formatter, :reporter, :example_group, :example_group_proxy, :example_proxy
before(:each) do
@formatter_output = StringIO.new
@options = Options.new(StringIO.new, StringIO.new)
@@ -13,15 +13,17 @@ module Spec
options.formatters << formatter
@reporter = Reporter.new(options)
@example_group = create_example_group("example_group")
- reporter.add_example_group example_group
+ @example_group_proxy = Spec::Example::ExampleGroupProxy.new(@example_group)
+ @example_proxy = Spec::Example::ExampleProxy.new
+ example_group.notify(reporter)
end
def failure
- Mocks::DuckTypeArgConstraint.new(:header, :exception)
+ Mocks::ArgumentMatchers::DuckTypeMatcher.new(:header, :exception)
end
- def create_example_group(description_text)
- example_group = Spec::Example::ExampleGroup.describe(description_text) do
+ def create_example_group(text)
+ example_group = Spec::Example::ExampleGroup.describe(text) do
it "should do something" do
end
end
@@ -31,55 +33,59 @@ module Spec
it "should assign itself as the reporter to options" do
options.reporter.should equal(@reporter)
end
-
+
it "should tell formatter when example_group is added" do
- formatter.should_receive(:add_example_group).with(example_group)
- reporter.add_example_group(example_group)
+ formatter.should_receive(:example_group_started).with(example_group_proxy)
+ example_group.notify(reporter)
end
-
+
it "should handle multiple example_groups with same name" do
- formatter.should_receive(:add_example_group).exactly(3).times
+ formatter.should_receive(:example_group_started).exactly(3).times
formatter.should_receive(:example_started).exactly(3).times
formatter.should_receive(:example_passed).exactly(3).times
formatter.should_receive(:start_dump)
formatter.should_receive(:dump_pending)
formatter.should_receive(:close).with(no_args)
formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0)
- reporter.add_example_group(create_example_group("example_group"))
- reporter.example_started("spec 1")
- reporter.example_finished("spec 1")
- reporter.add_example_group(create_example_group("example_group"))
- reporter.example_started("spec 2")
- reporter.example_finished("spec 2")
- reporter.add_example_group(create_example_group("example_group"))
- reporter.example_started("spec 3")
- reporter.example_finished("spec 3")
+ create_example_group("example_group").notify(reporter)
+ reporter.example_started(description_of("spec 1"))
+ reporter.example_finished(description_of("spec 1"))
+ create_example_group("example_group").notify(reporter)
+ reporter.example_started(description_of("spec 2"))
+ reporter.example_finished(description_of("spec 2"))
+ create_example_group("example_group").notify(reporter)
+ reporter.example_started(description_of("spec 3"))
+ reporter.example_finished(description_of("spec 3"))
reporter.dump
end
+
+ def description_of(example)
+ ::Spec::Example::ExampleProxy.new(String === example ? example : example.description)
+ end
it "should handle multiple examples with the same name" do
error=RuntimeError.new
- passing = ExampleGroup.new("example")
- failing = ExampleGroup.new("example")
-
- formatter.should_receive(:add_example_group).exactly(2).times
- formatter.should_receive(:example_passed).with(passing).exactly(2).times
- formatter.should_receive(:example_failed).with(failing, 1, failure)
- formatter.should_receive(:example_failed).with(failing, 2, failure)
- formatter.should_receive(:dump_failure).exactly(2).times
+ passing = ::Spec::Example::ExampleGroupDouble.new(example_proxy)
+ failing = ::Spec::Example::ExampleGroupDouble.new(example_proxy)
+
+ formatter.should_receive(:example_group_started).exactly(2).times
+ formatter.should_receive(:example_passed).with(description_of(passing)).exactly(2).times
+ formatter.should_receive(:example_failed).with(description_of(failing), 1, failure)
+ formatter.should_receive(:example_failed).with(description_of(failing), 2, failure)
+ formatter.should_receive(:dump_failure).exactly(2).times
formatter.should_receive(:start_dump)
formatter.should_receive(:dump_pending)
formatter.should_receive(:close).with(no_args)
formatter.should_receive(:dump_summary).with(anything(), 4, 2, 0)
backtrace_tweaker.should_receive(:tweak_backtrace).twice
- reporter.add_example_group(create_example_group("example_group"))
- reporter.example_finished(passing)
- reporter.example_finished(failing, error)
+ create_example_group("example_group").notify(reporter)
+ reporter.example_finished(description_of(passing))
+ reporter.example_finished(description_of(failing), error)
- reporter.add_example_group(create_example_group("example_group"))
- reporter.example_finished(passing)
- reporter.example_finished(failing, error)
+ create_example_group("example_group").notify(reporter)
+ reporter.example_finished(description_of(passing))
+ reporter.example_finished(description_of(failing), error)
reporter.dump
end
@@ -90,7 +96,7 @@ module Spec
formatter.should_receive(:close).with(no_args)
reporter.dump
end
-
+
it "should push time to formatter" do
formatter.should_receive(:start).with(5)
formatter.should_receive(:start_dump)
@@ -103,88 +109,134 @@ module Spec
reporter.end
reporter.dump
end
-
- describe Reporter, "reporting one passing example" do
+
+ describe "reporting one passing example" do
it "should tell formatter example passed" do
formatter.should_receive(:example_passed)
- reporter.example_finished("example")
+ reporter.example_finished(description_of("example"))
end
-
+
it "should not delegate to backtrace tweaker" do
formatter.should_receive(:example_passed)
backtrace_tweaker.should_not_receive(:tweak_backtrace)
- reporter.example_finished("example")
+ reporter.example_finished(description_of("example"))
end
-
+
it "should account for passing example in stats" do
formatter.should_receive(:example_passed)
formatter.should_receive(:start_dump)
formatter.should_receive(:dump_pending)
formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0)
formatter.should_receive(:close).with(no_args)
- reporter.example_finished("example")
+ reporter.example_finished(description_of("example"))
reporter.dump
end
end
-
- describe Reporter, "reporting one failing example" do
+
+ describe "reporting one failing example" do
it "should tell formatter that example failed" do
example = example_group.it("should do something") {}
formatter.should_receive(:example_failed)
- reporter.example_finished(example, RuntimeError.new)
+ reporter.example_finished(description_of(example), RuntimeError.new)
end
-
+
it "should delegate to backtrace tweaker" do
formatter.should_receive(:example_failed)
backtrace_tweaker.should_receive(:tweak_backtrace)
- reporter.example_finished(ExampleGroup.new("example"), RuntimeError.new)
+ reporter.example_finished(example_proxy, RuntimeError.new)
end
-
+
it "should account for failing example in stats" do
- example = ExampleGroup.new("example")
- formatter.should_receive(:example_failed).with(example, 1, failure)
+ example = ::Spec::Example::ExampleGroupDouble.new(example_proxy)
+ formatter.should_receive(:example_failed).with(description_of(example), 1, failure)
formatter.should_receive(:start_dump)
formatter.should_receive(:dump_pending)
formatter.should_receive(:dump_failure).with(1, anything())
formatter.should_receive(:dump_summary).with(anything(), 1, 1, 0)
formatter.should_receive(:close).with(no_args)
- reporter.example_finished(example, RuntimeError.new)
+ reporter.example_finished(description_of(example), RuntimeError.new)
reporter.dump
end
-
+
end
-
- describe Reporter, "reporting one pending example (ExamplePendingError)" do
+
+ describe "reporting one pending example (ExamplePendingError)" do
+ before :each do
+ @pending_error = Spec::Example::ExamplePendingError.new("reason")
+ end
+
it "should tell formatter example is pending" do
- example = ExampleGroup.new("example")
- formatter.should_receive(:example_pending).with(example, "reason")
- formatter.should_receive(:add_example_group).with(example_group)
- reporter.add_example_group(example_group)
- reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason"))
+ example = ExampleGroup.new(example_proxy)
+ formatter.should_receive(:example_pending).with(description_of(example), "reason")
+ formatter.should_receive(:example_group_started).with(example_group_proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example), @pending_error)
end
-
+
it "should account for pending example in stats" do
- example = ExampleGroup.new("example")
- formatter.should_receive(:example_pending).with(example, "reason")
+ example = ExampleGroup.new(example_proxy)
+ formatter.should_receive(:example_pending).with(description_of(example), "reason")
formatter.should_receive(:start_dump)
formatter.should_receive(:dump_pending)
formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
formatter.should_receive(:close).with(no_args)
- formatter.should_receive(:add_example_group).with(example_group)
- reporter.add_example_group(example_group)
- reporter.example_finished(example, Spec::Example::ExamplePendingError.new("reason"))
+ formatter.should_receive(:example_group_started).with(example_group_proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example), @pending_error)
reporter.dump
end
+
+ describe "to formatters which have example_pending's arity of 3 (which is now deprecated)" do
+ before :each do
+ Spec.stub!(:warn)
+
+ @deprecated_formatter = Class.new(@formatter.class) do
+ attr_reader :example_passed_to_method, :message_passed_to_method
+
+ def example_pending(example_passed_to_method, message_passed_to_method, deprecated_pending_location)
+ @example_passed_to_method = example_passed_to_method
+ @message_passed_to_method = message_passed_to_method
+ end
+ end.new(options, formatter_output)
+
+ options.formatters << @deprecated_formatter
+ end
+
+ it "should pass the correct example description to the formatter" do
+ proxy = Spec::Example::ExampleProxy.new("name")
+ example = ExampleGroup.new(proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example), @pending_error)
+
+ @deprecated_formatter.example_passed_to_method.should == proxy
+ end
+
+ it "should pass the correct pending error message to the formatter" do
+ example = ExampleGroup.new(example_proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example), @pending_error)
+
+ @deprecated_formatter.message_passed_to_method.should == @pending_error.message
+ end
+
+ it "should raise a deprecation warning" do
+ Spec.should_receive(:warn)
+
+ example = ExampleGroup.new(example_proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example), @pending_error)
+ end
+ end
end
-
- describe Reporter, "reporting one pending example (PendingExampleFixedError)" do
+
+ describe "reporting one pending example (PendingExampleFixedError)" do
it "should tell formatter pending example is fixed" do
formatter.should_receive(:example_failed) do |name, counter, failure|
failure.header.should == "'example_group should do something' FIXED"
end
- formatter.should_receive(:add_example_group).with(example_group)
- reporter.add_example_group(example_group)
- reporter.example_finished(example_group.examples.first, Spec::Example::PendingExampleFixedError.new("reason"))
+ formatter.should_receive(:example_group_started).with(example_group_proxy)
+ example_group.notify(reporter)
+ reporter.example_finished(description_of(example_group.examples.first), Spec::Example::PendingExampleFixedError.new("reason"))
end
end
end
diff --git a/vendor/plugins/rspec/spec/spec/runner/spec_drb.opts b/vendor/plugins/rspec/spec/spec/runner/spec_drb.opts
index 091e4c222..61f260b71 100644
--- a/vendor/plugins/rspec/spec/spec/runner/spec_drb.opts
+++ b/vendor/plugins/rspec/spec/spec/runner/spec_drb.opts
@@ -1 +1,2 @@
+--colour
--drb
diff --git a/vendor/plugins/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb b/vendor/plugins/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb
deleted file mode 100644
index 14602d934..000000000
--- a/vendor/plugins/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-describe "c" do
-
- it "1" do
- end
-
- it "2" do
- end
-
-end
-
-describe "d" do
-
- it "3" do
- end
-
- it "4" do
- end
-
-end
-
-class SpecParserSubject
-end
-
-describe SpecParserSubject do
-
- it "5" do
- end
-
-end
-
-describe SpecParserSubject, "described" do
-
- it "6" do
- end
-
-end
-
-describe SpecParserSubject, "described", :something => :something_else do
-
- it "7" do
- end
-
-end
-
-describe "described", :something => :something_else do
-
- it "8" do
- end
-
-end
-
-describe "e" do
-
- it "9" do
- end
-
- it "10" do
- end
-
- describe "f" do
- it "11" do
- end
-
- it "12" do
- end
- end
-
-end
diff --git a/vendor/plugins/rspec/spec/spec/runner/spec_parser_spec.rb b/vendor/plugins/rspec/spec/spec/runner/spec_parser_spec.rb
deleted file mode 100644
index 7204ba3e6..000000000
--- a/vendor/plugins/rspec/spec/spec/runner/spec_parser_spec.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-describe "SpecParser" do
- attr_reader :parser, :file
- before(:each) do
- @original_rspec_options = $rspec_options
- $rspec_options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
- @parser = Spec::Runner::SpecParser.new
- @file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb"
- load file
- end
-
- after do
- $rspec_options = @original_rspec_options
- end
-
- it "should find spec name for 'specify' at same line" do
- parser.spec_name_for(file, 5).should == "c 1"
- end
-
- it "should find spec name for 'specify' at end of spec line" do
- parser.spec_name_for(file, 6).should == "c 1"
- end
-
- it "should find context for 'context' above all specs" do
- parser.spec_name_for(file, 4).should == "c"
- end
-
- it "should find spec name for 'it' at same line" do
- parser.spec_name_for(file, 15).should == "d 3"
- end
-
- it "should find spec name for 'it' at end of spec line" do
- parser.spec_name_for(file, 16).should == "d 3"
- end
-
- it "should find context for 'describe' above all specs" do
- parser.spec_name_for(file, 14).should == "d"
- end
-
- it "should find nearest example name between examples" do
- parser.spec_name_for(file, 7).should == "c 1"
- end
-
- it "should find nothing outside a context" do
- parser.spec_name_for(file, 2).should be_nil
- end
-
- it "should find context name for type" do
- parser.spec_name_for(file, 26).should == "SpecParserSubject"
- end
-
- it "should find context and spec name for type" do
- parser.spec_name_for(file, 28).should == "SpecParserSubject 5"
- end
-
- it "should find context and description for type" do
- parser.spec_name_for(file, 33).should == "SpecParserSubject described"
- end
-
- it "should find context and description and example for type" do
- parser.spec_name_for(file, 36).should == "SpecParserSubject described 6"
- end
-
- it "should find context and description for type with modifications" do
- parser.spec_name_for(file, 40).should == "SpecParserSubject described"
- end
-
- it "should find context and described and example for type with modifications" do
- parser.spec_name_for(file, 43).should == "SpecParserSubject described 7"
- end
-
- it "should find example group" do
- parser.spec_name_for(file, 47).should == "described"
- end
-
- it "should find example" do
- parser.spec_name_for(file, 50).should == "described 8"
- end
-
- it "should find nested example" do
- parser.spec_name_for(file, 63).should == "e f 11"
- end
-
-end
diff --git a/vendor/plugins/rspec/spec/spec/runner_spec.rb b/vendor/plugins/rspec/spec/spec/runner_spec.rb
index d75e66111..3b55be7a7 100644
--- a/vendor/plugins/rspec/spec/spec/runner_spec.rb
+++ b/vendor/plugins/rspec/spec/spec/runner_spec.rb
@@ -1,11 +1,13 @@
-require File.dirname(__FILE__) + '/../spec_helper.rb'
+require 'spec_helper'
module Spec
- describe Runner, ".configure" do
- it "should yield global configuration" do
- Spec::Runner.configure do |config|
- config.should equal(Spec::Runner.configuration)
+ describe Runner do
+ describe ".configure" do
+ it "should yield global configuration" do
+ Spec::Runner.configure do |config|
+ config.should equal(Spec::Runner.configuration)
+ end
end
end
end
-end \ No newline at end of file
+end
diff --git a/vendor/plugins/rspec/spec/spec/spec_classes.rb b/vendor/plugins/rspec/spec/spec/spec_classes.rb
deleted file mode 100644
index c8900a789..000000000
--- a/vendor/plugins/rspec/spec/spec/spec_classes.rb
+++ /dev/null
@@ -1,133 +0,0 @@
-# This file contains various classes used by the specs.
-module Spec
- module Expectations
- class Person
- attr_reader :name
- def initialize name
- @name = name
- end
- def == other
- return @name == other.name
- end
- end
-
- class ClassWithMultiWordPredicate
- def multi_word_predicate?
- true
- end
- end
-
- module Helper
- class CollectionWithSizeMethod
- def initialize; @list = []; end
- def size; @list.size; end
- def push(item); @list.push(item); end
- end
-
- class CollectionWithLengthMethod
- def initialize; @list = []; end
- def length; @list.size; end
- def push(item); @list.push(item); end
- end
-
- class CollectionOwner
- attr_reader :items_in_collection_with_size_method, :items_in_collection_with_length_method
-
- def initialize
- @items_in_collection_with_size_method = CollectionWithSizeMethod.new
- @items_in_collection_with_length_method = CollectionWithLengthMethod.new
- end
-
- def add_to_collection_with_size_method(item)
- @items_in_collection_with_size_method.push(item)
- end
-
- def add_to_collection_with_length_method(item)
- @items_in_collection_with_length_method.push(item)
- end
-
- def items_for(arg)
- return [1, 2, 3] if arg == 'a'
- [1]
- end
-
- def items
- @items_in_collection_with_size_method
- end
- end
-
- class HandCodedMock
- include Spec::Matchers
- def initialize(return_val)
- @return_val = return_val
- @funny_called = false
- end
-
- def funny?
- @funny_called = true
- @return_val
- end
-
- def hungry?(a, b, c)
- a.should equal(1)
- b.should equal(2)
- c.should equal(3)
- @funny_called = true
- @return_val
- end
-
- def exists?
- @return_val
- end
-
- def multi_word_predicate?
- @return_val
- end
-
- def rspec_verify
- @funny_called.should be_true
- end
- end
- class ClassWithUnqueriedPredicate
- attr_accessor :foo
- def initialize(foo)
- @foo = foo
- end
- end
- end
- end
-end
-
-module Custom
- require 'spec/runner/formatter/base_text_formatter'
- class Formatter < Spec::Runner::Formatter::BaseTextFormatter
- attr_reader :options, :where
-
- def initialize(options, where)
- @options = options
- @where = where
- end
- end
-
- class BadFormatter < Spec::Runner::Formatter::BaseTextFormatter
- attr_reader :where
-
- def initialize(options, where)
- bad_method
- end
- end
-
- class Differ
- attr_reader :options
- def initialize(options)
- @options = options
- end
-
- def diff_as_object(target, expected)
- ""
- end
- end
-end
-
-class FakeReporter < Spec::Runner::Reporter
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/builders.rb b/vendor/plugins/rspec/spec/spec/story/builders.rb
deleted file mode 100644
index 77d50d53e..000000000
--- a/vendor/plugins/rspec/spec/spec/story/builders.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-module Spec
- module Story
- class StoryBuilder
- def initialize
- @title = 'a story'
- @narrative = 'narrative'
- end
-
- def title(value)
- @title = value
- self
- end
-
- def narrative(value)
- @narrative = value
- self
- end
-
- def to_story(&block)
- block = lambda {} unless block_given?
- Story.new @title, @narrative, &block
- end
- end
-
- class ScenarioBuilder
- def initialize
- @name = 'a scenario'
- @story = StoryBuilder.new.to_story
- end
-
- def name(value)
- @name = value
- self
- end
-
- def story(value)
- @story = value
- self
- end
-
- def to_scenario(&block)
- Scenario.new @story, @name, &block
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/extensions/main_spec.rb b/vendor/plugins/rspec/spec/spec/story/extensions/main_spec.rb
deleted file mode 100644
index acdc341ce..000000000
--- a/vendor/plugins/rspec/spec/spec/story/extensions/main_spec.rb
+++ /dev/null
@@ -1,161 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper'
-
-module Spec
- module Story
- module Extensions
- describe "the main object extended with Main", :shared => true do
- before(:each) do
- @main = Class.new do; include Main; end
- @original_rspec_story_steps, $rspec_story_steps = $rspec_story_steps, nil
- end
-
- after(:each) do
- $rspec_story_steps = @original_rspec_story_steps
- end
-
- def have_step(type, name)
- return simple_matcher(%[step group containing a #{type} named #{name.inspect}]) do |actual|
- Spec::Story::Step === actual.find(type, name)
- end
- end
- end
-
- describe Main, "#run_story" do
- it_should_behave_like "the main object extended with Main"
-
- it "should create a PlainTextStoryRunner with run_story" do
- Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(mock("runner", :null_object => true))
- @main.run_story
- end
-
- it "should yield the runner if arity == 1" do
- File.should_receive(:read).with("some/path").and_return("Story: foo")
- $main_spec_runner = nil
- @main.run_story("some/path") do |runner|
- $main_spec_runner = runner
- end
- $main_spec_runner.should be_an_instance_of(Spec::Story::Runner::PlainTextStoryRunner)
- end
-
- it "should run in the runner if arity == 0" do
- File.should_receive(:read).with("some/path").and_return("Story: foo")
- $main_spec_runner = nil
- @main.run_story("some/path") do
- $main_spec_runner = self
- end
- $main_spec_runner.should be_an_instance_of(Spec::Story::Runner::PlainTextStoryRunner)
- end
-
- it "should tell the PlainTextStoryRunner to run with run_story" do
- runner = mock("runner")
- Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(runner)
- runner.should_receive(:run)
- @main.run_story
- end
- end
-
- describe Main, "#steps_for" do
- it_should_behave_like "the main object extended with Main"
-
- it "should have no steps for a non existent key" do
- @main.steps_for(:key).find(:given, "foo").should be_nil
- end
-
- it "should create steps for a key" do
- $main_spec_invoked = false
- @main.steps_for(:key) do
- Given("foo") {
- $main_spec_invoked = true
- }
- end
- @main.steps_for(:key).find(:given, "foo").perform(Object.new, "foo")
- $main_spec_invoked.should be_true
- end
-
- it "should append steps to steps_for a given key" do
- @main.steps_for(:key) do
- Given("first") {}
- end
- @main.steps_for(:key) do
- Given("second") {}
- end
- @main.steps_for(:key).should have_step(:given, "first")
- @main.steps_for(:key).should have_step(:given, "second")
- end
- end
-
- describe Main, "#with_steps_for adding new steps" do
- it_should_behave_like "the main object extended with Main"
-
- it "should result in a group containing pre-existing steps and newly defined steps" do
- first_group = @main.steps_for(:key) do
- Given("first") {}
- end
- second_group = @main.with_steps_for(:key) do
- Given("second") {}
- end
-
- second_group.should have_step(:given, "first")
- second_group.should have_step(:given, "second")
- end
-
- it "should not add its steps to the existing group" do
- first_group = @main.steps_for(:key) do
- Given("first") {}
- end
- second_group = @main.with_steps_for(:key) do
- Given("second") {}
- end
-
- first_group.should have_step(:given, "first")
- first_group.should_not have_step(:given, "second")
- end
- end
-
- describe Main, "#with_steps_for running a story" do
- it_should_behave_like "the main object extended with Main"
-
- before(:each) do
- @runner = mock("runner")
- @runner_step_group = StepGroup.new
- @runner.stub!(:steps).and_return(@runner_step_group)
- @runner.stub!(:run)
- Spec::Story::Runner::PlainTextStoryRunner.stub!(:new).and_return(@runner)
- end
-
- it "should create a PlainTextStoryRunner with a path" do
- Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).with('path/to/file',{}).and_return(@runner)
- @main.with_steps_for(:foo) do
- run 'path/to/file'
- end
- end
-
- it "should create a PlainTextStoryRunner with a path and options" do
- Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).with(anything,{:bar => :baz}).and_return(@runner)
- @main.with_steps_for(:foo) do
- run 'path/to/file', :bar => :baz
- end
- end
-
- it "should pass the group it creates to the runner's steps" do
- steps = @main.steps_for(:ice_cream) do
- Given("vanilla") {}
- end
- @main.with_steps_for(:ice_cream) do
- run 'foo'
- end
- @runner_step_group.should have_step(:given, "vanilla")
- end
-
- it "should run a story" do
- @runner.should_receive(:run)
- Spec::Story::Runner::PlainTextStoryRunner.should_receive(:new).and_return(@runner)
- @main.with_steps_for(:foo) do
- run 'path/to/file'
- end
- end
-
- end
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/story/extensions_spec.rb b/vendor/plugins/rspec/spec/spec/story/extensions_spec.rb
deleted file mode 100644
index 612ddc72f..000000000
--- a/vendor/plugins/rspec/spec/spec/story/extensions_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-require 'spec/story'
-
-describe Kernel, "#Story" do
- before(:each) do
- Kernel.stub!(:at_exit)
- end
-
- it "should delegate to ::Spec::Story::Runner.story_runner" do
- ::Spec::Story::Runner.story_runner.should_receive(:Story)
- story = Story("title","narrative"){}
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/given_scenario_spec.rb b/vendor/plugins/rspec/spec/spec/story/given_scenario_spec.rb
deleted file mode 100644
index a688f88d5..000000000
--- a/vendor/plugins/rspec/spec/spec/story/given_scenario_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
- module Story
- describe GivenScenario do
- it 'should execute a scenario from the current story in its world' do
- # given
- class MyWorld
- attr :scenario_ran
- end
- instance = World.create(MyWorld)
- scenario = ScenarioBuilder.new.to_scenario do
- @scenario_ran = true
- end
- Runner::StoryRunner.should_receive(:scenario_from_current_story).with('scenario name').and_return(scenario)
-
- step = GivenScenario.new 'scenario name'
-
- # when
- step.perform(instance, nil)
-
- # then
- instance.scenario_ran.should be_true
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb b/vendor/plugins/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb
deleted file mode 100644
index 91f5f9e9b..000000000
--- a/vendor/plugins/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
- module Story
- module Runner
- describe PlainTextStoryRunner do
- before(:each) do
- StoryParser.stub!(:new).and_return(@parser = mock("parser"))
- @parser.stub!(:parse).and_return([])
- File.stub!(:read).with("path").and_return("this\nand that")
- end
-
- it "should provide access to steps" do
- runner = PlainTextStoryRunner.new("path")
-
- runner.steps do |add|
- add.given("baz") {}
- end
-
- runner.steps.find(:given, "baz").should_not be_nil
- end
-
- it "should parse a story file" do
- runner = PlainTextStoryRunner.new("path")
- during {
- runner.run(mock('runner'))
- }.expect {
- @parser.should_receive(:parse).with(["this", "and that"])
- }
- end
-
- it "should build up a mediator with its own steps and the singleton story_runner" do
- @story_runner = mock('story runner', :null_object => true)
-
- runner = PlainTextStoryRunner.new("path")
-
- Spec::Story::Runner::StoryMediator.should_receive(:new).with(
- runner.steps, @story_runner, {}
- ).and_return(mediator = stub("mediator", :run_stories => nil))
- runner.run(@story_runner)
- end
-
- it "should build up a parser with the mediator" do
- runner = PlainTextStoryRunner.new("path")
- Spec::Story::Runner::StoryMediator.should_receive(:new).and_return(mediator = stub("mediator", :run_stories => nil))
- Spec::Story::Runner::StoryParser.should_receive(:new).with(mediator).and_return(@parser)
- runner.run(stub("story_runner"))
- end
-
- it "should tell the mediator to run the stories" do
- runner = PlainTextStoryRunner.new("path")
- mediator = mock("mediator")
- Spec::Story::Runner::StoryMediator.should_receive(:new).and_return(mediator)
- mediator.should_receive(:run_stories)
- runner.run(mock('runner'))
- end
-
- it "should accept a block instead of a path" do
- runner = PlainTextStoryRunner.new do |runner|
- runner.load("path/to/story")
- end
- File.should_receive(:read).with("path/to/story").and_return("this\nand that")
- runner.run(mock('runner'))
- end
-
- it "should tell you if you try to run with no path set" do
- runner = PlainTextStoryRunner.new
- lambda {
- runner.run(mock('runner'))
- }.should raise_error(RuntimeError, "You must set a path to the file with the story. See the RDoc.")
- end
-
- it "should pass options to the mediator" do
- runner = PlainTextStoryRunner.new("path", :foo => :bar)
- Spec::Story::Runner::StoryMediator.should_receive(:new).
- with(anything, anything, :foo => :bar).
- and_return(mediator = stub("mediator", :run_stories => nil))
- runner.run(mock('runner'))
- end
-
- it "should provide access to its options" do
- runner = PlainTextStoryRunner.new("path")
- runner[:foo] = :bar
- Spec::Story::Runner::StoryMediator.should_receive(:new).
- with(anything, anything, :foo => :bar).
- and_return(mediator = stub("mediator", :run_stories => nil))
- runner.run mock('runner')
- end
-
- end
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/story/runner/scenario_collector_spec.rb b/vendor/plugins/rspec/spec/spec/story/runner/scenario_collector_spec.rb
deleted file mode 100644
index 042c41e8d..000000000
--- a/vendor/plugins/rspec/spec/spec/story/runner/scenario_collector_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
- module Story
- module Runner
- describe ScenarioCollector do
- it 'should construct scenarios with the supplied story' do
- # given
- story = stub_everything('story')
- scenario_collector = ScenarioCollector.new(story)
-
- # when
- scenario_collector.Scenario 'scenario1' do end
- scenario_collector.Scenario 'scenario2' do end
- scenarios = scenario_collector.scenarios
-
- # then
- scenario_collector.should have(2).scenarios
- scenarios.first.name.should == 'scenario1'
- scenarios.first.story.should equal(story)
- scenarios.last.name.should == 'scenario2'
- scenarios.last.story.should equal(story)
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/runner/scenario_runner_spec.rb b/vendor/plugins/rspec/spec/spec/story/runner/scenario_runner_spec.rb
deleted file mode 100644
index c13c3d7f8..000000000
--- a/vendor/plugins/rspec/spec/spec/story/runner/scenario_runner_spec.rb
+++ /dev/null
@@ -1,214 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
- module Story
- module Runner
- describe ScenarioRunner do
- it 'should run a scenario in its story' do
- # given
- world = stub_everything
- scenario_runner = ScenarioRunner.new
- $answer = nil
- story = Story.new 'story', 'narrative' do
- @answer = 42 # this should be available to the scenario
- end
- scenario = Scenario.new story, 'scenario' do
- $answer = @answer
- end
-
- # when
- scenario_runner.run(scenario, world)
-
- # then
- $answer.should == 42
- end
-
- it 'should allow scenarios to share methods' do
- # given
- world = stub_everything
- $shared_invoked = 0
- story = Story.new 'story', 'narrative' do
- def shared
- $shared_invoked += 1
- end
- end
- scenario1 = Scenario.new story, 'scenario1' do
- shared()
- end
- scenario2 = Scenario.new story, 'scenario2' do
- shared()
- end
- scenario_runner = ScenarioRunner.new
-
- # when
- scenario_runner.run(scenario1, world)
- scenario_runner.run(scenario2, world)
-
- # then
- $shared_invoked.should == 2
- end
-
- it 'should notify listeners when a scenario starts' do
- # given
- world = stub_everything
- story = Story.new 'story', 'narrative' do end
- scenario = Scenario.new story, 'scenario1' do
- # succeeds
- end
- scenario_runner = ScenarioRunner.new
- mock_listener1 = stub_everything('listener1')
- mock_listener2 = stub_everything('listener2')
- scenario_runner.add_listener(mock_listener1)
- scenario_runner.add_listener(mock_listener2)
-
- # expect
- mock_listener1.should_receive(:scenario_started).with('story', 'scenario1')
- mock_listener2.should_receive(:scenario_started).with('story', 'scenario1')
-
- # when
- scenario_runner.run(scenario, world)
-
- # then
- end
- describe "when a scenario succeeds" do
- before(:each) do
- # given
- @world = stub_everything('world')
- @story = Story.new 'story', 'narrative' do end
- @scenario = Scenario.new @story, 'scenario1' do
- # succeeds
- end
- @scenario_runner = ScenarioRunner.new
- end
-
- it 'should notify listeners' do
- #given
- mock_listener1 = stub_everything('listener1')
- mock_listener2 = stub_everything('listener2')
- @scenario_runner.add_listener(mock_listener1)
- @scenario_runner.add_listener(mock_listener2)
-
- # expect
- mock_listener1.should_receive(:scenario_succeeded).with('story', 'scenario1')
- mock_listener2.should_receive(:scenario_succeeded).with('story', 'scenario1')
-
- # when
- @scenario_runner.run(@scenario, @world)
-
- # then
- end
-
- it "should return true" do
- #when
- success = @scenario_runner.run(@scenario, @world)
-
- #then
- success.should == true
- end
- end
-
- describe "when a scenario raises an error (other than a pending error)" do
- before(:each) do
- # given
- @error = RuntimeError.new('oops')
- @story = Story.new 'title', 'narrative' do end
- @scenario = Scenario.new @story, 'scenario1' do
- end
- @scenario_runner = ScenarioRunner.new
- @world = stub_everything
-
- # expect
- @world.should_receive(:errors).twice.and_return([@error, @error])
- end
-
- it 'should notify listeners ONCE' do
- #given
- mock_listener = stub_everything('listener')
- @scenario_runner.add_listener(mock_listener)
-
- #expect
- mock_listener.should_receive(:scenario_failed).with('title', 'scenario1', @error).once
-
- # when
- @scenario_runner.run @scenario, @world
-
- # then
- end
-
- it "should return false" do
- # when
- success = @scenario_runner.run @scenario, @world
-
- # then
- success.should == false
- end
-
-
- end
-
- describe "when a scenario is pending" do
- before(:each) do
- # given
- @pending_error = Spec::Example::ExamplePendingError.new('todo')
- @story = Story.new 'title', 'narrative' do end
- @scenario = Scenario.new @story, 'scenario1' do
- end
- @scenario_runner = ScenarioRunner.new
- @world = stub_everything
-
- # expect
- @world.should_receive(:errors).twice.and_return([@pending_error, @pending_error])
- end
-
- it 'should notify listeners' do
- #given
- mock_listener = mock('listener')
- @scenario_runner.add_listener(mock_listener)
-
- # expect
- mock_listener.should_receive(:scenario_started).with('title', 'scenario1')
- mock_listener.should_receive(:scenario_pending).with('title', 'scenario1', 'todo').once
-
- # when
- @scenario_runner.run @scenario, @world
-
- # then
- end
-
- it "should return true" do
- # when
- success = @scenario_runner.run @scenario, @world
-
- # then
- success.should == true
- end
- end
-
- describe "when a scenario has an empty body" do
- before(:each) do
- @story = Story.new 'title', 'narrative' do end
- @scenario = Scenario.new @story, 'scenario'
- @scenario_runner = ScenarioRunner.new
- @world = stub_everything
- end
-
- it "should mark the scenario as pending" do
- mock_listener = stub('listener', :scenario_started => true)
- @scenario_runner.add_listener mock_listener
-
- mock_listener.should_receive(:scenario_pending).with('title', 'scenario', '')
- @scenario_runner.run @scenario, @world
- end
-
- it "should return true" do
- # when
- success = @scenario_runner.run @scenario, @world
-
- # then
- success.should == true
- end
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/runner/story_mediator_spec.rb b/vendor/plugins/rspec/spec/spec/story/runner/story_mediator_spec.rb
deleted file mode 100644
index 32abe5e05..000000000
--- a/vendor/plugins/rspec/spec/spec/story/runner/story_mediator_spec.rb
+++ /dev/null
@@ -1,133 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
- module Story
- module Runner
-
- describe StoryMediator do
- before(:each) do
- $story_mediator_spec_value = nil
- @step_group = StepGroup.new
- @step_group.create_matcher(:given, "given") { $story_mediator_spec_value = "given matched" }
- @step_group.create_matcher(:when, "when") { $story_mediator_spec_value = "when matched" }
- @step_group.create_matcher(:then, "then") { $story_mediator_spec_value = "then matched" }
-
- @scenario_runner = ScenarioRunner.new
- @runner = StoryRunner.new @scenario_runner
- @mediator = StoryMediator.new @step_group, @runner
- end
-
- def run_stories
- @mediator.run_stories
- @runner.run_stories
- end
-
- it "should have no stories" do
- @mediator.stories.should be_empty
- end
-
- it "should create two stories" do
- @mediator.create_story "story title", "story narrative"
- @mediator.create_story "story title 2", "story narrative 2"
- run_stories
-
- @runner.should have(2).stories
- @runner.stories.first.title.should == "story title"
- @runner.stories.first.narrative.should == "story narrative"
- @runner.stories.last.title.should == "story title 2"
- @runner.stories.last.narrative.should == "story narrative 2"
- end
-
- it "should create a scenario" do
- @mediator.create_story "title", "narrative"
- @mediator.create_scenario "scenario name"
- run_stories
-
- @runner.should have(1).scenarios
- @runner.scenarios.first.name.should == "scenario name"
- @runner.scenarios.first.story.should == @runner.stories.first
- end
-
- it "should create a given scenario step if one matches" do
- pending("need to untangle the dark mysteries of the story runner - something needs to get stubbed here") do
- story = @mediator.create_story "title", "narrative"
- @mediator.create_scenario "previous scenario"
- @mediator.create_scenario "current scenario"
- @mediator.create_given_scenario "previous scenario"
- run_stories
-
- $story_mediator_spec_value.should == "previous scenario matched"
- end
- end
-
- it "should create a given step if one matches" do
- @mediator.create_story "title", "narrative"
- @mediator.create_scenario "scenario"
- @mediator.create_given "given"
- run_stories
-
- $story_mediator_spec_value.should == "given matched"
- end
-
- it "should create a pending step if no given step matches" do
- @mediator.create_story "title", "narrative"
- @mediator.create_scenario "scenario"
- @mediator.create_given "no match"
- mock_listener = stub_everything("listener")
- mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match")
- @scenario_runner.add_listener mock_listener
- run_stories
- end
-
- it "should create a when step if one matches" do
- @mediator.create_story "title", "narrative"
- @mediator.create_scenario "scenario"
- @mediator.create_when "when"
- run_stories
-
- $story_mediator_spec_value.should == "when matched"
- end
-
- it "should create a pending step if no when step matches" do
- @mediator.create_story "title", "narrative"
- @mediator.create_scenario "scenario"
- @mediator.create_when "no match"
- mock_listener = stub_everything("listener")
- mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match")
- @scenario_runner.add_listener mock_listener
- run_stories
- end
-
- it "should create a then step if one matches" do
- @mediator.create_story "title", "narrative"
- @mediator.create_scenario "scenario"
- @mediator.create_then "then"
- run_stories
-
- $story_mediator_spec_value.should == "then matched"
- end
-
- it "should create a pending step if no 'then' step matches" do
- @mediator.create_story "title", "narrative"
- @mediator.create_scenario "scenario"
- @mediator.create_then "no match"
- mock_listener = stub_everything("listener")
- mock_listener.should_receive(:scenario_pending).with("title", "scenario", "Unimplemented step: no match")
- @scenario_runner.add_listener mock_listener
- run_stories
- end
-
- it "should pass options to the stories it creates" do
- @mediator = StoryMediator.new @step_group, @runner, :foo => :bar
- @mediator.create_story "story title", "story narrative"
-
- run_stories
-
- @runner.stories.first[:foo].should == :bar
- end
-
- end
-
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/story/runner/story_parser_spec.rb b/vendor/plugins/rspec/spec/spec/story/runner/story_parser_spec.rb
deleted file mode 100644
index 5efc8fd18..000000000
--- a/vendor/plugins/rspec/spec/spec/story/runner/story_parser_spec.rb
+++ /dev/null
@@ -1,384 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
- module Story
- module Runner
-
- describe StoryParser do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- end
-
- it "should parse no lines" do
- @parser.parse([])
- end
-
- it "should ignore text before the first Story: begins" do
- @story_mediator.should_not_receive(:create_scenario)
- @story_mediator.should_not_receive(:create_given)
- @story_mediator.should_not_receive(:create_when)
- @story_mediator.should_not_receive(:create_then)
- @story_mediator.should_receive(:create_story).with("simple addition", "")
- @parser.parse(["Here is a bunch of text", "about a calculator and all the things", "that it will do", "Story: simple addition"])
- end
-
- it "should create a story" do
- @story_mediator.should_receive(:create_story).with("simple addition", "")
- @parser.parse(["Story: simple addition"])
- end
-
- it "should create a story when line has leading spaces" do
- @story_mediator.should_receive(:create_story).with("simple addition", "")
- @parser.parse([" Story: simple addition"])
- end
-
- it "should add a one line narrative to the story" do
- @story_mediator.should_receive(:create_story).with("simple addition","narrative")
- @parser.parse(["Story: simple addition","narrative"])
- end
-
- it "should add a multi line narrative to the story" do
- @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2\nline 3")
- @parser.parse(["Story: simple addition","narrative line 1", "line 2", "line 3"])
- end
-
- it "should exclude blank lines from the narrative" do
- @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2")
- @parser.parse(["Story: simple addition","narrative line 1", "", "line 2"])
- end
-
- it "should exclude Scenario from the narrative" do
- @story_mediator.should_receive(:create_story).with("simple addition","narrative line 1\nline 2")
- @story_mediator.should_receive(:create_scenario)
- @parser.parse(["Story: simple addition","narrative line 1", "line 2", "Scenario: add one plus one"])
- end
-
- end
-
- describe StoryParser, "in Story state" do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- @story_mediator.stub!(:create_story)
- end
-
- it "should create a second Story for Story" do
- @story_mediator.should_receive(:create_story).with("number two","")
- @parser.parse(["Story: s", "Story: number two"])
- end
-
- it "should include And in the narrative" do
- @story_mediator.should_receive(:create_story).with("s","And foo")
- @story_mediator.should_receive(:create_scenario).with("bar")
- @parser.parse(["Story: s", "And foo", "Scenario: bar"])
- end
-
- it "should create a Scenario for Scenario" do
- @story_mediator.should_receive(:create_scenario).with("number two")
- @parser.parse(["Story: s", "Scenario: number two"])
- end
-
- it "should include Given in the narrative" do
- @story_mediator.should_receive(:create_story).with("s","Given foo")
- @story_mediator.should_receive(:create_scenario).with("bar")
- @parser.parse(["Story: s", "Given foo", "Scenario: bar"])
- end
-
- it "should include Given: in the narrative" do
- @story_mediator.should_receive(:create_story).with("s","Given: foo")
- @story_mediator.should_receive(:create_scenario).with("bar")
- @parser.parse(["Story: s", "Given: foo", "Scenario: bar"])
- end
-
- it "should include When in the narrative" do
- @story_mediator.should_receive(:create_story).with("s","When foo")
- @story_mediator.should_receive(:create_scenario).with("bar")
- @parser.parse(["Story: s", "When foo", "Scenario: bar"])
- end
-
- it "should include Then in the narrative" do
- @story_mediator.should_receive(:create_story).with("s","Then foo")
- @story_mediator.should_receive(:create_scenario).with("bar")
- @parser.parse(["Story: s", "Then foo", "Scenario: bar"])
- end
-
- it "should include other in the story" do
- @story_mediator.should_receive(:create_story).with("s","narrative")
- @parser.parse(["Story: s", "narrative"])
- end
- end
-
- describe StoryParser, "in Scenario state" do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- @story_mediator.stub!(:create_story)
- @story_mediator.stub!(:create_scenario)
- end
-
- it "should create a Story for Story" do
- @story_mediator.should_receive(:create_story).with("number two","")
- @parser.parse(["Story: s", "Scenario: s", "Story: number two"])
- end
-
- it "should create a Scenario for Scenario" do
- @story_mediator.should_receive(:create_scenario).with("number two")
- @parser.parse(["Story: s", "Scenario: s", "Scenario: number two"])
- end
-
- it "should raise for And" do
- lambda {
- @parser.parse(["Story: s", "Scenario: s", "And second"])
- }.should raise_error(IllegalStepError, /^Illegal attempt to create a And after a Scenario/)
- end
-
- it "should create a Given for Given" do
- @story_mediator.should_receive(:create_given).with("gift")
- @parser.parse(["Story: s", "Scenario: s", "Given gift"])
- end
-
- it "should create a Given for Given:" do
- @story_mediator.should_receive(:create_given).with("gift")
- @parser.parse(["Story: s", "Scenario: s", "Given: gift"])
- end
-
- it "should create a GivenScenario for GivenScenario" do
- @story_mediator.should_receive(:create_given_scenario).with("previous")
- @parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"])
- end
-
- it "should create a GivenScenario for GivenScenario:" do
- @story_mediator.should_receive(:create_given_scenario).with("previous")
- @parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"])
- end
-
- it "should transition to Given state after GivenScenario" do
- @story_mediator.stub!(:create_given_scenario)
- @parser.parse(["Story: s", "Scenario: s", "GivenScenario previous"])
- @parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState)
- end
-
- it "should transition to Given state after GivenScenario:" do
- @story_mediator.stub!(:create_given_scenario)
- @parser.parse(["Story: s", "Scenario: s", "GivenScenario: previous"])
- @parser.instance_eval{@state}.should be_an_instance_of(StoryParser::GivenState)
- end
-
- it "should create a When for When" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "When ever"])
- end
-
- it "should create a When for When:" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "When: ever"])
- end
-
- it "should create a Then for Then" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Then and there"])
- end
-
- it "should create a Then for Then:" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Then: and there"])
- end
-
- it "should ignore other" do
- @parser.parse(["Story: s", "Scenario: s", "this is ignored"])
- end
- end
-
- describe StoryParser, "in Given state" do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- @story_mediator.stub!(:create_story)
- @story_mediator.stub!(:create_scenario)
- @story_mediator.should_receive(:create_given).with("first")
- end
-
- it "should create a Story for Story" do
- @story_mediator.should_receive(:create_story).with("number two","")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "Story: number two"])
- end
-
- it "should create a Scenario for Scenario" do
- @story_mediator.should_receive(:create_scenario).with("number two")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "Scenario: number two"])
- end
-
- it "should create a second Given for Given" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "Given second"])
- end
-
- it "should create a second Given for And" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "And second"])
- end
-
- it "should create a second Given for And:" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "And: second"])
- end
-
- it "should create a When for When" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When ever"])
- end
-
- it "should create a When for When:" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When: ever"])
- end
-
- it "should create a Then for Then" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "Then and there"])
- end
-
- it "should create a Then for Then:" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "Then: and there"])
- end
-
- it "should ignore other" do
- @parser.parse(["Story: s", "Scenario: s", "Given first", "this is ignored"])
- end
- end
-
- describe StoryParser, "in When state" do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- @story_mediator.stub!(:create_story)
- @story_mediator.stub!(:create_scenario)
- @story_mediator.should_receive(:create_given).with("first")
- @story_mediator.should_receive(:create_when).with("else")
- end
-
- it "should create a Story for Story" do
- @story_mediator.should_receive(:create_story).with("number two","")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When: else", "Story: number two"])
- end
-
- it "should create a Scenario for Scenario" do
- @story_mediator.should_receive(:create_scenario).with("number two")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Scenario: number two"])
- end
-
- it "should create Given for Given" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given second"])
- end
-
- it "should create Given for Given:" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Given: second"])
- end
-
- it "should create a second When for When" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "When ever"])
- end
-
- it "should create a second When for When:" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "When: ever"])
- end
-
- it "should create a second When for And" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "And ever"])
- end
-
- it "should create a second When for And:" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "And: ever"])
- end
-
- it "should create a Then for Then" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then and there"])
- end
-
- it "should create a Then for Then:" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: and there"])
- end
-
- it "should ignore other" do
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "this is ignored"])
- end
- end
-
- describe StoryParser, "in Then state" do
- before(:each) do
- @story_mediator = mock("story_mediator")
- @parser = StoryParser.new(@story_mediator)
- @story_mediator.stub!(:create_story)
- @story_mediator.stub!(:create_scenario)
- @story_mediator.should_receive(:create_given).with("first")
- @story_mediator.should_receive(:create_when).with("else")
- @story_mediator.should_receive(:create_then).with("what")
- end
-
- it "should create a Story for Story" do
- @story_mediator.should_receive(:create_story).with("number two","")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Story: number two"])
- end
-
- it "should create a Scenario for Scenario" do
- @story_mediator.should_receive(:create_scenario).with("number two")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Scenario: number two"])
- end
-
- it "should create Given for Given" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Given second"])
- end
-
- it "should create Given for Given:" do
- @story_mediator.should_receive(:create_given).with("second")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Given: second"])
- end
-
- it "should create When for When" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "When ever"])
- end
-
- it "should create When for When:" do
- @story_mediator.should_receive(:create_when).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "When: ever"])
- end
-
- it "should create a Then for Then" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "Then and there"])
- end
-
- it "should create a Then for Then:" do
- @story_mediator.should_receive(:create_then).with("and there")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "Then: and there"])
- end
-
- it "should create a second Then for And" do
- @story_mediator.should_receive(:create_then).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "And ever"])
- end
-
- it "should create a second Then for And:" do
- @story_mediator.should_receive(:create_then).with("ever")
- @parser.parse(["Story: s", "Scenario: s", "Given: first", "When: else", "Then: what", "And: ever"])
- end
-
- it "should ignore other" do
- @parser.parse(["Story: s", "Scenario: s", "Given first", "When else", "Then what", "this is ignored"])
- end
- end
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/spec/spec/story/runner/story_runner_spec.rb b/vendor/plugins/rspec/spec/spec/story/runner/story_runner_spec.rb
deleted file mode 100644
index 5bed6c562..000000000
--- a/vendor/plugins/rspec/spec/spec/story/runner/story_runner_spec.rb
+++ /dev/null
@@ -1,294 +0,0 @@
-require File.dirname(__FILE__) + '/../story_helper'
-
-module Spec
- module Story
- module Runner
- describe StoryRunner do
- it 'should collect all the stories' do
- # given
- story_runner = StoryRunner.new(stub('scenario_runner'))
-
- # when
- story_runner.Story 'title1', 'narrative1' do end
- story_runner.Story 'title2', 'narrative2' do end
- stories = story_runner.stories
-
- # then
- story_runner.should have(2).stories
- stories.first.title.should == 'title1'
- stories.first.narrative.should == 'narrative1'
- stories.last.title.should == 'title2'
- stories.last.narrative.should == 'narrative2'
- end
-
- it 'should gather all the scenarios in the stories' do
- # given
- story_runner = StoryRunner.new(stub('scenario_runner'))
-
- # when
- story_runner.Story "story1", "narrative1" do
- Scenario "scenario1" do end
- Scenario "scenario2" do end
- end
- story_runner.Story "story2", "narrative2" do
- Scenario "scenario3" do end
- end
- scenarios = story_runner.scenarios
-
- # then
- story_runner.should have(3).scenarios
- scenarios[0].name.should == 'scenario1'
- scenarios[1].name.should == 'scenario2'
- scenarios[2].name.should == 'scenario3'
- end
-
- # captures worlds passed into a ScenarioRunner
- class ScenarioWorldCatcher
- attr_accessor :worlds
- def run(scenario, world)
- (@worlds ||= []) << world
- end
- end
-
- it 'should run each scenario in a separate object' do
- # given
- scenario_world_catcher = ScenarioWorldCatcher.new
- story_runner = StoryRunner.new(scenario_world_catcher)
- story_runner.Story 'story', 'narrative' do
- Scenario 'scenario1' do end
- Scenario 'scenario2' do end
- end
-
- # when
- story_runner.run_stories
-
- # then
- worlds = scenario_world_catcher.worlds
- scenario_world_catcher.should have(2).worlds
- worlds[0].should_not == worlds[1]
- end
-
- it "should return false if the scenario runner returns false ever" do
- #given
- stub_scenario_runner = stub_everything
- story_runner = StoryRunner.new(stub_scenario_runner)
- story_runner.Story 'story', 'narrative' do
- Scenario 'scenario1' do end
- Scenario 'scenario2' do end
- end
-
- # expect
- stub_scenario_runner.should_receive(:run).once.and_return(false,true)
-
- # when
- success = story_runner.run_stories
-
- #then
- success.should == false
- end
-
- it "should return true if the scenario runner returns true for all scenarios" do
- #given
- stub_scenario_runner = stub_everything
- story_runner = StoryRunner.new(stub_scenario_runner)
- story_runner.Story 'story', 'narrative' do
- Scenario 'scenario1' do end
- Scenario 'scenario2' do end
- end
-
- # expect
- stub_scenario_runner.should_receive(:run).once.and_return(true,true)
-
- # when
- success = story_runner.run_stories
-
- #then
- success.should == true
- end
-
- it 'should use the provided world creator to create worlds' do
- # given
- stub_scenario_runner = stub_everything
- mock_world_creator = mock('world creator')
- story_runner = StoryRunner.new(stub_scenario_runner, mock_world_creator)
- story_runner.Story 'story', 'narrative' do
- Scenario 'scenario1' do end
- Scenario 'scenario2' do end
- end
-
- # expect
- mock_world_creator.should_receive(:create).twice
-
- # when
- story_runner.run_stories
-
- # then
- end
-
- it 'should notify listeners of the scenario count when the run starts' do
- # given
- story_runner = StoryRunner.new(stub_everything)
- mock_listener1 = stub_everything('listener1')
- mock_listener2 = stub_everything('listener2')
- story_runner.add_listener(mock_listener1)
- story_runner.add_listener(mock_listener2)
-
- story_runner.Story 'story1', 'narrative1' do
- Scenario 'scenario1' do end
- end
- story_runner.Story 'story2', 'narrative2' do
- Scenario 'scenario2' do end
- Scenario 'scenario3' do end
- end
-
- # expect
- mock_listener1.should_receive(:run_started).with(3)
- mock_listener2.should_receive(:run_started).with(3)
-
- # when
- story_runner.run_stories
-
- # then
- end
-
- it 'should notify listeners when a story starts' do
- # given
- story_runner = StoryRunner.new(stub_everything)
- mock_listener1 = stub_everything('listener1')
- mock_listener2 = stub_everything('listener2')
- story_runner.add_listener(mock_listener1)
- story_runner.add_listener(mock_listener2)
-
- story_runner.Story 'story1', 'narrative1' do
- Scenario 'scenario1' do end
- end
- story_runner.Story 'story2', 'narrative2' do
- Scenario 'scenario2' do end
- Scenario 'scenario3' do end
- end
-
- # expect
- mock_listener1.should_receive(:story_started).with('story1', 'narrative1')
- mock_listener1.should_receive(:story_ended).with('story1', 'narrative1')
- mock_listener2.should_receive(:story_started).with('story2', 'narrative2')
- mock_listener2.should_receive(:story_ended).with('story2', 'narrative2')
-
- # when
- story_runner.run_stories
-
- # then
- end
-
- it 'should notify listeners when the run ends' do
- # given
- story_runner = StoryRunner.new(stub_everything)
- mock_listener1 = stub_everything('listener1')
- mock_listener2 = stub_everything('listener2')
- story_runner.add_listener mock_listener1
- story_runner.add_listener mock_listener2
- story_runner.Story 'story1', 'narrative1' do
- Scenario 'scenario1' do end
- end
-
- # expect
- mock_listener1.should_receive(:run_ended)
- mock_listener2.should_receive(:run_ended)
-
- # when
- story_runner.run_stories
-
- # then
- end
-
- it 'should run a story in an instance of a specified class' do
- # given
- scenario_world_catcher = ScenarioWorldCatcher.new
- story_runner = StoryRunner.new(scenario_world_catcher)
- story_runner.Story 'title', 'narrative', :type => String do
- Scenario 'scenario' do end
- end
-
- # when
- story_runner.run_stories
-
- # then
- scenario_world_catcher.worlds[0].should be_kind_of(String)
- scenario_world_catcher.worlds[0].should be_kind_of(World)
- end
-
- it 'should pass initialization params through to the constructed instance' do
- # given
- scenario_world_catcher = ScenarioWorldCatcher.new
- story_runner = StoryRunner.new(scenario_world_catcher)
- story_runner.Story 'title', 'narrative', :type => Array, :args => [3] do
- Scenario 'scenario' do end
- end
-
- # when
- story_runner.run_stories
-
- # then
- scenario_world_catcher.worlds[0].should be_kind_of(Array)
- scenario_world_catcher.worlds[0].size.should == 3
- end
-
- it 'should find a scenario in the current story by name' do
- # given
- story_runner = StoryRunner.new(ScenarioRunner.new)
- $scenario = nil
-
- story_runner.Story 'title', 'narrative' do
- Scenario 'first scenario' do
- end
- Scenario 'second scenario' do
- $scenario = StoryRunner.scenario_from_current_story 'first scenario'
- end
- end
-
- # when
- story_runner.run_stories
-
- # then
- $scenario.name.should == 'first scenario'
- end
-
- it "should clean the steps between stories" do
- #given
- story_runner = StoryRunner.new(ScenarioRunner.new)
- result = mock 'result'
-
- step1 = Step.new('step') do
- result.one
- end
- steps1 = StepGroup.new
- steps1.add :when, step1
-
- story_runner.Story 'title', 'narrative', :steps_for => steps1 do
- Scenario 'first scenario' do
- When 'step'
- end
- end
-
- step2 = Step.new('step') do
- result.two
- end
- steps2 = StepGroup.new
- steps2.add :when, step2
-
- story_runner.Story 'title2', 'narrative', :steps_for => steps2 do
- Scenario 'second scenario' do
- When 'step'
- end
- end
-
- #then
- result.should_receive(:one)
- result.should_receive(:two)
-
- #when
- story_runner.run_stories
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/runner_spec.rb b/vendor/plugins/rspec/spec/spec/story/runner_spec.rb
deleted file mode 100644
index db1c40de5..000000000
--- a/vendor/plugins/rspec/spec/spec/story/runner_spec.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-require 'spec/runner/formatter/story/plain_text_formatter'
-require 'spec/runner/formatter/story/html_formatter'
-
-module Spec
- module Story
- describe Runner, "module" do
- before(:each) do
- @world_creator = World.dup
- @runner_module = Runner.dup
- @runner_module.instance_eval {@story_runner = nil}
- @runner_module.stub!(:register_exit_hook)
- end
-
- def create_options(args=[])
- Spec::Runner::OptionParser.parse(args, StringIO.new, StringIO.new)
- end
-
- it 'should wire up a singleton StoryRunner' do
- @runner_module.story_runner.should_not be_nil
- end
-
- it 'should set its options based on ARGV' do
- # given
- @runner_module.should_receive(:run_options).and_return(
- create_options(['--dry-run'])
- )
-
- # when
- options = @runner_module.run_options
-
- # then
- options.dry_run.should be_true
- end
-
- describe "initialization" do
-
- before(:each) do
- # given
- @story_runner = mock('story runner', :null_object => true)
- @scenario_runner = mock('scenario runner', :null_object => true)
- @world_creator = mock('world', :null_object => true)
-
- @runner_module.stub!(:world_creator).and_return(@world_creator)
- @runner_module.stub!(:create_story_runner).and_return(@story_runner)
- @runner_module.stub!(:scenario_runner).and_return(@scenario_runner)
- end
-
- it 'should add a reporter to the runner classes' do
- @runner_module.should_receive(:run_options).and_return(
- create_options
- )
-
- # expect
- @world_creator.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter))
- @story_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter))
- @scenario_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::PlainTextFormatter))
-
- # when
- @runner_module.story_runner
- end
-
- it 'should add a documenter to the runner classes if one is specified' do
-
- @runner_module.should_receive(:run_options).and_return(
- create_options(["--format","html"])
- )
-
- # expect
- @world_creator.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter))
- @story_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter))
- @scenario_runner.should_receive(:add_listener).with(an_instance_of(Spec::Runner::Formatter::Story::HtmlFormatter))
-
- # when
- @runner_module.story_runner
- end
-
- it 'should add any registered listener to the runner classes' do
- # given
- listener = Object.new
-
- # expect
- @world_creator.should_receive(:add_listener).with(listener)
- @story_runner.should_receive(:add_listener).with(listener)
- @scenario_runner.should_receive(:add_listener).with(listener)
-
- # when
- @runner_module.register_listener listener
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/scenario_spec.rb b/vendor/plugins/rspec/spec/spec/story/scenario_spec.rb
deleted file mode 100644
index 0cf7aff30..000000000
--- a/vendor/plugins/rspec/spec/spec/story/scenario_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
- module Story
- describe Scenario do
- it 'should not raise an error if no body is supplied' do
- # given
- story = StoryBuilder.new.to_story
-
- # when
- error = exception_from do
- Scenario.new story, 'name'
- end
-
- # then
- error.should be_nil
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/step_group_spec.rb b/vendor/plugins/rspec/spec/spec/story/step_group_spec.rb
deleted file mode 100644
index dd28bfa26..000000000
--- a/vendor/plugins/rspec/spec/spec/story/step_group_spec.rb
+++ /dev/null
@@ -1,157 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
- module Story
- describe StepGroup do
- before(:each) do
- @step_group = StepGroup.new
- end
-
- it "should not find a matcher if empty" do
- @step_group.find(:given, "this and that").should be_nil
- end
-
- it "should create a given_scenario matcher" do
- step = @step_group.given_scenario("this and that") {}
- @step_group.find(:given_scenario, "this and that").should_not be_nil
- @step_group.find(:given_scenario, "this and that").should equal(step)
- end
-
- it "should create a given matcher" do
- step = @step_group.given("this and that") {}
- @step_group.find(:given, "this and that").should equal(step)
- end
-
- it "should create a when matcher" do
- step = @step_group.when("this and that") {}
- @step_group.find(:when, "this and that").should equal(step)
- end
-
- it "should create a them matcher" do
- step = @step_group.then("this and that") {}
- @step_group.find(:then, "this and that").should equal(step)
- end
-
- it "should add a matcher object" do
- step = Step.new("this and that") {}
- @step_group.add(:given, step)
- @step_group.find(:given, "this and that").should equal(step)
- end
-
- it "should add it matchers to another StepGroup (with one given)" do
- source = StepGroup.new
- target = StepGroup.new
- step = source.given("this and that") {}
- source.add_to target
- target.find(:given, "this and that").should equal(step)
- end
-
- it "should add it matchers to another StepGroup (with some of each type)" do
- source = StepGroup.new
- target = StepGroup.new
- given_scenario = source.given_scenario("1") {}
- given = source.given("1") {}
- when1 = source.when("1") {}
- when2 = source.when("2") {}
- then1 = source.then("1") {}
- then2 = source.then("2") {}
- then3 = source.then("3") {}
- source.add_to target
- target.find(:given_scenario, "1").should equal(given_scenario)
- target.find(:given, "1").should equal(given)
- target.find(:when, "1").should equal(when1)
- target.find(:when, "2").should equal(when2)
- target.find(:then, "1").should equal(then1)
- target.find(:then, "2").should equal(then2)
- target.find(:then, "3").should equal(then3)
- end
-
- it "should append another collection" do
- matchers_to_append = StepGroup.new
- step = matchers_to_append.given("this and that") {}
- @step_group << matchers_to_append
- @step_group.find(:given, "this and that").should equal(step)
- end
-
- it "should append several other collections" do
- matchers_to_append = StepGroup.new
- more_matchers_to_append = StepGroup.new
- first_matcher = matchers_to_append.given("this and that") {}
- second_matcher = more_matchers_to_append.given("and the other") {}
- @step_group << matchers_to_append
- @step_group << more_matchers_to_append
- @step_group.find(:given, "this and that").should equal(first_matcher)
- @step_group.find(:given, "and the other").should equal(second_matcher)
- end
-
- it "should yield itself on initialization" do
- begin
- $step_group_spec_step = nil
- matchers = StepGroup.new do |matchers|
- $step_group_spec_step = matchers.given("foo") {}
- end
- $step_group_spec_step.matches?("foo").should be_true
- ensure
- $step_group_spec_step = nil
- end
- end
-
- it "should support defaults" do
- class StepGroupSubclass < StepGroup
- steps do |add|
- add.given("foo") {}
- end
- end
- StepGroupSubclass.new.find(:given, "foo").should_not be_nil
- end
-
- it "should create a Given" do
- sub = Class.new(StepGroup).new
- step = sub.Given("foo") {}
- sub.find(:given, "foo").should == step
- end
-
- it "should create a When" do
- sub = Class.new(StepGroup).new
- step = sub.When("foo") {}
- sub.find(:when, "foo").should == step
- end
-
- it "should create a Then" do
- sub = Class.new(StepGroup).new
- step = sub.Then("foo") {}
- sub.find(:then, "foo").should == step
- end
-
- it "should create steps in a block" do
- sub = Class.new(StepGroup).new do
- Given("a given") {}
- When("a when") {}
- Then("a then") {}
- end
- sub.find(:given, "a given").should_not be_nil
- sub.find(:when, "a when").should_not be_nil
- sub.find(:then, "a then").should_not be_nil
- end
-
- it "should clear itself" do
- step = @step_group.given("this and that") {}
- @step_group.clear
- @step_group.find(:given, "this and that").should be_nil
- end
-
- it "should tell you when it is empty" do
- @step_group.should be_empty
- end
-
- it "should tell you when it is not empty" do
- @step_group.given("this and that") {}
- @step_group.should_not be_empty
- end
-
- it "should handle << nil" do
- @step_group << nil
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/step_mother_spec.rb b/vendor/plugins/rspec/spec/spec/story/step_mother_spec.rb
deleted file mode 100644
index 64efd7a6a..000000000
--- a/vendor/plugins/rspec/spec/spec/story/step_mother_spec.rb
+++ /dev/null
@@ -1,72 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
- module Story
- describe StepMother do
- it 'should store a step by name and type' do
- # given
- step_mother = StepMother.new
- step = Step.new("a given", &lambda {})
- step_mother.store(:given, step)
-
- # when
- found = step_mother.find(:given, "a given")
-
- # then
- found.should == step
- end
-
- it 'should NOT raise an error if a step is missing' do
- # given
- step_mother = StepMother.new
-
- # then
- lambda do
- # when
- step_mother.find(:given, "doesn't exist")
- end.should_not raise_error
- end
-
- it "should create a default step which raises a pending error" do
- # given
- step_mother = StepMother.new
-
- # when
- step = step_mother.find(:given, "doesn't exist")
-
- # then
- step.should be_an_instance_of(Step)
-
- lambda do
- step.perform(Object.new, "doesn't exist")
- end.should raise_error(Spec::Example::ExamplePendingError, /Unimplemented/)
- end
-
- it 'should clear itself' do
- # given
- step_mother = StepMother.new
- step = Step.new("a given") do end
- step_mother.store(:given, step)
-
- # when
- step_mother.clear
-
- # then
- step_mother.should be_empty
- end
-
- it "should use assigned steps" do
- step_mother = StepMother.new
-
- step = Step.new('step') {}
- step_group = StepGroup.new
- step_group.add(:given, step)
-
- step_mother.use(step_group)
-
- step_mother.find(:given, "step").should equal(step)
- end
-
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/step_spec.rb b/vendor/plugins/rspec/spec/spec/story/step_spec.rb
deleted file mode 100644
index 2b523607a..000000000
--- a/vendor/plugins/rspec/spec/spec/story/step_spec.rb
+++ /dev/null
@@ -1,219 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
- module Story
- describe Step, "matching" do
- it "should match a text string" do
- step = Step.new("this text") {}
- step.matches?("this text").should be_true
- end
-
- it "should not match a text string that does not start the same" do
- step = Step.new("this text") {}
- step.matches?("Xthis text").should be_false
- end
-
- it "should not match a text string that does not end the same" do
- step = Step.new("this text") {}
- step.matches?("this textX").should be_false
- end
-
- it "should match a text string with a param" do
- step = Step.new("this $param text") {}
- step.matches?("this anything text").should be_true
- end
-
- it "should not be greedy" do
- step = Step.new("enter $value for $key") {}
- step.parse_args("enter 3 for keys for a piano").should == ['3','keys for a piano']
- end
-
- it "should match a text string with 3 params" do
- step = Step.new("1 $one 2 $two 3 $three 4") {}
- step.matches?("1 a 2 b 3 c 4").should be_true
- end
-
- it "should match a text string with a param at the beginning" do
- step = Step.new("$one 2 3") {}
- step.matches?("a 2 3").should be_true
- end
-
- it "should match a text string with a param at the end" do
- step = Step.new("1 2 $three") {}
- step.matches?("1 2 c").should be_true
- end
-
- it "should match a text string with a dollar sign ($)" do
- step = Step.new("show me the $$money") {}
- step.matches?("show me the $kwan").should be_true
- end
-
- it "should match a string with an escaped dollar sign" do
- step = Step.new("show me the \$money") {}
- step.matches?("show me the $kwan").should be_true
- end
-
- it "should not match a different string" do
- step = Step.new("this text") {}
- step.matches?("other text").should be_false
- end
-
- it "should match a regexp" do
- step = Step.new(/this text/) {}
- step.matches?("this text").should be_true
- end
-
- it "should match a regexp with a match group" do
- step = Step.new(/this (.*) text/) {}
- step.matches?("this anything text").should be_true
- end
-
- it "should match a regexp with a named variable" do
- step = Step.new(/this $variable text/) {}
- step.matches?("this anything text").should be_true
- end
-
- it "should not match a non matching regexp" do
- step = Step.new(/this (.*) text/) {}
- step.matches?("other anything text").should be_false
- end
-
- it "should not match a non matching regexp with a named variable" do
- step = Step.new(/this $variable text/) {}
- step.matches?("other anything text").should be_false
- end
-
- it "should not get bogged down by parens in strings" do
- step = Step.new("before () after") {}
- step.matches?("before () after").should be_true
- end
-
- it "should match any option of an alteration" do
- step = Step.new(/(he|she) is cool/) {}
- step.matches?("he is cool").should be_true
- step.matches?("she is cool").should be_true
- end
-
- it "should match alteration as well as a variable" do
- step = Step.new(/(he|she) is (.*)/) {}
- step.matches?("he is cool").should be_true
- step.parse_args("he is cool").should == ['he', 'cool']
- end
-
- it "should match alteration as well as a named variable" do
- step = Step.new(/(he|she) is $adjective/) {}
- step.matches?("he is cool").should be_true
- step.parse_args("he is cool").should == ['he', 'cool']
- end
-
- it "should match alteration as well as a anonymous and named variable" do
- step = Step.new(/(he|she) is (.*?) $adjective/) {}
- step.matches?("he is very cool").should be_true
- step.parse_args("he is very cool").should == ['he', 'very', 'cool']
- end
-
- it "should match a regex with a dollar sign ($)" do
- step = Step.new(/show me the \$\d+/) {}
- step.matches?("show me the $123").should be_true
- end
-
- it "should match a regex with a dollar sign and named variable" do
- step = Step.new(/show me the \$$money/) {}
- step.matches?("show me the $123").should be_true
- end
- end
-
- describe Step do
- it "should make complain with no block" do
- lambda {
- step = Step.new("foo")
- }.should raise_error
- end
-
- it "should perform itself on an object" do
- # given
- $instance = nil
- step = Step.new 'step' do
- $instance = self
- end
- instance = Object.new
-
- # when
- step.perform(instance, "step")
-
- # then
- $instance.should == instance
- end
-
- it "should perform itself with one parameter with match expression" do
- # given
- $result = nil
- step = Step.new 'an account with $count dollars' do |count|
- $result = count
- end
- instance = Object.new
-
- # when
- args = step.parse_args("an account with 3 dollars")
- step.perform(instance, *args)
-
- # then
- $result.should == "3"
- end
-
- it "should perform itself with one parameter without a match expression" do
- # given
- $result = nil
- step = Step.new 'an account with a balance of' do |amount|
- $result = amount
- end
- instance = Object.new
-
- # when
- step.perform(instance, 20)
-
- # then
- $result.should == 20
- end
-
- it "should perform itself with 2 parameters" do
- # given
- $account_type = nil
- $amount = nil
- step = Step.new 'a $account_type account with $amount dollars' do |account_type, amount|
- $account_type = account_type
- $amount = amount
- end
- instance = Object.new
-
- # when
- args = step.parse_args("a savings account with 3 dollars")
- step.perform(instance, *args)
-
- # then
- $account_type.should == "savings"
- $amount.should == "3"
- end
-
- it "should perform itself when defined with a regexp with 2 parameters" do
- # given
- $pronoun = nil
- $adjective = nil
- step = Step.new /(he|she) is (.*)/ do |pronoun, adjective|
- $pronoun = pronoun
- $adjective = adjective
- end
- instance = Object.new
-
- # when
- args = step.parse_args("he is cool")
- step.perform(instance, *args)
-
- # then
- $pronoun.should == "he"
- $adjective.should == "cool"
- end
-
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/story_helper.rb b/vendor/plugins/rspec/spec/spec/story/story_helper.rb
deleted file mode 100644
index bb906f255..000000000
--- a/vendor/plugins/rspec/spec/spec/story/story_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require File.dirname(__FILE__) + '/builders'
diff --git a/vendor/plugins/rspec/spec/spec/story/story_spec.rb b/vendor/plugins/rspec/spec/spec/story/story_spec.rb
deleted file mode 100644
index f6bce544f..000000000
--- a/vendor/plugins/rspec/spec/spec/story/story_spec.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-module Spec
- module Story
- describe Story do
- it 'should run itself in a given object' do
- # given
- $instance = nil
- story = Story.new 'title', 'narrative' do
- $instance = self
- end
- object = Object.new
-
- # when
- story.run_in(object)
-
- # then
- $instance.should be(object)
- end
-
- it 'should not raise an error if no block is supplied' do
- # when
- error = exception_from do
- Story.new 'title', 'narrative'
- end
-
- # then
- error.should be_nil
- end
-
- it "should raise an error when an error is raised running in another object" do
- #given
- story = Story.new 'title', 'narrative' do
- raise "this is raised in the story"
- end
- object = Object.new
-
- # when/then
- lambda do
- story.run_in(object)
- end.should raise_error
- end
-
- it "should use the steps it is told to using a StepGroup" do
- story = Story.new("title", "narrative", :steps_for => steps = StepGroup.new) do end
- assignee = mock("assignee")
- assignee.should_receive(:use).with(steps)
- story.assign_steps_to(assignee)
- end
-
- it "should use the steps it is told to using a key" do
- begin
- orig_rspec_story_steps = $rspec_story_steps
- $rspec_story_steps = StepGroupHash.new
- $rspec_story_steps[:foo] = steps = Object.new
-
- story = Story.new("title", "narrative", :steps_for => :foo) do end
- assignee = mock("assignee")
-
- assignee.should_receive(:use).with(steps)
- story.assign_steps_to(assignee)
- ensure
- $rspec_story_steps = orig_rspec_story_steps
- end
- end
-
- it "should use the steps it is told to using multiple keys" do
- begin
- orig_rspec_story_steps = $rspec_story_steps
- $rspec_story_steps = StepGroupHash.new
- $rspec_story_steps[:foo] = foo_steps = Object.new
- $rspec_story_steps[:bar] = bar_steps = Object.new
-
- story = Story.new("title", "narrative", :steps_for => [:foo, :bar]) do end
- assignee = mock("assignee")
-
- assignee.should_receive(:use).with(foo_steps)
- assignee.should_receive(:use).with(bar_steps)
- story.assign_steps_to(assignee)
- ensure
- $rspec_story_steps = orig_rspec_story_steps
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/story/world_spec.rb b/vendor/plugins/rspec/spec/spec/story/world_spec.rb
deleted file mode 100644
index f5113dc42..000000000
--- a/vendor/plugins/rspec/spec/spec/story/world_spec.rb
+++ /dev/null
@@ -1,423 +0,0 @@
-require File.dirname(__FILE__) + '/story_helper'
-
-require 'spec/story'
-
-module Spec
- module Story
- describe World do
- before :each do
- World.listeners.clear
- end
-
- after :each do
- World.listeners.clear
- World.step_mother.clear
- end
-
- it 'should create an object that mixes in a World' do
- # when
- obj = World::create
-
- # then
- obj.should be_kind_of(World)
- end
-
- it 'should create a World from any object type' do
- # when
- obj = World::create String
-
- # then
- obj.should be_kind_of(String)
- obj.should be_kind_of(World)
- end
-
- it 'should pass arguments to #new when creating an object of a specified type that mixes in a world' do
- # given
- Thing = Struct.new(:name, :age)
-
- # when
- obj = World::create Thing, "David", "I'm not telling"
-
- # then
- obj.should be_an_instance_of(Thing)
- obj.name.should == "David"
- obj.age.should == "I'm not telling"
- obj.should be_kind_of(World)
- end
-
- def ensure_world_executes_step(&block)
- # given
- obj = World::create
- $step_ran = false
-
- # when
- obj.instance_eval(&block)
-
- # then
- $step_ran.should be_true
- end
-
- it 'should execute a Given, When or Then step' do
- ensure_world_executes_step do
- Given 'a given' do
- $step_ran = true
- end
- end
-
- ensure_world_executes_step do
- When 'an event' do
- $step_ran = true
- end
- end
-
- ensure_world_executes_step do
- Then 'an outcome' do
- $step_ran = true
- end
- end
- end
-
- it 'should interpret Given... And... as multiple givens' do
- # given
- world = World.create
- $steps = []
-
- # when
- world.instance_eval do
- Given 'step 1' do
- $steps << 1
- end
- And 'step 2' do
- $steps << 2
- end
- end
-
- # then
- $steps.should == [1,2]
- World.step_mother.find(:given, 'step 1').should_not be_nil
- World.step_mother.find(:given, 'step 2').should_not be_nil
- end
-
- it 'should interpret When... And... as multiple events' do
- # given
- world = World.create
- $steps = []
-
- # when
- world.instance_eval do
- When 'step 1' do
- $steps << 1
- end
- And 'step 2' do
- $steps << 2
- end
- end
-
- # then
- $steps.should == [1,2]
- World.step_mother.find(:when, 'step 1').should_not be_nil
- World.step_mother.find(:when, 'step 2').should_not be_nil
- end
-
- it 'should interpret Then... And... as multiple outcomes' do
- # given
- world = World.create
- $steps = []
-
- # when
- world.instance_eval do
- Then 'step 1' do
- $steps << 1
- end
- And 'step 2' do
- $steps << 2
- end
- end
-
- # then
- $steps.should == [1,2]
- World.step_mother.find(:then, 'step 1').should_not be_nil
- World.step_mother.find(:then, 'step 2').should_not be_nil
- end
-
- it 'should reuse a given across scenarios' do
- # given
- $num_invoked = 0
- a_world = World::create
- a_world.instance_eval do
- Given 'a given' do
- $num_invoked += 1
- end
- end
- another_world = World::create
-
- # when
- another_world.instance_eval do
- Given 'a given' # without a body
- end
-
- # then
- $num_invoked.should == 2
- end
-
- it 'should reuse an event across scenarios' do
- # given
- $num_invoked = 0
- a_world = World::create
- a_world.instance_eval do
- When 'an event' do
- $num_invoked += 1
- end
- end
-
- another_world = World::create
-
- # when
- another_world.instance_eval do
- When 'an event' # without a body
- end
-
- # then
- $num_invoked.should == 2
- end
-
- it 'should reuse an outcome across scenarios' do
- # given
- $num_invoked = 0
- a_world = World::create
- a_world.instance_eval do
- Then 'an outcome' do
- $num_invoked += 1
- end
- end
-
- another_world = World::create
-
- # when
- another_world.instance_eval do
- Then 'an outcome' # without a body
- end
-
- # then
- $num_invoked.should == 2
- end
-
- it 'should preserve instance variables between steps within a scenario' do
- # given
- world = World::create
- $first = nil
- $second = nil
-
- # when
- world.instance_eval do
- Given 'given' do
- @first = 'first'
- end
- When 'event' do
- @second = @first # from given
- end
- Then 'outcome' do
- $first = @first # from given
- $second = @second # from event
- end
- end
-
- # then
- $first.should == 'first'
- $second.should == 'first'
- end
-
- it 'should invoke a reused step in the new object instance' do
- # given
- $instances = []
- $debug = true
- world1 = World.create
- world1.instance_eval do
- Given 'a given' do
- $instances << self.__id__
- end
- end
- world2 = World.create
-
- # when
- world2.instance_eval do
- Given 'a given' # reused
- Then 'an outcome' do
- $instances << __id__
- end
- end
- $debug = false
- # then
- $instances.should == [ world1.__id__, world2.__id__, world2.__id__ ]
- end
-
- def ensure_world_collects_error(expected_error, &block)
- # given
- world = World.create
- # $error = nil
-
- # when
- world.start_collecting_errors
- world.instance_eval(&block)
-
- # then
- world.should have(1).errors
- world.errors[0].should be_kind_of(expected_error)
- end
-
- it 'should collect a failure from a Given step' do
- ensure_world_collects_error RuntimeError do
- Given 'a given' do
- raise RuntimeError, "oops"
- end
- end
- end
-
- it 'should collect a failure from a When step' do
- ensure_world_collects_error RuntimeError do
- When 'an event' do
- raise RuntimeError, "oops"
- end
- end
- end
-
- it 'should collect a failure from a Then step' do
- ensure_world_collects_error RuntimeError do
- Then 'an outcome' do
- raise RuntimeError, "oops"
- end
- end
- end
-
- it 'should inform listeners when it runs a Given, When or Then step' do
- # given
- world = World.create
- mock_listener1 = mock('listener1')
- mock_listener2 = mock('listener2')
- World.add_listener(mock_listener1)
- World.add_listener(mock_listener2)
-
- # expect
- mock_listener1.should_receive(:step_upcoming).with(:given, 'a context')
- mock_listener1.should_receive(:step_succeeded).with(:given, 'a context')
- mock_listener1.should_receive(:step_upcoming).with(:when, 'an event')
- mock_listener1.should_receive(:step_succeeded).with(:when, 'an event')
- mock_listener1.should_receive(:step_upcoming).with(:then, 'an outcome')
- mock_listener1.should_receive(:step_succeeded).with(:then, 'an outcome')
-
- mock_listener2.should_receive(:step_upcoming).with(:given, 'a context')
- mock_listener2.should_receive(:step_succeeded).with(:given, 'a context')
- mock_listener2.should_receive(:step_upcoming).with(:when, 'an event')
- mock_listener2.should_receive(:step_succeeded).with(:when, 'an event')
- mock_listener2.should_receive(:step_upcoming).with(:then, 'an outcome')
- mock_listener2.should_receive(:step_succeeded).with(:then, 'an outcome')
-
- # when
- world.instance_eval do
- Given 'a context' do end
- When 'an event' do end
- Then 'an outcome' do end
- end
-
- # then
- end
-
- it 'should tell listeners but not execute the step in dry-run mode' do
- # given
- Runner.stub!(:dry_run).and_return(true)
- mock_listener = mock('listener')
- World.add_listener(mock_listener)
- $step_invoked = false
- world = World.create
-
- # expect
- mock_listener.should_receive(:step_upcoming).with(:given, 'a context')
- mock_listener.should_receive(:step_succeeded).with(:given, 'a context')
-
- # when
- world.instance_eval do
- Given 'a context' do
- $step_invoked = true
- end
- end
-
- # then
- $step_invoked.should be(false)
- end
-
- it 'should suppress listeners while it runs a GivenScenario' do
- # given
- $scenario_ran = false
-
- scenario = ScenarioBuilder.new.name('a scenario').to_scenario do
- $scenario_ran = true
- Given 'given' do end
- When 'event' do end
- Then 'outcome' do end
- end
-
- given_scenario = GivenScenario.new('a scenario')
- Runner::StoryRunner.should_receive(:scenario_from_current_story).
- with('a scenario').and_return(scenario)
-
- world = World.create
- listener = mock('listener')
- World.add_listener(listener)
-
- # expect
- listener.should_receive(:found_scenario).with(:'given scenario', 'a scenario')
- listener.should_receive(:step_succeeded).never.with(:given, 'given')
- listener.should_receive(:step_succeeded).never.with(:when, 'event')
- listener.should_receive(:step_succeeded).never.with(:then, 'outcome')
-
- # when
- world.GivenScenario 'a scenario'
-
- # then
- $scenario_ran.should be_true
- end
-
- it 'should interpret GivenScenario... And... as multiple givens' do
- # given
- world = World.create
- $steps = []
-
- scenario = ScenarioBuilder.new.name('a scenario').to_scenario do
- $steps << 1
- end
- Runner::StoryRunner.should_receive(:scenario_from_current_story).
- with('a scenario').and_return(scenario)
-
- # when
- world.instance_eval do
- GivenScenario 'a scenario'
- And 'step 2' do
- $steps << 2
- end
- end
-
- # then
- $steps.should == [1,2]
- World.step_mother.find(:given, 'step 2').should_not be_nil
- end
-
- it 'should provide rspec matchers' do
- # given
- world = World.create
-
- # then
- world.instance_eval do
- 'hello'.should match(/^hello$/)
- end
- end
-
- it "should use assigned matchers" do
- world = World.create
-
- World.should_receive(:use).with(steps = Object.new)
-
- World.use(steps)
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec/translator_spec.rb b/vendor/plugins/rspec/spec/spec/translator_spec.rb
deleted file mode 100644
index 01293d9ee..000000000
--- a/vendor/plugins/rspec/spec/spec/translator_spec.rb
+++ /dev/null
@@ -1,265 +0,0 @@
-require File.dirname(__FILE__) + '/../spec_helper.rb'
-require 'spec/translator'
-
-describe "Translator" do
- before do
- @t = Spec::Translator.new
- end
-
- it "should translate files" do
- from = File.dirname(__FILE__) + '/..'
- to = "#{Dir.tmpdir}/translated_specs"
- @t.translate_dir(from, to)
- end
-
- it "should translate context_setup do" do
- @t.translate_line(
- "context_setup do\n"
- ).should eql(
- "before(:all) do\n"
- )
- end
-
- it "should translate context_setup {foo}" do
- @t.translate_line(
- "context_setup {foo}\n"
- ).should eql(
- "before(:all) {foo}\n"
- )
- end
-
- it "should translate context ' to describe '" do
- @t.translate_line(
- "context 'Translator' do\n"
- ).should eql(
- "describe 'Translator' do\n"
- )
- end
-
- it 'should translate context " to describe "' do
- @t.translate_line(
- 'context "Translator"'
- ).should eql(
- 'describe "Translator"'
- )
- end
-
- it 'should translate spaces then context " to describe "' do
- @t.translate_line(
- ' context "Translator"'
- ).should eql(
- ' describe "Translator"'
- )
- end
-
- it "should not translate context=foo" do
- @t.translate_line(' context=foo').should eql(' context=foo')
- end
-
- it "should not translate context = foo" do
- @t.translate_line(' context = foo').should eql(' context = foo')
- end
-
- it "should not translate context = foo" do
- @t.translate_line(' context = foo').should eql(' context = foo')
- end
-
- it "should translate should_be_close" do
- @t.translate_line('5.0.should_be_close(5.0, 0.5)').should eql('5.0.should be_close(5.0, 0.5)')
- end
-
- it "should translate should_not_raise" do
- @t.translate_line('lambda { self.call }.should_not_raise').should eql('lambda { self.call }.should_not raise_error')
- end
-
- it "should translate should_throw" do
- @t.translate_line('lambda { self.call }.should_throw').should eql('lambda { self.call }.should throw_symbol')
- end
-
- it "should not translate 0.9 should_not" do
- @t.translate_line('@target.should_not @matcher').should eql('@target.should_not @matcher')
- end
-
- it "should leave should_not_receive" do
- @t.translate_line('@mock.should_not_receive(:not_expected).with("unexpected text")').should eql('@mock.should_not_receive(:not_expected).with("unexpected text")')
- end
-
- it "should leave should_receive" do
- @t.translate_line('@mock.should_receive(:not_expected).with("unexpected text")').should eql('@mock.should_receive(:not_expected).with("unexpected text")')
- end
-
- it "should translate multi word predicates" do
- @t.translate_line('foo.should_multi_word_predicate').should eql('foo.should be_multi_word_predicate')
- end
-
- it "should translate multi word predicates prefixed with be" do
- @t.translate_line('foo.should_be_multi_word_predicate').should eql('foo.should be_multi_word_predicate')
- end
-
- it "should translate be(expected) to equal(expected)" do
- @t.translate_line('foo.should_be :cool').should eql('foo.should equal :cool')
- end
-
- it "should translate instance_of" do
- @t.translate_line('5.should_be_an_instance_of(Integer)').should eql('5.should be_an_instance_of(Integer)')
- end
-
- it "should translate should_be <" do
- @t.translate_line('3.should_be < 4').should eql('3.should be < 4')
- end
-
- it "should translate should_be <=" do
- @t.translate_line('3.should_be <= 4').should eql('3.should be <= 4')
- end
-
- it "should translate should_be >=" do
- @t.translate_line('4.should_be >= 3').should eql('4.should be >= 3')
- end
-
- it "should translate should_be >" do
- @t.translate_line('4.should_be > 3').should eql('4.should be > 3')
- end
-
- it "should translate should_be_happy" do
- @t.translate_line("4.should_be_happy").should eql("4.should be_happy")
- end
-
- it "should translate custom method taking regexp with parenthesis" do
- @t.translate_line("@browser.should_contain_text(/Sn.rrunger og annet rusk/)").should eql("@browser.should be_contain_text(/Sn.rrunger og annet rusk/)")
- end
-
- it "should translate custom method taking regexp without parenthesis" do
- @t.translate_line("@browser.should_contain_text /Sn.rrunger og annet rusk/\n").should eql("@browser.should be_contain_text(/Sn.rrunger og annet rusk/)\n")
- end
-
- it "should translate should_not_be_nil" do
- @t.translate_line("foo.should_not_be_nil\n").should eql("foo.should_not be_nil\n")
- end
-
- it "should translate kind of" do
- @t.translate_line('@object.should_be_kind_of(MessageExpectation)').should(
- eql('@object.should be_kind_of(MessageExpectation)'))
- end
-
- it "should translate should_be_true" do
- @t.translate_line("foo.should_be_true\n").should eql("foo.should be_true\n")
- end
-
- # [#9674] spec_translate incorrectly handling shoud_match, when regexp in a var, in a block
- # http://rubyforge.org/tracker/?func=detail&atid=3149&aid=9674&group_id=797
- it "should translate should_match on a regexp, in a var, in a block" do
- @t.translate_line("collection.each { |c| c.should_match a_regexp_in_a_var }\n").should eql("collection.each { |c| c.should match(a_regexp_in_a_var) }\n")
- @t.translate_line("collection.each{|c| c.should_match a_regexp_in_a_var}\n").should eql("collection.each{|c| c.should match(a_regexp_in_a_var) }\n")
- end
-
- # From Rubinius specs
- it "should translate close_to without parens" do
- @t.translate_line("end.should_be_close 3.14159_26535_89793_23846, TOLERANCE\n").should eql("end.should be_close(3.14159_26535_89793_23846, TOLERANCE)\n")
- end
-
- # [#9882] 0.9 Beta 1 - translator bugs
- # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149
- it "should support symbol arguments" do
- @t.translate_line(
- "lambda { sequence.parse('bar') }.should_throw :ZeroWidthParseSuccess\n"
- ).should eql(
- "lambda { sequence.parse('bar') }.should throw_symbol(:ZeroWidthParseSuccess)\n"
- )
- end
-
- # [#9882] 0.9 Beta 1 - translator bugs
- # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149
- it "should support instance var arguments" do
- @t.translate_line(
- "a.should_eql @local"
- ).should eql(
- "a.should eql(@local)"
- )
- end
-
- # [#9882] 0.9 Beta 1 - translator bugs
- # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149
- it "should support lambdas as expecteds" do
- @t.translate_line(
- "@parslet.should_not_eql lambda { nil }.to_parseable"
- ).should eql(
- "@parslet.should_not eql(lambda { nil }.to_parseable)"
- )
- end
-
- # [#9882] 0.9 Beta 1 - translator bugs
- # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149
- it "should support fully qualified names" do
- @t.translate_line(
- "results.should_be_kind_of SimpleASTLanguage::Identifier"
- ).should eql(
- "results.should be_kind_of(SimpleASTLanguage::Identifier)"
- )
- end
-
- # [#9882] 0.9 Beta 1 - translator bugs
- # http://rubyforge.org/tracker/index.php?func=detail&aid=9882&group_id=797&atid=3149
- # it "should leave whitespace between expression and comments" do
- # @t.translate_line(
- # "lambda { @instance.foo = foo }.should_raise NoMethodError # no writer defined"
- # ).should eql(
- # "lambda { @instance.foo = foo }.should raise_error(NoMethodError) # no writer defined"
- # )
- # end
-
- it "should translate redirects" do
- @t.translate_line(
- "controller.should_redirect_to 'http://not_existing_domain_for_novalis.test.host/404.html'"
- ).should eql(
- "controller.should redirect_to('http://not_existing_domain_for_novalis.test.host/404.html')"
- )
- end
-
- it "should translate :any_args" do
- @t.translate_line(
- "mock.should_receive(:foo).with(:any_args)"
- ).should eql(
- "mock.should_receive(:foo).with(any_args)"
- )
- end
-
- it "should translate :anything" do
- @t.translate_line(
- "mock.should_receive(:foo).with(:anything)"
- ).should eql(
- "mock.should_receive(:foo).with(anything)"
- )
- end
-
- it "should translate :boolean" do
- @t.translate_line(
- "mock.should_receive(:foo).with(:boolean)"
- ).should eql(
- "mock.should_receive(:foo).with(boolean)"
- )
- end
-
- it "should translate :no_args" do
- @t.translate_line(
- "mock.should_receive(:foo).with(:no_args)"
- ).should eql(
- "mock.should_receive(:foo).with(no_args)"
- )
- end
-
- it "should translate :numeric" do
- @t.translate_line(
- "mock.should_receive(:foo).with(:numeric)"
- ).should eql(
- "mock.should_receive(:foo).with(an_instance_of(Numeric))"
- )
- end
-
- it "should translate :string" do
- @t.translate_line(
- "mock.should_receive(:foo).with(:string)"
- ).should eql(
- "mock.should_receive(:foo).with(an_instance_of(String))"
- )
- end
-end
diff --git a/vendor/plugins/rspec/spec/spec_helper.rb b/vendor/plugins/rspec/spec/spec_helper.rb
index 1318176d5..3cffe875d 100644
--- a/vendor/plugins/rspec/spec/spec_helper.rb
+++ b/vendor/plugins/rspec/spec/spec_helper.rb
@@ -1,18 +1,24 @@
require 'stringio'
-dir = File.dirname(__FILE__)
-lib_path = File.expand_path("#{dir}/../lib")
-$LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
$_spec_spec = true # Prevents Kernel.exit in various places
require 'spec'
require 'spec/mocks'
-require 'spec/story'
-spec_classes_path = File.expand_path("#{dir}/../spec/spec/spec_classes")
-require spec_classes_path unless $LOAD_PATH.include?(spec_classes_path)
-require File.dirname(__FILE__) + '/../lib/spec/expectations/differs/default'
+require 'spec/runner/differs/default'
+require 'spec/autorun'
+
+require 'support/spec_classes'
+require 'support/macros'
+
+def jruby?
+ ::RUBY_PLATFORM == 'java'
+end
+
+module Spec
+ module Example
+ class NonStandardError < Exception; end
+ end
-module Spec
module Matchers
def fail
raise_error(Spec::Expectations::ExpectationNotMetError)
@@ -22,82 +28,85 @@ module Spec
raise_error(Spec::Expectations::ExpectationNotMetError, message)
end
- class Pass
- def matches?(proc, &block)
- begin
- proc.call
- true
- rescue Exception => @error
- false
- end
- end
-
- def failure_message
- @error.message + "\n" + @error.backtrace.join("\n")
+ def exception_from(&block)
+ exception = nil
+ begin
+ yield
+ rescue StandardError => e
+ exception = e
end
- end
-
- def pass
- Pass.new
+ exception
end
- class CorrectlyOrderedMockExpectation
- def initialize(&event)
- @event = event
- end
-
- def expect(&expectations)
- expectations.call
- @event.call
- end
- end
-
- def during(&block)
- CorrectlyOrderedMockExpectation.new(&block)
- end
- end
-end
-
-class NonStandardError < Exception; end
-
-module Custom
- class ExampleGroupRunner
- attr_reader :options, :arg
- def initialize(options, arg)
- @options, @arg = options, arg
+ def run_with(options)
+ ::Spec::Runner::CommandLine.run(options)
end
- def load_files(files)
+ def with_ruby(version)
+ yield if RUBY_VERSION =~ Regexp.compile("^#{version.to_s}")
end
-
- def run
- end
- end
-end
-
-def exception_from(&block)
- exception = nil
- begin
- yield
- rescue StandardError => e
- exception = e
end
- exception
end
-describe "sandboxed rspec_options", :shared => true do
+def with_sandboxed_options
attr_reader :options
+
+ before(:each) do
+ @original_rspec_options = ::Spec::Runner.options
+ ::Spec::Runner.use(@options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new))
+ end
- before(:all) do
- @original_rspec_options = $rspec_options
+ after(:each) do
+ ::Spec::Runner.use(@original_rspec_options)
end
+
+ yield
+end
+def with_sandboxed_config
+ attr_reader :config
+
before(:each) do
- @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
- $rspec_options = options
+ @config = ::Spec::Runner::Configuration.new
+ @original_configuration = ::Spec::Runner.configuration
+ spec_configuration = @config
+ ::Spec::Runner.instance_eval {@configuration = spec_configuration}
end
+
+ after(:each) do
+ original_configuration = @original_configuration
+ ::Spec::Runner.instance_eval {@configuration = original_configuration}
+ ::Spec::Example::ExampleGroupFactory.reset
+ end
+
+ yield
+end
- after do
- $rspec_options = @original_rspec_options
+module Spec
+ module Example
+ module Resettable
+ def reset # :nodoc:
+ @before_all_parts = nil
+ @after_all_parts = nil
+ @before_each_parts = nil
+ @after_each_parts = nil
+ end
+ end
+ class ExampleGroup
+ extend Resettable
+ end
+ class ExampleGroupDouble < ExampleGroup
+ ::Spec::Runner.options.remove_example_group self
+ def register_example_group(klass)
+ #ignore
+ end
+ def initialize(proxy=nil, &block)
+ super(proxy || ExampleProxy.new, &block)
+ end
+ end
end
+end
+
+Spec::Runner.configure do |config|
+ config.extend(Macros)
end \ No newline at end of file
diff --git a/vendor/plugins/rspec/stories/all.rb b/vendor/plugins/rspec/stories/all.rb
deleted file mode 100644
index 83f557032..000000000
--- a/vendor/plugins/rspec/stories/all.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[helper])
-
-%w[example_groups interop mock_framework_integration].each do |dir|
- require File.join(File.dirname(__FILE__), "#{dir}/stories")
-end
diff --git a/vendor/plugins/rspec/stories/example_groups/autogenerated_docstrings b/vendor/plugins/rspec/stories/example_groups/autogenerated_docstrings
deleted file mode 100644
index b3ff68998..000000000
--- a/vendor/plugins/rspec/stories/example_groups/autogenerated_docstrings
+++ /dev/null
@@ -1,45 +0,0 @@
-Story: autogenerated docstrings
-
- As an RSpec user
- I want examples to generate their own names
- So that I can reduce duplication between example names and example code
-
- Scenario: run passing examples with ruby
- Given the file ../../examples/pure/autogenerated_docstrings_example.rb
-
- When I run it with the ruby interpreter -fs
-
- Then the stdout should match /should equal 5/
- And the stdout should match /should be < 5/
- And the stdout should match /should include "a"/
- And the stdout should match /should respond to #size/
-
- Scenario: run failing examples with ruby
- Given the file ../../failing_examples/failing_autogenerated_docstrings_example.rb
-
- When I run it with the ruby interpreter -fs
-
- Then the stdout should match /should equal 2/
- And the stdout should match /should be > 5/
- And the stdout should match /should include "b"/
- And the stdout should match /should not respond to #size/
-
- Scenario: run passing examples with spec
- Given the file ../../examples/pure/autogenerated_docstrings_example.rb
-
- When I run it with the spec script -fs
-
- Then the stdout should match /should equal 5/
- And the stdout should match /should be < 5/
- And the stdout should match /should include "a"/
- And the stdout should match /should respond to #size/
-
- Scenario: run failing examples with spec
- Given the file ../../failing_examples/failing_autogenerated_docstrings_example.rb
-
- When I run it with the spec script -fs
-
- Then the stdout should match /should equal 2/
- And the stdout should match /should be > 5/
- And the stdout should match /should include "b"/
- And the stdout should match /should not respond to #size/
diff --git a/vendor/plugins/rspec/stories/example_groups/example_group_with_should_methods b/vendor/plugins/rspec/stories/example_groups/example_group_with_should_methods
deleted file mode 100644
index 3d2bc61eb..000000000
--- a/vendor/plugins/rspec/stories/example_groups/example_group_with_should_methods
+++ /dev/null
@@ -1,17 +0,0 @@
-Story: Spec::ExampleGroup with should methods
-
- As an RSpec adopter accustomed to classes and methods
- I want to use should_* methods in an ExampleGroup
- So that I use RSpec with classes and methods that look more like RSpec examples
-
- Scenario: Run with ruby
- Given the file spec/example_group_with_should_methods.rb
- When I run it with the ruby interpreter
- Then the exit code should be 256
- And the stdout should match "2 examples, 1 failure"
-
- Scenario: Run with spec
- Given the file spec/example_group_with_should_methods.rb
- When I run it with the spec script
- Then the exit code should be 256
- And the stdout should match "2 examples, 1 failure"
diff --git a/vendor/plugins/rspec/stories/example_groups/nested_groups b/vendor/plugins/rspec/stories/example_groups/nested_groups
deleted file mode 100644
index ede978563..000000000
--- a/vendor/plugins/rspec/stories/example_groups/nested_groups
+++ /dev/null
@@ -1,17 +0,0 @@
-Story: Nested example groups
-
- As an RSpec user
- I want to nest examples groups
- So that I can better organize my examples
-
- Scenario: Run with ruby
- Given the file ../../examples/pure/stack_spec_with_nested_example_groups.rb
- When I run it with the ruby interpreter -fs
- Then the stdout should match /Stack \(empty\)/
- And the stdout should match /Stack \(full\)/
-
- Scenario: Run with ruby
- Given the file ../../examples/pure/stack_spec_with_nested_example_groups.rb
- When I run it with the spec script -fs
- Then the stdout should match /Stack \(empty\)/
- And the stdout should match /Stack \(full\)/
diff --git a/vendor/plugins/rspec/stories/example_groups/output b/vendor/plugins/rspec/stories/example_groups/output
deleted file mode 100644
index 4947bdcaf..000000000
--- a/vendor/plugins/rspec/stories/example_groups/output
+++ /dev/null
@@ -1,25 +0,0 @@
-Story: Getting correct output
-
- As an RSpec user
- I want to see output only once
- So that I don't get confused
-
- Scenario: Run with ruby
- Given the file spec/simple_spec.rb
- When I run it with the ruby interpreter
- Then the exit code should be 0
- And the stdout should not match /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/m
- And the stdout should match "1 example, 0 failures"
-
- Scenario: Run with CommandLine object
- Given the file spec/simple_spec.rb
- When I run it with the CommandLine object
- Then the exit code should be 0
- And the stdout should not match "Loaded suite"
- And the stdout should not match /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/m
- And the stdout should match "1 example, 0 failures"
-
- Scenario: Tweak backtrace
- Given the file stories/failing_story.rb
- When I run it with the ruby interpreter
- Then the stdout should not match /\/lib\/spec\//
diff --git a/vendor/plugins/rspec/stories/example_groups/stories.rb b/vendor/plugins/rspec/stories/example_groups/stories.rb
deleted file mode 100644
index 2def16b86..000000000
--- a/vendor/plugins/rspec/stories/example_groups/stories.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[.. helper])
-
-with_steps_for :running_rspec do
- run File.dirname(__FILE__) + "/nested_groups"
- # Dir["#{File.dirname(__FILE__)}/*"].each do |file|
- # run file if File.file?(file) && !(file =~ /\.rb$/)
- # end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/stories/helper.rb b/vendor/plugins/rspec/stories/helper.rb
deleted file mode 100644
index d9a105e76..000000000
--- a/vendor/plugins/rspec/stories/helper.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-$LOAD_PATH.unshift File.expand_path("#{File.dirname(__FILE__)}/../lib")
-require 'spec'
-require 'tempfile'
-require File.join(File.dirname(__FILE__), *%w[resources matchers smart_match])
-require File.join(File.dirname(__FILE__), *%w[resources helpers story_helper])
-require File.join(File.dirname(__FILE__), *%w[resources steps running_rspec])
diff --git a/vendor/plugins/rspec/stories/interop/examples_and_tests_together b/vendor/plugins/rspec/stories/interop/examples_and_tests_together
deleted file mode 100644
index 6583f89c6..000000000
--- a/vendor/plugins/rspec/stories/interop/examples_and_tests_together
+++ /dev/null
@@ -1,30 +0,0 @@
-Story: Spec and test together
-
- As an RSpec adopter with existing Test::Unit tests
- I want to run a few specs alongside my existing Test::Unit tests
- So that I can experience a smooth, gradual migration path
-
- Scenario: Run with ruby
- Given the file test/spec_and_test_together.rb
-
- When I run it with the ruby interpreter -fs
-
- Then the exit code should be 256
- And the stdout should match "ATest"
- And the stdout should match "Test::Unit::AssertionFailedError in 'An Example should fail with assert'"
- And the stdout should match "'An Example should fail with should' FAILED"
- And the stdout should match "10 examples, 6 failures"
- And the stdout should match /expected: 40,\s*got: 4/m
- And the stdout should match /expected: 50,\s*got: 5/m
- Scenario: Run with spec
- Given the file test/spec_and_test_together.rb
-
- When I run it with the spec script -fs
-
- Then the exit code should be 256
- Ands the stdout should match "ATest"
- And the stdout should match "Test::Unit::AssertionFailedError in 'An Example should fail with assert'"
- And the stdout should match "'An Example should fail with should' FAILED"
- And the stdout should match "10 examples, 6 failures"
- And the stdout should match /expected: 40,\s*got: 4/m
- And the stdout should match /expected: 50,\s*got: 5/m
diff --git a/vendor/plugins/rspec/stories/interop/stories.rb b/vendor/plugins/rspec/stories/interop/stories.rb
deleted file mode 100644
index e45882a93..000000000
--- a/vendor/plugins/rspec/stories/interop/stories.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[.. helper])
-
-with_steps_for :running_rspec do
- Dir["#{File.dirname(__FILE__)}/*"].each do |file|
- run file if File.file?(file) && !(file =~ /\.rb$/)
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/stories/interop/test_case_with_should_methods b/vendor/plugins/rspec/stories/interop/test_case_with_should_methods
deleted file mode 100644
index d618c50e2..000000000
--- a/vendor/plugins/rspec/stories/interop/test_case_with_should_methods
+++ /dev/null
@@ -1,17 +0,0 @@
-Story: Test::Unit::TestCase extended by rspec with should methods
-
- As an RSpec adopter with existing Test::Unit tests
- I want to use should_* methods in a Test::Unit::TestCase
- So that I use RSpec with classes and methods that look more like RSpec examples
-
- Scenario: Run with ruby
- Given the file test/test_case_with_should_methods.rb
- When I run it with the ruby interpreter
- Then the exit code should be 256
- And the stdout should match "5 examples, 3 failures"
-
- Scenario: Run with spec
- Given the file test/test_case_with_should_methods.rb
- When I run it with the spec script
- Then the exit code should be 256
- And the stdout should match "5 examples, 3 failures"
diff --git a/vendor/plugins/rspec/stories/mock_framework_integration/stories.rb b/vendor/plugins/rspec/stories/mock_framework_integration/stories.rb
deleted file mode 100644
index e45882a93..000000000
--- a/vendor/plugins/rspec/stories/mock_framework_integration/stories.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[.. helper])
-
-with_steps_for :running_rspec do
- Dir["#{File.dirname(__FILE__)}/*"].each do |file|
- run file if File.file?(file) && !(file =~ /\.rb$/)
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/stories/mock_framework_integration/use_flexmock.story b/vendor/plugins/rspec/stories/mock_framework_integration/use_flexmock.story
deleted file mode 100644
index 083531067..000000000
--- a/vendor/plugins/rspec/stories/mock_framework_integration/use_flexmock.story
+++ /dev/null
@@ -1,9 +0,0 @@
-Story: Getting correct output
-
- As an RSpec user who prefers flexmock
- I want to be able to use flexmock without rspec mocks interfering
-
- Scenario: Mock with flexmock
- Given the file spec/spec_with_flexmock.rb
- When I run it with the ruby interpreter
- Then the exit code should be 0 \ No newline at end of file
diff --git a/vendor/plugins/rspec/stories/pending_stories/README b/vendor/plugins/rspec/stories/pending_stories/README
deleted file mode 100644
index 2f9b44314..000000000
--- a/vendor/plugins/rspec/stories/pending_stories/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This directory contains stories that are currently not passing
-because they are new or they represent regressions.
-
diff --git a/vendor/plugins/rspec/stories/resources/helpers/cmdline.rb b/vendor/plugins/rspec/stories/resources/helpers/cmdline.rb
deleted file mode 100644
index ab86bd3e1..000000000
--- a/vendor/plugins/rspec/stories/resources/helpers/cmdline.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'spec'
-
-# Uncommenting next line will break the output story (no output!!)
-# rspec_options
-options = Spec::Runner::OptionParser.parse(
- ARGV, $stderr, $stdout
-)
-Spec::Runner::CommandLine.run(options)
diff --git a/vendor/plugins/rspec/stories/resources/helpers/story_helper.rb b/vendor/plugins/rspec/stories/resources/helpers/story_helper.rb
deleted file mode 100644
index e0aef5b45..000000000
--- a/vendor/plugins/rspec/stories/resources/helpers/story_helper.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require 'spec/story'
-require File.dirname(__FILE__) + '/../../../spec/ruby_forker'
-
-module StoryHelper
- include RubyForker
-
- def spec(args, stderr)
- ruby("#{File.dirname(__FILE__) + '/../../../bin/spec'} #{args}", stderr)
- end
-
- def cmdline(args, stderr)
- ruby("#{File.dirname(__FILE__) + '/../../resources/helpers/cmdline.rb'} #{args}", stderr)
- end
-
- Spec::Story::World.send :include, self
-end
diff --git a/vendor/plugins/rspec/stories/resources/matchers/smart_match.rb b/vendor/plugins/rspec/stories/resources/matchers/smart_match.rb
deleted file mode 100644
index 7b1672bc0..000000000
--- a/vendor/plugins/rspec/stories/resources/matchers/smart_match.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module Spec
- module Matchers
- class SmartMatch
- def initialize(expected)
- @expected = expected
- end
-
- def matches?(actual)
- @actual = actual
- # Satisfy expectation here. Return false or raise an error if it's not met.
-
- if @expected =~ /^\/.*\/?$/ || @expected =~ /^".*"$/
- regex_or_string = eval(@expected)
- if Regexp === regex_or_string
- (@actual =~ regex_or_string) ? true : false
- else
- @actual.index(regex_or_string) != nil
- end
- else
- false
- end
- end
-
- def failure_message
- "expected #{@actual.inspect} to smart_match #{@expected.inspect}, but it didn't"
- end
-
- def negative_failure_message
- "expected #{@actual.inspect} not to smart_match #{@expected.inspect}, but it did"
- end
- end
-
- def smart_match(expected)
- SmartMatch.new(expected)
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/stories/resources/spec/example_group_with_should_methods.rb b/vendor/plugins/rspec/stories/resources/spec/example_group_with_should_methods.rb
deleted file mode 100644
index 4c0505d2a..000000000
--- a/vendor/plugins/rspec/stories/resources/spec/example_group_with_should_methods.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'spec'
-
-class MySpec < Spec::ExampleGroup
- def should_pass_with_should
- 1.should == 1
- end
-
- def should_fail_with_should
- 1.should == 2
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/stories/resources/spec/simple_spec.rb b/vendor/plugins/rspec/stories/resources/spec/simple_spec.rb
deleted file mode 100644
index 2fb67ba49..000000000
--- a/vendor/plugins/rspec/stories/resources/spec/simple_spec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'spec'
-
-describe "Running an Example" do
- it "should not output twice" do
- true.should be_true
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/stories/resources/spec/spec_with_flexmock.rb b/vendor/plugins/rspec/stories/resources/spec/spec_with_flexmock.rb
deleted file mode 100644
index 629bef212..000000000
--- a/vendor/plugins/rspec/stories/resources/spec/spec_with_flexmock.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require "rubygems"
-require 'spec'
-
-Spec::Runner.configure do |config|
- config.mock_with :flexmock
-end
-
-# This is to ensure that requiring spec/mocks/framework doesn't interfere w/ flexmock
-require 'spec/mocks/framework'
-
-describe "something" do
- it "should receive some message" do
- target = Object.new
- flexmock(target).should_receive(:foo).once
- lambda {flexmock_verify}.should raise_error
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/stories/resources/steps/running_rspec.rb b/vendor/plugins/rspec/stories/resources/steps/running_rspec.rb
deleted file mode 100644
index 496847fe4..000000000
--- a/vendor/plugins/rspec/stories/resources/steps/running_rspec.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-steps_for :running_rspec do
-
- Given("the file $relative_path") do |relative_path|
- @path = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "resources", relative_path))
- unless File.exist?(@path)
- raise "could not find file at #{@path}"
- end
- end
-
- When("I run it with the $interpreter") do |interpreter|
- stderr_file = Tempfile.new('rspec')
- stderr_file.close
- @stdout = case(interpreter)
- when /^ruby interpreter/
- args = interpreter.gsub('ruby interpreter','')
- ruby("#{@path}#{args}", stderr_file.path)
- when /^spec script/
- args = interpreter.gsub('spec script','')
- spec("#{@path}#{args}", stderr_file.path)
- when 'CommandLine object' then cmdline(@path, stderr_file.path)
- else raise "Unknown interpreter: #{interpreter}"
- end
- @stderr = IO.read(stderr_file.path)
- @exit_code = $?.to_i
- end
-
- Then("the exit code should be $exit_code") do |exit_code|
- if @exit_code != exit_code.to_i
- raise "Did not exit with #{exit_code}, but with #{@exit_code}. Standard error:\n#{@stderr}"
- end
- end
-
- Then("the $stream should match $regex") do |stream, string_or_regex|
- written = case(stream)
- when 'stdout' then @stdout
- when 'stderr' then @stderr
- else raise "Unknown stream: #{stream}"
- end
- written.should smart_match(string_or_regex)
- end
-
- Then("the $stream should not match $regex") do |stream, string_or_regex|
- written = case(stream)
- when 'stdout' then @stdout
- when 'stderr' then @stderr
- else raise "Unknown stream: #{stream}"
- end
- written.should_not smart_match(string_or_regex)
- end
-end
diff --git a/vendor/plugins/rspec/stories/resources/stories/failing_story.rb b/vendor/plugins/rspec/stories/resources/stories/failing_story.rb
deleted file mode 100644
index cc9506c66..000000000
--- a/vendor/plugins/rspec/stories/resources/stories/failing_story.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-
-require 'spec/story'
-
-Story "Failing story",
-%(As an RSpec user
- I want a failing test
- So that I can observe the output) do
-
- Scenario "Failing scenario" do
- Then "true should be false" do
- true.should == false
- end
- end
-end
diff --git a/vendor/plugins/rspec/stories/resources/test/spec_and_test_together.rb b/vendor/plugins/rspec/stories/resources/test/spec_and_test_together.rb
deleted file mode 100644
index eb2b4e074..000000000
--- a/vendor/plugins/rspec/stories/resources/test/spec_and_test_together.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'spec'
-# TODO - this should not be necessary, ay?
-require 'spec/interop/test'
-
-describe "An Example" do
- it "should pass with assert" do
- assert true
- end
-
- it "should fail with assert" do
- assert false
- end
-
- it "should pass with should" do
- 1.should == 1
- end
-
- it "should fail with should" do
- 1.should == 2
- end
-end
-
-class ATest < Test::Unit::TestCase
- def test_should_pass_with_assert
- assert true
- end
-
- def test_should_fail_with_assert
- assert false
- end
-
- def test_should_pass_with_should
- 1.should == 1
- end
-
- def test_should_fail_with_should
- 1.should == 2
- end
-
- def setup
- @from_setup ||= 3
- @from_setup += 1
- end
-
- def test_should_fail_with_setup_method_variable
- @from_setup.should == 40
- end
-
- before do
- @from_before = @from_setup + 1
- end
-
- def test_should_fail_with_before_block_variable
- @from_before.should == 50
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/stories/resources/test/test_case_with_should_methods.rb b/vendor/plugins/rspec/stories/resources/test/test_case_with_should_methods.rb
deleted file mode 100644
index 3912429e3..000000000
--- a/vendor/plugins/rspec/stories/resources/test/test_case_with_should_methods.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
-require 'test/unit'
-require 'spec'
-require 'spec/interop/test'
-
-class MySpec < Test::Unit::TestCase
- def should_pass_with_should
- 1.should == 1
- end
-
- def should_fail_with_should
- 1.should == 2
- end
-
- def should_pass_with_assert
- assert true
- end
-
- def should_fail_with_assert
- assert false
- end
-
- def test
- raise "This is not a real test"
- end
-
- def test_ify
- raise "This is a real test"
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec/story_server/prototype/javascripts/builder.js b/vendor/plugins/rspec/story_server/prototype/javascripts/builder.js
deleted file mode 100644
index 301087d14..000000000
--- a/vendor/plugins/rspec/story_server/prototype/javascripts/builder.js
+++ /dev/null
@@ -1,136 +0,0 @@
-// script.aculo.us builder.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Builder = {
- NODEMAP: {
- AREA: 'map',
- CAPTION: 'table',
- COL: 'table',
- COLGROUP: 'table',
- LEGEND: 'fieldset',
- OPTGROUP: 'select',
- OPTION: 'select',
- PARAM: 'object',
- TBODY: 'table',
- TD: 'table',
- TFOOT: 'table',
- TH: 'table',
- THEAD: 'table',
- TR: 'table'
- },
- // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
- // due to a Firefox bug
- node: function(elementName) {
- elementName = elementName.toUpperCase();
-
- // try innerHTML approach
- var parentTag = this.NODEMAP[elementName] || 'div';
- var parentElement = document.createElement(parentTag);
- try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
- parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
- } catch(e) {}
- var element = parentElement.firstChild || null;
-
- // see if browser added wrapping tags
- if(element && (element.tagName.toUpperCase() != elementName))
- element = element.getElementsByTagName(elementName)[0];
-
- // fallback to createElement approach
- if(!element) element = document.createElement(elementName);
-
- // abort if nothing could be created
- if(!element) return;
-
- // attributes (or text)
- if(arguments[1])
- if(this._isStringOrNumber(arguments[1]) ||
- (arguments[1] instanceof Array) ||
- arguments[1].tagName) {
- this._children(element, arguments[1]);
- } else {
- var attrs = this._attributes(arguments[1]);
- if(attrs.length) {
- try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
- parentElement.innerHTML = "<" +elementName + " " +
- attrs + "></" + elementName + ">";
- } catch(e) {}
- element = parentElement.firstChild || null;
- // workaround firefox 1.0.X bug
- if(!element) {
- element = document.createElement(elementName);
- for(attr in arguments[1])
- element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
- }
- if(element.tagName.toUpperCase() != elementName)
- element = parentElement.getElementsByTagName(elementName)[0];
- }
- }
-
- // text, or array of children
- if(arguments[2])
- this._children(element, arguments[2]);
-
- return element;
- },
- _text: function(text) {
- return document.createTextNode(text);
- },
-
- ATTR_MAP: {
- 'className': 'class',
- 'htmlFor': 'for'
- },
-
- _attributes: function(attributes) {
- var attrs = [];
- for(attribute in attributes)
- attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
- '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
- return attrs.join(" ");
- },
- _children: function(element, children) {
- if(children.tagName) {
- element.appendChild(children);
- return;
- }
- if(typeof children=='object') { // array can hold nodes and text
- children.flatten().each( function(e) {
- if(typeof e=='object')
- element.appendChild(e)
- else
- if(Builder._isStringOrNumber(e))
- element.appendChild(Builder._text(e));
- });
- } else
- if(Builder._isStringOrNumber(children))
- element.appendChild(Builder._text(children));
- },
- _isStringOrNumber: function(param) {
- return(typeof param=='string' || typeof param=='number');
- },
- build: function(html) {
- var element = this.node('div');
- $(element).update(html.strip());
- return element.down();
- },
- dump: function(scope) {
- if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
-
- var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
- "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
- "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
- "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
- "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
- "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
-
- tags.each( function(tag){
- scope[tag] = function() {
- return Builder.node.apply(Builder, [tag].concat($A(arguments)));
- }
- });
- }
-}
diff --git a/vendor/plugins/rspec/story_server/prototype/javascripts/controls.js b/vendor/plugins/rspec/story_server/prototype/javascripts/controls.js
deleted file mode 100644
index 9cbeae9c6..000000000
--- a/vendor/plugins/rspec/story_server/prototype/javascripts/controls.js
+++ /dev/null
@@ -1,972 +0,0 @@
-// script.aculo.us controls.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
-// (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
-// Contributors:
-// Richard Livsey
-// Rahul Bhargava
-// Rob Wills
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// Autocompleter.Base handles all the autocompletion functionality
-// that's independent of the data source for autocompletion. This
-// includes drawing the autocompletion menu, observing keyboard
-// and mouse events, and similar.
-//
-// Specific autocompleters need to provide, at the very least,
-// a getUpdatedChoices function that will be invoked every time
-// the text inside the monitored textbox changes. This method
-// should get the text for which to provide autocompletion by
-// invoking this.getToken(), NOT by directly accessing
-// this.element.value. This is to allow incremental tokenized
-// autocompletion. Specific auto-completion logic (AJAX, etc)
-// belongs in getUpdatedChoices.
-//
-// Tokenized incremental autocompletion is enabled automatically
-// when an autocompleter is instantiated with the 'tokens' option
-// in the options parameter, e.g.:
-// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
-// will incrementally autocomplete with a comma as the token.
-// Additionally, ',' in the above example can be replaced with
-// a token array, e.g. { tokens: [',', '\n'] } which
-// enables autocompletion on multiple tokens. This is most
-// useful when one of the tokens is \n (a newline), as it
-// allows smart autocompletion after linebreaks.
-//
-// vim:expandtab ts=8 sw=2
-
-if(typeof Effect == 'undefined')
- throw("controls.js requires including script.aculo.us' effects.js library");
-
-var Autocompleter = { }
-Autocompleter.Base = function() { };
-Autocompleter.Base.prototype = {
- baseInitialize: function(element, update, options) {
- element = $(element)
- this.element = element;
- this.update = $(update);
- this.hasFocus = false;
- this.changed = false;
- this.active = false;
- this.index = 0;
- this.entryCount = 0;
- this.oldElementValue = this.element.value;
-
- if(this.setOptions)
- this.setOptions(options);
- else
- this.options = options || { };
-
- this.options.paramName = this.options.paramName || this.element.name;
- this.options.tokens = this.options.tokens || [];
- this.options.frequency = this.options.frequency || 0.4;
- this.options.minChars = this.options.minChars || 1;
- this.options.onShow = this.options.onShow ||
- function(element, update){
- if(!update.style.position || update.style.position=='absolute') {
- update.style.position = 'absolute';
- Position.clone(element, update, {
- setHeight: false,
- offsetTop: element.offsetHeight
- });
- }
- Effect.Appear(update,{duration:0.15});
- };
- this.options.onHide = this.options.onHide ||
- function(element, update){ new Effect.Fade(update,{duration:0.15}) };
-
- if(typeof(this.options.tokens) == 'string')
- this.options.tokens = new Array(this.options.tokens);
- // Force carriage returns as token delimiters anyway
- if (!this.options.tokens.include('\n'))
- this.options.tokens.push('\n');
-
- this.observer = null;
-
- this.element.setAttribute('autocomplete','off');
-
- Element.hide(this.update);
-
- Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
- Event.observe(this.element, 'keypress', this.onKeyPress.bindAsEventListener(this));
- },
-
- show: function() {
- if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
- if(!this.iefix &&
- (Prototype.Browser.IE) &&
- (Element.getStyle(this.update, 'position')=='absolute')) {
- new Insertion.After(this.update,
- '<iframe id="' + this.update.id + '_iefix" '+
- 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
- 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
- this.iefix = $(this.update.id+'_iefix');
- }
- if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
- },
-
- fixIEOverlapping: function() {
- Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
- this.iefix.style.zIndex = 1;
- this.update.style.zIndex = 2;
- Element.show(this.iefix);
- },
-
- hide: function() {
- this.stopIndicator();
- if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
- if(this.iefix) Element.hide(this.iefix);
- },
-
- startIndicator: function() {
- if(this.options.indicator) Element.show(this.options.indicator);
- },
-
- stopIndicator: function() {
- if(this.options.indicator) Element.hide(this.options.indicator);
- },
-
- onKeyPress: function(event) {
- if(this.active)
- switch(event.keyCode) {
- case Event.KEY_TAB:
- case Event.KEY_RETURN:
- this.selectEntry();
- Event.stop(event);
- case Event.KEY_ESC:
- this.hide();
- this.active = false;
- Event.stop(event);
- return;
- case Event.KEY_LEFT:
- case Event.KEY_RIGHT:
- return;
- case Event.KEY_UP:
- this.markPrevious();
- this.render();
- if(Prototype.Browser.WebKit) Event.stop(event);
- return;
- case Event.KEY_DOWN:
- this.markNext();
- this.render();
- if(Prototype.Browser.WebKit) Event.stop(event);
- return;
- }
- else
- if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
- (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
-
- this.changed = true;
- this.hasFocus = true;
-
- if(this.observer) clearTimeout(this.observer);
- this.observer =
- setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
- },
-
- activate: function() {
- this.changed = false;
- this.hasFocus = true;
- this.getUpdatedChoices();
- },
-
- onHover: function(event) {
- var element = Event.findElement(event, 'LI');
- if(this.index != element.autocompleteIndex)
- {
- this.index = element.autocompleteIndex;
- this.render();
- }
- Event.stop(event);
- },
-
- onClick: function(event) {
- var element = Event.findElement(event, 'LI');
- this.index = element.autocompleteIndex;
- this.selectEntry();
- this.hide();
- },
-
- onBlur: function(event) {
- // needed to make click events working
- setTimeout(this.hide.bind(this), 250);
- this.hasFocus = false;
- this.active = false;
- },
-
- render: function() {
- if(this.entryCount > 0) {
- for (var i = 0; i < this.entryCount; i++)
- this.index==i ?
- Element.addClassName(this.getEntry(i),"selected") :
- Element.removeClassName(this.getEntry(i),"selected");
- if(this.hasFocus) {
- this.show();
- this.active = true;
- }
- } else {
- this.active = false;
- this.hide();
- }
- },
-
- markPrevious: function() {
- if(this.index > 0) this.index--
- else this.index = this.entryCount-1;
- this.getEntry(this.index).scrollIntoView(true);
- },
-
- markNext: function() {
- if(this.index < this.entryCount-1) this.index++
- else this.index = 0;
- this.getEntry(this.index).scrollIntoView(false);
- },
-
- getEntry: function(index) {
- return this.update.firstChild.childNodes[index];
- },
-
- getCurrentEntry: function() {
- return this.getEntry(this.index);
- },
-
- selectEntry: function() {
- this.active = false;
- this.updateElement(this.getCurrentEntry());
- },
-
- updateElement: function(selectedElement) {
- if (this.options.updateElement) {
- this.options.updateElement(selectedElement);
- return;
- }
- var value = '';
- if (this.options.select) {
- var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
- if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
- } else
- value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
-
- var bounds = this.getTokenBounds();
- if (bounds[0] != -1) {
- var newValue = this.element.value.substr(0, bounds[0]);
- var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
- if (whitespace)
- newValue += whitespace[0];
- this.element.value = newValue + value + this.element.value.substr(bounds[1]);
- } else {
- this.element.value = value;
- }
- this.oldElementValue = this.element.value;
- this.element.focus();
-
- if (this.options.afterUpdateElement)
- this.options.afterUpdateElement(this.element, selectedElement);
- },
-
- updateChoices: function(choices) {
- if(!this.changed && this.hasFocus) {
- this.update.innerHTML = choices;
- Element.cleanWhitespace(this.update);
- Element.cleanWhitespace(this.update.down());
-
- if(this.update.firstChild && this.update.down().childNodes) {
- this.entryCount =
- this.update.down().childNodes.length;
- for (var i = 0; i < this.entryCount; i++) {
- var entry = this.getEntry(i);
- entry.autocompleteIndex = i;
- this.addObservers(entry);
- }
- } else {
- this.entryCount = 0;
- }
-
- this.stopIndicator();
- this.index = 0;
-
- if(this.entryCount==1 && this.options.autoSelect) {
- this.selectEntry();
- this.hide();
- } else {
- this.render();
- }
- }
- },
-
- addObservers: function(element) {
- Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
- Event.observe(element, "click", this.onClick.bindAsEventListener(this));
- },
-
- onObserverEvent: function() {
- this.changed = false;
- this.tokenBounds = null;
- if(this.getToken().length>=this.options.minChars) {
- this.getUpdatedChoices();
- } else {
- this.active = false;
- this.hide();
- }
- this.oldElementValue = this.element.value;
- },
-
- getToken: function() {
- var bounds = this.getTokenBounds();
- return this.element.value.substring(bounds[0], bounds[1]).strip();
- },
-
- getTokenBounds: function() {
- if (null != this.tokenBounds) return this.tokenBounds;
- var value = this.element.value;
- if (value.strip().empty()) return [-1, 0];
- var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
- var offset = (diff == this.oldElementValue.length ? 1 : 0);
- var prevTokenPos = -1, nextTokenPos = value.length;
- var tp;
- for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
- tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
- if (tp > prevTokenPos) prevTokenPos = tp;
- tp = value.indexOf(this.options.tokens[index], diff + offset);
- if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
- }
- return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
- }
-}
-
-Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
- var boundary = Math.min(newS.length, oldS.length);
- for (var index = 0; index < boundary; ++index)
- if (newS[index] != oldS[index])
- return index;
- return boundary;
-};
-
-Ajax.Autocompleter = Class.create();
-Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
- initialize: function(element, update, url, options) {
- this.baseInitialize(element, update, options);
- this.options.asynchronous = true;
- this.options.onComplete = this.onComplete.bind(this);
- this.options.defaultParams = this.options.parameters || null;
- this.url = url;
- },
-
- getUpdatedChoices: function() {
- this.startIndicator();
-
- var entry = encodeURIComponent(this.options.paramName) + '=' +
- encodeURIComponent(this.getToken());
-
- this.options.parameters = this.options.callback ?
- this.options.callback(this.element, entry) : entry;
-
- if(this.options.defaultParams)
- this.options.parameters += '&' + this.options.defaultParams;
-
- new Ajax.Request(this.url, this.options);
- },
-
- onComplete: function(request) {
- this.updateChoices(request.responseText);
- }
-
-});
-
-// The local array autocompleter. Used when you'd prefer to
-// inject an array of autocompletion options into the page, rather
-// than sending out Ajax queries, which can be quite slow sometimes.
-//
-// The constructor takes four parameters. The first two are, as usual,
-// the id of the monitored textbox, and id of the autocompletion menu.
-// The third is the array you want to autocomplete from, and the fourth
-// is the options block.
-//
-// Extra local autocompletion options:
-// - choices - How many autocompletion choices to offer
-//
-// - partialSearch - If false, the autocompleter will match entered
-// text only at the beginning of strings in the
-// autocomplete array. Defaults to true, which will
-// match text at the beginning of any *word* in the
-// strings in the autocomplete array. If you want to
-// search anywhere in the string, additionally set
-// the option fullSearch to true (default: off).
-//
-// - fullSsearch - Search anywhere in autocomplete array strings.
-//
-// - partialChars - How many characters to enter before triggering
-// a partial match (unlike minChars, which defines
-// how many characters are required to do any match
-// at all). Defaults to 2.
-//
-// - ignoreCase - Whether to ignore case when autocompleting.
-// Defaults to true.
-//
-// It's possible to pass in a custom function as the 'selector'
-// option, if you prefer to write your own autocompletion logic.
-// In that case, the other options above will not apply unless
-// you support them.
-
-Autocompleter.Local = Class.create();
-Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
- initialize: function(element, update, array, options) {
- this.baseInitialize(element, update, options);
- this.options.array = array;
- },
-
- getUpdatedChoices: function() {
- this.updateChoices(this.options.selector(this));
- },
-
- setOptions: function(options) {
- this.options = Object.extend({
- choices: 10,
- partialSearch: true,
- partialChars: 2,
- ignoreCase: true,
- fullSearch: false,
- selector: function(instance) {
- var ret = []; // Beginning matches
- var partial = []; // Inside matches
- var entry = instance.getToken();
- var count = 0;
-
- for (var i = 0; i < instance.options.array.length &&
- ret.length < instance.options.choices ; i++) {
-
- var elem = instance.options.array[i];
- var foundPos = instance.options.ignoreCase ?
- elem.toLowerCase().indexOf(entry.toLowerCase()) :
- elem.indexOf(entry);
-
- while (foundPos != -1) {
- if (foundPos == 0 && elem.length != entry.length) {
- ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
- elem.substr(entry.length) + "</li>");
- break;
- } else if (entry.length >= instance.options.partialChars &&
- instance.options.partialSearch && foundPos != -1) {
- if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
- partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
- elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
- foundPos + entry.length) + "</li>");
- break;
- }
- }
-
- foundPos = instance.options.ignoreCase ?
- elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
- elem.indexOf(entry, foundPos + 1);
-
- }
- }
- if (partial.length)
- ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
- return "<ul>" + ret.join('') + "</ul>";
- }
- }, options || { });
- }
-});
-
-// AJAX in-place editor and collection editor
-// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).
-
-// Use this if you notice weird scrolling problems on some browsers,
-// the DOM might be a bit confused when this gets called so do this
-// waits 1 ms (with setTimeout) until it does the activation
-Field.scrollFreeActivate = function(field) {
- setTimeout(function() {
- Field.activate(field);
- }, 1);
-}
-
-Ajax.InPlaceEditor = Class.create();
-Object.extend(Ajax.InPlaceEditor, {
- DefaultOptions: {
- ajaxOptions: { },
- autoRows: 3, // Use when multi-line w/ rows == 1
- cancelControl: 'link', // 'link'|'button'|false
- cancelText: 'cancel',
- clickToEditText: 'Click to edit',
- externalControl: null, // id|elt
- externalControlOnly: false,
- fieldPostCreation: 'activate', // 'activate'|'focus'|false
- formClassName: 'inplaceeditor-form',
- formId: null, // id|elt
- highlightColor: '#ffff99',
- highlightEndColor: '#ffffff',
- hoverClassName: '',
- htmlResponse: true,
- loadingClassName: 'inplaceeditor-loading',
- loadingText: 'Loading...',
- okControl: 'button', // 'link'|'button'|false
- okText: 'ok',
- paramName: 'value',
- rows: 1, // If 1 and multi-line, uses autoRows
- savingClassName: 'inplaceeditor-saving',
- savingText: 'Saving...',
- size: 0,
- stripLoadedTextTags: false,
- submitOnBlur: false,
- textAfterControls: '',
- textBeforeControls: '',
- textBetweenControls: ''
- },
- DefaultCallbacks: {
- callback: function(form) {
- return Form.serialize(form);
- },
- onComplete: function(transport, element) {
- // For backward compatibility, this one is bound to the IPE, and passes
- // the element directly. It was too often customized, so we don't break it.
- new Effect.Highlight(element, {
- startcolor: this.options.highlightColor, keepBackgroundImage: true });
- },
- onEnterEditMode: null,
- onEnterHover: function(ipe) {
- ipe.element.style.backgroundColor = ipe.options.highlightColor;
- if (ipe._effect)
- ipe._effect.cancel();
- },
- onFailure: function(transport, ipe) {
- alert('Error communication with the server: ' + transport.responseText.stripTags());
- },
- onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
- onLeaveEditMode: null,
- onLeaveHover: function(ipe) {
- ipe._effect = new Effect.Highlight(ipe.element, {
- startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
- restorecolor: ipe._originalBackground, keepBackgroundImage: true
- });
- }
- },
- Listeners: {
- click: 'enterEditMode',
- keydown: 'checkForEscapeOrReturn',
- mouseover: 'enterHover',
- mouseout: 'leaveHover'
- }
-});
-Ajax.InPlaceEditor.prototype = {
- initialize: function(element, url, options) {
- this.url = url;
- this.element = element = $(element);
- this.prepareOptions();
- this._controls = { };
- arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
- Object.extend(this.options, options || { });
- if (!this.options.formId && this.element.id) {
- this.options.formId = this.element.id + '-inplaceeditor';
- if ($(this.options.formId))
- this.options.formId = '';
- }
- if (this.options.externalControl)
- this.options.externalControl = $(this.options.externalControl);
- if (!this.options.externalControl)
- this.options.externalControlOnly = false;
- this._originalBackground = this.element.getStyle('background-color') || 'transparent';
- this.element.title = this.options.clickToEditText;
- this._boundCancelHandler = this.handleFormCancellation.bind(this);
- this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
- this._boundFailureHandler = this.handleAJAXFailure.bind(this);
- this._boundSubmitHandler = this.handleFormSubmission.bind(this);
- this._boundWrapperHandler = this.wrapUp.bind(this);
- this.registerListeners();
- },
- checkForEscapeOrReturn: function(e) {
- if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
- if (Event.KEY_ESC == e.keyCode)
- this.handleFormCancellation(e);
- else if (Event.KEY_RETURN == e.keyCode)
- this.handleFormSubmission(e);
- },
- createControl: function(mode, handler, extraClasses) {
- var control = this.options[mode + 'Control'];
- var text = this.options[mode + 'Text'];
- if ('button' == control) {
- var btn = document.createElement('input');
- btn.type = 'submit';
- btn.value = text;
- btn.className = 'editor_' + mode + '_button';
- if ('cancel' == mode)
- btn.onclick = this._boundCancelHandler;
- this._form.appendChild(btn);
- this._controls[mode] = btn;
- } else if ('link' == control) {
- var link = document.createElement('a');
- link.href = '#';
- link.appendChild(document.createTextNode(text));
- link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
- link.className = 'editor_' + mode + '_link';
- if (extraClasses)
- link.className += ' ' + extraClasses;
- this._form.appendChild(link);
- this._controls[mode] = link;
- }
- },
- createEditField: function() {
- var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
- var fld;
- if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
- fld = document.createElement('input');
- fld.type = 'text';
- var size = this.options.size || this.options.cols || 0;
- if (0 < size) fld.size = size;
- } else {
- fld = document.createElement('textarea');
- fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
- fld.cols = this.options.cols || 40;
- }
- fld.name = this.options.paramName;
- fld.value = text; // No HTML breaks conversion anymore
- fld.className = 'editor_field';
- if (this.options.submitOnBlur)
- fld.onblur = this._boundSubmitHandler;
- this._controls.editor = fld;
- if (this.options.loadTextURL)
- this.loadExternalText();
- this._form.appendChild(this._controls.editor);
- },
- createForm: function() {
- var ipe = this;
- function addText(mode, condition) {
- var text = ipe.options['text' + mode + 'Controls'];
- if (!text || condition === false) return;
- ipe._form.appendChild(document.createTextNode(text));
- };
- this._form = $(document.createElement('form'));
- this._form.id = this.options.formId;
- this._form.addClassName(this.options.formClassName);
- this._form.onsubmit = this._boundSubmitHandler;
- this.createEditField();
- if ('textarea' == this._controls.editor.tagName.toLowerCase())
- this._form.appendChild(document.createElement('br'));
- if (this.options.onFormCustomization)
- this.options.onFormCustomization(this, this._form);
- addText('Before', this.options.okControl || this.options.cancelControl);
- this.createControl('ok', this._boundSubmitHandler);
- addText('Between', this.options.okControl && this.options.cancelControl);
- this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
- addText('After', this.options.okControl || this.options.cancelControl);
- },
- destroy: function() {
- if (this._oldInnerHTML)
- this.element.innerHTML = this._oldInnerHTML;
- this.leaveEditMode();
- this.unregisterListeners();
- },
- enterEditMode: function(e) {
- if (this._saving || this._editing) return;
- this._editing = true;
- this.triggerCallback('onEnterEditMode');
- if (this.options.externalControl)
- this.options.externalControl.hide();
- this.element.hide();
- this.createForm();
- this.element.parentNode.insertBefore(this._form, this.element);
- if (!this.options.loadTextURL)
- this.postProcessEditField();
- if (e) Event.stop(e);
- },
- enterHover: function(e) {
- if (this.options.hoverClassName)
- this.element.addClassName(this.options.hoverClassName);
- if (this._saving) return;
- this.triggerCallback('onEnterHover');
- },
- getText: function() {
- return this.element.innerHTML;
- },
- handleAJAXFailure: function(transport) {
- this.triggerCallback('onFailure', transport);
- if (this._oldInnerHTML) {
- this.element.innerHTML = this._oldInnerHTML;
- this._oldInnerHTML = null;
- }
- },
- handleFormCancellation: function(e) {
- this.wrapUp();
- if (e) Event.stop(e);
- },
- handleFormSubmission: function(e) {
- var form = this._form;
- var value = $F(this._controls.editor);
- this.prepareSubmission();
- var params = this.options.callback(form, value);
- params = (params ? params + '&' : '?') + 'editorId=' + this.element.id;
- if (this.options.htmlResponse) {
- var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: params,
- onComplete: this._boundWrapperHandler,
- onFailure: this._boundFailureHandler
- });
- new Ajax.Updater({ success: this.element }, this.url, options);
- } else {
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: params,
- onComplete: this._boundWrapperHandler,
- onFailure: this._boundFailureHandler
- });
- new Ajax.Request(this.url, options);
- }
- if (e) Event.stop(e);
- },
- leaveEditMode: function() {
- this.element.removeClassName(this.options.savingClassName);
- this.removeForm();
- this.leaveHover();
- this.element.style.backgroundColor = this._originalBackground;
- this.element.show();
- if (this.options.externalControl)
- this.options.externalControl.show();
- this._saving = false;
- this._editing = false;
- this._oldInnerHTML = null;
- this.triggerCallback('onLeaveEditMode');
- },
- leaveHover: function(e) {
- if (this.options.hoverClassName)
- this.element.removeClassName(this.options.hoverClassName);
- if (this._saving) return;
- this.triggerCallback('onLeaveHover');
- },
- loadExternalText: function() {
- this._form.addClassName(this.options.loadingClassName);
- this._controls.editor.disabled = true;
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
- onComplete: Prototype.emptyFunction,
- onSuccess: function(transport) {
- this._form.removeClassName(this.options.loadingClassName);
- var text = transport.responseText;
- if (this.options.stripLoadedTextTags)
- text = text.stripTags();
- this._controls.editor.value = text;
- this._controls.editor.disabled = false;
- this.postProcessEditField();
- }.bind(this),
- onFailure: this._boundFailureHandler
- });
- new Ajax.Request(this.options.loadTextURL, options);
- },
- postProcessEditField: function() {
- var fpc = this.options.fieldPostCreation;
- if (fpc)
- $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
- },
- prepareOptions: function() {
- this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
- Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
- [this._extraDefaultOptions].flatten().compact().each(function(defs) {
- Object.extend(this.options, defs);
- }.bind(this));
- },
- prepareSubmission: function() {
- this._saving = true;
- this.removeForm();
- this.leaveHover();
- this.showSaving();
- },
- registerListeners: function() {
- this._listeners = { };
- var listener;
- $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
- listener = this[pair.value].bind(this);
- this._listeners[pair.key] = listener;
- if (!this.options.externalControlOnly)
- this.element.observe(pair.key, listener);
- if (this.options.externalControl)
- this.options.externalControl.observe(pair.key, listener);
- }.bind(this));
- },
- removeForm: function() {
- if (!this._form) return;
- this._form.remove();
- this._form = null;
- this._controls = { };
- },
- showSaving: function() {
- this._oldInnerHTML = this.element.innerHTML;
- this.element.innerHTML = this.options.savingText;
- this.element.addClassName(this.options.savingClassName);
- this.element.style.backgroundColor = this._originalBackground;
- this.element.show();
- },
- triggerCallback: function(cbName, arg) {
- if ('function' == typeof this.options[cbName]) {
- this.options[cbName](this, arg);
- }
- },
- unregisterListeners: function() {
- $H(this._listeners).each(function(pair) {
- if (!this.options.externalControlOnly)
- this.element.stopObserving(pair.key, pair.value);
- if (this.options.externalControl)
- this.options.externalControl.stopObserving(pair.key, pair.value);
- }.bind(this));
- },
- wrapUp: function(transport) {
- this.leaveEditMode();
- // Can't use triggerCallback due to backward compatibility: requires
- // binding + direct element
- this._boundComplete(transport, this.element);
- }
-};
-Object.extend(Ajax.InPlaceEditor.prototype, {
- dispose: Ajax.InPlaceEditor.prototype.destroy
-});
-
-
-Ajax.InPlaceCollectionEditor = Class.create();
-Ajax.InPlaceCollectionEditor.DefaultOptions = {
- loadingCollectionText: 'Loading options...'
-};
-Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
-Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
- initialize: function(element, url, options) {
- this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
- Ajax.InPlaceEditor.prototype.initialize.call(this, element, url, options);
- },
-
- createEditField: function() {
- var list = document.createElement('select');
- list.name = this.options.paramName;
- list.size = 1;
- this._controls.editor = list;
- this._collection = this.options.collection || [];
- if (this.options.loadCollectionURL)
- this.loadCollection();
- else
- this.checkForExternalText();
- this._form.appendChild(this._controls.editor);
- },
-
- loadCollection: function() {
- this._form.addClassName(this.options.loadingClassName);
- this.showLoadingText(this.options.loadingCollectionText);
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
- onComplete: Prototype.emptyFunction,
- onSuccess: function(transport) {
- var js = transport.responseText.strip();
- if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
- throw 'Server returned an invalid collection representation.';
- this._collection = eval(js);
- this.checkForExternalText();
- }.bind(this),
- onFailure: this.onFailure
- });
- new Ajax.Request(this.options.loadCollectionURL, options);
- },
-
- showLoadingText: function(text) {
- this._controls.editor.disabled = true;
- var tempOption = this._controls.editor.firstChild;
- if (!tempOption) {
- tempOption = document.createElement('option');
- tempOption.value = '';
- this._controls.editor.appendChild(tempOption);
- tempOption.selected = true;
- }
- tempOption.update((text || '').stripScripts().stripTags());
- },
-
- checkForExternalText: function() {
- this._text = this.getText();
- if (this.options.loadTextURL)
- this.loadExternalText();
- else
- this.buildOptionList();
- },
-
- loadExternalText: function() {
- this.showLoadingText(this.options.loadingText);
- var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
- Object.extend(options, {
- parameters: 'editorId=' + encodeURIComponent(this.element.id),
- onComplete: Prototype.emptyFunction,
- onSuccess: function(transport) {
- this._text = transport.responseText.strip();
- this.buildOptionList();
- }.bind(this),
- onFailure: this.onFailure
- });
- new Ajax.Request(this.options.loadTextURL, options);
- },
-
- buildOptionList: function() {
- this._form.removeClassName(this.options.loadingClassName);
- this._collection = this._collection.map(function(entry) {
- return 2 === entry.length ? entry : [entry, entry].flatten();
- });
- var marker = ('value' in this.options) ? this.options.value : this._text;
- var textFound = this._collection.any(function(entry) {
- return entry[0] == marker;
- }.bind(this));
- this._controls.editor.update('');
- var option;
- this._collection.each(function(entry, index) {
- option = document.createElement('option');
- option.value = entry[0];
- option.selected = textFound ? entry[0] == marker : 0 == index;
- option.appendChild(document.createTextNode(entry[1]));
- this._controls.editor.appendChild(option);
- }.bind(this));
- this._controls.editor.disabled = false;
- Field.scrollFreeActivate(this._controls.editor);
- }
-});
-
-//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
-//**** This only exists for a while, in order to let ****
-//**** users adapt to the new API. Read up on the new ****
-//**** API and convert your code to it ASAP! ****
-
-Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
- if (!options) return;
- function fallback(name, expr) {
- if (name in options || expr === undefined) return;
- options[name] = expr;
- };
- fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
- options.cancelLink == options.cancelButton == false ? false : undefined)));
- fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
- options.okLink == options.okButton == false ? false : undefined)));
- fallback('highlightColor', options.highlightcolor);
- fallback('highlightEndColor', options.highlightendcolor);
-};
-
-
-// Delayed observer, like Form.Element.Observer,
-// but waits for delay after last key input
-// Ideal for live-search fields
-
-Form.Element.DelayedObserver = Class.create();
-Form.Element.DelayedObserver.prototype = {
- initialize: function(element, delay, callback) {
- this.delay = delay || 0.5;
- this.element = $(element);
- this.callback = callback;
- this.timer = null;
- this.lastValue = $F(this.element);
- Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
- },
- delayedListener: function(event) {
- if(this.lastValue == $F(this.element)) return;
- if(this.timer) clearTimeout(this.timer);
- this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
- this.lastValue = $F(this.element);
- },
- onTimerEvent: function() {
- this.timer = null;
- this.callback(this.element, $F(this.element));
- }
-};
diff --git a/vendor/plugins/rspec/story_server/prototype/javascripts/dragdrop.js b/vendor/plugins/rspec/story_server/prototype/javascripts/dragdrop.js
deleted file mode 100644
index 96eba902d..000000000
--- a/vendor/plugins/rspec/story_server/prototype/javascripts/dragdrop.js
+++ /dev/null
@@ -1,976 +0,0 @@
-// script.aculo.us dragdrop.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// (c) 2005-2007 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if(Object.isUndefined(Effect))
- throw("dragdrop.js requires including script.aculo.us' effects.js library");
-
-var Droppables = {
- drops: [],
-
- remove: function(element) {
- this.drops = this.drops.reject(function(d) { return d.element==$(element) });
- },
-
- add: function(element) {
- element = $(element);
- var options = Object.extend({
- greedy: true,
- hoverclass: null,
- tree: false
- }, arguments[1] || { });
-
- // cache containers
- if(options.containment) {
- options._containers = [];
- var containment = options.containment;
- if(Object.isArray(containment)) {
- containment.each( function(c) { options._containers.push($(c)) });
- } else {
- options._containers.push($(containment));
- }
- }
-
- if(options.accept) options.accept = [options.accept].flatten();
-
- Element.makePositioned(element); // fix IE
- options.element = element;
-
- this.drops.push(options);
- },
-
- findDeepestChild: function(drops) {
- deepest = drops[0];
-
- for (i = 1; i < drops.length; ++i)
- if (Element.isParent(drops[i].element, deepest.element))
- deepest = drops[i];
-
- return deepest;
- },
-
- isContained: function(element, drop) {
- var containmentNode;
- if(drop.tree) {
- containmentNode = element.treeNode;
- } else {
- containmentNode = element.parentNode;
- }
- return drop._containers.detect(function(c) { return containmentNode == c });
- },
-
- isAffected: function(point, element, drop) {
- return (
- (drop.element!=element) &&
- ((!drop._containers) ||
- this.isContained(element, drop)) &&
- ((!drop.accept) ||
- (Element.classNames(element).detect(
- function(v) { return drop.accept.include(v) } ) )) &&
- Position.within(drop.element, point[0], point[1]) );
- },
-
- deactivate: function(drop) {
- if(drop.hoverclass)
- Element.removeClassName(drop.element, drop.hoverclass);
- this.last_active = null;
- },
-
- activate: function(drop) {
- if(drop.hoverclass)
- Element.addClassName(drop.element, drop.hoverclass);
- this.last_active = drop;
- },
-
- show: function(point, element) {
- if(!this.drops.length) return;
- var drop, affected = [];
-
- this.drops.each( function(drop) {
- if(Droppables.isAffected(point, element, drop))
- affected.push(drop);
- });
-
- if(affected.length>0)
- drop = Droppables.findDeepestChild(affected);
-
- if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
- if (drop) {
- Position.within(drop.element, point[0], point[1]);
- if(drop.onHover)
- drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
-
- if (drop != this.last_active) Droppables.activate(drop);
- }
- },
-
- fire: function(event, element) {
- if(!this.last_active) return;
- Position.prepare();
-
- if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
- if (this.last_active.onDrop) {
- this.last_active.onDrop(element, this.last_active.element, event);
- return true;
- }
- },
-
- reset: function() {
- if(this.last_active)
- this.deactivate(this.last_active);
- }
-}
-
-var Draggables = {
- drags: [],
- observers: [],
-
- register: function(draggable) {
- if(this.drags.length == 0) {
- this.eventMouseUp = this.endDrag.bindAsEventListener(this);
- this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
- this.eventKeypress = this.keyPress.bindAsEventListener(this);
-
- Event.observe(document, "mouseup", this.eventMouseUp);
- Event.observe(document, "mousemove", this.eventMouseMove);
- Event.observe(document, "keypress", this.eventKeypress);
- }
- this.drags.push(draggable);
- },
-
- unregister: function(draggable) {
- this.drags = this.drags.reject(function(d) { return d==draggable });
- if(this.drags.length == 0) {
- Event.stopObserving(document, "mouseup", this.eventMouseUp);
- Event.stopObserving(document, "mousemove", this.eventMouseMove);
- Event.stopObserving(document, "keypress", this.eventKeypress);
- }
- },
-
- activate: function(draggable) {
- if(draggable.options.delay) {
- this._timeout = setTimeout(function() {
- Draggables._timeout = null;
- window.focus();
- Draggables.activeDraggable = draggable;
- }.bind(this), draggable.options.delay);
- } else {
- window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
- this.activeDraggable = draggable;
- }
- },
-
- deactivate: function() {
- this.activeDraggable = null;
- },
-
- updateDrag: function(event) {
- if(!this.activeDraggable) return;
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- // Mozilla-based browsers fire successive mousemove events with
- // the same coordinates, prevent needless redrawing (moz bug?)
- if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
- this._lastPointer = pointer;
-
- this.activeDraggable.updateDrag(event, pointer);
- },
-
- endDrag: function(event) {
- if(this._timeout) {
- clearTimeout(this._timeout);
- this._timeout = null;
- }
- if(!this.activeDraggable) return;
- this._lastPointer = null;
- this.activeDraggable.endDrag(event);
- this.activeDraggable = null;
- },
-
- keyPress: function(event) {
- if(this.activeDraggable)
- this.activeDraggable.keyPress(event);
- },
-
- addObserver: function(observer) {
- this.observers.push(observer);
- this._cacheObserverCallbacks();
- },
-
- removeObserver: function(element) { // element instead of observer fixes mem leaks
- this.observers = this.observers.reject( function(o) { return o.element==element });
- this._cacheObserverCallbacks();
- },
-
- notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
- if(this[eventName+'Count'] > 0)
- this.observers.each( function(o) {
- if(o[eventName]) o[eventName](eventName, draggable, event);
- });
- if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
- },
-
- _cacheObserverCallbacks: function() {
- ['onStart','onEnd','onDrag'].each( function(eventName) {
- Draggables[eventName+'Count'] = Draggables.observers.select(
- function(o) { return o[eventName]; }
- ).length;
- });
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Draggable = Class.create();
-Draggable._dragging = { };
-
-Draggable.prototype = {
- initialize: function(element) {
- var defaults = {
- handle: false,
- reverteffect: function(element, top_offset, left_offset) {
- var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
- new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
- queue: {scope:'_draggable', position:'end'}
- });
- },
- endeffect: function(element) {
- var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
- new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
- queue: {scope:'_draggable', position:'end'},
- afterFinish: function(){
- Draggable._dragging[element] = false
- }
- });
- },
- zindex: 1000,
- revert: false,
- quiet: false,
- scroll: false,
- scrollSensitivity: 20,
- scrollSpeed: 15,
- snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] }
- delay: 0
- };
-
- if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
- Object.extend(defaults, {
- starteffect: function(element) {
- element._opacity = Element.getOpacity(element);
- Draggable._dragging[element] = true;
- new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
- }
- });
-
- var options = Object.extend(defaults, arguments[1] || { });
-
- this.element = $(element);
-
- if(options.handle && Object.isString(options.handle))
- this.handle = this.element.down('.'+options.handle, 0);
-
- if(!this.handle) this.handle = $(options.handle);
- if(!this.handle) this.handle = this.element;
-
- if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
- options.scroll = $(options.scroll);
- this._isScrollChild = Element.childOf(this.element, options.scroll);
- }
-
- Element.makePositioned(this.element); // fix IE
-
- this.options = options;
- this.dragging = false;
-
- this.eventMouseDown = this.initDrag.bindAsEventListener(this);
- Event.observe(this.handle, "mousedown", this.eventMouseDown);
-
- Draggables.register(this);
- },
-
- destroy: function() {
- Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
- Draggables.unregister(this);
- },
-
- currentDelta: function() {
- return([
- parseInt(Element.getStyle(this.element,'left') || '0'),
- parseInt(Element.getStyle(this.element,'top') || '0')]);
- },
-
- initDrag: function(event) {
- if(!Object.isUndefined(Draggable._dragging[this.element]) &&
- Draggable._dragging[this.element]) return;
- if(Event.isLeftClick(event)) {
- // abort on form elements, fixes a Firefox issue
- var src = Event.element(event);
- if((tag_name = src.tagName.toUpperCase()) && (
- tag_name=='INPUT' ||
- tag_name=='SELECT' ||
- tag_name=='OPTION' ||
- tag_name=='BUTTON' ||
- tag_name=='TEXTAREA')) return;
-
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- var pos = Position.cumulativeOffset(this.element);
- this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
-
- Draggables.activate(this);
- Event.stop(event);
- }
- },
-
- startDrag: function(event) {
- this.dragging = true;
- if(!this.delta)
- this.delta = this.currentDelta();
-
- if(this.options.zindex) {
- this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
- this.element.style.zIndex = this.options.zindex;
- }
-
- if(this.options.ghosting) {
- this._clone = this.element.cloneNode(true);
- this.element._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
- if (!this.element._originallyAbsolute)
- Position.absolutize(this.element);
- this.element.parentNode.insertBefore(this._clone, this.element);
- }
-
- if(this.options.scroll) {
- if (this.options.scroll == window) {
- var where = this._getWindowScroll(this.options.scroll);
- this.originalScrollLeft = where.left;
- this.originalScrollTop = where.top;
- } else {
- this.originalScrollLeft = this.options.scroll.scrollLeft;
- this.originalScrollTop = this.options.scroll.scrollTop;
- }
- }
-
- Draggables.notify('onStart', this, event);
-
- if(this.options.starteffect) this.options.starteffect(this.element);
- },
-
- updateDrag: function(event, pointer) {
- if(!this.dragging) this.startDrag(event);
-
- if(!this.options.quiet){
- Position.prepare();
- Droppables.show(pointer, this.element);
- }
-
- Draggables.notify('onDrag', this, event);
-
- this.draw(pointer);
- if(this.options.change) this.options.change(this);
-
- if(this.options.scroll) {
- this.stopScrolling();
-
- var p;
- if (this.options.scroll == window) {
- with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
- } else {
- p = Position.page(this.options.scroll);
- p[0] += this.options.scroll.scrollLeft + Position.deltaX;
- p[1] += this.options.scroll.scrollTop + Position.deltaY;
- p.push(p[0]+this.options.scroll.offsetWidth);
- p.push(p[1]+this.options.scroll.offsetHeight);
- }
- var speed = [0,0];
- if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
- if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
- if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
- if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
- this.startScrolling(speed);
- }
-
- // fix AppleWebKit rendering
- if(Prototype.Browser.WebKit) window.scrollBy(0,0);
-
- Event.stop(event);
- },
-
- finishDrag: function(event, success) {
- this.dragging = false;
-
- if(this.options.quiet){
- Position.prepare();
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- Droppables.show(pointer, this.element);
- }
-
- if(this.options.ghosting) {
- if (!this.element._originallyAbsolute)
- Position.relativize(this.element);
- delete this.element._originallyAbsolute;
- Element.remove(this._clone);
- this._clone = null;
- }
-
- var dropped = false;
- if(success) {
- dropped = Droppables.fire(event, this.element);
- if (!dropped) dropped = false;
- }
- if(dropped && this.options.onDropped) this.options.onDropped(this.element);
- Draggables.notify('onEnd', this, event);
-
- var revert = this.options.revert;
- if(revert && Object.isFunction(revert)) revert = revert(this.element);
-
- var d = this.currentDelta();
- if(revert && this.options.reverteffect) {
- if (dropped == 0 || revert != 'failure')
- this.options.reverteffect(this.element,
- d[1]-this.delta[1], d[0]-this.delta[0]);
- } else {
- this.delta = d;
- }
-
- if(this.options.zindex)
- this.element.style.zIndex = this.originalZ;
-
- if(this.options.endeffect)
- this.options.endeffect(this.element);
-
- Draggables.deactivate(this);
- Droppables.reset();
- },
-
- keyPress: function(event) {
- if(event.keyCode!=Event.KEY_ESC) return;
- this.finishDrag(event, false);
- Event.stop(event);
- },
-
- endDrag: function(event) {
- if(!this.dragging) return;
- this.stopScrolling();
- this.finishDrag(event, true);
- Event.stop(event);
- },
-
- draw: function(point) {
- var pos = Position.cumulativeOffset(this.element);
- if(this.options.ghosting) {
- var r = Position.realOffset(this.element);
- pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
- }
-
- var d = this.currentDelta();
- pos[0] -= d[0]; pos[1] -= d[1];
-
- if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
- pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
- pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
- }
-
- var p = [0,1].map(function(i){
- return (point[i]-pos[i]-this.offset[i])
- }.bind(this));
-
- if(this.options.snap) {
- if(Object.isFunction(this.options.snap)) {
- p = this.options.snap(p[0],p[1],this);
- } else {
- if(Object.isArray(this.options.snap)) {
- p = p.map( function(v, i) {
- return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this))
- } else {
- p = p.map( function(v) {
- return (v/this.options.snap).round()*this.options.snap }.bind(this))
- }
- }}
-
- var style = this.element.style;
- if((!this.options.constraint) || (this.options.constraint=='horizontal'))
- style.left = p[0] + "px";
- if((!this.options.constraint) || (this.options.constraint=='vertical'))
- style.top = p[1] + "px";
-
- if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
- },
-
- stopScrolling: function() {
- if(this.scrollInterval) {
- clearInterval(this.scrollInterval);
- this.scrollInterval = null;
- Draggables._lastScrollPointer = null;
- }
- },
-
- startScrolling: function(speed) {
- if(!(speed[0] || speed[1])) return;
- this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
- this.lastScrolled = new Date();
- this.scrollInterval = setInterval(this.scroll.bind(this), 10);
- },
-
- scroll: function() {
- var current = new Date();
- var delta = current - this.lastScrolled;
- this.lastScrolled = current;
- if(this.options.scroll == window) {
- with (this._getWindowScroll(this.options.scroll)) {
- if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
- var d = delta / 1000;
- this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
- }
- }
- } else {
- this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
- this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
- }
-
- Position.prepare();
- Droppables.show(Draggables._lastPointer, this.element);
- Draggables.notify('onDrag', this);
- if (this._isScrollChild) {
- Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
- Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
- Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
- if (Draggables._lastScrollPointer[0] < 0)
- Draggables._lastScrollPointer[0] = 0;
- if (Draggables._lastScrollPointer[1] < 0)
- Draggables._lastScrollPointer[1] = 0;
- this.draw(Draggables._lastScrollPointer);
- }
-
- if(this.options.change) this.options.change(this);
- },
-
- _getWindowScroll: function(w) {
- var T, L, W, H;
- with (w.document) {
- if (w.document.documentElement && documentElement.scrollTop) {
- T = documentElement.scrollTop;
- L = documentElement.scrollLeft;
- } else if (w.document.body) {
- T = body.scrollTop;
- L = body.scrollLeft;
- }
- if (w.innerWidth) {
- W = w.innerWidth;
- H = w.innerHeight;
- } else if (w.document.documentElement && documentElement.clientWidth) {
- W = documentElement.clientWidth;
- H = documentElement.clientHeight;
- } else {
- W = body.offsetWidth;
- H = body.offsetHeight
- }
- }
- return { top: T, left: L, width: W, height: H };
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var SortableObserver = Class.create();
-SortableObserver.prototype = {
- initialize: function(element, observer) {
- this.element = $(element);
- this.observer = observer;
- this.lastValue = Sortable.serialize(this.element);
- },
-
- onStart: function() {
- this.lastValue = Sortable.serialize(this.element);
- },
-
- onEnd: function() {
- Sortable.unmark();
- if(this.lastValue != Sortable.serialize(this.element))
- this.observer(this.element)
- }
-}
-
-var Sortable = {
- SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
-
- sortables: { },
-
- _findRootElement: function(element) {
- while (element.tagName.toUpperCase() != "BODY") {
- if(element.id && Sortable.sortables[element.id]) return element;
- element = element.parentNode;
- }
- },
-
- options: function(element) {
- element = Sortable._findRootElement($(element));
- if(!element) return;
- return Sortable.sortables[element.id];
- },
-
- destroy: function(element){
- var s = Sortable.options(element);
-
- if(s) {
- Draggables.removeObserver(s.element);
- s.droppables.each(function(d){ Droppables.remove(d) });
- s.draggables.invoke('destroy');
-
- delete Sortable.sortables[s.element.id];
- }
- },
-
- create: function(element) {
- element = $(element);
- var options = Object.extend({
- element: element,
- tag: 'li', // assumes li children, override with tag: 'tagname'
- dropOnEmpty: false,
- tree: false,
- treeTag: 'ul',
- overlap: 'vertical', // one of 'vertical', 'horizontal'
- constraint: 'vertical', // one of 'vertical', 'horizontal', false
- containment: element, // also takes array of elements (or id's); or false
- handle: false, // or a CSS class
- only: false,
- delay: 0,
- hoverclass: null,
- ghosting: false,
- quiet: false,
- scroll: false,
- scrollSensitivity: 20,
- scrollSpeed: 15,
- format: this.SERIALIZE_RULE,
-
- // these take arrays of elements or ids and can be
- // used for better initialization performance
- elements: false,
- handles: false,
-
- onChange: Prototype.emptyFunction,
- onUpdate: Prototype.emptyFunction
- }, arguments[1] || { });
-
- // clear any old sortable with same element
- this.destroy(element);
-
- // build options for the draggables
- var options_for_draggable = {
- revert: true,
- quiet: options.quiet,
- scroll: options.scroll,
- scrollSpeed: options.scrollSpeed,
- scrollSensitivity: options.scrollSensitivity,
- delay: options.delay,
- ghosting: options.ghosting,
- constraint: options.constraint,
- handle: options.handle };
-
- if(options.starteffect)
- options_for_draggable.starteffect = options.starteffect;
-
- if(options.reverteffect)
- options_for_draggable.reverteffect = options.reverteffect;
- else
- if(options.ghosting) options_for_draggable.reverteffect = function(element) {
- element.style.top = 0;
- element.style.left = 0;
- };
-
- if(options.endeffect)
- options_for_draggable.endeffect = options.endeffect;
-
- if(options.zindex)
- options_for_draggable.zindex = options.zindex;
-
- // build options for the droppables
- var options_for_droppable = {
- overlap: options.overlap,
- containment: options.containment,
- tree: options.tree,
- hoverclass: options.hoverclass,
- onHover: Sortable.onHover
- }
-
- var options_for_tree = {
- onHover: Sortable.onEmptyHover,
- overlap: options.overlap,
- containment: options.containment,
- hoverclass: options.hoverclass
- }
-
- // fix for gecko engine
- Element.cleanWhitespace(element);
-
- options.draggables = [];
- options.droppables = [];
-
- // drop on empty handling
- if(options.dropOnEmpty || options.tree) {
- Droppables.add(element, options_for_tree);
- options.droppables.push(element);
- }
-
- (options.elements || this.findElements(element, options) || []).each( function(e,i) {
- var handle = options.handles ? $(options.handles[i]) :
- (options.handle ? $(e).getElementsByClassName(options.handle)[0] : e);
- options.draggables.push(
- new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
- Droppables.add(e, options_for_droppable);
- if(options.tree) e.treeNode = element;
- options.droppables.push(e);
- });
-
- if(options.tree) {
- (Sortable.findTreeElements(element, options) || []).each( function(e) {
- Droppables.add(e, options_for_tree);
- e.treeNode = element;
- options.droppables.push(e);
- });
- }
-
- // keep reference
- this.sortables[element.id] = options;
-
- // for onupdate
- Draggables.addObserver(new SortableObserver(element, options.onUpdate));
-
- },
-
- // return all suitable-for-sortable elements in a guaranteed order
- findElements: function(element, options) {
- return Element.findChildren(
- element, options.only, options.tree ? true : false, options.tag);
- },
-
- findTreeElements: function(element, options) {
- return Element.findChildren(
- element, options.only, options.tree ? true : false, options.treeTag);
- },
-
- onHover: function(element, dropon, overlap) {
- if(Element.isParent(dropon, element)) return;
-
- if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
- return;
- } else if(overlap>0.5) {
- Sortable.mark(dropon, 'before');
- if(dropon.previousSibling != element) {
- var oldParentNode = element.parentNode;
- element.style.visibility = "hidden"; // fix gecko rendering
- dropon.parentNode.insertBefore(element, dropon);
- if(dropon.parentNode!=oldParentNode)
- Sortable.options(oldParentNode).onChange(element);
- Sortable.options(dropon.parentNode).onChange(element);
- }
- } else {
- Sortable.mark(dropon, 'after');
- var nextElement = dropon.nextSibling || null;
- if(nextElement != element) {
- var oldParentNode = element.parentNode;
- element.style.visibility = "hidden"; // fix gecko rendering
- dropon.parentNode.insertBefore(element, nextElement);
- if(dropon.parentNode!=oldParentNode)
- Sortable.options(oldParentNode).onChange(element);
- Sortable.options(dropon.parentNode).onChange(element);
- }
- }
- },
-
- onEmptyHover: function(element, dropon, overlap) {
- var oldParentNode = element.parentNode;
- var droponOptions = Sortable.options(dropon);
-
- if(!Element.isParent(dropon, element)) {
- var index;
-
- var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
- var child = null;
-
- if(children) {
- var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
-
- for (index = 0; index < children.length; index += 1) {
- if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
- offset -= Element.offsetSize (children[index], droponOptions.overlap);
- } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
- child = index + 1 < children.length ? children[index + 1] : null;
- break;
- } else {
- child = children[index];
- break;
- }
- }
- }
-
- dropon.insertBefore(element, child);
-
- Sortable.options(oldParentNode).onChange(element);
- droponOptions.onChange(element);
- }
- },
-
- unmark: function() {
- if(Sortable._marker) Sortable._marker.hide();
- },
-
- mark: function(dropon, position) {
- // mark on ghosting only
- var sortable = Sortable.options(dropon.parentNode);
- if(sortable && !sortable.ghosting) return;
-
- if(!Sortable._marker) {
- Sortable._marker =
- ($('dropmarker') || Element.extend(document.createElement('DIV'))).
- hide().addClassName('dropmarker').setStyle({position:'absolute'});
- document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
- }
- var offsets = Position.cumulativeOffset(dropon);
- Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
-
- if(position=='after')
- if(sortable.overlap == 'horizontal')
- Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
- else
- Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
-
- Sortable._marker.show();
- },
-
- _tree: function(element, options, parent) {
- var children = Sortable.findElements(element, options) || [];
-
- for (var i = 0; i < children.length; ++i) {
- var match = children[i].id.match(options.format);
-
- if (!match) continue;
-
- var child = {
- id: encodeURIComponent(match ? match[1] : null),
- element: element,
- parent: parent,
- children: [],
- position: parent.children.length,
- container: $(children[i]).down(options.treeTag)
- }
-
- /* Get the element containing the children and recurse over it */
- if (child.container)
- this._tree(child.container, options, child)
-
- parent.children.push (child);
- }
-
- return parent;
- },
-
- tree: function(element) {
- element = $(element);
- var sortableOptions = this.options(element);
- var options = Object.extend({
- tag: sortableOptions.tag,
- treeTag: sortableOptions.treeTag,
- only: sortableOptions.only,
- name: element.id,
- format: sortableOptions.format
- }, arguments[1] || { });
-
- var root = {
- id: null,
- parent: null,
- children: [],
- container: element,
- position: 0
- }
-
- return Sortable._tree(element, options, root);
- },
-
- /* Construct a [i] index for a particular node */
- _constructIndex: function(node) {
- var index = '';
- do {
- if (node.id) index = '[' + node.position + ']' + index;
- } while ((node = node.parent) != null);
- return index;
- },
-
- sequence: function(element) {
- element = $(element);
- var options = Object.extend(this.options(element), arguments[1] || { });
-
- return $(this.findElements(element, options) || []).map( function(item) {
- return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
- });
- },
-
- setSequence: function(element, new_sequence) {
- element = $(element);
- var options = Object.extend(this.options(element), arguments[2] || { });
-
- var nodeMap = { };
- this.findElements(element, options).each( function(n) {
- if (n.id.match(options.format))
- nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
- n.parentNode.removeChild(n);
- });
-
- new_sequence.each(function(ident) {
- var n = nodeMap[ident];
- if (n) {
- n[1].appendChild(n[0]);
- delete nodeMap[ident];
- }
- });
- },
-
- serialize: function(element) {
- element = $(element);
- var options = Object.extend(Sortable.options(element), arguments[1] || { });
- var name = encodeURIComponent(
- (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
-
- if (options.tree) {
- return Sortable.tree(element, arguments[1]).children.map( function (item) {
- return [name + Sortable._constructIndex(item) + "[id]=" +
- encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
- }).flatten().join('&');
- } else {
- return Sortable.sequence(element, arguments[1]).map( function(item) {
- return name + "[]=" + encodeURIComponent(item);
- }).join('&');
- }
- }
-}
-
-// Returns true if child is contained within element
-Element.isParent = function(child, element) {
- if (!child.parentNode || child == element) return false;
- if (child.parentNode == element) return true;
- return Element.isParent(child.parentNode, element);
-}
-
-Element.findChildren = function(element, only, recursive, tagName) {
- if(!element.hasChildNodes()) return null;
- tagName = tagName.toUpperCase();
- if(only) only = [only].flatten();
- var elements = [];
- $A(element.childNodes).each( function(e) {
- if(e.tagName && e.tagName.toUpperCase()==tagName &&
- (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
- elements.push(e);
- if(recursive) {
- var grandchildren = Element.findChildren(e, only, recursive, tagName);
- if(grandchildren) elements.push(grandchildren);
- }
- });
-
- return (elements.length>0 ? elements.flatten() : []);
-}
-
-Element.offsetSize = function (element, type) {
- return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
-}
diff --git a/vendor/plugins/rspec/story_server/prototype/javascripts/effects.js b/vendor/plugins/rspec/story_server/prototype/javascripts/effects.js
deleted file mode 100644
index 2862f6f83..000000000
--- a/vendor/plugins/rspec/story_server/prototype/javascripts/effects.js
+++ /dev/null
@@ -1,1117 +0,0 @@
-// script.aculo.us effects.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// Contributors:
-// Justin Palmer (http://encytemedia.com/)
-// Mark Pilgrim (http://diveintomark.org/)
-// Martin Bialasinki
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// converts rgb() and #xxx to #xxxxxx format,
-// returns self (or first argument) if not convertable
-String.prototype.parseColor = function() {
- var color = '#';
- if (this.slice(0,4) == 'rgb(') {
- var cols = this.slice(4,this.length-1).split(',');
- var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
- } else {
- if (this.slice(0,1) == '#') {
- if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
- if (this.length==7) color = this.toLowerCase();
- }
- }
- return (color.length==7 ? color : (arguments[0] || this));
-};
-
-/*--------------------------------------------------------------------------*/
-
-Element.collectTextNodes = function(element) {
- return $A($(element).childNodes).collect( function(node) {
- return (node.nodeType==3 ? node.nodeValue :
- (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
- }).flatten().join('');
-};
-
-Element.collectTextNodesIgnoreClass = function(element, className) {
- return $A($(element).childNodes).collect( function(node) {
- return (node.nodeType==3 ? node.nodeValue :
- ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
- Element.collectTextNodesIgnoreClass(node, className) : ''));
- }).flatten().join('');
-};
-
-Element.setContentZoom = function(element, percent) {
- element = $(element);
- element.setStyle({fontSize: (percent/100) + 'em'});
- if (Prototype.Browser.WebKit) window.scrollBy(0,0);
- return element;
-};
-
-Element.getInlineOpacity = function(element){
- return $(element).style.opacity || '';
-};
-
-Element.forceRerendering = function(element) {
- try {
- element = $(element);
- var n = document.createTextNode(' ');
- element.appendChild(n);
- element.removeChild(n);
- } catch(e) { }
-};
-
-/*--------------------------------------------------------------------------*/
-
-var Effect = {
- _elementDoesNotExistError: {
- name: 'ElementDoesNotExistError',
- message: 'The specified DOM element does not exist, but is required for this effect to operate'
- },
- Transitions: {
- linear: Prototype.K,
- sinoidal: function(pos) {
- return (-Math.cos(pos*Math.PI)/2) + 0.5;
- },
- reverse: function(pos) {
- return 1-pos;
- },
- flicker: function(pos) {
- var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
- return pos > 1 ? 1 : pos;
- },
- wobble: function(pos) {
- return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
- },
- pulse: function(pos, pulses) {
- pulses = pulses || 5;
- return (
- ((pos % (1/pulses)) * pulses).round() == 0 ?
- ((pos * pulses * 2) - (pos * pulses * 2).floor()) :
- 1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())
- );
- },
- spring: function(pos) {
- return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
- },
- none: function(pos) {
- return 0;
- },
- full: function(pos) {
- return 1;
- }
- },
- DefaultOptions: {
- duration: 1.0, // seconds
- fps: 100, // 100= assume 66fps max.
- sync: false, // true for combining
- from: 0.0,
- to: 1.0,
- delay: 0.0,
- queue: 'parallel'
- },
- tagifyText: function(element) {
- var tagifyStyle = 'position:relative';
- if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
-
- element = $(element);
- $A(element.childNodes).each( function(child) {
- if (child.nodeType==3) {
- child.nodeValue.toArray().each( function(character) {
- element.insertBefore(
- new Element('span', {style: tagifyStyle}).update(
- character == ' ' ? String.fromCharCode(160) : character),
- child);
- });
- Element.remove(child);
- }
- });
- },
- multiple: function(element, effect) {
- var elements;
- if (((typeof element == 'object') ||
- Object.isFunction(element)) &&
- (element.length))
- elements = element;
- else
- elements = $(element).childNodes;
-
- var options = Object.extend({
- speed: 0.1,
- delay: 0.0
- }, arguments[2] || { });
- var masterDelay = options.delay;
-
- $A(elements).each( function(element, index) {
- new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
- });
- },
- PAIRS: {
- 'slide': ['SlideDown','SlideUp'],
- 'blind': ['BlindDown','BlindUp'],
- 'appear': ['Appear','Fade']
- },
- toggle: function(element, effect) {
- element = $(element);
- effect = (effect || 'appear').toLowerCase();
- var options = Object.extend({
- queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
- }, arguments[2] || { });
- Effect[element.visible() ?
- Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
- }
-};
-
-Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
-
-/* ------------- core effects ------------- */
-
-Effect.ScopedQueue = Class.create(Enumerable, {
- initialize: function() {
- this.effects = [];
- this.interval = null;
- },
- _each: function(iterator) {
- this.effects._each(iterator);
- },
- add: function(effect) {
- var timestamp = new Date().getTime();
-
- var position = Object.isString(effect.options.queue) ?
- effect.options.queue : effect.options.queue.position;
-
- switch(position) {
- case 'front':
- // move unstarted effects after this effect
- this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
- e.startOn += effect.finishOn;
- e.finishOn += effect.finishOn;
- });
- break;
- case 'with-last':
- timestamp = this.effects.pluck('startOn').max() || timestamp;
- break;
- case 'end':
- // start effect after last queued effect has finished
- timestamp = this.effects.pluck('finishOn').max() || timestamp;
- break;
- }
-
- effect.startOn += timestamp;
- effect.finishOn += timestamp;
-
- if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
- this.effects.push(effect);
-
- if (!this.interval)
- this.interval = setInterval(this.loop.bind(this), 15);
- },
- remove: function(effect) {
- this.effects = this.effects.reject(function(e) { return e==effect });
- if (this.effects.length == 0) {
- clearInterval(this.interval);
- this.interval = null;
- }
- },
- loop: function() {
- var timePos = new Date().getTime();
- for(var i=0, len=this.effects.length;i<len;i++)
- this.effects[i] && this.effects[i].loop(timePos);
- }
-});
-
-Effect.Queues = {
- instances: $H(),
- get: function(queueName) {
- if (!Object.isString(queueName)) return queueName;
-
- if (!this.instances[queueName])
- this.instances[queueName] = new Effect.ScopedQueue();
-
- return this.instances[queueName];
- }
-};
-Effect.Queue = Effect.Queues.get('global');
-
-Effect.Base = Class.create();
-Effect.Base.prototype = {
- position: null,
- start: function(options) {
- function codeForEvent(options,eventName){
- return (
- (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
- (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
- );
- }
- if (options && options.transition === false) options.transition = Effect.Transitions.linear;
- this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
- this.currentFrame = 0;
- this.state = 'idle';
- this.startOn = this.options.delay*1000;
- this.finishOn = this.startOn+(this.options.duration*1000);
- this.fromToDelta = this.options.to-this.options.from;
- this.totalTime = this.finishOn-this.startOn;
- this.totalFrames = this.options.fps*this.options.duration;
-
- eval('this.render = function(pos){ '+
- 'if (this.state=="idle"){this.state="running";'+
- codeForEvent(this.options,'beforeSetup')+
- (this.setup ? 'this.setup();':'')+
- codeForEvent(this.options,'afterSetup')+
- '};if (this.state=="running"){'+
- 'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
- 'this.position=pos;'+
- codeForEvent(this.options,'beforeUpdate')+
- (this.update ? 'this.update(pos);':'')+
- codeForEvent(this.options,'afterUpdate')+
- '}}');
-
- this.event('beforeStart');
- if (!this.options.sync)
- Effect.Queues.get(Object.isString(this.options.queue) ?
- 'global' : this.options.queue.scope).add(this);
- },
- loop: function(timePos) {
- if (timePos >= this.startOn) {
- if (timePos >= this.finishOn) {
- this.render(1.0);
- this.cancel();
- this.event('beforeFinish');
- if (this.finish) this.finish();
- this.event('afterFinish');
- return;
- }
- var pos = (timePos - this.startOn) / this.totalTime,
- frame = (pos * this.totalFrames).round();
- if (frame > this.currentFrame) {
- this.render(pos);
- this.currentFrame = frame;
- }
- }
- },
- cancel: function() {
- if (!this.options.sync)
- Effect.Queues.get(Object.isString(this.options.queue) ?
- 'global' : this.options.queue.scope).remove(this);
- this.state = 'finished';
- },
- event: function(eventName) {
- if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
- if (this.options[eventName]) this.options[eventName](this);
- },
- inspect: function() {
- var data = $H();
- for(property in this)
- if (!Object.isFunction(this[property])) data[property] = this[property];
- return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
- }
-};
-
-Effect.Parallel = Class.create(Effect.Base, {
- initialize: function(effects) {
- this.effects = effects || [];
- this.start(arguments[1]);
- },
- update: function(position) {
- this.effects.invoke('render', position);
- },
- finish: function(position) {
- this.effects.each( function(effect) {
- effect.render(1.0);
- effect.cancel();
- effect.event('beforeFinish');
- if (effect.finish) effect.finish(position);
- effect.event('afterFinish');
- });
- }
-});
-
-Effect.Tween = Class.create(Effect.Base, {
- initialize: function(object, from, to) {
- object = Object.isString(object) ? $(object) : object;
- var args = $A(arguments), method = args.last(),
- options = args.length == 5 ? args[3] : null;
- this.method = Object.isFunction(method) ? method.bind(object) :
- Object.isFunction(object[method]) ? object[method].bind(object) :
- function(value) { object[method] = value };
- this.start(Object.extend({ from: from, to: to }, options || { }));
- },
- update: function(position) {
- this.method(position);
- }
-});
-
-Effect.Event = Class.create(Effect.Base, {
- initialize: function() {
- this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
- },
- update: Prototype.emptyFunction
-});
-
-Effect.Opacity = Class.create(Effect.Base, {
- initialize: function(element) {
- this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- // make this work on IE on elements without 'layout'
- if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
- this.element.setStyle({zoom: 1});
- var options = Object.extend({
- from: this.element.getOpacity() || 0.0,
- to: 1.0
- }, arguments[1] || { });
- this.start(options);
- },
- update: function(position) {
- this.element.setOpacity(position);
- }
-});
-
-Effect.Move = Class.create(Effect.Base, {
- initialize: function(element) {
- this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- var options = Object.extend({
- x: 0,
- y: 0,
- mode: 'relative'
- }, arguments[1] || { });
- this.start(options);
- },
- setup: function() {
- this.element.makePositioned();
- this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
- this.originalTop = parseFloat(this.element.getStyle('top') || '0');
- if (this.options.mode == 'absolute') {
- this.options.x = this.options.x - this.originalLeft;
- this.options.y = this.options.y - this.originalTop;
- }
- },
- update: function(position) {
- this.element.setStyle({
- left: (this.options.x * position + this.originalLeft).round() + 'px',
- top: (this.options.y * position + this.originalTop).round() + 'px'
- });
- }
-});
-
-// for backwards compatibility
-Effect.MoveBy = function(element, toTop, toLeft) {
- return new Effect.Move(element,
- Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
-};
-
-Effect.Scale = Class.create(Effect.Base, {
- initialize: function(element, percent) {
- this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- var options = Object.extend({
- scaleX: true,
- scaleY: true,
- scaleContent: true,
- scaleFromCenter: false,
- scaleMode: 'box', // 'box' or 'contents' or { } with provided values
- scaleFrom: 100.0,
- scaleTo: percent
- }, arguments[2] || { });
- this.start(options);
- },
- setup: function() {
- this.restoreAfterFinish = this.options.restoreAfterFinish || false;
- this.elementPositioning = this.element.getStyle('position');
-
- this.originalStyle = { };
- ['top','left','width','height','fontSize'].each( function(k) {
- this.originalStyle[k] = this.element.style[k];
- }.bind(this));
-
- this.originalTop = this.element.offsetTop;
- this.originalLeft = this.element.offsetLeft;
-
- var fontSize = this.element.getStyle('font-size') || '100%';
- ['em','px','%','pt'].each( function(fontSizeType) {
- if (fontSize.indexOf(fontSizeType)>0) {
- this.fontSize = parseFloat(fontSize);
- this.fontSizeType = fontSizeType;
- }
- }.bind(this));
-
- this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
-
- this.dims = null;
- if (this.options.scaleMode=='box')
- this.dims = [this.element.offsetHeight, this.element.offsetWidth];
- if (/^content/.test(this.options.scaleMode))
- this.dims = [this.element.scrollHeight, this.element.scrollWidth];
- if (!this.dims)
- this.dims = [this.options.scaleMode.originalHeight,
- this.options.scaleMode.originalWidth];
- },
- update: function(position) {
- var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
- if (this.options.scaleContent && this.fontSize)
- this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
- this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
- },
- finish: function(position) {
- if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
- },
- setDimensions: function(height, width) {
- var d = { };
- if (this.options.scaleX) d.width = width.round() + 'px';
- if (this.options.scaleY) d.height = height.round() + 'px';
- if (this.options.scaleFromCenter) {
- var topd = (height - this.dims[0])/2;
- var leftd = (width - this.dims[1])/2;
- if (this.elementPositioning == 'absolute') {
- if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
- if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
- } else {
- if (this.options.scaleY) d.top = -topd + 'px';
- if (this.options.scaleX) d.left = -leftd + 'px';
- }
- }
- this.element.setStyle(d);
- }
-});
-
-Effect.Highlight = Class.create(Effect.Base, {
- initialize: function(element) {
- this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
- this.start(options);
- },
- setup: function() {
- // Prevent executing on elements not in the layout flow
- if (this.element.getStyle('display')=='none') { this.cancel(); return; }
- // Disable background image during the effect
- this.oldStyle = { };
- if (!this.options.keepBackgroundImage) {
- this.oldStyle.backgroundImage = this.element.getStyle('background-image');
- this.element.setStyle({backgroundImage: 'none'});
- }
- if (!this.options.endcolor)
- this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
- if (!this.options.restorecolor)
- this.options.restorecolor = this.element.getStyle('background-color');
- // init color calculations
- this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
- this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
- },
- update: function(position) {
- this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
- return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
- },
- finish: function() {
- this.element.setStyle(Object.extend(this.oldStyle, {
- backgroundColor: this.options.restorecolor
- }));
- }
-});
-
-Effect.ScrollTo = function(element) {
- var options = arguments[1] || { },
- scrollOffsets = document.viewport.getScrollOffsets(),
- elementOffsets = $(element).cumulativeOffset(),
- max = (window.height || document.body.scrollHeight) - document.viewport.getHeight();
-
- if (options.offset) elementOffsets[1] += options.offset;
-
- return new Effect.Tween(null,
- scrollOffsets.top,
- elementOffsets[1] > max ? max : elementOffsets[1],
- options,
- function(p){ scrollTo(scrollOffsets.left, p.round()) }
- );
-};
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
- element = $(element);
- var oldOpacity = element.getInlineOpacity();
- var options = Object.extend({
- from: element.getOpacity() || 1.0,
- to: 0.0,
- afterFinishInternal: function(effect) {
- if (effect.options.to!=0) return;
- effect.element.hide().setStyle({opacity: oldOpacity});
- }
- }, arguments[1] || { });
- return new Effect.Opacity(element,options);
-};
-
-Effect.Appear = function(element) {
- element = $(element);
- var options = Object.extend({
- from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
- to: 1.0,
- // force Safari to render floated elements properly
- afterFinishInternal: function(effect) {
- effect.element.forceRerendering();
- },
- beforeSetup: function(effect) {
- effect.element.setOpacity(effect.options.from).show();
- }}, arguments[1] || { });
- return new Effect.Opacity(element,options);
-};
-
-Effect.Puff = function(element) {
- element = $(element);
- var oldStyle = {
- opacity: element.getInlineOpacity(),
- position: element.getStyle('position'),
- top: element.style.top,
- left: element.style.left,
- width: element.style.width,
- height: element.style.height
- };
- return new Effect.Parallel(
- [ new Effect.Scale(element, 200,
- { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
- new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
- Object.extend({ duration: 1.0,
- beforeSetupInternal: function(effect) {
- Position.absolutize(effect.effects[0].element)
- },
- afterFinishInternal: function(effect) {
- effect.effects[0].element.hide().setStyle(oldStyle); }
- }, arguments[1] || { })
- );
-};
-
-Effect.BlindUp = function(element) {
- element = $(element);
- element.makeClipping();
- return new Effect.Scale(element, 0,
- Object.extend({ scaleContent: false,
- scaleX: false,
- restoreAfterFinish: true,
- afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping();
- }
- }, arguments[1] || { })
- );
-};
-
-Effect.BlindDown = function(element) {
- element = $(element);
- var elementDimensions = element.getDimensions();
- return new Effect.Scale(element, 100, Object.extend({
- scaleContent: false,
- scaleX: false,
- scaleFrom: 0,
- scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
- restoreAfterFinish: true,
- afterSetup: function(effect) {
- effect.element.makeClipping().setStyle({height: '0px'}).show();
- },
- afterFinishInternal: function(effect) {
- effect.element.undoClipping();
- }
- }, arguments[1] || { }));
-};
-
-Effect.SwitchOff = function(element) {
- element = $(element);
- var oldOpacity = element.getInlineOpacity();
- return new Effect.Appear(element, Object.extend({
- duration: 0.4,
- from: 0,
- transition: Effect.Transitions.flicker,
- afterFinishInternal: function(effect) {
- new Effect.Scale(effect.element, 1, {
- duration: 0.3, scaleFromCenter: true,
- scaleX: false, scaleContent: false, restoreAfterFinish: true,
- beforeSetup: function(effect) {
- effect.element.makePositioned().makeClipping();
- },
- afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
- }
- })
- }
- }, arguments[1] || { }));
-};
-
-Effect.DropOut = function(element) {
- element = $(element);
- var oldStyle = {
- top: element.getStyle('top'),
- left: element.getStyle('left'),
- opacity: element.getInlineOpacity() };
- return new Effect.Parallel(
- [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
- new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
- Object.extend(
- { duration: 0.5,
- beforeSetup: function(effect) {
- effect.effects[0].element.makePositioned();
- },
- afterFinishInternal: function(effect) {
- effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
- }
- }, arguments[1] || { }));
-};
-
-Effect.Shake = function(element) {
- element = $(element);
- var oldStyle = {
- top: element.getStyle('top'),
- left: element.getStyle('left') };
- return new Effect.Move(element,
- { x: 20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: -40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: 40, y: 0, duration: 0.1, afterFinishInternal: function(effect) {
- new Effect.Move(effect.element,
- { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
- effect.element.undoPositioned().setStyle(oldStyle);
- }}) }}) }}) }}) }}) }});
-};
-
-Effect.SlideDown = function(element) {
- element = $(element).cleanWhitespace();
- // SlideDown need to have the content of the element wrapped in a container element with fixed height!
- var oldInnerBottom = element.down().getStyle('bottom');
- var elementDimensions = element.getDimensions();
- return new Effect.Scale(element, 100, Object.extend({
- scaleContent: false,
- scaleX: false,
- scaleFrom: window.opera ? 0 : 1,
- scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
- restoreAfterFinish: true,
- afterSetup: function(effect) {
- effect.element.makePositioned();
- effect.element.down().makePositioned();
- if (window.opera) effect.element.setStyle({top: ''});
- effect.element.makeClipping().setStyle({height: '0px'}).show();
- },
- afterUpdateInternal: function(effect) {
- effect.element.down().setStyle({bottom:
- (effect.dims[0] - effect.element.clientHeight) + 'px' });
- },
- afterFinishInternal: function(effect) {
- effect.element.undoClipping().undoPositioned();
- effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
- }, arguments[1] || { })
- );
-};
-
-Effect.SlideUp = function(element) {
- element = $(element).cleanWhitespace();
- var oldInnerBottom = element.down().getStyle('bottom');
- var elementDimensions = element.getDimensions();
- return new Effect.Scale(element, window.opera ? 0 : 1,
- Object.extend({ scaleContent: false,
- scaleX: false,
- scaleMode: 'box',
- scaleFrom: 100,
- scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
- restoreAfterFinish: true,
- afterSetup: function(effect) {
- effect.element.makePositioned();
- effect.element.down().makePositioned();
- if (window.opera) effect.element.setStyle({top: ''});
- effect.element.makeClipping().show();
- },
- afterUpdateInternal: function(effect) {
- effect.element.down().setStyle({bottom:
- (effect.dims[0] - effect.element.clientHeight) + 'px' });
- },
- afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping().undoPositioned();
- effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
- }
- }, arguments[1] || { })
- );
-};
-
-// Bug in opera makes the TD containing this element expand for a instance after finish
-Effect.Squish = function(element) {
- return new Effect.Scale(element, window.opera ? 1 : 0, {
- restoreAfterFinish: true,
- beforeSetup: function(effect) {
- effect.element.makeClipping();
- },
- afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping();
- }
- });
-};
-
-Effect.Grow = function(element) {
- element = $(element);
- var options = Object.extend({
- direction: 'center',
- moveTransition: Effect.Transitions.sinoidal,
- scaleTransition: Effect.Transitions.sinoidal,
- opacityTransition: Effect.Transitions.full
- }, arguments[1] || { });
- var oldStyle = {
- top: element.style.top,
- left: element.style.left,
- height: element.style.height,
- width: element.style.width,
- opacity: element.getInlineOpacity() };
-
- var dims = element.getDimensions();
- var initialMoveX, initialMoveY;
- var moveX, moveY;
-
- switch (options.direction) {
- case 'top-left':
- initialMoveX = initialMoveY = moveX = moveY = 0;
- break;
- case 'top-right':
- initialMoveX = dims.width;
- initialMoveY = moveY = 0;
- moveX = -dims.width;
- break;
- case 'bottom-left':
- initialMoveX = moveX = 0;
- initialMoveY = dims.height;
- moveY = -dims.height;
- break;
- case 'bottom-right':
- initialMoveX = dims.width;
- initialMoveY = dims.height;
- moveX = -dims.width;
- moveY = -dims.height;
- break;
- case 'center':
- initialMoveX = dims.width / 2;
- initialMoveY = dims.height / 2;
- moveX = -dims.width / 2;
- moveY = -dims.height / 2;
- break;
- }
-
- return new Effect.Move(element, {
- x: initialMoveX,
- y: initialMoveY,
- duration: 0.01,
- beforeSetup: function(effect) {
- effect.element.hide().makeClipping().makePositioned();
- },
- afterFinishInternal: function(effect) {
- new Effect.Parallel(
- [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
- new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
- new Effect.Scale(effect.element, 100, {
- scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
- sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
- ], Object.extend({
- beforeSetup: function(effect) {
- effect.effects[0].element.setStyle({height: '0px'}).show();
- },
- afterFinishInternal: function(effect) {
- effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
- }
- }, options)
- )
- }
- });
-};
-
-Effect.Shrink = function(element) {
- element = $(element);
- var options = Object.extend({
- direction: 'center',
- moveTransition: Effect.Transitions.sinoidal,
- scaleTransition: Effect.Transitions.sinoidal,
- opacityTransition: Effect.Transitions.none
- }, arguments[1] || { });
- var oldStyle = {
- top: element.style.top,
- left: element.style.left,
- height: element.style.height,
- width: element.style.width,
- opacity: element.getInlineOpacity() };
-
- var dims = element.getDimensions();
- var moveX, moveY;
-
- switch (options.direction) {
- case 'top-left':
- moveX = moveY = 0;
- break;
- case 'top-right':
- moveX = dims.width;
- moveY = 0;
- break;
- case 'bottom-left':
- moveX = 0;
- moveY = dims.height;
- break;
- case 'bottom-right':
- moveX = dims.width;
- moveY = dims.height;
- break;
- case 'center':
- moveX = dims.width / 2;
- moveY = dims.height / 2;
- break;
- }
-
- return new Effect.Parallel(
- [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
- new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
- new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
- ], Object.extend({
- beforeStartInternal: function(effect) {
- effect.effects[0].element.makePositioned().makeClipping();
- },
- afterFinishInternal: function(effect) {
- effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
- }, options)
- );
-};
-
-Effect.Pulsate = function(element) {
- element = $(element);
- var options = arguments[1] || { };
- var oldOpacity = element.getInlineOpacity();
- var transition = options.transition || Effect.Transitions.sinoidal;
- var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
- reverser.bind(transition);
- return new Effect.Opacity(element,
- Object.extend(Object.extend({ duration: 2.0, from: 0,
- afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
- }, options), {transition: reverser}));
-};
-
-Effect.Fold = function(element) {
- element = $(element);
- var oldStyle = {
- top: element.style.top,
- left: element.style.left,
- width: element.style.width,
- height: element.style.height };
- element.makeClipping();
- return new Effect.Scale(element, 5, Object.extend({
- scaleContent: false,
- scaleX: false,
- afterFinishInternal: function(effect) {
- new Effect.Scale(element, 1, {
- scaleContent: false,
- scaleY: false,
- afterFinishInternal: function(effect) {
- effect.element.hide().undoClipping().setStyle(oldStyle);
- } });
- }}, arguments[1] || { }));
-};
-
-Effect.Morph = Class.create(Effect.Base, {
- initialize: function(element) {
- this.element = $(element);
- if (!this.element) throw(Effect._elementDoesNotExistError);
- var options = Object.extend({
- style: { }
- }, arguments[1] || { });
-
- if (!Object.isString(options.style)) this.style = $H(options.style);
- else {
- if (options.style.include(':'))
- this.style = options.style.parseStyle();
- else {
- this.element.addClassName(options.style);
- this.style = $H(this.element.getStyles());
- this.element.removeClassName(options.style);
- var css = this.element.getStyles();
- this.style = this.style.reject(function(style) {
- return style.value == css[style.key];
- });
- options.afterFinishInternal = function(effect) {
- effect.element.addClassName(effect.options.style);
- effect.transforms.each(function(transform) {
- effect.element.style[transform.style] = '';
- });
- }
- }
- }
- this.start(options);
- },
-
- setup: function(){
- function parseColor(color){
- if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
- color = color.parseColor();
- return $R(0,2).map(function(i){
- return parseInt( color.slice(i*2+1,i*2+3), 16 )
- });
- }
- this.transforms = this.style.map(function(pair){
- var property = pair[0], value = pair[1], unit = null;
-
- if (value.parseColor('#zzzzzz') != '#zzzzzz') {
- value = value.parseColor();
- unit = 'color';
- } else if (property == 'opacity') {
- value = parseFloat(value);
- if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
- this.element.setStyle({zoom: 1});
- } else if (Element.CSS_LENGTH.test(value)) {
- var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
- value = parseFloat(components[1]);
- unit = (components.length == 3) ? components[2] : null;
- }
-
- var originalValue = this.element.getStyle(property);
- return {
- style: property.camelize(),
- originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
- targetValue: unit=='color' ? parseColor(value) : value,
- unit: unit
- };
- }.bind(this)).reject(function(transform){
- return (
- (transform.originalValue == transform.targetValue) ||
- (
- transform.unit != 'color' &&
- (isNaN(transform.originalValue) || isNaN(transform.targetValue))
- )
- )
- });
- },
- update: function(position) {
- var style = { }, transform, i = this.transforms.length;
- while(i--)
- style[(transform = this.transforms[i]).style] =
- transform.unit=='color' ? '#'+
- (Math.round(transform.originalValue[0]+
- (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
- (Math.round(transform.originalValue[1]+
- (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
- (Math.round(transform.originalValue[2]+
- (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
- (transform.originalValue +
- (transform.targetValue - transform.originalValue) * position).toFixed(3) +
- (transform.unit === null ? '' : transform.unit);
- this.element.setStyle(style, true);
- }
-});
-
-Effect.Transform = Class.create({
- initialize: function(tracks){
- this.tracks = [];
- this.options = arguments[1] || { };
- this.addTracks(tracks);
- },
- addTracks: function(tracks){
- tracks.each(function(track){
- var data = $H(track).values().first();
- this.tracks.push($H({
- ids: $H(track).keys().first(),
- effect: Effect.Morph,
- options: { style: data }
- }));
- }.bind(this));
- return this;
- },
- play: function(){
- return new Effect.Parallel(
- this.tracks.map(function(track){
- var elements = [$(track.ids) || $$(track.ids)].flatten();
- return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
- }).flatten(),
- this.options
- );
- }
-});
-
-Element.CSS_PROPERTIES = $w(
- 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
- 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
- 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
- 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
- 'fontSize fontWeight height left letterSpacing lineHeight ' +
- 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
- 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
- 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
- 'right textIndent top width wordSpacing zIndex');
-
-Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
-
-String.__parseStyleElement = document.createElement('div');
-String.prototype.parseStyle = function(){
- var style, styleRules = $H();
- if (Prototype.Browser.WebKit)
- style = new Element('div',{style:this}).style;
- else {
- String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
- style = String.__parseStyleElement.childNodes[0].style;
- }
-
- Element.CSS_PROPERTIES.each(function(property){
- if (style[property]) styleRules[property] = style[property];
- });
-
- if (Prototype.Browser.IE && this.include('opacity'))
- styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
-
- return styleRules;
-};
-
-if (document.defaultView && document.defaultView.getComputedStyle) {
- Element.getStyles = function(element) {
- var css = document.defaultView.getComputedStyle($(element), null);
- return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
- styles[property] = css[property];
- return styles;
- });
- };
-} else {
- Element.getStyles = function(element) {
- element = $(element);
- var css = element.currentStyle, styles;
- styles = Element.CSS_PROPERTIES.inject({ }, function(hash, property) {
- hash[property] = css[property];
- return hash;
- });
- if (!styles.opacity) styles.opacity = element.getOpacity();
- return styles;
- };
-};
-
-Effect.Methods = {
- morph: function(element, style) {
- element = $(element);
- new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
- return element;
- },
- visualEffect: function(element, effect, options) {
- element = $(element)
- var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
- new Effect[klass](element, options);
- return element;
- },
- highlight: function(element, options) {
- element = $(element);
- new Effect.Highlight(element, options);
- return element;
- }
-};
-
-$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
- 'pulsate shake puff squish switchOff dropOut').each(
- function(effect) {
- Effect.Methods[effect] = function(element, options){
- element = $(element);
- Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
- return element;
- }
- }
-);
-
-$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
- function(f) { Effect.Methods[f] = Element[f]; }
-);
-
-Element.addMethods(Effect.Methods); \ No newline at end of file
diff --git a/vendor/plugins/rspec/story_server/prototype/javascripts/prototype.js b/vendor/plugins/rspec/story_server/prototype/javascripts/prototype.js
deleted file mode 100644
index 30115e5e8..000000000
--- a/vendor/plugins/rspec/story_server/prototype/javascripts/prototype.js
+++ /dev/null
@@ -1,4140 +0,0 @@
-/* Prototype JavaScript framework, version 1.6.0_rc0
- * (c) 2005-2007 Sam Stephenson
- *
- * Prototype is freely distributable under the terms of an MIT-style license.
- * For details, see the Prototype web site: http://www.prototypejs.org/
- *
- *--------------------------------------------------------------------------*/
-
-var Prototype = {
- Version: '1.6.0_rc0',
-
- Browser: {
- IE: !!(window.attachEvent && !window.opera),
- Opera: !!window.opera,
- WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
- Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
- MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
- },
-
- BrowserFeatures: {
- XPath: !!document.evaluate,
- ElementExtensions: !!window.HTMLElement,
- SpecificElementExtensions:
- document.createElement('div').__proto__ !==
- document.createElement('form').__proto__
- },
-
- ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
- JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
-
- emptyFunction: function() { },
- K: function(x) { return x }
-};
-
-if (Prototype.Browser.MobileSafari)
- Prototype.BrowserFeatures.SpecificElementExtensions = false;
-
-/* Based on Alex Arnell's inheritance implementation. */
-var Class = {
- create: function() {
- var parent = null, properties = $A(arguments);
- if (Object.isFunction(properties[0]))
- parent = properties.shift();
-
- function klass() {
- this.initialize.apply(this, arguments);
- }
-
- Object.extend(klass, Class.Methods);
- klass.superclass = parent;
- klass.subclasses = [];
-
- if (parent) {
- var subclass = function() { };
- subclass.prototype = parent.prototype;
- klass.prototype = new subclass;
- parent.subclasses.push(klass);
- }
-
- for (var i = 0; i < properties.length; i++)
- klass.addMethods(properties[i]);
-
- if (!klass.prototype.initialize)
- klass.prototype.initialize = Prototype.emptyFunction;
-
- klass.prototype.constructor = klass;
-
- return klass;
- }
-};
-
-Class.Methods = {
- addMethods: function(source) {
- var ancestor = this.superclass && this.superclass.prototype;
-
- for (var property in source) {
- var value = source[property];
- if (ancestor && Object.isFunction(value) &&
- value.argumentNames().first() == "$super") {
- var method = value, value = Object.extend((function(m) {
- return function() { return ancestor[m].apply(this, arguments) };
- })(property).wrap(method), {
- valueOf: function() { return method },
- toString: function() { return method.toString() }
- });
- }
- this.prototype[property] = value;
- }
-
- return this;
- }
-};
-
-var Abstract = { };
-
-Object.extend = function(destination, source) {
- for (var property in source)
- destination[property] = source[property];
- return destination;
-};
-
-Object.extend(Object, {
- inspect: function(object) {
- try {
- if (object === undefined) return 'undefined';
- if (object === null) return 'null';
- return object.inspect ? object.inspect() : object.toString();
- } catch (e) {
- if (e instanceof RangeError) return '...';
- throw e;
- }
- },
-
- toJSON: function(object) {
- var type = typeof object;
- switch (type) {
- case 'undefined':
- case 'function':
- case 'unknown': return;
- case 'boolean': return object.toString();
- }
-
- if (object === null) return 'null';
- if (object.toJSON) return object.toJSON();
- if (Object.isElement(object)) return;
-
- var results = [];
- for (var property in object) {
- var value = Object.toJSON(object[property]);
- if (value !== undefined)
- results.push(property.toJSON() + ': ' + value);
- }
-
- return '{' + results.join(', ') + '}';
- },
-
- toHTML: function(object) {
- return object && object.toHTML ? object.toHTML() : String.interpret(object);
- },
-
- keys: function(object) {
- var keys = [];
- for (var property in object)
- keys.push(property);
- return keys;
- },
-
- values: function(object) {
- var values = [];
- for (var property in object)
- values.push(object[property]);
- return values;
- },
-
- clone: function(object) {
- return Object.extend({ }, object);
- },
-
- isElement: function(object) {
- return object && object.nodeType == 1;
- },
-
- isArray: function(object) {
- return object && object.constructor === Array;
- },
-
- isFunction: function(object) {
- return typeof object == "function";
- },
-
- isString: function(object) {
- return typeof object == "string";
- },
-
- isNumber: function(object) {
- return typeof object == "number";
- },
-
- isUndefined: function(object) {
- return typeof object == "undefined";
- }
-});
-
-Object.extend(Function.prototype, {
- argumentNames: function() {
- var names = this.toString().match(/^[\s\(]*function\s*\((.*?)\)/)[1].split(",").invoke("strip");
- return names.length == 1 && !names[0] ? [] : names;
- },
-
- bind: function() {
- if (arguments.length < 2 && arguments[0] === undefined) return this;
- var __method = this, args = $A(arguments), object = args.shift();
- return function() {
- return __method.apply(object, args.concat($A(arguments)));
- }
- },
-
- bindAsEventListener: function() {
- var __method = this, args = $A(arguments), object = args.shift();
- return function(event) {
- return __method.apply(object, [event || window.event].concat(args));
- }
- },
-
- curry: function() {
- if (!arguments.length) return this;
- var __method = this, args = $A(arguments);
- return function() {
- return __method.apply(this, args.concat($A(arguments)));
- }
- },
-
- delay: function() {
- var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
- return window.setTimeout(function() {
- return __method.apply(__method, args);
- }, timeout);
- },
-
- wrap: function(wrapper) {
- var __method = this;
- return function() {
- return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
- }
- },
-
- methodize: function() {
- if (this._methodized) return this._methodized;
- var __method = this;
- return this._methodized = function() {
- return __method.apply(null, [this].concat($A(arguments)));
- };
- }
-});
-
-Function.prototype.defer = Function.prototype.delay.curry(0.01);
-
-Date.prototype.toJSON = function() {
- return '"' + this.getUTCFullYear() + '-' +
- (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
- this.getUTCDate().toPaddedString(2) + 'T' +
- this.getUTCHours().toPaddedString(2) + ':' +
- this.getUTCMinutes().toPaddedString(2) + ':' +
- this.getUTCSeconds().toPaddedString(2) + 'Z"';
-};
-
-var Try = {
- these: function() {
- var returnValue;
-
- for (var i = 0, length = arguments.length; i < length; i++) {
- var lambda = arguments[i];
- try {
- returnValue = lambda();
- break;
- } catch (e) { }
- }
-
- return returnValue;
- }
-};
-
-RegExp.prototype.match = RegExp.prototype.test;
-
-RegExp.escape = function(str) {
- return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
-};
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create({
- initialize: function(callback, frequency) {
- this.callback = callback;
- this.frequency = frequency;
- this.currentlyExecuting = false;
-
- this.registerCallback();
- },
-
- registerCallback: function() {
- this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
- },
-
- execute: function() {
- this.callback(this);
- },
-
- stop: function() {
- if (!this.timer) return;
- clearInterval(this.timer);
- this.timer = null;
- },
-
- onTimerEvent: function() {
- if (!this.currentlyExecuting) {
- try {
- this.currentlyExecuting = true;
- this.execute();
- } finally {
- this.currentlyExecuting = false;
- }
- }
- }
-});
-Object.extend(String, {
- interpret: function(value) {
- return value == null ? '' : String(value);
- },
- specialChar: {
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '\\': '\\\\'
- }
-});
-
-Object.extend(String.prototype, {
- gsub: function(pattern, replacement) {
- var result = '', source = this, match;
- replacement = arguments.callee.prepareReplacement(replacement);
-
- while (source.length > 0) {
- if (match = source.match(pattern)) {
- result += source.slice(0, match.index);
- result += String.interpret(replacement(match));
- source = source.slice(match.index + match[0].length);
- } else {
- result += source, source = '';
- }
- }
- return result;
- },
-
- sub: function(pattern, replacement, count) {
- replacement = this.gsub.prepareReplacement(replacement);
- count = count === undefined ? 1 : count;
-
- return this.gsub(pattern, function(match) {
- if (--count < 0) return match[0];
- return replacement(match);
- });
- },
-
- scan: function(pattern, iterator) {
- this.gsub(pattern, iterator);
- return String(this);
- },
-
- truncate: function(length, truncation) {
- length = length || 30;
- truncation = truncation === undefined ? '...' : truncation;
- return this.length > length ?
- this.slice(0, length - truncation.length) + truncation : String(this);
- },
-
- strip: function() {
- return this.replace(/^\s+/, '').replace(/\s+$/, '');
- },
-
- stripTags: function() {
- return this.replace(/<\/?[^>]+>/gi, '');
- },
-
- stripScripts: function() {
- return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
- },
-
- extractScripts: function() {
- var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
- var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
- return (this.match(matchAll) || []).map(function(scriptTag) {
- return (scriptTag.match(matchOne) || ['', ''])[1];
- });
- },
-
- evalScripts: function() {
- return this.extractScripts().map(function(script) { return eval(script) });
- },
-
- escapeHTML: function() {
- var self = arguments.callee;
- self.text.data = this;
- return self.div.innerHTML;
- },
-
- unescapeHTML: function() {
- var div = new Element('div');
- div.innerHTML = this.stripTags();
- return div.childNodes[0] ? (div.childNodes.length > 1 ?
- $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
- div.childNodes[0].nodeValue) : '';
- },
-
- toQueryParams: function(separator) {
- var match = this.strip().match(/([^?#]*)(#.*)?$/);
- if (!match) return { };
-
- return match[1].split(separator || '&').inject({ }, function(hash, pair) {
- if ((pair = pair.split('='))[0]) {
- var key = decodeURIComponent(pair.shift());
- var value = pair.length > 1 ? pair.join('=') : pair[0];
- if (value != undefined) value = decodeURIComponent(value);
-
- if (key in hash) {
- if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
- hash[key].push(value);
- }
- else hash[key] = value;
- }
- return hash;
- });
- },
-
- toArray: function() {
- return this.split('');
- },
-
- succ: function() {
- return this.slice(0, this.length - 1) +
- String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
- },
-
- times: function(count) {
- var result = '';
- for (var i = 0; i < count; i++) result += this;
- return result;
- },
-
- camelize: function() {
- var parts = this.split('-'), len = parts.length;
- if (len == 1) return parts[0];
-
- var camelized = this.charAt(0) == '-'
- ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
- : parts[0];
-
- for (var i = 1; i < len; i++)
- camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
- return camelized;
- },
-
- capitalize: function() {
- return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
- },
-
- underscore: function() {
- return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
- },
-
- dasherize: function() {
- return this.gsub(/_/,'-');
- },
-
- inspect: function(useDoubleQuotes) {
- var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
- var character = String.specialChar[match[0]];
- return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
- });
- if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
- return "'" + escapedString.replace(/'/g, '\\\'') + "'";
- },
-
- toJSON: function() {
- return this.inspect(true);
- },
-
- unfilterJSON: function(filter) {
- return this.sub(filter || Prototype.JSONFilter, '#{1}');
- },
-
- isJSON: function() {
- var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
- return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
- },
-
- evalJSON: function(sanitize) {
- var json = this.unfilterJSON();
- try {
- if (!sanitize || json.isJSON()) return eval('(' + json + ')');
- } catch (e) { }
- throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
- },
-
- include: function(pattern) {
- return this.indexOf(pattern) > -1;
- },
-
- startsWith: function(pattern) {
- return this.indexOf(pattern) === 0;
- },
-
- endsWith: function(pattern) {
- var d = this.length - pattern.length;
- return d >= 0 && this.lastIndexOf(pattern) === d;
- },
-
- empty: function() {
- return this == '';
- },
-
- blank: function() {
- return /^\s*$/.test(this);
- },
-
- interpolate: function(object, pattern) {
- return new Template(this, pattern).evaluate(object);
- }
-});
-
-if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
- escapeHTML: function() {
- return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
- },
- unescapeHTML: function() {
- return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
- }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
- if (Object.isFunction(replacement)) return replacement;
- var template = new Template(replacement);
- return function(match) { return template.evaluate(match) };
-};
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-Object.extend(String.prototype.escapeHTML, {
- div: document.createElement('div'),
- text: document.createTextNode('')
-});
-
-with (String.prototype.escapeHTML) div.appendChild(text);
-
-var Template = Class.create({
- initialize: function(template, pattern) {
- this.template = template.toString();
- this.pattern = pattern || Template.Pattern;
- },
-
- evaluate: function(object) {
- if (Object.isFunction(object.toTemplateReplacements))
- object = object.toTemplateReplacements();
-
- return this.template.gsub(this.pattern, function(match) {
- if (object == null) return '';
-
- var before = match[1] || '';
- if (before == '\\') return match[2];
-
- var ctx = object, expr = match[3];
- var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr);
- if (match == null) return '';
-
- while (match != null) {
- var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
- ctx = ctx[comp];
- if (null == ctx || '' == match[3]) break;
- expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
- match = pattern.exec(expr);
- }
-
- return before + String.interpret(ctx);
- }.bind(this));
- }
-});
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
-
-var $break = { };
-
-var Enumerable = {
- each: function(iterator, context) {
- var index = 0;
- iterator = iterator.bind(context);
- try {
- this._each(function(value) {
- iterator(value, index++);
- });
- } catch (e) {
- if (e != $break) throw e;
- }
- return this;
- },
-
- eachSlice: function(number, iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
- var index = -number, slices = [], array = this.toArray();
- while ((index += number) < array.length)
- slices.push(array.slice(index, index+number));
- return slices.collect(iterator, context);
- },
-
- all: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
- var result = true;
- this.each(function(value, index) {
- result = result && !!iterator(value, index);
- if (!result) throw $break;
- });
- return result;
- },
-
- any: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
- var result = false;
- this.each(function(value, index) {
- if (result = !!iterator(value, index))
- throw $break;
- });
- return result;
- },
-
- collect: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
- var results = [];
- this.each(function(value, index) {
- results.push(iterator(value, index));
- });
- return results;
- },
-
- detect: function(iterator, context) {
- iterator = iterator.bind(context);
- var result;
- this.each(function(value, index) {
- if (iterator(value, index)) {
- result = value;
- throw $break;
- }
- });
- return result;
- },
-
- findAll: function(iterator, context) {
- iterator = iterator.bind(context);
- var results = [];
- this.each(function(value, index) {
- if (iterator(value, index))
- results.push(value);
- });
- return results;
- },
-
- grep: function(filter, iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
- var results = [];
-
- if (Object.isString(filter))
- filter = new RegExp(filter);
-
- this.each(function(value, index) {
- if (filter.match(value))
- results.push(iterator(value, index));
- });
- return results;
- },
-
- include: function(object) {
- if (Object.isFunction(this.indexOf))
- if (this.indexOf(object) != -1) return true;
-
- var found = false;
- this.each(function(value) {
- if (value == object) {
- found = true;
- throw $break;
- }
- });
- return found;
- },
-
- inGroupsOf: function(number, fillWith) {
- fillWith = fillWith === undefined ? null : fillWith;
- return this.eachSlice(number, function(slice) {
- while(slice.length < number) slice.push(fillWith);
- return slice;
- });
- },
-
- inject: function(memo, iterator, context) {
- iterator = iterator.bind(context);
- this.each(function(value, index) {
- memo = iterator(memo, value, index);
- });
- return memo;
- },
-
- invoke: function(method) {
- var args = $A(arguments).slice(1);
- return this.map(function(value) {
- return value[method].apply(value, args);
- });
- },
-
- max: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
- var result;
- this.each(function(value, index) {
- value = iterator(value, index);
- if (result == undefined || value >= result)
- result = value;
- });
- return result;
- },
-
- min: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
- var result;
- this.each(function(value, index) {
- value = iterator(value, index);
- if (result == undefined || value < result)
- result = value;
- });
- return result;
- },
-
- partition: function(iterator, context) {
- iterator = iterator ? iterator.bind(context) : Prototype.K;
- var trues = [], falses = [];
- this.each(function(value, index) {
- (iterator(value, index) ?
- trues : falses).push(value);
- });
- return [trues, falses];
- },
-
- pluck: function(property) {
- var results = [];
- this.each(function(value) {
- results.push(value[property]);
- });
- return results;
- },
-
- reject: function(iterator, context) {
- iterator = iterator.bind(context);
- var results = [];
- this.each(function(value, index) {
- if (!iterator(value, index))
- results.push(value);
- });
- return results;
- },
-
- sortBy: function(iterator, context) {
- iterator = iterator.bind(context);
- return this.map(function(value, index) {
- return {value: value, criteria: iterator(value, index)};
- }).sort(function(left, right) {
- var a = left.criteria, b = right.criteria;
- return a < b ? -1 : a > b ? 1 : 0;
- }).pluck('value');
- },
-
- toArray: function() {
- return this.map();
- },
-
- zip: function() {
- var iterator = Prototype.K, args = $A(arguments);
- if (Object.isFunction(args.last()))
- iterator = args.pop();
-
- var collections = [this].concat(args).map($A);
- return this.map(function(value, index) {
- return iterator(collections.pluck(index));
- });
- },
-
- size: function() {
- return this.toArray().length;
- },
-
- inspect: function() {
- return '#<Enumerable:' + this.toArray().inspect() + '>';
- }
-};
-
-Object.extend(Enumerable, {
- map: Enumerable.collect,
- find: Enumerable.detect,
- select: Enumerable.findAll,
- filter: Enumerable.findAll,
- member: Enumerable.include,
- entries: Enumerable.toArray,
- every: Enumerable.all,
- some: Enumerable.any
-});
-function $A(iterable) {
- if (!iterable) return [];
- if (iterable.toArray) return iterable.toArray();
- else {
- var results = [];
- for (var i = 0, length = iterable.length; i < length; i++)
- results.push(iterable[i]);
- return results;
- }
-}
-
-if (Prototype.Browser.WebKit) {
- function $A(iterable) {
- if (!iterable) return [];
- if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
- iterable.toArray) {
- return iterable.toArray();
- } else {
- var results = [];
- for (var i = 0, length = iterable.length; i < length; i++)
- results.push(iterable[i]);
- return results;
- }
- }
-}
-
-Array.from = $A;
-
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
- _each: function(iterator) {
- for (var i = 0, length = this.length; i < length; i++)
- iterator(this[i]);
- },
-
- clear: function() {
- this.length = 0;
- return this;
- },
-
- first: function() {
- return this[0];
- },
-
- last: function() {
- return this[this.length - 1];
- },
-
- compact: function() {
- return this.select(function(value) {
- return value != null;
- });
- },
-
- flatten: function() {
- return this.inject([], function(array, value) {
- return array.concat(Object.isArray(value) ?
- value.flatten() : [value]);
- });
- },
-
- without: function() {
- var values = $A(arguments);
- return this.select(function(value) {
- return !values.include(value);
- });
- },
-
- reverse: function(inline) {
- return (inline !== false ? this : this.toArray())._reverse();
- },
-
- reduce: function() {
- return this.length > 1 ? this : this[0];
- },
-
- uniq: function(sorted) {
- return this.inject([], function(array, value, index) {
- if (0 == index || (sorted ? array.last() != value : !array.include(value)))
- array.push(value);
- return array;
- });
- },
-
- intersect: function(array) {
- return this.uniq().findAll(function(item) {
- return array.detect(function(value) { return item === value });
- });
- },
-
- clone: function() {
- return [].concat(this);
- },
-
- size: function() {
- return this.length;
- },
-
- inspect: function() {
- return '[' + this.map(Object.inspect).join(', ') + ']';
- },
-
- toJSON: function() {
- var results = [];
- this.each(function(object) {
- var value = Object.toJSON(object);
- if (value !== undefined) results.push(value);
- });
- return '[' + results.join(', ') + ']';
- }
-});
-
-// use native browser JS 1.6 implementation if available
-if (Object.isFunction(Array.prototype.forEach))
- Array.prototype._each = Array.prototype.forEach;
-
-if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
- i || (i = 0);
- var length = this.length;
- if (i < 0) i = length + i;
- for (; i < length; i++)
- if (this[i] === item) return i;
- return -1;
-};
-
-if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
- i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
- var n = this.slice(0, i).reverse().indexOf(item);
- return (n < 0) ? n : i - n - 1;
-};
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string) {
- string = string.strip();
- return string ? string.split(/\s+/) : [];
-}
-
-if (Prototype.Browser.Opera){
- Array.prototype.concat = function() {
- var array = [];
- for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
- for (var i = 0, length = arguments.length; i < length; i++) {
- if (Object.isArray(arguments[i])) {
- for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
- array.push(arguments[i][j]);
- } else {
- array.push(arguments[i]);
- }
- }
- return array;
- };
-}
-Object.extend(Number.prototype, {
- toColorPart: function() {
- return this.toPaddedString(2, 16);
- },
-
- succ: function() {
- return this + 1;
- },
-
- times: function(iterator) {
- $R(0, this, true).each(iterator);
- return this;
- },
-
- toPaddedString: function(length, radix) {
- var string = this.toString(radix || 10);
- return '0'.times(length - string.length) + string;
- },
-
- toJSON: function() {
- return isFinite(this) ? this.toString() : 'null';
- }
-});
-
-$w('abs round ceil floor').each(function(method){
- Number.prototype[method] = Math[method].methodize();
-});
-var Hash = function(object) {
- if (object instanceof Hash) this.merge(object);
- else Object.extend(this, object || { });
-};
-
-Object.extend(Hash, {
- toQueryString: function(obj) {
- var parts = [];
- parts.add = arguments.callee.addPair;
-
- this.prototype._each.call(obj, function(pair) {
- if (!pair.key) return;
- var value = pair.value;
-
- if (value && typeof value == 'object') {
- if (Object.isArray(value)) value.each(function(value) {
- parts.add(pair.key, value);
- });
- return;
- }
- parts.add(pair.key, value);
- });
-
- return parts.join('&');
- },
-
- toJSON: function(object) {
- var results = [];
- this.prototype._each.call(object, function(pair) {
- var value = Object.toJSON(pair.value);
- if (value !== undefined) results.push(pair.key.toJSON() + ': ' + value);
- });
- return '{' + results.join(', ') + '}';
- }
-});
-
-Hash.toQueryString.addPair = function(key, value, prefix) {
- key = encodeURIComponent(key);
- if (value === undefined) this.push(key);
- else this.push(key + '=' + (value == null ? '' : encodeURIComponent(value)));
-};
-
-Object.extend(Hash.prototype, Enumerable);
-Object.extend(Hash.prototype, {
- _each: function(iterator) {
- for (var key in this) {
- var value = this[key];
- if (value && value == Hash.prototype[key]) continue;
-
- var pair = [key, value];
- pair.key = key;
- pair.value = value;
- iterator(pair);
- }
- },
-
- keys: function() {
- return this.pluck('key');
- },
-
- values: function() {
- return this.pluck('value');
- },
-
- index: function(value) {
- var match = this.detect(function(pair) {
- return pair.value === value;
- });
- return match && match.key;
- },
-
- merge: function(hash) {
- return $H(hash).inject(this, function(mergedHash, pair) {
- mergedHash[pair.key] = pair.value;
- return mergedHash;
- });
- },
-
- remove: function() {
- var result;
- for(var i = 0, length = arguments.length; i < length; i++) {
- var value = this[arguments[i]];
- if (value !== undefined){
- if (result === undefined) result = value;
- else {
- if (!Object.isArray(result)) result = [result];
- result.push(value);
- }
- }
- delete this[arguments[i]];
- }
- return result;
- },
-
- toQueryString: function() {
- return Hash.toQueryString(this);
- },
-
- inspect: function() {
- return '#<Hash:{' + this.map(function(pair) {
- return pair.map(Object.inspect).join(': ');
- }).join(', ') + '}>';
- },
-
- toJSON: function() {
- return Hash.toJSON(this);
- }
-});
-
-function $H(object) {
- if (object instanceof Hash) return object;
- return new Hash(object);
-};
-
-// Safari iterates over shadowed properties
-if (function() {
- var i = 0, Test = function(value) { this.key = value };
- Test.prototype.key = 'foo';
- for (var property in new Test('bar')) i++;
- return i > 1;
-}()) Hash.prototype._each = function(iterator) {
- var cache = [];
- for (var key in this) {
- var value = this[key];
- if ((value && value == Hash.prototype[key]) || cache.include(key)) continue;
- cache.push(key);
- var pair = [key, value];
- pair.key = key;
- pair.value = value;
- iterator(pair);
- }
-};
-ObjectRange = Class.create({
- initialize: function(start, end, exclusive) {
- this.start = start;
- this.end = end;
- this.exclusive = exclusive;
- },
-
- _each: function(iterator) {
- var value = this.start;
- while (this.include(value)) {
- iterator(value);
- value = value.succ();
- }
- }
-});
-
-Object.extend(ObjectRange.prototype, Enumerable);
-
-ObjectRange.prototype.include = function(value) {
- if (value < this.start)
- return false;
- if (this.exclusive)
- return value < this.end;
- return value <= this.end;
-};
-
-var $R = function(start, end, exclusive) {
- return new ObjectRange(start, end, exclusive);
-};
-
-var Ajax = {
- getTransport: function() {
- return Try.these(
- function() {return new XMLHttpRequest()},
- function() {return new ActiveXObject('Msxml2.XMLHTTP')},
- function() {return new ActiveXObject('Microsoft.XMLHTTP')}
- ) || false;
- },
-
- activeRequestCount: 0
-};
-
-Ajax.Responders = {
- responders: [],
-
- _each: function(iterator) {
- this.responders._each(iterator);
- },
-
- register: function(responder) {
- if (!this.include(responder))
- this.responders.push(responder);
- },
-
- unregister: function(responder) {
- this.responders = this.responders.without(responder);
- },
-
- dispatch: function(callback, request, transport, json) {
- this.each(function(responder) {
- if (Object.isFunction(responder[callback])) {
- try {
- responder[callback].apply(responder, [request, transport, json]);
- } catch (e) { }
- }
- });
- }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
- onCreate: function() { Ajax.activeRequestCount++ },
- onComplete: function() { Ajax.activeRequestCount-- }
-});
-
-Ajax.Base = Class.create({
- initialize: function(options) {
- this.options = {
- method: 'post',
- asynchronous: true,
- contentType: 'application/x-www-form-urlencoded',
- encoding: 'UTF-8',
- parameters: '',
- evalJSON: true,
- evalJS: true
- };
- Object.extend(this.options, options || { });
-
- this.options.method = this.options.method.toLowerCase();
- if (Object.isString(this.options.parameters))
- this.options.parameters = this.options.parameters.toQueryParams();
- }
-});
-
-Ajax.Request = Class.create(Ajax.Base, {
- _complete: false,
-
- initialize: function($super, url, options) {
- $super(options);
- this.transport = Ajax.getTransport();
- this.request(url);
- },
-
- request: function(url) {
- this.url = url;
- this.method = this.options.method;
- var params = Object.clone(this.options.parameters);
-
- if (!['get', 'post'].include(this.method)) {
- // simulate other verbs over post
- params['_method'] = this.method;
- this.method = 'post';
- }
-
- this.parameters = params;
-
- if (params = Hash.toQueryString(params)) {
- // when GET, append parameters to URL
- if (this.method == 'get')
- this.url += (this.url.include('?') ? '&' : '?') + params;
- else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
- params += '&_=';
- }
-
- try {
- var response = new Ajax.Response(this);
- if (this.options.onCreate) this.options.onCreate(response);
- Ajax.Responders.dispatch('onCreate', this, response);
-
- this.transport.open(this.method.toUpperCase(), this.url,
- this.options.asynchronous);
-
- if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
-
- this.transport.onreadystatechange = this.onStateChange.bind(this);
- this.setRequestHeaders();
-
- this.body = this.method == 'post' ? (this.options.postBody || params) : null;
- this.transport.send(this.body);
-
- /* Force Firefox to handle ready state 4 for synchronous requests */
- if (!this.options.asynchronous && this.transport.overrideMimeType)
- this.onStateChange();
-
- }
- catch (e) {
- this.dispatchException(e);
- }
- },
-
- onStateChange: function() {
- var readyState = this.transport.readyState;
- if (readyState > 1 && !((readyState == 4) && this._complete))
- this.respondToReadyState(this.transport.readyState);
- },
-
- setRequestHeaders: function() {
- var headers = {
- 'X-Requested-With': 'XMLHttpRequest',
- 'X-Prototype-Version': Prototype.Version,
- 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
- };
-
- if (this.method == 'post') {
- headers['Content-type'] = this.options.contentType +
- (this.options.encoding ? '; charset=' + this.options.encoding : '');
-
- /* Force "Connection: close" for older Mozilla browsers to work
- * around a bug where XMLHttpRequest sends an incorrect
- * Content-length header. See Mozilla Bugzilla #246651.
- */
- if (this.transport.overrideMimeType &&
- (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
- headers['Connection'] = 'close';
- }
-
- // user-defined headers
- if (typeof this.options.requestHeaders == 'object') {
- var extras = this.options.requestHeaders;
-
- if (Object.isFunction(extras.push))
- for (var i = 0, length = extras.length; i < length; i += 2)
- headers[extras[i]] = extras[i+1];
- else
- $H(extras).each(function(pair) { headers[pair.key] = pair.value });
- }
-
- for (var name in headers)
- this.transport.setRequestHeader(name, headers[name]);
- },
-
- success: function() {
- var status = this.getStatus();
- return !status || (status >= 200 && status < 300);
- },
-
- getStatus: function() {
- try {
- return this.transport.status || 0;
- } catch (e) { return 0 }
- },
-
- respondToReadyState: function(readyState) {
- var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
-
- if (state == 'Complete') {
- try {
- this._complete = true;
- (this.options['on' + response.status]
- || this.options['on' + (this.success() ? 'Success' : 'Failure')]
- || Prototype.emptyFunction)(response, response.headerJSON);
- } catch (e) {
- this.dispatchException(e);
- }
-
- var contentType = response.getHeader('Content-type');
- if (this.options.evalJS == 'force'
- || (this.options.evalJS && contentType
- && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
- this.evalResponse();
- }
-
- try {
- (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
- Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
- } catch (e) {
- this.dispatchException(e);
- }
-
- if (state == 'Complete') {
- // avoid memory leak in MSIE: clean up
- this.transport.onreadystatechange = Prototype.emptyFunction;
- }
- },
-
- getHeader: function(name) {
- try {
- return this.transport.getResponseHeader(name);
- } catch (e) { return null }
- },
-
- evalResponse: function() {
- try {
- return eval((this.transport.responseText || '').unfilterJSON());
- } catch (e) {
- this.dispatchException(e);
- }
- },
-
- dispatchException: function(exception) {
- (this.options.onException || Prototype.emptyFunction)(this, exception);
- Ajax.Responders.dispatch('onException', this, exception);
- }
-});
-
-Ajax.Request.Events =
- ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Response = Class.create({
- initialize: function(request){
- this.request = request;
- var transport = this.transport = request.transport,
- readyState = this.readyState = transport.readyState;
-
- if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
- this.status = this.getStatus();
- this.statusText = this.getStatusText();
- this.responseText = String.interpret(transport.responseText);
- this.headerJSON = this.getHeaderJSON();
- }
-
- if(readyState == 4) {
- var xml = transport.responseXML;
- this.responseXML = xml === undefined ? null : xml;
- this.responseJSON = this.getResponseJSON();
- }
- },
-
- status: 0,
- statusText: '',
-
- getStatus: Ajax.Request.prototype.getStatus,
-
- getStatusText: function() {
- try {
- return this.transport.statusText || '';
- } catch (e) { return '' }
- },
-
- getHeader: Ajax.Request.prototype.getHeader,
-
- getAllHeaders: function() {
- try {
- return this.getAllResponseHeaders();
- } catch (e) { return null }
- },
-
- getResponseHeader: function(name) {
- return this.transport.getResponseHeader(name);
- },
-
- getAllResponseHeaders: function() {
- return this.transport.getAllResponseHeaders();
- },
-
- getHeaderJSON: function() {
- var json = this.getHeader('X-JSON');
- try {
- return json ? json.evalJSON(this.request.options.sanitizeJSON) : null;
- } catch (e) {
- this.request.dispatchException(e);
- }
- },
-
- getResponseJSON: function() {
- var options = this.request.options;
- try {
- if (options.evalJSON == 'force' || (options.evalJSON &&
- (this.getHeader('Content-type') || '').include('application/json')))
- return this.transport.responseText.evalJSON(options.sanitizeJSON);
- return null;
- } catch (e) {
- this.request.dispatchException(e);
- }
- }
-});
-
-Ajax.Updater = Class.create(Ajax.Request, {
- initialize: function($super, container, url, options) {
- this.container = {
- success: (container.success || container),
- failure: (container.failure || (container.success ? null : container))
- };
-
- options = options || { };
- var onComplete = options.onComplete;
- options.onComplete = (function(response, param) {
- this.updateContent(response.responseText);
- if (Object.isFunction(onComplete)) onComplete(response, param);
- }).bind(this);
-
- $super(url, options);
- },
-
- updateContent: function(responseText) {
- var receiver = this.container[this.success() ? 'success' : 'failure'],
- options = this.options;
-
- if (!options.evalScripts) responseText = responseText.stripScripts();
-
- if (receiver = $(receiver)) {
- if (options.insertion) {
- if (Object.isString(options.insertion)) {
- var insertion = { }; insertion[options.insertion] = responseText;
- receiver.insert(insertion);
- }
- else options.insertion(receiver, responseText);
- }
- else receiver.update(responseText);
- }
-
- if (this.success()) {
- if (this.onComplete) this.onComplete.bind(this).defer();
- }
- }
-});
-
-Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
- initialize: function($super, container, url, options) {
- $super(options);
- this.onComplete = this.options.onComplete;
-
- this.frequency = (this.options.frequency || 2);
- this.decay = (this.options.decay || 1);
-
- this.updater = { };
- this.container = container;
- this.url = url;
-
- this.start();
- },
-
- start: function() {
- this.options.onComplete = this.updateComplete.bind(this);
- this.onTimerEvent();
- },
-
- stop: function() {
- this.updater.options.onComplete = undefined;
- clearTimeout(this.timer);
- (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
- },
-
- updateComplete: function(response) {
- if (this.options.decay) {
- this.decay = (response.responseText == this.lastText ?
- this.decay * this.options.decay : 1);
-
- this.lastText = response.responseText;
- }
- this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
- },
-
- onTimerEvent: function() {
- this.updater = new Ajax.Updater(this.container, this.url, this.options);
- }
-});
-function $(element) {
- if (arguments.length > 1) {
- for (var i = 0, elements = [], length = arguments.length; i < length; i++)
- elements.push($(arguments[i]));
- return elements;
- }
- if (Object.isString(element))
- element = document.getElementById(element);
- return Element.extend(element);
-}
-
-if (Prototype.BrowserFeatures.XPath) {
- document._getElementsByXPath = function(expression, parentElement) {
- var results = [];
- var query = document.evaluate(expression, $(parentElement) || document,
- null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = 0, length = query.snapshotLength; i < length; i++)
- results.push(Element.extend(query.snapshotItem(i)));
- return results;
- };
-}
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Node) var Node = { };
-
-if (!Node.ELEMENT_NODE) {
- // DOM level 2 ECMAScript Language Binding
- Object.extend(Node, {
- ELEMENT_NODE: 1,
- ATTRIBUTE_NODE: 2,
- TEXT_NODE: 3,
- CDATA_SECTION_NODE: 4,
- ENTITY_REFERENCE_NODE: 5,
- ENTITY_NODE: 6,
- PROCESSING_INSTRUCTION_NODE: 7,
- COMMENT_NODE: 8,
- DOCUMENT_NODE: 9,
- DOCUMENT_TYPE_NODE: 10,
- DOCUMENT_FRAGMENT_NODE: 11,
- NOTATION_NODE: 12
- });
-}
-
-(function() {
- var element = this.Element;
- this.Element = function(tagName, attributes) {
- attributes = attributes || { };
- tagName = tagName.toLowerCase();
- var cache = Element.cache;
- if (Prototype.Browser.IE && attributes.name) {
- tagName = '<' + tagName + ' name="' + attributes.name + '">';
- delete attributes.name;
- return Element.writeAttribute(document.createElement(tagName), attributes);
- }
- if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
- return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
- };
- Object.extend(this.Element, element || { });
-}).call(window);
-
-Element.cache = { };
-
-Element.Methods = {
- visible: function(element) {
- return $(element).style.display != 'none';
- },
-
- toggle: function(element) {
- element = $(element);
- Element[Element.visible(element) ? 'hide' : 'show'](element);
- return element;
- },
-
- hide: function(element) {
- $(element).style.display = 'none';
- return element;
- },
-
- show: function(element) {
- $(element).style.display = '';
- return element;
- },
-
- remove: function(element) {
- element = $(element);
- element.parentNode.removeChild(element);
- return element;
- },
-
- update: function(element, content) {
- element = $(element);
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) return element.update().insert(content);
- content = Object.toHTML(content);
- element.innerHTML = content.stripScripts();
- content.evalScripts.bind(content).defer();
- return element;
- },
-
- replace: function(element, content) {
- element = $(element);
- if (content && content.toElement) content = content.toElement();
- else if (!Object.isElement(content)) {
- content = Object.toHTML(content);
- var range = element.ownerDocument.createRange();
- range.selectNode(element);
- content.evalScripts.bind(content).defer();
- content = range.createContextualFragment(content.stripScripts());
- }
- element.parentNode.replaceChild(content, element);
- return element;
- },
-
- insert: function(element, insertions) {
- element = $(element);
-
- if (Object.isString(insertions) || Object.isNumber(insertions) ||
- Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
- insertions = {bottom:insertions};
-
- var content, t, range;
-
- for (position in insertions) {
- content = insertions[position];
- position = position.toLowerCase();
- t = Element._insertionTranslations[position];
-
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) {
- t.insert(element, content);
- continue;
- }
-
- content = Object.toHTML(content);
-
- range = element.ownerDocument.createRange();
- t.initializeRange(element, range);
- t.insert(element, range.createContextualFragment(content.stripScripts()));
-
- content.evalScripts.bind(content).defer();
- }
-
- return element;
- },
-
- wrap: function(element, wrapper, attributes) {
- element = $(element);
- if (Object.isElement(wrapper))
- $(wrapper).writeAttribute(attributes || { });
- else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
- else wrapper = new Element('div', wrapper);
- if (element.parentNode)
- element.parentNode.replaceChild(wrapper, element);
- wrapper.appendChild(element);
- return wrapper;
- },
-
- inspect: function(element) {
- element = $(element);
- var result = '<' + element.tagName.toLowerCase();
- $H({'id': 'id', 'className': 'class'}).each(function(pair) {
- var property = pair.first(), attribute = pair.last();
- var value = (element[property] || '').toString();
- if (value) result += ' ' + attribute + '=' + value.inspect(true);
- });
- return result + '>';
- },
-
- recursivelyCollect: function(element, property) {
- element = $(element);
- var elements = [];
- while (element = element[property])
- if (element.nodeType == 1)
- elements.push(Element.extend(element));
- return elements;
- },
-
- ancestors: function(element) {
- return $(element).recursivelyCollect('parentNode');
- },
-
- descendants: function(element) {
- return $A($(element).getElementsByTagName('*')).each(Element.extend);
- },
-
- firstDescendant: function(element) {
- element = $(element).firstChild;
- while (element && element.nodeType != 1) element = element.nextSibling;
- return $(element);
- },
-
- immediateDescendants: function(element) {
- if (!(element = $(element).firstChild)) return [];
- while (element && element.nodeType != 1) element = element.nextSibling;
- if (element) return [element].concat($(element).nextSiblings());
- return [];
- },
-
- previousSiblings: function(element) {
- return $(element).recursivelyCollect('previousSibling');
- },
-
- nextSiblings: function(element) {
- return $(element).recursivelyCollect('nextSibling');
- },
-
- siblings: function(element) {
- element = $(element);
- return element.previousSiblings().reverse().concat(element.nextSiblings());
- },
-
- match: function(element, selector) {
- if (Object.isString(selector))
- selector = new Selector(selector);
- return selector.match($(element));
- },
-
- up: function(element, expression, index) {
- element = $(element);
- if (arguments.length == 1) return $(element.parentNode);
- var ancestors = element.ancestors();
- return expression ? Selector.findElement(ancestors, expression, index) :
- ancestors[index || 0];
- },
-
- down: function(element, expression, index) {
- element = $(element);
- if (arguments.length == 1) return element.firstDescendant();
- var descendants = element.descendants();
- return expression ? Selector.findElement(descendants, expression, index) :
- descendants[index || 0];
- },
-
- previous: function(element, expression, index) {
- element = $(element);
- if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
- var previousSiblings = element.previousSiblings();
- return expression ? Selector.findElement(previousSiblings, expression, index) :
- previousSiblings[index || 0];
- },
-
- next: function(element, expression, index) {
- element = $(element);
- if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
- var nextSiblings = element.nextSiblings();
- return expression ? Selector.findElement(nextSiblings, expression, index) :
- nextSiblings[index || 0];
- },
-
- select: function() {
- var args = $A(arguments), element = $(args.shift());
- return Selector.findChildElements(element, args);
- },
-
- adjacent: function() {
- var args = $A(arguments), element = $(args.shift());
- return Selector.findChildElements(element.parentNode, args).without(element);
- },
-
- identify: function(element) {
- element = $(element);
- var id = element.readAttribute('id'), self = arguments.callee;
- if (id) return id;
- do { id = 'anonymous_element_' + self.counter++ } while ($(id));
- element.writeAttribute('id', id);
- return id;
- },
-
- readAttribute: function(element, name) {
- element = $(element);
- if (Prototype.Browser.IE) {
- var t = Element._attributeTranslations.read;
- if (t.values[name]) return t.values[name](element, name);
- if (t.names[name]) name = t.names[name];
- if (name.include(':')) {
- return (!element.attributes || !element.attributes[name]) ? null :
- element.attributes[name].value;
- }
- }
- return element.getAttribute(name);
- },
-
- writeAttribute: function(element, name, value) {
- element = $(element);
- var attributes = { }, t = Element._attributeTranslations.write;
-
- if (typeof name == 'object') attributes = name;
- else attributes[name] = value === undefined ? true : value;
-
- for (var attr in attributes) {
- var name = t.names[attr] || attr, value = attributes[attr];
- if (t.values[attr]) name = t.values[attr](element, value);
- if (value === false || value === null)
- element.removeAttribute(name);
- else if (value === true)
- element.setAttribute(name, name);
- else element.setAttribute(name, value);
- }
- return element;
- },
-
- getHeight: function(element) {
- return $(element).getDimensions().height;
- },
-
- getWidth: function(element) {
- return $(element).getDimensions().width;
- },
-
- classNames: function(element) {
- return new Element.ClassNames(element);
- },
-
- hasClassName: function(element, className) {
- if (!(element = $(element))) return;
- var elementClassName = element.className;
- return (elementClassName.length > 0 && (elementClassName == className ||
- elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))));
- },
-
- addClassName: function(element, className) {
- if (!(element = $(element))) return;
- if (!element.hasClassName(className))
- element.className += (element.className ? ' ' : '') + className;
- return element;
- },
-
- removeClassName: function(element, className) {
- if (!(element = $(element))) return;
- element.className = element.className.replace(
- new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
- return element;
- },
-
- toggleClassName: function(element, className) {
- if (!(element = $(element))) return;
- return element[element.hasClassName(className) ?
- 'removeClassName' : 'addClassName'](className);
- },
-
- // removes whitespace-only text node children
- cleanWhitespace: function(element) {
- element = $(element);
- var node = element.firstChild;
- while (node) {
- var nextNode = node.nextSibling;
- if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
- element.removeChild(node);
- node = nextNode;
- }
- return element;
- },
-
- empty: function(element) {
- return $(element).innerHTML.blank();
- },
-
- descendantOf: function(element, ancestor) {
- element = $(element), ancestor = $(ancestor);
- while (element = element.parentNode)
- if (element == ancestor) return true;
- return false;
- },
-
- scrollTo: function(element) {
- element = $(element);
- var pos = element.cumulativeOffset();
- window.scrollTo(pos[0], pos[1]);
- return element;
- },
-
- getStyle: function(element, style) {
- element = $(element);
- style = style == 'float' ? 'cssFloat' : style.camelize();
- var value = element.style[style];
- if (!value) {
- var css = document.defaultView.getComputedStyle(element, null);
- value = css ? css[style] : null;
- }
- if (style == 'opacity') return value ? parseFloat(value) : 1.0;
- return value == 'auto' ? null : value;
- },
-
- getOpacity: function(element) {
- return $(element).getStyle('opacity');
- },
-
- setStyle: function(element, styles) {
- element = $(element);
- var elementStyle = element.style, match;
- if (Object.isString(styles)) {
- element.style.cssText += ';' + styles;
- return styles.include('opacity') ?
- element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
- }
- for (var property in styles)
- if (property == 'opacity') element.setOpacity(styles[property]);
- else
- elementStyle[(property == 'float' || property == 'cssFloat') ?
- (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
- property] = styles[property];
-
- return element;
- },
-
- setOpacity: function(element, value) {
- element = $(element);
- element.style.opacity = (value == 1 || value === '') ? '' :
- (value < 0.00001) ? 0 : value;
- return element;
- },
-
- getDimensions: function(element) {
- element = $(element);
- var display = $(element).getStyle('display');
- if (display != 'none' && display != null) // Safari bug
- return {width: element.offsetWidth, height: element.offsetHeight};
-
- // All *Width and *Height properties give 0 on elements with display none,
- // so enable the element temporarily
- var els = element.style;
- var originalVisibility = els.visibility;
- var originalPosition = els.position;
- var originalDisplay = els.display;
- els.visibility = 'hidden';
- els.position = 'absolute';
- els.display = 'block';
- var originalWidth = element.clientWidth;
- var originalHeight = element.clientHeight;
- els.display = originalDisplay;
- els.position = originalPosition;
- els.visibility = originalVisibility;
- return {width: originalWidth, height: originalHeight};
- },
-
- makePositioned: function(element) {
- element = $(element);
- var pos = Element.getStyle(element, 'position');
- if (pos == 'static' || !pos) {
- element._madePositioned = true;
- element.style.position = 'relative';
- // Opera returns the offset relative to the positioning context, when an
- // element is position relative but top and left have not been defined
- if (window.opera) {
- element.style.top = 0;
- element.style.left = 0;
- }
- }
- return element;
- },
-
- undoPositioned: function(element) {
- element = $(element);
- if (element._madePositioned) {
- element._madePositioned = undefined;
- element.style.position =
- element.style.top =
- element.style.left =
- element.style.bottom =
- element.style.right = '';
- }
- return element;
- },
-
- makeClipping: function(element) {
- element = $(element);
- if (element._overflow) return element;
- element._overflow = element.style.overflow || 'auto';
- if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
- element.style.overflow = 'hidden';
- return element;
- },
-
- undoClipping: function(element) {
- element = $(element);
- if (!element._overflow) return element;
- element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
- element._overflow = null;
- return element;
- },
-
- cumulativeOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- element = element.offsetParent;
- } while (element);
- return Element._returnOffset(valueL, valueT);
- },
-
- positionedOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- element = element.offsetParent;
- if (element) {
- if (element.tagName == 'BODY') break;
- var p = Element.getStyle(element, 'position');
- if (p == 'relative' || p == 'absolute') break;
- }
- } while (element);
- return Element._returnOffset(valueL, valueT);
- },
-
- absolutize: function(element) {
- element = $(element);
- if (element.getStyle('position') == 'absolute') return;
- // Position.prepare(); // To be done manually by Scripty when it needs it.
-
- var offsets = element.positionedOffset();
- var top = offsets[1];
- var left = offsets[0];
- var width = element.clientWidth;
- var height = element.clientHeight;
-
- element._originalLeft = left - parseFloat(element.style.left || 0);
- element._originalTop = top - parseFloat(element.style.top || 0);
- element._originalWidth = element.style.width;
- element._originalHeight = element.style.height;
-
- element.style.position = 'absolute';
- element.style.top = top + 'px';
- element.style.left = left + 'px';
- element.style.width = width + 'px';
- element.style.height = height + 'px';
- return element;
- },
-
- relativize: function(element) {
- element = $(element);
- if (element.getStyle('position') == 'relative') return;
- // Position.prepare(); // To be done manually by Scripty when it needs it.
-
- element.style.position = 'relative';
- var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
- var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
- element.style.top = top + 'px';
- element.style.left = left + 'px';
- element.style.height = element._originalHeight;
- element.style.width = element._originalWidth;
- return element;
- },
-
- cumulativeScrollOffset: function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.scrollTop || 0;
- valueL += element.scrollLeft || 0;
- element = element.parentNode;
- } while (element);
- return Element._returnOffset(valueL, valueT);
- },
-
- getOffsetParent: function(element) {
- if (element.offsetParent) return $(element.offsetParent);
- if (element == document.body) return $(element);
-
- while ((element = element.parentNode) && element != document.body)
- if (Element.getStyle(element, 'position') != 'static')
- return $(element);
-
- return $(document.body);
- },
-
- viewportOffset: function(forElement) {
- var valueT = 0, valueL = 0;
-
- var element = forElement;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
-
- // Safari fix
- if (element.offsetParent == document.body &&
- Element.getStyle(element, 'position') == 'absolute') break;
-
- } while (element = element.offsetParent);
-
- element = forElement;
- do {
- if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
- valueT -= element.scrollTop || 0;
- valueL -= element.scrollLeft || 0;
- }
- } while (element = element.parentNode);
-
- return Element._returnOffset(valueL, valueT);
- },
-
- clonePosition: function(element, source) {
- var options = Object.extend({
- setLeft: true,
- setTop: true,
- setWidth: true,
- setHeight: true,
- offsetTop: 0,
- offsetLeft: 0
- }, arguments[2] || { });
-
- // find page position of source
- source = $(source);
- var p = source.viewportOffset();
-
- // find coordinate system to use
- element = $(element);
- var delta = [0, 0];
- var parent = null;
- // delta [0,0] will do fine with position: fixed elements,
- // position:absolute needs offsetParent deltas
- if (Element.getStyle(element, 'position') == 'absolute') {
- parent = element.getOffsetParent();
- delta = parent.viewportOffset();
- }
-
- // correct by body offsets (fixes Safari)
- if (parent == document.body) {
- delta[0] -= document.body.offsetLeft;
- delta[1] -= document.body.offsetTop;
- }
-
- // set position
- if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
- if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
- if (options.setWidth) element.style.width = source.offsetWidth + 'px';
- if (options.setHeight) element.style.height = source.offsetHeight + 'px';
- return element;
- }
-};
-
-Element.Methods.identify.counter = 1;
-
-Object.extend(Element.Methods, {
- getElementsBySelector: Element.Methods.select,
- childElements: Element.Methods.immediateDescendants
-});
-
-Element._attributeTranslations = {
- write: {
- names: {
- className: 'class',
- htmlFor: 'for'
- },
- values: { }
- }
-};
-
-
-if (!document.createRange || Prototype.Browser.Opera) {
- Element.Methods.insert = function(element, insertions) {
- element = $(element);
-
- if (Object.isString(insertions) || Object.isNumber(insertions) ||
- Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
- insertions = { bottom: insertions };
-
- var t = Element._insertionTranslations, content, position, pos, tagName;
-
- for (position in insertions) {
- content = insertions[position];
- position = position.toLowerCase();
- pos = t[position];
-
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) {
- pos.insert(element, content);
- continue;
- }
-
- content = Object.toHTML(content);
- tagName = ((position == 'before' || position == 'after')
- ? element.parentNode : element).tagName.toUpperCase();
-
- if (t.tags[tagName]) {
- var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
- if (position == 'top' || position == 'after') fragments.reverse();
- fragments.each(pos.insert.curry(element));
- }
- else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());
-
- content.evalScripts.bind(content).defer();
- }
-
- return element;
- };
-}
-
-if (Prototype.Browser.Opera) {
- Element.Methods._getStyle = Element.Methods.getStyle;
- Element.Methods.getStyle = function(element, style) {
- switch(style) {
- case 'left':
- case 'top':
- case 'right':
- case 'bottom':
- if (Element._getStyle(element, 'position') == 'static') return null;
- default: return Element._getStyle(element, style);
- }
- };
- Element.Methods._readAttribute = Element.Methods.readAttribute;
- Element.Methods.readAttribute = function(element, attribute) {
- if (attribute == 'title') return element.title;
- return Element._readAttribute(element, attribute);
- };
-}
-
-else if (Prototype.Browser.IE) {
- $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
- Element.Methods[method] = Element.Methods[method].wrap(
- function(proceed, element) {
- element = $(element);
- var position = element.getStyle('position');
- if (position != 'static') return proceed(element);
- element.setStyle({ position: 'relative' });
- var value = proceed(element);
- element.setStyle({ position: position });
- return value;
- }
- );
- });
-
- Element.Methods.getStyle = function(element, style) {
- element = $(element);
- style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
- var value = element.style[style];
- if (!value && element.currentStyle) value = element.currentStyle[style];
-
- if (style == 'opacity') {
- if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
- if (value[1]) return parseFloat(value[1]) / 100;
- return 1.0;
- }
-
- if (value == 'auto') {
- if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
- return element['offset' + style.capitalize()] + 'px';
- return null;
- }
- return value;
- };
-
- Element.Methods.setOpacity = function(element, value) {
- function stripAlpha(filter){
- return filter.replace(/alpha\([^\)]*\)/gi,'');
- }
- element = $(element);
- if (!element.currentStyle.hasLayout) element.style.zoom = 1;
- var filter = element.getStyle('filter'), style = element.style;
- if (value == 1 || value === '') {
- (filter = stripAlpha(filter)) ?
- style.filter = filter : style.removeAttribute('filter');
- return element;
- } else if (value < 0.00001) value = 0;
- style.filter = stripAlpha(filter) +
- 'alpha(opacity=' + (value * 100) + ')';
- return element;
- };
-
- Element._attributeTranslations = {
- read: {
- names: {
- 'class': 'className',
- 'for': 'htmlFor'
- },
- values: {
- _getAttr: function(element, attribute) {
- return element.getAttribute(attribute, 2);
- },
- _getAttrNode: function(element, attribute) {
- var node = element.getAttributeNode(attribute);
- return node ? node.value : "";
- },
- _getEv: function(element, attribute) {
- var attribute = element.getAttribute(attribute);
- return attribute ? attribute.toString().slice(23, -2) : null;
- },
- _flag: function(element, attribute) {
- return $(element).hasAttribute(attribute) ? attribute : null;
- },
- style: function(element) {
- return element.style.cssText.toLowerCase();
- },
- title: function(element) {
- return element.title;
- }
- }
- }
- };
-
- Element._attributeTranslations.write = {
- names: Object.clone(Element._attributeTranslations.read.names),
- values: {
- checked: function(element, value) {
- element.checked = !!value;
- },
-
- style: function(element, value) {
- element.style.cssText = value ? value : '';
- }
- }
- };
-
- Element._attributeTranslations.has = {};
-
- $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
- 'encType maxLength readOnly longDesc').each(function(attr) {
- Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
- Element._attributeTranslations.has[attr.toLowerCase()] = attr;
- });
-
- (function(v) {
- Object.extend(v, {
- href: v._getAttr,
- src: v._getAttr,
- type: v._getAttr,
- action: v._getAttrNode,
- disabled: v._flag,
- checked: v._flag,
- readonly: v._flag,
- multiple: v._flag,
- onload: v._getEv,
- onunload: v._getEv,
- onclick: v._getEv,
- ondblclick: v._getEv,
- onmousedown: v._getEv,
- onmouseup: v._getEv,
- onmouseover: v._getEv,
- onmousemove: v._getEv,
- onmouseout: v._getEv,
- onfocus: v._getEv,
- onblur: v._getEv,
- onkeypress: v._getEv,
- onkeydown: v._getEv,
- onkeyup: v._getEv,
- onsubmit: v._getEv,
- onreset: v._getEv,
- onselect: v._getEv,
- onchange: v._getEv
- });
- })(Element._attributeTranslations.read.values);
-}
-
-else if (Prototype.Browser.Gecko) {
- Element.Methods.setOpacity = function(element, value) {
- element = $(element);
- element.style.opacity = (value == 1) ? 0.999999 :
- (value === '') ? '' : (value < 0.00001) ? 0 : value;
- return element;
- };
-}
-
-else if (Prototype.Browser.WebKit) {
- Element.Methods.setOpacity = function(element, value) {
- element = $(element);
- element.style.opacity = (value == 1 || value === '') ? '' :
- (value < 0.00001) ? 0 : value;
-
- if (value == 1)
- if(element.tagName == 'IMG' && element.width) {
- element.width++; element.width--;
- } else try {
- var n = document.createTextNode(' ');
- element.appendChild(n);
- element.removeChild(n);
- } catch (e) { }
-
- return element;
- };
-
- // Safari returns margins on body which is incorrect if the child is absolutely
- // positioned. For performance reasons, redefine Position.cumulativeOffset for
- // KHTML/WebKit only.
- Element.Methods.cumulativeOffset = function(element) {
- var valueT = 0, valueL = 0;
- do {
- valueT += element.offsetTop || 0;
- valueL += element.offsetLeft || 0;
- if (element.offsetParent == document.body)
- if (Element.getStyle(element, 'position') == 'absolute') break;
-
- element = element.offsetParent;
- } while (element);
-
- return Element._returnOffset(valueL, valueT);
- };
-}
-
-if (Prototype.Browser.IE || Prototype.Browser.Opera) {
- // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
- Element.Methods.update = function(element, content) {
- element = $(element);
-
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) return element.update().insert(content);
-
- content = Object.toHTML(content);
- var tagName = element.tagName.toUpperCase();
-
- if (tagName in Element._insertionTranslations.tags) {
- $A(element.childNodes).each(function(node) { element.removeChild(node) });
- Element._getContentFromAnonymousElement(tagName, content.stripScripts())
- .each(function(node) { element.appendChild(node) });
- }
- else element.innerHTML = content.stripScripts();
-
- content.evalScripts.bind(content).defer();
- return element;
- };
-}
-
-if (document.createElement('div').outerHTML) {
- Element.Methods.replace = function(element, content) {
- element = $(element);
-
- if (content && content.toElement) content = content.toElement();
- if (Object.isElement(content)) {
- element.parentNode.replaceChild(content, element);
- return element;
- }
-
- content = Object.toHTML(content);
- var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
-
- if (Element._insertionTranslations.tags[tagName]) {
- var nextSibling = element.next();
- var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
- parent.removeChild(element);
- if (nextSibling)
- fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
- else
- fragments.each(function(node) { parent.appendChild(node) });
- }
- else element.outerHTML = content.stripScripts();
-
- content.evalScripts.bind(content).defer();
- return element;
- };
-}
-
-Element._returnOffset = function(l, t) {
- var result = [l, t];
- result.left = l;
- result.top = t;
- return result;
-};
-
-Element._getContentFromAnonymousElement = function(tagName, html) {
- var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
- div.innerHTML = t[0] + html + t[1];
- t[2].times(function() { div = div.firstChild });
- return $A(div.childNodes);
-};
-
-Element._insertionTranslations = {
- before: {
- adjacency: 'beforeBegin',
- insert: function(element, node) {
- element.parentNode.insertBefore(node, element);
- },
- initializeRange: function(element, range) {
- range.setStartBefore(element);
- }
- },
- top: {
- adjacency: 'afterBegin',
- insert: function(element, node) {
- element.insertBefore(node, element.firstChild);
- },
- initializeRange: function(element, range) {
- range.selectNodeContents(element);
- range.collapse(true);
- }
- },
- bottom: {
- adjacency: 'beforeEnd',
- insert: function(element, node) {
- element.appendChild(node);
- }
- },
- after: {
- adjacency: 'afterEnd',
- insert: function(element, node) {
- element.parentNode.insertBefore(node, element.nextSibling);
- },
- initializeRange: function(element, range) {
- range.setStartAfter(element);
- }
- },
- tags: {
- TABLE: ['<table>', '</table>', 1],
- TBODY: ['<table><tbody>', '</tbody></table>', 2],
- TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
- TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
- SELECT: ['<select>', '</select>', 1]
- }
-};
-
-(function() {
- this.bottom.initializeRange = this.top.initializeRange;
- Object.extend(this.tags, {
- THEAD: this.tags.TBODY,
- TFOOT: this.tags.TBODY,
- TH: this.tags.TD
- });
-}).call(Element._insertionTranslations);
-
-Element.Methods.Simulated = {
- hasAttribute: function(element, attribute) {
- attribute = Element._attributeTranslations.has[attribute] || attribute;
- var node = $(element).getAttributeNode(attribute);
- return node && node.specified;
- }
-};
-
-Element.Methods.ByTag = { };
-
-Object.extend(Element, Element.Methods);
-
-if (!Prototype.BrowserFeatures.ElementExtensions &&
- document.createElement('div').__proto__) {
- window.HTMLElement = { };
- window.HTMLElement.prototype = document.createElement('div').__proto__;
- Prototype.BrowserFeatures.ElementExtensions = true;
-}
-
-Element.extend = (function() {
- if (Prototype.BrowserFeatures.SpecificElementExtensions)
- return Prototype.K;
-
- var Methods = { }, ByTag = Element.Methods.ByTag;
-
- var extend = Object.extend(function(element) {
- if (!element || element._extendedByPrototype ||
- element.nodeType != 1 || element == window) return element;
-
- var methods = Object.clone(Methods),
- tagName = element.tagName, property, value;
-
- // extend methods for specific tags
- if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
-
- for (property in methods) {
- value = methods[property];
- if (Object.isFunction(value) && !(property in element))
- element[property] = value.methodize();
- }
-
- element._extendedByPrototype = Prototype.emptyFunction;
- return element;
-
- }, {
- refresh: function() {
- // extend methods for all tags (Safari doesn't need this)
- if (!Prototype.BrowserFeatures.ElementExtensions) {
- Object.extend(Methods, Element.Methods);
- Object.extend(Methods, Element.Methods.Simulated);
- }
- }
- });
-
- extend.refresh();
- return extend;
-})();
-
-Element.hasAttribute = function(element, attribute) {
- if (element.hasAttribute) return element.hasAttribute(attribute);
- return Element.Methods.Simulated.hasAttribute(element, attribute);
-};
-
-Element.addMethods = function(methods) {
- var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
-
- if (!methods) {
- Object.extend(Form, Form.Methods);
- Object.extend(Form.Element, Form.Element.Methods);
- Object.extend(Element.Methods.ByTag, {
- "FORM": Object.clone(Form.Methods),
- "INPUT": Object.clone(Form.Element.Methods),
- "SELECT": Object.clone(Form.Element.Methods),
- "TEXTAREA": Object.clone(Form.Element.Methods)
- });
- }
-
- if (arguments.length == 2) {
- var tagName = methods;
- methods = arguments[1];
- }
-
- if (!tagName) Object.extend(Element.Methods, methods || { });
- else {
- if (Object.isArray(tagName)) tagName.each(extend);
- else extend(tagName);
- }
-
- function extend(tagName) {
- tagName = tagName.toUpperCase();
- if (!Element.Methods.ByTag[tagName])
- Element.Methods.ByTag[tagName] = { };
- Object.extend(Element.Methods.ByTag[tagName], methods);
- }
-
- function copy(methods, destination, onlyIfAbsent) {
- onlyIfAbsent = onlyIfAbsent || false;
- for (var property in methods) {
- var value = methods[property];
- if (!Object.isFunction(value)) continue;
- if (!onlyIfAbsent || !(property in destination))
- destination[property] = value.methodize();
- }
- }
-
- function findDOMClass(tagName) {
- var klass;
- var trans = {
- "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
- "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
- "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
- "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
- "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
- "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
- "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
- "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
- "FrameSet", "IFRAME": "IFrame"
- };
- if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
- if (window[klass]) return window[klass];
- klass = 'HTML' + tagName + 'Element';
- if (window[klass]) return window[klass];
- klass = 'HTML' + tagName.capitalize() + 'Element';
- if (window[klass]) return window[klass];
-
- window[klass] = { };
- window[klass].prototype = document.createElement(tagName).__proto__;
- return window[klass];
- }
-
- if (F.ElementExtensions) {
- copy(Element.Methods, HTMLElement.prototype);
- copy(Element.Methods.Simulated, HTMLElement.prototype, true);
- }
-
- if (F.SpecificElementExtensions) {
- for (var tag in Element.Methods.ByTag) {
- var klass = findDOMClass(tag);
- if (Object.isUndefined(klass)) continue;
- copy(T[tag], klass.prototype);
- }
- }
-
- Object.extend(Element, Element.Methods);
- delete Element.ByTag;
-
- if (Element.extend.refresh) Element.extend.refresh();
- Element.cache = { };
-};
-
-document.viewport = {
- getDimensions: function() {
- var dimensions = { };
- $w('width height').each(function(d) {
- var D = d.capitalize();
- dimensions[d] = self['inner' + D] ||
- (document.documentElement['client' + D] || document.body['client' + D]);
- });
- return dimensions;
- },
-
- getWidth: function() {
- return this.getDimensions().width;
- },
-
- getHeight: function() {
- return this.getDimensions().height;
- },
-
- getScrollOffsets: function() {
- return Element._returnOffset(
- window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
- window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
- }
-};
-/* Portions of the Selector class are derived from Jack Slocum’s DomQuery,
- * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
- * license. Please see http://www.yui-ext.com/ for more information. */
-
-var Selector = Class.create({
- initialize: function(expression) {
- this.expression = expression.strip();
- this.compileMatcher();
- },
-
- compileMatcher: function() {
- // Selectors with namespaced attributes can't use the XPath version
- if (Prototype.BrowserFeatures.XPath && !(/\[[\w-]*?:/).test(this.expression))
- return this.compileXPathMatcher();
-
- var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
- c = Selector.criteria, le, p, m;
-
- if (Selector._cache[e]) {
- this.matcher = Selector._cache[e];
- return;
- }
-
- this.matcher = ["this.matcher = function(root) {",
- "var r = root, h = Selector.handlers, c = false, n;"];
-
- while (e && le != e && (/\S/).test(e)) {
- le = e;
- for (var i in ps) {
- p = ps[i];
- if (m = e.match(p)) {
- this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
- new Template(c[i]).evaluate(m));
- e = e.replace(m[0], '');
- break;
- }
- }
- }
-
- this.matcher.push("return h.unique(n);\n}");
- eval(this.matcher.join('\n'));
- Selector._cache[this.expression] = this.matcher;
- },
-
- compileXPathMatcher: function() {
- var e = this.expression, ps = Selector.patterns,
- x = Selector.xpath, le, m;
-
- if (Selector._cache[e]) {
- this.xpath = Selector._cache[e]; return;
- }
-
- this.matcher = ['.//*'];
- while (e && le != e && (/\S/).test(e)) {
- le = e;
- for (var i in ps) {
- if (m = e.match(ps[i])) {
- this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
- new Template(x[i]).evaluate(m));
- e = e.replace(m[0], '');
- break;
- }
- }
- }
-
- this.xpath = this.matcher.join('');
- Selector._cache[this.expression] = this.xpath;
- },
-
- findElements: function(root) {
- root = root || document;
- if (this.xpath) return document._getElementsByXPath(this.xpath, root);
- return this.matcher(root);
- },
-
- match: function(element) {
- this.tokens = [];
-
- var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
- var le, p, m;
-
- while (e && le !== e && (/\S/).test(e)) {
- le = e;
- for (var i in ps) {
- p = ps[i];
- if (m = e.match(p)) {
- // use the Selector.assertions methods unless the selector
- // is too complex.
- if (as[i]) {
- this.tokens.push([i, Object.clone(m)]);
- e = e.replace(m[0], '');
- } else {
- // reluctantly do a document-wide search
- // and look for a match in the array
- return this.findElements(document).include(element);
- }
- }
- }
- }
-
- var match = true, name, matches;
- for (var i = 0, token; token = this.tokens[i]; i++) {
- name = token[0], matches = token[1];
- if (!Selector.assertions[name](element, matches)) {
- match = false; break;
- }
- }
-
- return match;
- },
-
- toString: function() {
- return this.expression;
- },
-
- inspect: function() {
- return "#<Selector:" + this.expression.inspect() + ">";
- }
-});
-
-Object.extend(Selector, {
- _cache: { },
-
- xpath: {
- descendant: "//*",
- child: "/*",
- adjacent: "/following-sibling::*[1]",
- laterSibling: '/following-sibling::*',
- tagName: function(m) {
- if (m[1] == '*') return '';
- return "[local-name()='" + m[1].toLowerCase() +
- "' or local-name()='" + m[1].toUpperCase() + "']";
- },
- className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
- id: "[@id='#{1}']",
- attrPresence: "[@#{1}]",
- attr: function(m) {
- m[3] = m[5] || m[6];
- return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
- },
- pseudo: function(m) {
- var h = Selector.xpath.pseudos[m[1]];
- if (!h) return '';
- if (Object.isFunction(h)) return h(m);
- return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
- },
- operators: {
- '=': "[@#{1}='#{3}']",
- '!=': "[@#{1}!='#{3}']",
- '^=': "[starts-with(@#{1}, '#{3}')]",
- '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
- '*=': "[contains(@#{1}, '#{3}')]",
- '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
- '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
- },
- pseudos: {
- 'first-child': '[not(preceding-sibling::*)]',
- 'last-child': '[not(following-sibling::*)]',
- 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
- 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
- 'checked': "[@checked]",
- 'disabled': "[@disabled]",
- 'enabled': "[not(@disabled)]",
- 'not': function(m) {
- var e = m[6], p = Selector.patterns,
- x = Selector.xpath, le, m, v;
-
- var exclusion = [];
- while (e && le != e && (/\S/).test(e)) {
- le = e;
- for (var i in p) {
- if (m = e.match(p[i])) {
- v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
- exclusion.push("(" + v.substring(1, v.length - 1) + ")");
- e = e.replace(m[0], '');
- break;
- }
- }
- }
- return "[not(" + exclusion.join(" and ") + ")]";
- },
- 'nth-child': function(m) {
- return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
- },
- 'nth-last-child': function(m) {
- return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
- },
- 'nth-of-type': function(m) {
- return Selector.xpath.pseudos.nth("position() ", m);
- },
- 'nth-last-of-type': function(m) {
- return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
- },
- 'first-of-type': function(m) {
- m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
- },
- 'last-of-type': function(m) {
- m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
- },
- 'only-of-type': function(m) {
- var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
- },
- nth: function(fragment, m) {
- var mm, formula = m[6], predicate;
- if (formula == 'even') formula = '2n+0';
- if (formula == 'odd') formula = '2n+1';
- if (mm = formula.match(/^(\d+)$/)) // digit only
- return '[' + fragment + "= " + mm[1] + ']';
- if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
- if (mm[1] == "-") mm[1] = -1;
- var a = mm[1] ? Number(mm[1]) : 1;
- var b = mm[2] ? Number(mm[2]) : 0;
- predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
- "((#{fragment} - #{b}) div #{a} >= 0)]";
- return new Template(predicate).evaluate({
- fragment: fragment, a: a, b: b });
- }
- }
- }
- },
-
- criteria: {
- tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
- className: 'n = h.className(n, r, "#{1}", c); c = false;',
- id: 'n = h.id(n, r, "#{1}", c); c = false;',
- attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
- attr: function(m) {
- m[3] = (m[5] || m[6]);
- return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
- },
- pseudo: function(m) {
- if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
- return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
- },
- descendant: 'c = "descendant";',
- child: 'c = "child";',
- adjacent: 'c = "adjacent";',
- laterSibling: 'c = "laterSibling";'
- },
-
- patterns: {
- // combinators must be listed first
- // (and descendant needs to be last combinator)
- laterSibling: /^\s*~\s*/,
- child: /^\s*>\s*/,
- adjacent: /^\s*\+\s*/,
- descendant: /^\s/,
-
- // selectors follow
- tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
- id: /^#([\w\-\*]+)(\b|$)/,
- className: /^\.([\w\-\*]+)(\b|$)/,
- pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|\s|(?=:))/,
- attrPresence: /^\[([\w]+)\]/,
- attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
- },
-
- // for Selector.match and Element#match
- assertions: {
- tagName: function(element, matches) {
- return matches[1].toUpperCase() == element.tagName.toUpperCase();
- },
-
- className: function(element, matches) {
- return Element.hasClassName(element, matches[1]);
- },
-
- id: function(element, matches) {
- return element.id === matches[1];
- },
-
- attrPresence: function(element, matches) {
- return Element.hasAttribute(element, matches[1]);
- },
-
- attr: function(element, matches) {
- var nodeValue = Element.readAttribute(element, matches[1]);
- return Selector.operators[matches[2]](nodeValue, matches[3]);
- }
- },
-
- handlers: {
- // UTILITY FUNCTIONS
- // joins two collections
- concat: function(a, b) {
- for (var i = 0, node; node = b[i]; i++)
- a.push(node);
- return a;
- },
-
- // marks an array of nodes for counting
- mark: function(nodes) {
- for (var i = 0, node; node = nodes[i]; i++)
- node._counted = true;
- return nodes;
- },
-
- unmark: function(nodes) {
- for (var i = 0, node; node = nodes[i]; i++)
- node._counted = undefined;
- return nodes;
- },
-
- // mark each child node with its position (for nth calls)
- // "ofType" flag indicates whether we're indexing for nth-of-type
- // rather than nth-child
- index: function(parentNode, reverse, ofType) {
- parentNode._counted = true;
- if (reverse) {
- for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
- var node = nodes[i];
- if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
- }
- } else {
- for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
- if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
- }
- },
-
- // filters out duplicates and extends all nodes
- unique: function(nodes) {
- if (nodes.length == 0) return nodes;
- var results = [], n;
- for (var i = 0, l = nodes.length; i < l; i++)
- if (!(n = nodes[i])._counted) {
- n._counted = true;
- results.push(Element.extend(n));
- }
- return Selector.handlers.unmark(results);
- },
-
- // COMBINATOR FUNCTIONS
- descendant: function(nodes) {
- var h = Selector.handlers;
- for (var i = 0, results = [], node; node = nodes[i]; i++)
- h.concat(results, node.getElementsByTagName('*'));
- return results;
- },
-
- child: function(nodes) {
- var h = Selector.handlers;
- for (var i = 0, results = [], node; node = nodes[i]; i++) {
- for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
- if (child.nodeType == 1 && child.tagName != '!') results.push(child);
- }
- return results;
- },
-
- adjacent: function(nodes) {
- for (var i = 0, results = [], node; node = nodes[i]; i++) {
- var next = this.nextElementSibling(node);
- if (next) results.push(next);
- }
- return results;
- },
-
- laterSibling: function(nodes) {
- var h = Selector.handlers;
- for (var i = 0, results = [], node; node = nodes[i]; i++)
- h.concat(results, Element.nextSiblings(node));
- return results;
- },
-
- nextElementSibling: function(node) {
- while (node = node.nextSibling)
- if (node.nodeType == 1) return node;
- return null;
- },
-
- previousElementSibling: function(node) {
- while (node = node.previousSibling)
- if (node.nodeType == 1) return node;
- return null;
- },
-
- // TOKEN FUNCTIONS
- tagName: function(nodes, root, tagName, combinator) {
- tagName = tagName.toUpperCase();
- var results = [], h = Selector.handlers;
- if (nodes) {
- if (combinator) {
- // fastlane for ordinary descendant combinators
- if (combinator == "descendant") {
- for (var i = 0, node; node = nodes[i]; i++)
- h.concat(results, node.getElementsByTagName(tagName));
- return results;
- } else nodes = this[combinator](nodes);
- if (tagName == "*") return nodes;
- }
- for (var i = 0, node; node = nodes[i]; i++)
- if (node.tagName.toUpperCase() == tagName) results.push(node);
- return results;
- } else return root.getElementsByTagName(tagName);
- },
-
- id: function(nodes, root, id, combinator) {
- var targetNode = $(id), h = Selector.handlers;
- if (!targetNode) return [];
- if (!nodes && root == document) return [targetNode];
- if (nodes) {
- if (combinator) {
- if (combinator == 'child') {
- for (var i = 0, node; node = nodes[i]; i++)
- if (targetNode.parentNode == node) return [targetNode];
- } else if (combinator == 'descendant') {
- for (var i = 0, node; node = nodes[i]; i++)
- if (Element.descendantOf(targetNode, node)) return [targetNode];
- } else if (combinator == 'adjacent') {
- for (var i = 0, node; node = nodes[i]; i++)
- if (Selector.handlers.previousElementSibling(targetNode) == node)
- return [targetNode];
- } else nodes = h[combinator](nodes);
- }
- for (var i = 0, node; node = nodes[i]; i++)
- if (node == targetNode) return [targetNode];
- return [];
- }
- return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
- },
-
- className: function(nodes, root, className, combinator) {
- if (nodes && combinator) nodes = this[combinator](nodes);
- return Selector.handlers.byClassName(nodes, root, className);
- },
-
- byClassName: function(nodes, root, className) {
- if (!nodes) nodes = Selector.handlers.descendant([root]);
- var needle = ' ' + className + ' ';
- for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
- nodeClassName = node.className;
- if (nodeClassName.length == 0) continue;
- if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
- results.push(node);
- }
- return results;
- },
-
- attrPresence: function(nodes, root, attr) {
- var results = [];
- for (var i = 0, node; node = nodes[i]; i++)
- if (Element.hasAttribute(node, attr)) results.push(node);
- return results;
- },
-
- attr: function(nodes, root, attr, value, operator) {
- if (!nodes) nodes = root.getElementsByTagName("*");
- var handler = Selector.operators[operator], results = [];
- for (var i = 0, node; node = nodes[i]; i++) {
- var nodeValue = Element.readAttribute(node, attr);
- if (nodeValue === null) continue;
- if (handler(nodeValue, value)) results.push(node);
- }
- return results;
- },
-
- pseudo: function(nodes, name, value, root, combinator) {
- if (nodes && combinator) nodes = this[combinator](nodes);
- if (!nodes) nodes = root.getElementsByTagName("*");
- return Selector.pseudos[name](nodes, value, root);
- }
- },
-
- pseudos: {
- 'first-child': function(nodes, value, root) {
- for (var i = 0, results = [], node; node = nodes[i]; i++) {
- if (Selector.handlers.previousElementSibling(node)) continue;
- results.push(node);
- }
- return results;
- },
- 'last-child': function(nodes, value, root) {
- for (var i = 0, results = [], node; node = nodes[i]; i++) {
- if (Selector.handlers.nextElementSibling(node)) continue;
- results.push(node);
- }
- return results;
- },
- 'only-child': function(nodes, value, root) {
- var h = Selector.handlers;
- for (var i = 0, results = [], node; node = nodes[i]; i++)
- if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
- results.push(node);
- return results;
- },
- 'nth-child': function(nodes, formula, root) {
- return Selector.pseudos.nth(nodes, formula, root);
- },
- 'nth-last-child': function(nodes, formula, root) {
- return Selector.pseudos.nth(nodes, formula, root, true);
- },
- 'nth-of-type': function(nodes, formula, root) {
- return Selector.pseudos.nth(nodes, formula, root, false, true);
- },
- 'nth-last-of-type': function(nodes, formula, root) {
- return Selector.pseudos.nth(nodes, formula, root, true, true);
- },
- 'first-of-type': function(nodes, formula, root) {
- return Selector.pseudos.nth(nodes, "1", root, false, true);
- },
- 'last-of-type': function(nodes, formula, root) {
- return Selector.pseudos.nth(nodes, "1", root, true, true);
- },
- 'only-of-type': function(nodes, formula, root) {
- var p = Selector.pseudos;
- return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
- },
-
- // handles the an+b logic
- getIndices: function(a, b, total) {
- if (a == 0) return b > 0 ? [b] : [];
- return $R(1, total).inject([], function(memo, i) {
- if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
- return memo;
- });
- },
-
- // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
- nth: function(nodes, formula, root, reverse, ofType) {
- if (nodes.length == 0) return [];
- if (formula == 'even') formula = '2n+0';
- if (formula == 'odd') formula = '2n+1';
- var h = Selector.handlers, results = [], indexed = [], m;
- h.mark(nodes);
- for (var i = 0, node; node = nodes[i]; i++) {
- if (!node.parentNode._counted) {
- h.index(node.parentNode, reverse, ofType);
- indexed.push(node.parentNode);
- }
- }
- if (formula.match(/^\d+$/)) { // just a number
- formula = Number(formula);
- for (var i = 0, node; node = nodes[i]; i++)
- if (node.nodeIndex == formula) results.push(node);
- } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
- if (m[1] == "-") m[1] = -1;
- var a = m[1] ? Number(m[1]) : 1;
- var b = m[2] ? Number(m[2]) : 0;
- var indices = Selector.pseudos.getIndices(a, b, nodes.length);
- for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
- for (var j = 0; j < l; j++)
- if (node.nodeIndex == indices[j]) results.push(node);
- }
- }
- h.unmark(nodes);
- h.unmark(indexed);
- return results;
- },
-
- 'empty': function(nodes, value, root) {
- for (var i = 0, results = [], node; node = nodes[i]; i++) {
- // IE treats comments as element nodes
- if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
- results.push(node);
- }
- return results;
- },
-
- 'not': function(nodes, selector, root) {
- var h = Selector.handlers, selectorType, m;
- var exclusions = new Selector(selector).findElements(root);
- h.mark(exclusions);
- for (var i = 0, results = [], node; node = nodes[i]; i++)
- if (!node._counted) results.push(node);
- h.unmark(exclusions);
- return results;
- },
-
- 'enabled': function(nodes, value, root) {
- for (var i = 0, results = [], node; node = nodes[i]; i++)
- if (!node.disabled) results.push(node);
- return results;
- },
-
- 'disabled': function(nodes, value, root) {
- for (var i = 0, results = [], node; node = nodes[i]; i++)
- if (node.disabled) results.push(node);
- return results;
- },
-
- 'checked': function(nodes, value, root) {
- for (var i = 0, results = [], node; node = nodes[i]; i++)
- if (node.checked) results.push(node);
- return results;
- }
- },
-
- operators: {
- '=': function(nv, v) { return nv == v; },
- '!=': function(nv, v) { return nv != v; },
- '^=': function(nv, v) { return nv.startsWith(v); },
- '$=': function(nv, v) { return nv.endsWith(v); },
- '*=': function(nv, v) { return nv.include(v); },
- '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
- '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
- },
-
- matchElements: function(elements, expression) {
- var matches = new Selector(expression).findElements(), h = Selector.handlers;
- h.mark(matches);
- for (var i = 0, results = [], element; element = elements[i]; i++)
- if (element._counted) results.push(element);
- h.unmark(matches);
- return results;
- },
-
- findElement: function(elements, expression, index) {
- if (Object.isNumber(expression)) {
- index = expression; expression = false;
- }
- return Selector.matchElements(elements, expression || '*')[index || 0];
- },
-
- findChildElements: function(element, expressions) {
- var exprs = expressions.join(','), expressions = [];
- exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
- expressions.push(m[1].strip());
- });
- var results = [], h = Selector.handlers;
- for (var i = 0, l = expressions.length, selector; i < l; i++) {
- selector = new Selector(expressions[i].strip());
- h.concat(results, selector.findElements(element));
- }
- return (l > 1) ? h.unique(results) : results;
- }
-});
-
-function $$() {
- return Selector.findChildElements(document, $A(arguments));
-}
-var Form = {
- reset: function(form) {
- $(form).reset();
- return form;
- },
-
- serializeElements: function(elements, options) {
- if (typeof options != 'object') options = { hash: !!options };
- else if (options.hash === undefined) options.hash = true;
- var key, value, submitted = false, submit = options.submit;
-
- var data = elements.inject({ }, function(result, element) {
- if (!element.disabled && element.name) {
- key = element.name; value = $(element).getValue();
- if (value != null && (element.type != 'submit' || (!submitted &&
- submit !== false && (!submit || key == submit) && (submitted = true)))) {
- if (key in result) {
- // a key is already present; construct an array of values
- if (!Object.isArray(result[key])) result[key] = [result[key]];
- result[key].push(value);
- }
- else result[key] = value;
- }
- }
- return result;
- });
-
- return options.hash ? data : Hash.toQueryString(data);
- }
-};
-
-Form.Methods = {
- serialize: function(form, options) {
- return Form.serializeElements(Form.getElements(form), options);
- },
-
- getElements: function(form) {
- return $A($(form).getElementsByTagName('*')).inject([],
- function(elements, child) {
- if (Form.Element.Serializers[child.tagName.toLowerCase()])
- elements.push(Element.extend(child));
- return elements;
- }
- );
- },
-
- getInputs: function(form, typeName, name) {
- form = $(form);
- var inputs = form.getElementsByTagName('input');
-
- if (!typeName && !name) return $A(inputs).map(Element.extend);
-
- for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
- var input = inputs[i];
- if ((typeName && input.type != typeName) || (name && input.name != name))
- continue;
- matchingInputs.push(Element.extend(input));
- }
-
- return matchingInputs;
- },
-
- disable: function(form) {
- form = $(form);
- Form.getElements(form).invoke('disable');
- return form;
- },
-
- enable: function(form) {
- form = $(form);
- Form.getElements(form).invoke('enable');
- return form;
- },
-
- findFirstElement: function(form) {
- var elements = $(form).getElements().findAll(function(element) {
- return 'hidden' != element.type && !element.disabled;
- });
- var firstByIndex = elements.findAll(function(element) {
- return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
- }).sortBy(function(element) { return element.tabIndex }).first();
-
- return firstByIndex ? firstByIndex : elements.find(function(element) {
- return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
- });
- },
-
- focusFirstElement: function(form) {
- form = $(form);
- form.findFirstElement().activate();
- return form;
- },
-
- request: function(form, options) {
- form = $(form), options = Object.clone(options || { });
-
- var params = options.parameters, action = form.readAttribute('action') || '';
- if (action.blank()) action = window.location.href;
- options.parameters = form.serialize(true);
-
- if (params) {
- if (Object.isString(params)) params = params.toQueryParams();
- Object.extend(options.parameters, params);
- }
-
- if (form.hasAttribute('method') && !options.method)
- options.method = form.method;
-
- return new Ajax.Request(action, options);
- }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element = {
- focus: function(element) {
- $(element).focus();
- return element;
- },
-
- select: function(element) {
- $(element).select();
- return element;
- }
-};
-
-Form.Element.Methods = {
- serialize: function(element) {
- element = $(element);
- if (!element.disabled && element.name) {
- var value = element.getValue();
- if (value != undefined) {
- var pair = { };
- pair[element.name] = value;
- return Hash.toQueryString(pair);
- }
- }
- return '';
- },
-
- getValue: function(element) {
- element = $(element);
- var method = element.tagName.toLowerCase();
- return Form.Element.Serializers[method](element);
- },
-
- setValue: function(element, value) {
- element = $(element);
- var method = element.tagName.toLowerCase();
- Form.Element.Serializers[method](element, value);
- return element;
- },
-
- clear: function(element) {
- $(element).value = '';
- return element;
- },
-
- present: function(element) {
- return $(element).value != '';
- },
-
- activate: function(element) {
- element = $(element);
- try {
- element.focus();
- if (element.select && (element.tagName.toLowerCase() != 'input' ||
- !['button', 'reset', 'submit'].include(element.type)))
- element.select();
- } catch (e) { }
- return element;
- },
-
- disable: function(element) {
- element = $(element);
- element.blur();
- element.disabled = true;
- return element;
- },
-
- enable: function(element) {
- element = $(element);
- element.disabled = false;
- return element;
- }
-};
-
-/*--------------------------------------------------------------------------*/
-
-var Field = Form.Element;
-var $F = Form.Element.Methods.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = {
- input: function(element, value) {
- switch (element.type.toLowerCase()) {
- case 'checkbox':
- case 'radio':
- return Form.Element.Serializers.inputSelector(element, value);
- default:
- return Form.Element.Serializers.textarea(element, value);
- }
- },
-
- inputSelector: function(element, value) {
- if (value === undefined) return element.checked ? element.value : null;
- else element.checked = !!value;
- },
-
- textarea: function(element, value) {
- if (value === undefined) return element.value;
- else element.value = value;
- },
-
- select: function(element, index) {
- if (index === undefined)
- return this[element.type == 'select-one' ?
- 'selectOne' : 'selectMany'](element);
- else {
- var opt, value, single = !Object.isArray(index);
- for (var i = 0, length = element.length; i < length; i++) {
- opt = element.options[i];
- value = this.optionValue(opt);
- if (single) {
- if (value == index) {
- opt.selected = true;
- return;
- }
- }
- else opt.selected = index.include(value);
- }
- }
- },
-
- selectOne: function(element) {
- var index = element.selectedIndex;
- return index >= 0 ? this.optionValue(element.options[index]) : null;
- },
-
- selectMany: function(element) {
- var values, length = element.length;
- if (!length) return null;
-
- for (var i = 0, values = []; i < length; i++) {
- var opt = element.options[i];
- if (opt.selected) values.push(this.optionValue(opt));
- }
- return values;
- },
-
- optionValue: function(opt) {
- // extend element because hasAttribute may not be native
- return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
- }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
- initialize: function($super, element, frequency, callback) {
- $super(callback, frequency);
- this.element = $(element);
- this.lastValue = this.getValue();
- },
-
- execute: function() {
- var value = this.getValue();
- if (Object.isString(this.lastValue) && Object.isString(value) ?
- this.lastValue != value : String(this.lastValue) != String(value)) {
- this.callback(this.element, value);
- this.lastValue = value;
- }
- }
-});
-
-Form.Element.Observer = Class.create(Abstract.TimedObserver, {
- getValue: function() {
- return Form.Element.getValue(this.element);
- }
-});
-
-Form.Observer = Class.create(Abstract.TimedObserver, {
- getValue: function() {
- return Form.serialize(this.element);
- }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = Class.create({
- initialize: function(element, callback) {
- this.element = $(element);
- this.callback = callback;
-
- this.lastValue = this.getValue();
- if (this.element.tagName.toLowerCase() == 'form')
- this.registerFormCallbacks();
- else
- this.registerCallback(this.element);
- },
-
- onElementEvent: function() {
- var value = this.getValue();
- if (this.lastValue != value) {
- this.callback(this.element, value);
- this.lastValue = value;
- }
- },
-
- registerFormCallbacks: function() {
- Form.getElements(this.element).each(this.registerCallback, this);
- },
-
- registerCallback: function(element) {
- if (element.type) {
- switch (element.type.toLowerCase()) {
- case 'checkbox':
- case 'radio':
- Event.observe(element, 'click', this.onElementEvent.bind(this));
- break;
- default:
- Event.observe(element, 'change', this.onElementEvent.bind(this));
- break;
- }
- }
- }
-});
-
-Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
- getValue: function() {
- return Form.Element.getValue(this.element);
- }
-});
-
-Form.EventObserver = Class.create(Abstract.EventObserver, {
- getValue: function() {
- return Form.serialize(this.element);
- }
-});
-if (!window.Event) var Event = { };
-
-Object.extend(Event, {
- KEY_BACKSPACE: 8,
- KEY_TAB: 9,
- KEY_RETURN: 13,
- KEY_ESC: 27,
- KEY_LEFT: 37,
- KEY_UP: 38,
- KEY_RIGHT: 39,
- KEY_DOWN: 40,
- KEY_DELETE: 46,
- KEY_HOME: 36,
- KEY_END: 35,
- KEY_PAGEUP: 33,
- KEY_PAGEDOWN: 34,
- KEY_INSERT: 45,
-
- cache: { },
-
- relatedTarget: function(event) {
- var element;
- switch(event.type) {
- case 'mouseover': element = event.fromElement; break;
- case 'mouseout': element = event.toElement; break;
- default: return null;
- }
- return Element.extend(element);
- }
-});
-
-Event.Methods = {
- element: function(event) {
- var node = event.target;
- return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node);
- },
-
- findElement: function(event, expression) {
- var element = Event.element(event);
- return element.match(expression) ? element : element.up(expression);
- },
-
- isLeftClick: function(event) {
- return (((event.which) && (event.which == 1)) ||
- ((event.button) && (event.button == 1)));
- },
-
- pointer: function(event) {
- return {
- x: event.pageX || (event.clientX +
- (document.documentElement.scrollLeft || document.body.scrollLeft)),
- y: event.pageY || (event.clientY +
- (document.documentElement.scrollTop || document.body.scrollTop))
- };
- },
-
- pointerX: function(event) { return Event.pointer(event).x },
- pointerY: function(event) { return Event.pointer(event).y },
-
- stop: function(event) {
- event.preventDefault();
- event.stopPropagation();
- }
-};
-
-Event.extend = (function() {
- var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
- m[name] = Event.Methods[name].methodize();
- return m;
- });
-
- if (Prototype.Browser.IE) {
- Object.extend(methods, {
- stopPropagation: function() { this.cancelBubble = true },
- preventDefault: function() { this.returnValue = false },
- inspect: function() { return "[object Event]" }
- });
-
- return function(event) {
- if (!event) return false;
- if (event._extendedByPrototype) return event;
-
- event._extendedByPrototype = Prototype.emptyFunction;
- var pointer = Event.pointer(event);
- Object.extend(event, {
- target: event.srcElement,
- relatedTarget: Event.relatedTarget(event),
- pageX: pointer.x,
- pageY: pointer.y
- });
- return Object.extend(event, methods);
- };
-
- } else {
- Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__;
- Object.extend(Event.prototype, methods);
- return Prototype.K;
- }
-})();
-
-Object.extend(Event, (function() {
- var cache = Event.cache;
-
- function getEventID(element) {
- if (element._eventID) return element._eventID;
- arguments.callee.id = arguments.callee.id || 1;
- return element._eventID = ++arguments.callee.id;
- }
-
- function getDOMEventName(eventName) {
- if (eventName && eventName.match(/:/)) return "dataavailable";
- return { keypress: "keydown" }[eventName] || eventName;
- }
-
- function getCacheForID(id) {
- return cache[id] = cache[id] || { };
- }
-
- function getWrappersForEventName(id, eventName) {
- var c = getCacheForID(id);
- return c[eventName] = c[eventName] || [];
- }
-
- function createWrapper(element, eventName, handler) {
- var id = getEventID(element);
- var c = getWrappersForEventName(id, eventName);
- if (c.pluck("handler").include(handler)) return false;
-
- var wrapper = function(event) {
- if (event.eventName && event.eventName != eventName)
- return false;
-
- Event.extend(event);
- handler.call(element, event)
- };
-
- wrapper.handler = handler;
- c.push(wrapper);
- return wrapper;
- }
-
- function findWrapper(id, eventName, handler) {
- var c = getWrappersForEventName(id, eventName);
- return c.find(function(wrapper) { return wrapper.handler == handler });
- }
-
- function destroyWrapper(id, eventName, handler) {
- var c = getCacheForID(id);
- if (!c[eventName]) return false;
- c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
- }
-
- function destroyCache() {
- for (var id in cache)
- for (var eventName in cache[id])
- cache[id][eventName] = null;
- }
-
- if (window.attachEvent) {
- window.attachEvent("onunload", destroyCache);
- }
-
- return {
- observe: function(element, eventName, handler) {
- element = $(element);
- var name = getDOMEventName(eventName);
-
- var wrapper = createWrapper(element, eventName, handler);
- if (!wrapper) return element;
-
- if (element.addEventListener) {
- element.addEventListener(name, wrapper, false);
- } else {
- element.attachEvent("on" + name, wrapper);
- }
-
- return element;
- },
-
- stopObserving: function(element, eventName, handler) {
- element = $(element);
- var id = getEventID(element), name = getDOMEventName(eventName);
-
- if (!handler && eventName) {
- getWrappersForEventName(id, eventName).each(function(wrapper) {
- element.stopObserving(eventName, wrapper.handler);
- });
- return element;
-
- } else if (!eventName) {
- Object.keys(getCacheForID(id)).each(function(eventName) {
- element.stopObserving(eventName);
- });
- return element;
- }
-
- var wrapper = findWrapper(id, eventName, handler);
- if (!wrapper) return element;
-
- if (element.removeEventListener) {
- element.removeEventListener(name, wrapper, false);
- } else {
- element.detachEvent("on" + name, wrapper);
- }
-
- destroyWrapper(id, eventName, handler);
-
- return element;
- },
-
- fire: function(element, eventName, memo) {
- element = $(element);
- if (element == document && document.createEvent && !element.dispatchEvent)
- element = document.documentElement;
-
- if (document.createEvent) {
- var event = document.createEvent("HTMLEvents");
- event.initEvent("dataavailable", true, true);
- } else {
- var event = document.createEventObject();
- event.eventType = "ondataavailable";
- }
-
- event.eventName = eventName;
- event.memo = memo || { };
-
- if (document.createEvent) {
- element.dispatchEvent(event);
- } else {
- element.fireEvent(event.eventType, event);
- }
-
- return event;
- }
- };
-})());
-
-Object.extend(Event, Event.Methods);
-
-Element.addMethods({
- fire: Event.fire,
- observe: Event.observe,
- stopObserving: Event.stopObserving
-});
-
-Object.extend(document, {
- fire: Element.Methods.fire.methodize(),
- observe: Element.Methods.observe.methodize(),
- stopObserving: Element.Methods.stopObserving.methodize()
-});
-
-(function() {
- /* Support for the DOMContentLoaded event is based on work by Dan Webb,
- Matthias Miller, Dean Edwards and John Resig. */
-
- var timer, fired = false;
-
- function fireContentLoadedEvent() {
- if (fired) return;
- if (timer) window.clearInterval(timer);
- document.fire("dom:loaded");
- fired = true;
- }
-
- if (document.addEventListener) {
- if (Prototype.Browser.WebKit) {
- timer = window.setInterval(function() {
- if (/loaded|complete/.test(document.readyState))
- fireContentLoadedEvent();
- }, 0);
-
- Event.observe(window, "load", fireContentLoadedEvent);
-
- } else {
- document.addEventListener("DOMContentLoaded",
- fireContentLoadedEvent, false);
- }
-
- } else {
- document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
- $("__onDOMContentLoaded").onreadystatechange = function() {
- if (this.readyState == "complete") {
- this.onreadystatechange = null;
- fireContentLoadedEvent();
- }
- };
- }
-})();
-/*------------------------------- DEPRECATED -------------------------------*/
-
-var Toggle = { display: Element.toggle };
-
-Element.Methods.childOf = Element.Methods.descendantOf;
-
-var Insertion = {
- Before: function(element, content) {
- return Element.insert(element, {before:content});
- },
-
- Top: function(element, content) {
- return Element.insert(element, {top:content});
- },
-
- Bottom: function(element, content) {
- return Element.insert(element, {bottom:content});
- },
-
- After: function(element, content) {
- return Element.insert(element, {after:content});
- }
-};
-
-var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
-
-// This should be moved to script.aculo.us; notice the deprecated methods
-// further below, that map to the newer Element methods.
-var Position = {
- // set to true if needed, warning: firefox performance problems
- // NOT neeeded for page scrolling, only if draggable contained in
- // scrollable elements
- includeScrollOffsets: false,
-
- // must be called before calling withinIncludingScrolloffset, every time the
- // page is scrolled
- prepare: function() {
- this.deltaX = window.pageXOffset
- || document.documentElement.scrollLeft
- || document.body.scrollLeft
- || 0;
- this.deltaY = window.pageYOffset
- || document.documentElement.scrollTop
- || document.body.scrollTop
- || 0;
- },
-
- // caches x/y coordinate pair to use with overlap
- within: function(element, x, y) {
- if (this.includeScrollOffsets)
- return this.withinIncludingScrolloffsets(element, x, y);
- this.xcomp = x;
- this.ycomp = y;
- this.offset = Element.cumulativeOffset(element);
-
- return (y >= this.offset[1] &&
- y < this.offset[1] + element.offsetHeight &&
- x >= this.offset[0] &&
- x < this.offset[0] + element.offsetWidth);
- },
-
- withinIncludingScrolloffsets: function(element, x, y) {
- var offsetcache = Element.cumulativeScrollOffset(element);
-
- this.xcomp = x + offsetcache[0] - this.deltaX;
- this.ycomp = y + offsetcache[1] - this.deltaY;
- this.offset = Element.cumulativeOffset(element);
-
- return (this.ycomp >= this.offset[1] &&
- this.ycomp < this.offset[1] + element.offsetHeight &&
- this.xcomp >= this.offset[0] &&
- this.xcomp < this.offset[0] + element.offsetWidth);
- },
-
- // within must be called directly before
- overlap: function(mode, element) {
- if (!mode) return 0;
- if (mode == 'vertical')
- return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
- element.offsetHeight;
- if (mode == 'horizontal')
- return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
- element.offsetWidth;
- },
-
- // Deprecation layer -- use newer Element methods now (1.5.2).
-
- cumulativeOffset: Element.Methods.cumulativeOffset,
-
- positionedOffset: Element.Methods.positionedOffset,
-
- absolutize: function(element) {
- Position.prepare();
- return Element.absolutize(element);
- },
-
- relativize: function(element) {
- Position.prepare();
- return Element.relativize(element);
- },
-
- realOffset: Element.Methods.cumulativeScrollOffset,
-
- offsetParent: Element.Methods.getOffsetParent,
-
- page: Element.Methods.viewportOffset,
-
- clone: function(source, target, options) {
- options = options || { };
- return Element.clonePosition(target, source, options);
- }
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
- function iter(name) {
- return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
- }
-
- instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
- function(element, className) {
- className = className.toString().strip();
- var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
- return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
- } : function(element, className) {
- className = className.toString().strip();
- var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
- if (!classNames && !className) return elements;
-
- var nodes = $(element).getElementsByTagName('*');
- className = ' ' + className + ' ';
-
- for (var i = 0, child, cn; child = nodes[i]; i++) {
- if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
- (classNames && classNames.all(function(name) {
- return !name.toString().blank() && cn.include(' ' + name + ' ');
- }))))
- elements.push(Element.extend(child));
- }
- return elements;
- };
-
- return function(className, parentElement) {
- return $(parentElement || document.body).getElementsByClassName(className);
- };
-}(Element.Methods);
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
- initialize: function(element) {
- this.element = $(element);
- },
-
- _each: function(iterator) {
- this.element.className.split(/\s+/).select(function(name) {
- return name.length > 0;
- })._each(iterator);
- },
-
- set: function(className) {
- this.element.className = className;
- },
-
- add: function(classNameToAdd) {
- if (this.include(classNameToAdd)) return;
- this.set($A(this).concat(classNameToAdd).join(' '));
- },
-
- remove: function(classNameToRemove) {
- if (!this.include(classNameToRemove)) return;
- this.set($A(this).without(classNameToRemove).join(' '));
- },
-
- toString: function() {
- return $A(this).join(' ');
- }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-
-/*--------------------------------------------------------------------------*/
-
-Element.addMethods(); \ No newline at end of file
diff --git a/vendor/plugins/rspec/story_server/prototype/javascripts/rspec.js b/vendor/plugins/rspec/story_server/prototype/javascripts/rspec.js
deleted file mode 100644
index d63609600..000000000
--- a/vendor/plugins/rspec/story_server/prototype/javascripts/rspec.js
+++ /dev/null
@@ -1,149 +0,0 @@
-var InPlaceEditor = {};
-InPlaceEditor.Local = Class.create();
-Object.extend(Object.extend(InPlaceEditor.Local.prototype, Ajax.InPlaceEditor.prototype), {
- enterHover: function() {},
- leaveHover: function() {},
- onComplete: function() {},
- handleFormSubmission: function(e) {
- var value = $F(this._controls.editor);
- RSpec.addStockStep(value);
- this.element.innerHTML = value;
- this.leaveEditMode();
- if (e) Event.stop(e);
- }
-});
-
-var RSpec = {
- stockSteps: function() {
- return $('stock_steps').childElements().map(function(li){
- return li.innerHTML;
- }).sort();
- },
-
- addStockStep: function(stockStep) {
- if(!this.stockSteps().include(stockStep)) {
- $('stock_steps').appendChild(Builder.node('li', {}, stockStep));
- }
- },
-
- makeParamEditors: function() {
- $$('span.param').each(function(span) {
- span.removeClassName('param');
- span.addClassName('param_editor');
- new InPlaceEditor.Local(span, null, {});
- });
- },
-
- setId: function(e) {
- if(!this.currentId) this.currentId = 0;
- this.currentId++;
- e.id = "id_" + this.currentId;
- },
-
- applyUi: function() {
- this.setUpTogglers();
- this.makeParamEditors();
-
- var currentId = 0;
- $$('ul.steps').each(function(ul) {
- RSpec.setId(ul);
- var footer = document.createElement("p");
- var addStepLink = document.createElement("a");
- addStepLink.href = "#";
- addStepLink.appendChild(document.createTextNode('Add step'));
- footer.appendChild(addStepLink);
- ul.parentNode.appendChild(footer);
-
- Sortable.create(ul, {
- scroll: window
- });
-
-/* Disable for now - it messes with the autocomplete's visibility (zIndex galore)
- Droppables.add(footer, {
- hoverclass: 'wastebin',
- onDrop: function(li, droppable, evt) {
- li.remove();
- }
- });
-*/
- Event.observe(addStepLink, 'click', function() {
- var form = Builder.node('form', {});
-
- var li = Builder.node('li', {className: 'new'});
- var input = Builder.node('input', {}, 'New step here');
- var autoComplete = Builder.node('div', {className: 'auto_complete'}, '');
-
- li.appendChild(form);
- form.appendChild(input);
- form.appendChild(autoComplete);
- ul.appendChild(li);
- Sortable.destroy(ul);
- Sortable.create(ul);
-
- Event.observe(form, 'submit', function(e) {
- var value = input.value;
- Element.remove(this);
- li.innerHTML = value.gsub(/(\$[a-z]*)/, '<span class="param">#{1}</span>');
- RSpec.makeParamEditors();
- if (e) Event.stop(e);
- });
-
- var ac = new Autocompleter.Local(input, autoComplete, RSpec.stockSteps(), {});
- input.focus();
- });
- })
- },
-
- setUpTogglers: function() {
- $$('dt').each(function(dt) {
- var dd = dt.parentNode.getElementsByTagName('dd')[0];
- dt.onclick = function(){
- dd.toggle();
- }
- });
- }
-};
-
-var StoryDom = {
- narrativeText: function(s) {
- return s.split(/\n/m).map(function(line){
- if(line == "" || line.match(/^\s+$/) ) {
- return null;
- } else {
- return " " + (line.gsub(/^\s+/, '').gsub(/<br \/>/, "\n").gsub(/<br>/, "\n"));
- }
- }).compact().join("");
- },
-
- stepText: function(s) {
- return s.gsub(/<span[^>]*>([^<]*)<\/span>/, "#{1}");
- },
-
- scenario: function(dl) {
- var scenario = ' Scenario: ' + dl.getElementsByTagName('dt')[0].innerHTML + '\n';
- scenario += $A(dl.getElementsByTagName('li')).map(function(li){
- return ' ' + StoryDom.stepText(li.innerHTML);
- }).join("\n") + "\n";
- return scenario;
- },
-
- story: function() {
- var dl = $$('dl.story')[0];
- var story = 'Story: ' + dl.getElementsByTagName('dt')[0].innerHTML + '\n\n';
- story += this.narrativeText(dl.getElementsByTagName('p')[0].innerHTML) + '\n';
- story += $A(dl.getElementsByTagName('dl')).map(function(scenarioDl){
- return StoryDom.scenario(scenarioDl);
- }).join("\n");
- return story;
- },
-
- save: function() {
- new Ajax.Request('stories', {
- postBody: this.story()
- });
- }
-};
-
-Event.observe(window, 'load', function() {
- RSpec.applyUi();
-});
diff --git a/vendor/plugins/rspec/story_server/prototype/javascripts/scriptaculous.js b/vendor/plugins/rspec/story_server/prototype/javascripts/scriptaculous.js
deleted file mode 100644
index 4eb84b6b0..000000000
--- a/vendor/plugins/rspec/story_server/prototype/javascripts/scriptaculous.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// script.aculo.us scriptaculous.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Scriptaculous = {
- Version: '1.8.0_pre1',
- require: function(libraryName) {
- // inserting via DOM fails in Safari 2.0, so brute force approach
- document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
- },
- REQUIRED_PROTOTYPE: '1.6.0',
- load: function() {
- function convertVersionString(versionString){
- var r = versionString.split('.');
- return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]);
- }
-
- if((typeof Prototype=='undefined') ||
- (typeof Element == 'undefined') ||
- (typeof Element.Methods=='undefined') ||
- (convertVersionString(Prototype.Version) <
- convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
- throw("script.aculo.us requires the Prototype JavaScript framework >= " +
- Scriptaculous.REQUIRED_PROTOTYPE);
-
- $A(document.getElementsByTagName("script")).findAll( function(s) {
- return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))
- }).each( function(s) {
- var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,'');
- var includes = s.src.match(/\?.*load=([a-z,]*)/);
- (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
- function(include) { Scriptaculous.require(path+include+'.js') });
- });
- }
-}
-
-Scriptaculous.load(); \ No newline at end of file
diff --git a/vendor/plugins/rspec/story_server/prototype/javascripts/slider.js b/vendor/plugins/rspec/story_server/prototype/javascripts/slider.js
deleted file mode 100644
index 46c667370..000000000
--- a/vendor/plugins/rspec/story_server/prototype/javascripts/slider.js
+++ /dev/null
@@ -1,276 +0,0 @@
-// script.aculo.us slider.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Marty Haught, Thomas Fuchs
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if (!Control) var Control = { };
-Control.Slider = Class.create();
-
-// options:
-// axis: 'vertical', or 'horizontal' (default)
-//
-// callbacks:
-// onChange(value)
-// onSlide(value)
-Control.Slider.prototype = {
- initialize: function(handle, track, options) {
- var slider = this;
-
- if (Object.isArray(handle)) {
- this.handles = handle.collect( function(e) { return $(e) });
- } else {
- this.handles = [$(handle)];
- }
-
- this.track = $(track);
- this.options = options || { };
-
- this.axis = this.options.axis || 'horizontal';
- this.increment = this.options.increment || 1;
- this.step = parseInt(this.options.step || '1');
- this.range = this.options.range || $R(0,1);
-
- this.value = 0; // assure backwards compat
- this.values = this.handles.map( function() { return 0 });
- this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
- this.options.startSpan = $(this.options.startSpan || null);
- this.options.endSpan = $(this.options.endSpan || null);
-
- this.restricted = this.options.restricted || false;
-
- this.maximum = this.options.maximum || this.range.end;
- this.minimum = this.options.minimum || this.range.start;
-
- // Will be used to align the handle onto the track, if necessary
- this.alignX = parseInt(this.options.alignX || '0');
- this.alignY = parseInt(this.options.alignY || '0');
-
- this.trackLength = this.maximumOffset() - this.minimumOffset();
-
- this.handleLength = this.isVertical() ?
- (this.handles[0].offsetHeight != 0 ?
- this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
- (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
- this.handles[0].style.width.replace(/px$/,""));
-
- this.active = false;
- this.dragging = false;
- this.disabled = false;
-
- if (this.options.disabled) this.setDisabled();
-
- // Allowed values array
- this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
- if (this.allowedValues) {
- this.minimum = this.allowedValues.min();
- this.maximum = this.allowedValues.max();
- }
-
- this.eventMouseDown = this.startDrag.bindAsEventListener(this);
- this.eventMouseUp = this.endDrag.bindAsEventListener(this);
- this.eventMouseMove = this.update.bindAsEventListener(this);
-
- // Initialize handles in reverse (make sure first handle is active)
- this.handles.each( function(h,i) {
- i = slider.handles.length-1-i;
- slider.setValue(parseFloat(
- (Object.isArray(slider.options.sliderValue) ?
- slider.options.sliderValue[i] : slider.options.sliderValue) ||
- slider.range.start), i);
- h.makePositioned().observe("mousedown", slider.eventMouseDown);
- });
-
- this.track.observe("mousedown", this.eventMouseDown);
- document.observe("mouseup", this.eventMouseUp);
- document.observe("mousemove", this.eventMouseMove);
-
- this.initialized = true;
- },
- dispose: function() {
- var slider = this;
- Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
- Event.stopObserving(document, "mouseup", this.eventMouseUp);
- Event.stopObserving(document, "mousemove", this.eventMouseMove);
- this.handles.each( function(h) {
- Event.stopObserving(h, "mousedown", slider.eventMouseDown);
- });
- },
- setDisabled: function(){
- this.disabled = true;
- },
- setEnabled: function(){
- this.disabled = false;
- },
- getNearestValue: function(value){
- if (this.allowedValues){
- if (value >= this.allowedValues.max()) return(this.allowedValues.max());
- if (value <= this.allowedValues.min()) return(this.allowedValues.min());
-
- var offset = Math.abs(this.allowedValues[0] - value);
- var newValue = this.allowedValues[0];
- this.allowedValues.each( function(v) {
- var currentOffset = Math.abs(v - value);
- if (currentOffset <= offset){
- newValue = v;
- offset = currentOffset;
- }
- });
- return newValue;
- }
- if (value > this.range.end) return this.range.end;
- if (value < this.range.start) return this.range.start;
- return value;
- },
- setValue: function(sliderValue, handleIdx){
- if (!this.active) {
- this.activeHandleIdx = handleIdx || 0;
- this.activeHandle = this.handles[this.activeHandleIdx];
- this.updateStyles();
- }
- handleIdx = handleIdx || this.activeHandleIdx || 0;
- if (this.initialized && this.restricted) {
- if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
- sliderValue = this.values[handleIdx-1];
- if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
- sliderValue = this.values[handleIdx+1];
- }
- sliderValue = this.getNearestValue(sliderValue);
- this.values[handleIdx] = sliderValue;
- this.value = this.values[0]; // assure backwards compat
-
- this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
- this.translateToPx(sliderValue);
-
- this.drawSpans();
- if (!this.dragging || !this.event) this.updateFinished();
- },
- setValueBy: function(delta, handleIdx) {
- this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
- handleIdx || this.activeHandleIdx || 0);
- },
- translateToPx: function(value) {
- return Math.round(
- ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
- (value - this.range.start)) + "px";
- },
- translateToValue: function(offset) {
- return ((offset/(this.trackLength-this.handleLength) *
- (this.range.end-this.range.start)) + this.range.start);
- },
- getRange: function(range) {
- var v = this.values.sortBy(Prototype.K);
- range = range || 0;
- return $R(v[range],v[range+1]);
- },
- minimumOffset: function(){
- return(this.isVertical() ? this.alignY : this.alignX);
- },
- maximumOffset: function(){
- return(this.isVertical() ?
- (this.track.offsetHeight != 0 ? this.track.offsetHeight :
- this.track.style.height.replace(/px$/,"")) - this.alignY :
- (this.track.offsetWidth != 0 ? this.track.offsetWidth :
- this.track.style.width.replace(/px$/,"")) - this.alignY);
- },
- isVertical: function(){
- return (this.axis == 'vertical');
- },
- drawSpans: function() {
- var slider = this;
- if (this.spans)
- $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
- if (this.options.startSpan)
- this.setSpan(this.options.startSpan,
- $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
- if (this.options.endSpan)
- this.setSpan(this.options.endSpan,
- $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
- },
- setSpan: function(span, range) {
- if (this.isVertical()) {
- span.style.top = this.translateToPx(range.start);
- span.style.height = this.translateToPx(range.end - range.start + this.range.start);
- } else {
- span.style.left = this.translateToPx(range.start);
- span.style.width = this.translateToPx(range.end - range.start + this.range.start);
- }
- },
- updateStyles: function() {
- this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
- Element.addClassName(this.activeHandle, 'selected');
- },
- startDrag: function(event) {
- if (Event.isLeftClick(event)) {
- if (!this.disabled){
- this.active = true;
-
- var handle = Event.element(event);
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- var track = handle;
- if (track==this.track) {
- var offsets = Position.cumulativeOffset(this.track);
- this.event = event;
- this.setValue(this.translateToValue(
- (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
- ));
- var offsets = Position.cumulativeOffset(this.activeHandle);
- this.offsetX = (pointer[0] - offsets[0]);
- this.offsetY = (pointer[1] - offsets[1]);
- } else {
- // find the handle (prevents issues with Safari)
- while((this.handles.indexOf(handle) == -1) && handle.parentNode)
- handle = handle.parentNode;
-
- if (this.handles.indexOf(handle)!=-1) {
- this.activeHandle = handle;
- this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
- this.updateStyles();
-
- var offsets = Position.cumulativeOffset(this.activeHandle);
- this.offsetX = (pointer[0] - offsets[0]);
- this.offsetY = (pointer[1] - offsets[1]);
- }
- }
- }
- Event.stop(event);
- }
- },
- update: function(event) {
- if (this.active) {
- if (!this.dragging) this.dragging = true;
- this.draw(event);
- if (Prototype.Browser.WebKit) window.scrollBy(0,0);
- Event.stop(event);
- }
- },
- draw: function(event) {
- var pointer = [Event.pointerX(event), Event.pointerY(event)];
- var offsets = Position.cumulativeOffset(this.track);
- pointer[0] -= this.offsetX + offsets[0];
- pointer[1] -= this.offsetY + offsets[1];
- this.event = event;
- this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
- if (this.initialized && this.options.onSlide)
- this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
- },
- endDrag: function(event) {
- if (this.active && this.dragging) {
- this.finishDrag(event, true);
- Event.stop(event);
- }
- this.active = false;
- this.dragging = false;
- },
- finishDrag: function(event, success) {
- this.active = false;
- this.dragging = false;
- this.updateFinished();
- },
- updateFinished: function() {
- if (this.initialized && this.options.onChange)
- this.options.onChange(this.values.length>1 ? this.values : this.value, this);
- this.event = null;
- }
-} \ No newline at end of file
diff --git a/vendor/plugins/rspec/story_server/prototype/javascripts/sound.js b/vendor/plugins/rspec/story_server/prototype/javascripts/sound.js
deleted file mode 100644
index 1277b63a1..000000000
--- a/vendor/plugins/rspec/story_server/prototype/javascripts/sound.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// script.aculo.us sound.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// Based on code created by Jules Gravinese (http://www.webveteran.com/)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-Sound = {
- tracks: {},
- _enabled: true,
- template:
- new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),
- enable: function(){
- Sound._enabled = true;
- },
- disable: function(){
- Sound._enabled = false;
- },
- play: function(url){
- if(!Sound._enabled) return;
- var options = Object.extend({
- track: 'global', url: url, replace: false
- }, arguments[1] || {});
-
- if(options.replace && this.tracks[options.track]) {
- $R(0, this.tracks[options.track].id).each(function(id){
- var sound = $('sound_'+options.track+'_'+id);
- sound.Stop && sound.Stop();
- sound.remove();
- })
- this.tracks[options.track] = null;
- }
-
- if(!this.tracks[options.track])
- this.tracks[options.track] = { id: 0 }
- else
- this.tracks[options.track].id++;
-
- options.id = this.tracks[options.track].id;
- $$('body')[0].insert(
- Prototype.Browser.IE ? new Element('bgsound',{
- id: 'sound_'+options.track+'_'+options.id,
- src: options.url, loop: 1, autostart: true
- }) : Sound.template.evaluate(options));
- }
-};
-
-if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){
- if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1 }))
- Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>')
- else
- Sound.play = function(){}
-}
diff --git a/vendor/plugins/rspec/story_server/prototype/javascripts/unittest.js b/vendor/plugins/rspec/story_server/prototype/javascripts/unittest.js
deleted file mode 100644
index b5e9005eb..000000000
--- a/vendor/plugins/rspec/story_server/prototype/javascripts/unittest.js
+++ /dev/null
@@ -1,568 +0,0 @@
-// script.aculo.us unittest.js v1.8.0_pre1, Fri Oct 12 21:34:51 +0200 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
-// (c) 2005-2007 Michael Schuerig (http://www.schuerig.de/michael/)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// experimental, Firefox-only
-Event.simulateMouse = function(element, eventName) {
- var options = Object.extend({
- pointerX: 0,
- pointerY: 0,
- buttons: 0,
- ctrlKey: false,
- altKey: false,
- shiftKey: false,
- metaKey: false
- }, arguments[2] || {});
- var oEvent = document.createEvent("MouseEvents");
- oEvent.initMouseEvent(eventName, true, true, document.defaultView,
- options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
- options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element));
-
- if(this.mark) Element.remove(this.mark);
- this.mark = document.createElement('div');
- this.mark.appendChild(document.createTextNode(" "));
- document.body.appendChild(this.mark);
- this.mark.style.position = 'absolute';
- this.mark.style.top = options.pointerY + "px";
- this.mark.style.left = options.pointerX + "px";
- this.mark.style.width = "5px";
- this.mark.style.height = "5px;";
- this.mark.style.borderTop = "1px solid red;"
- this.mark.style.borderLeft = "1px solid red;"
-
- if(this.step)
- alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
-
- $(element).dispatchEvent(oEvent);
-};
-
-// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
-// You need to downgrade to 1.0.4 for now to get this working
-// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
-Event.simulateKey = function(element, eventName) {
- var options = Object.extend({
- ctrlKey: false,
- altKey: false,
- shiftKey: false,
- metaKey: false,
- keyCode: 0,
- charCode: 0
- }, arguments[2] || {});
-
- var oEvent = document.createEvent("KeyEvents");
- oEvent.initKeyEvent(eventName, true, true, window,
- options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
- options.keyCode, options.charCode );
- $(element).dispatchEvent(oEvent);
-};
-
-Event.simulateKeys = function(element, command) {
- for(var i=0; i<command.length; i++) {
- Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
- }
-};
-
-var Test = {}
-Test.Unit = {};
-
-// security exception workaround
-Test.Unit.inspect = Object.inspect;
-
-Test.Unit.Logger = Class.create();
-Test.Unit.Logger.prototype = {
- initialize: function(log) {
- this.log = $(log);
- if (this.log) {
- this._createLogTable();
- }
- },
- start: function(testName) {
- if (!this.log) return;
- this.testName = testName;
- this.lastLogLine = document.createElement('tr');
- this.statusCell = document.createElement('td');
- this.nameCell = document.createElement('td');
- this.nameCell.className = "nameCell";
- this.nameCell.appendChild(document.createTextNode(testName));
- this.messageCell = document.createElement('td');
- this.lastLogLine.appendChild(this.statusCell);
- this.lastLogLine.appendChild(this.nameCell);
- this.lastLogLine.appendChild(this.messageCell);
- this.loglines.appendChild(this.lastLogLine);
- },
- finish: function(status, summary) {
- if (!this.log) return;
- this.lastLogLine.className = status;
- this.statusCell.innerHTML = status;
- this.messageCell.innerHTML = this._toHTML(summary);
- this.addLinksToResults();
- },
- message: function(message) {
- if (!this.log) return;
- this.messageCell.innerHTML = this._toHTML(message);
- },
- summary: function(summary) {
- if (!this.log) return;
- this.logsummary.innerHTML = this._toHTML(summary);
- },
- _createLogTable: function() {
- this.log.innerHTML =
- '<div id="logsummary"></div>' +
- '<table id="logtable">' +
- '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
- '<tbody id="loglines"></tbody>' +
- '</table>';
- this.logsummary = $('logsummary')
- this.loglines = $('loglines');
- },
- _toHTML: function(txt) {
- return txt.escapeHTML().replace(/\n/g,"<br/>");
- },
- addLinksToResults: function(){
- $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
- td.title = "Run only this test"
- Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
- });
- $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
- td.title = "Run all tests"
- Event.observe(td, 'click', function(){ window.location.search = "";});
- });
- }
-}
-
-Test.Unit.Runner = Class.create();
-Test.Unit.Runner.prototype = {
- initialize: function(testcases) {
- this.options = Object.extend({
- testLog: 'testlog'
- }, arguments[1] || {});
- this.options.resultsURL = this.parseResultsURLQueryParameter();
- this.options.tests = this.parseTestsQueryParameter();
- if (this.options.testLog) {
- this.options.testLog = $(this.options.testLog) || null;
- }
- if(this.options.tests) {
- this.tests = [];
- for(var i = 0; i < this.options.tests.length; i++) {
- if(/^test/.test(this.options.tests[i])) {
- this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
- }
- }
- } else {
- if (this.options.test) {
- this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
- } else {
- this.tests = [];
- for(var testcase in testcases) {
- if(/^test/.test(testcase)) {
- this.tests.push(
- new Test.Unit.Testcase(
- this.options.context ? ' -> ' + this.options.titles[testcase] : testcase,
- testcases[testcase], testcases["setup"], testcases["teardown"]
- ));
- }
- }
- }
- }
- this.currentTest = 0;
- this.logger = new Test.Unit.Logger(this.options.testLog);
- setTimeout(this.runTests.bind(this), 1000);
- },
- parseResultsURLQueryParameter: function() {
- return window.location.search.parseQuery()["resultsURL"];
- },
- parseTestsQueryParameter: function(){
- if (window.location.search.parseQuery()["tests"]){
- return window.location.search.parseQuery()["tests"].split(',');
- };
- },
- // Returns:
- // "ERROR" if there was an error,
- // "FAILURE" if there was a failure, or
- // "SUCCESS" if there was neither
- getResult: function() {
- var hasFailure = false;
- for(var i=0;i<this.tests.length;i++) {
- if (this.tests[i].errors > 0) {
- return "ERROR";
- }
- if (this.tests[i].failures > 0) {
- hasFailure = true;
- }
- }
- if (hasFailure) {
- return "FAILURE";
- } else {
- return "SUCCESS";
- }
- },
- postResults: function() {
- if (this.options.resultsURL) {
- new Ajax.Request(this.options.resultsURL,
- { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
- }
- },
- runTests: function() {
- var test = this.tests[this.currentTest];
- if (!test) {
- // finished!
- this.postResults();
- this.logger.summary(this.summary());
- return;
- }
- if(!test.isWaiting) {
- this.logger.start(test.name);
- }
- test.run();
- if(test.isWaiting) {
- this.logger.message("Waiting for " + test.timeToWait + "ms");
- setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
- } else {
- this.logger.finish(test.status(), test.summary());
- this.currentTest++;
- // tail recursive, hopefully the browser will skip the stackframe
- this.runTests();
- }
- },
- summary: function() {
- var assertions = 0;
- var failures = 0;
- var errors = 0;
- var messages = [];
- for(var i=0;i<this.tests.length;i++) {
- assertions += this.tests[i].assertions;
- failures += this.tests[i].failures;
- errors += this.tests[i].errors;
- }
- return (
- (this.options.context ? this.options.context + ': ': '') +
- this.tests.length + " tests, " +
- assertions + " assertions, " +
- failures + " failures, " +
- errors + " errors");
- }
-}
-
-Test.Unit.Assertions = Class.create();
-Test.Unit.Assertions.prototype = {
- initialize: function() {
- this.assertions = 0;
- this.failures = 0;
- this.errors = 0;
- this.messages = [];
- },
- summary: function() {
- return (
- this.assertions + " assertions, " +
- this.failures + " failures, " +
- this.errors + " errors" + "\n" +
- this.messages.join("\n"));
- },
- pass: function() {
- this.assertions++;
- },
- fail: function(message) {
- this.failures++;
- this.messages.push("Failure: " + message);
- },
- info: function(message) {
- this.messages.push("Info: " + message);
- },
- error: function(error) {
- this.errors++;
- this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
- },
- status: function() {
- if (this.failures > 0) return 'failed';
- if (this.errors > 0) return 'error';
- return 'passed';
- },
- assert: function(expression) {
- var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
- try { expression ? this.pass() :
- this.fail(message); }
- catch(e) { this.error(e); }
- },
- assertEqual: function(expected, actual) {
- var message = arguments[2] || "assertEqual";
- try { (expected == actual) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertInspect: function(expected, actual) {
- var message = arguments[2] || "assertInspect";
- try { (expected == actual.inspect()) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertEnumEqual: function(expected, actual) {
- var message = arguments[2] || "assertEnumEqual";
- try { $A(expected).length == $A(actual).length &&
- expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ?
- this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) +
- ', actual ' + Test.Unit.inspect(actual)); }
- catch(e) { this.error(e); }
- },
- assertNotEqual: function(expected, actual) {
- var message = arguments[2] || "assertNotEqual";
- try { (expected != actual) ? this.pass() :
- this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertIdentical: function(expected, actual) {
- var message = arguments[2] || "assertIdentical";
- try { (expected === actual) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertNotIdentical: function(expected, actual) {
- var message = arguments[2] || "assertNotIdentical";
- try { !(expected === actual) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertNull: function(obj) {
- var message = arguments[1] || 'assertNull'
- try { (obj==null) ? this.pass() :
- this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
- catch(e) { this.error(e); }
- },
- assertMatch: function(expected, actual) {
- var message = arguments[2] || 'assertMatch';
- var regex = new RegExp(expected);
- try { (regex.exec(actual)) ? this.pass() :
- this.fail(message + ' : regex: "' + Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
- catch(e) { this.error(e); }
- },
- assertHidden: function(element) {
- var message = arguments[1] || 'assertHidden';
- this.assertEqual("none", element.style.display, message);
- },
- assertNotNull: function(object) {
- var message = arguments[1] || 'assertNotNull';
- this.assert(object != null, message);
- },
- assertType: function(expected, actual) {
- var message = arguments[2] || 'assertType';
- try {
- (actual.constructor == expected) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + (actual.constructor) + '"'); }
- catch(e) { this.error(e); }
- },
- assertNotOfType: function(expected, actual) {
- var message = arguments[2] || 'assertNotOfType';
- try {
- (actual.constructor != expected) ? this.pass() :
- this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
- '", actual "' + (actual.constructor) + '"'); }
- catch(e) { this.error(e); }
- },
- assertInstanceOf: function(expected, actual) {
- var message = arguments[2] || 'assertInstanceOf';
- try {
- (actual instanceof expected) ? this.pass() :
- this.fail(message + ": object was not an instance of the expected type"); }
- catch(e) { this.error(e); }
- },
- assertNotInstanceOf: function(expected, actual) {
- var message = arguments[2] || 'assertNotInstanceOf';
- try {
- !(actual instanceof expected) ? this.pass() :
- this.fail(message + ": object was an instance of the not expected type"); }
- catch(e) { this.error(e); }
- },
- assertRespondsTo: function(method, obj) {
- var message = arguments[2] || 'assertRespondsTo';
- try {
- (obj[method] && typeof obj[method] == 'function') ? this.pass() :
- this.fail(message + ": object doesn't respond to [" + method + "]"); }
- catch(e) { this.error(e); }
- },
- assertReturnsTrue: function(method, obj) {
- var message = arguments[2] || 'assertReturnsTrue';
- try {
- var m = obj[method];
- if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
- m() ? this.pass() :
- this.fail(message + ": method returned false"); }
- catch(e) { this.error(e); }
- },
- assertReturnsFalse: function(method, obj) {
- var message = arguments[2] || 'assertReturnsFalse';
- try {
- var m = obj[method];
- if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
- !m() ? this.pass() :
- this.fail(message + ": method returned true"); }
- catch(e) { this.error(e); }
- },
- assertRaise: function(exceptionName, method) {
- var message = arguments[2] || 'assertRaise';
- try {
- method();
- this.fail(message + ": exception expected but none was raised"); }
- catch(e) {
- ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e);
- }
- },
- assertElementsMatch: function() {
- var expressions = $A(arguments), elements = $A(expressions.shift());
- if (elements.length != expressions.length) {
- this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
- return false;
- }
- elements.zip(expressions).all(function(pair, index) {
- var element = $(pair.first()), expression = pair.last();
- if (element.match(expression)) return true;
- this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
- }.bind(this)) && this.pass();
- },
- assertElementMatches: function(element, expression) {
- this.assertElementsMatch([element], expression);
- },
- benchmark: function(operation, iterations) {
- var startAt = new Date();
- (iterations || 1).times(operation);
- var timeTaken = ((new Date())-startAt);
- this.info((arguments[2] || 'Operation') + ' finished ' +
- iterations + ' iterations in ' + (timeTaken/1000)+'s' );
- return timeTaken;
- },
- _isVisible: function(element) {
- element = $(element);
- if(!element.parentNode) return true;
- this.assertNotNull(element);
- if(element.style && Element.getStyle(element, 'display') == 'none')
- return false;
-
- return this._isVisible(element.parentNode);
- },
- assertNotVisible: function(element) {
- this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
- },
- assertVisible: function(element) {
- this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
- },
- benchmark: function(operation, iterations) {
- var startAt = new Date();
- (iterations || 1).times(operation);
- var timeTaken = ((new Date())-startAt);
- this.info((arguments[2] || 'Operation') + ' finished ' +
- iterations + ' iterations in ' + (timeTaken/1000)+'s' );
- return timeTaken;
- }
-}
-
-Test.Unit.Testcase = Class.create();
-Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
- initialize: function(name, test, setup, teardown) {
- Test.Unit.Assertions.prototype.initialize.bind(this)();
- this.name = name;
-
- if(typeof test == 'string') {
- test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
- test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
- this.test = function() {
- eval('with(this){'+test+'}');
- }
- } else {
- this.test = test || function() {};
- }
-
- this.setup = setup || function() {};
- this.teardown = teardown || function() {};
- this.isWaiting = false;
- this.timeToWait = 1000;
- },
- wait: function(time, nextPart) {
- this.isWaiting = true;
- this.test = nextPart;
- this.timeToWait = time;
- },
- run: function() {
- try {
- try {
- if (!this.isWaiting) this.setup.bind(this)();
- this.isWaiting = false;
- this.test.bind(this)();
- } finally {
- if(!this.isWaiting) {
- this.teardown.bind(this)();
- }
- }
- }
- catch(e) { this.error(e); }
- }
-});
-
-// *EXPERIMENTAL* BDD-style testing to please non-technical folk
-// This draws many ideas from RSpec http://rspec.rubyforge.org/
-
-Test.setupBDDExtensionMethods = function(){
- var METHODMAP = {
- shouldEqual: 'assertEqual',
- shouldNotEqual: 'assertNotEqual',
- shouldEqualEnum: 'assertEnumEqual',
- shouldBeA: 'assertType',
- shouldNotBeA: 'assertNotOfType',
- shouldBeAn: 'assertType',
- shouldNotBeAn: 'assertNotOfType',
- shouldBeNull: 'assertNull',
- shouldNotBeNull: 'assertNotNull',
-
- shouldBe: 'assertReturnsTrue',
- shouldNotBe: 'assertReturnsFalse',
- shouldRespondTo: 'assertRespondsTo'
- };
- var makeAssertion = function(assertion, args, object) {
- this[assertion].apply(this,(args || []).concat([object]));
- }
-
- Test.BDDMethods = {};
- $H(METHODMAP).each(function(pair) {
- Test.BDDMethods[pair.key] = function() {
- var args = $A(arguments);
- var scope = args.shift();
- makeAssertion.apply(scope, [pair.value, args, this]); };
- });
-
- [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
- function(p){ Object.extend(p, Test.BDDMethods) }
- );
-}
-
-Test.context = function(name, spec, log){
- Test.setupBDDExtensionMethods();
-
- var compiledSpec = {};
- var titles = {};
- for(specName in spec) {
- switch(specName){
- case "setup":
- case "teardown":
- compiledSpec[specName] = spec[specName];
- break;
- default:
- var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
- var body = spec[specName].toString().split('\n').slice(1);
- if(/^\{/.test(body[0])) body = body.slice(1);
- body.pop();
- body = body.map(function(statement){
- return statement.strip()
- });
- compiledSpec[testName] = body.join('\n');
- titles[testName] = specName;
- }
- }
- new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
-}; \ No newline at end of file
diff --git a/vendor/plugins/rspec/story_server/prototype/lib/server.rb b/vendor/plugins/rspec/story_server/prototype/lib/server.rb
deleted file mode 100644
index b4a58da7b..000000000
--- a/vendor/plugins/rspec/story_server/prototype/lib/server.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require 'webrick'
-
-class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet
- def do_POST(request, response)
- File.open('story', 'w') do |io|
- io.write(request.body)
- end
-
- response.status = 200
- response['Content-Type'] = 'text/html'
- response.body = "body"
- end
-end
-
-params = { :Port => 4000,
- :ServerType => WEBrick::SimpleServer,
- :BindAddress => "0.0.0.0",
- :MimeTypes => WEBrick::HTTPUtils::DefaultMimeTypes }
-server = WEBrick::HTTPServer.new(params)
-server.mount('/stories', DispatchServlet)
-server.mount('/', WEBrick::HTTPServlet::FileHandler, File.dirname(__FILE__) + '/..', { :FancyIndexing => true })
-
-trap("INT") { server.shutdown }
-server.start \ No newline at end of file
diff --git a/vendor/plugins/rspec/story_server/prototype/stories.html b/vendor/plugins/rspec/story_server/prototype/stories.html
deleted file mode 100644
index 9d27f32b8..000000000
--- a/vendor/plugins/rspec/story_server/prototype/stories.html
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title>Stories</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Expires" content="-1" />
- <meta http-equiv="Pragma" content="no-cache" />
- <script src="javascripts/prototype.js" type="text/javascript"></script>
- <script src="javascripts/scriptaculous.js" type="text/javascript"></script>
- <script src="javascripts/rspec.js" type="text/javascript"></script>
- <script src="javascripts/unittest.js" type="text/javascript"></script>
-
- <link href="stylesheets/rspec.css" rel="stylesheet" type="text/css" />
- <link href="stylesheets/test.css" rel="stylesheet" type="text/css" />
- </head>
- <body>
- <!--
- Classes and ids that are only used by the Story UI, which don't have to be present in
- the Example report:
-
- #nav
- #stock_steps
- dl.story
- ul.steps
- -->
- <div id="nav">
- <a href="#" onclick="javascript:StoryDom.save();">SAVE</a>
- </div>
- <div id="container">
- <ul id="stock_steps" style="display: none;">
- <li>Given my savings account balance is $balance dollars</li>
- <li>Given my cash account balance is $balance dollars</li>
- <li>Given my $which account has been blocked for $n days</li>
- <li>When I transfer $amount dollars</li>
- <li>Then my savings account balance should be $balance dollars</li>
- <li>Then my cash account balance should be $balance dollars</li>
- </ul>
- <dl class="story failed">
- <dt>transfer to cash account</dt>
- <dd>
- <p>
- As a savings account holder<br />
- I want to transfer money from my savings account<br />
- So that I can get cash easily from an ATM<br />
- </p>
- <dl class="passed">
- <dt>savings account is in credit</dt>
- <dd>
- <ul class="steps">
- <li class="passed">Given my savings account balance is <span class="param">100</span> dollars</li>
- <li class="passed">Given my cash account balance is <span class="param">10</span> dollars</li>
- <li class="passed">When I transfer <span class="param">20</span> dollars</li>
- <li class="passed">Then my savings account balance should be <span class="param">80</span> dollars</li>
- <li class="passed">Then my cash account balance should be <span class="param">30</span> dollars</li>
- </ul>
- </dd>
- </dl>
-
- <dl class="failed">
- <dt>savings account is overdrawn</dt>
- <dd>
- <ul class="steps">
- <li class="passed">Given my savings account balance is <span class="param">-20</span> dollars</li>
- <li class="passed">Given my cash account balance is <span class="param">10</span> dollars</li>
- <li class="passed">When I transfer <span class="param">20</span> dollars</li>
- <li class="failed">Then my savings account balance should be <span class="param">-20</span> dollars</li>
- <li class="failed">Then my cash account balance should be <span class="param">10</span> dollars</li>
- <li class="pending">Then I should still be poor</li>
- </ul>
- </dd>
- </dl>
- </dd>
- </dl>
- <!-- More stories here... -->
-
- <!-- Tests follow -->
- <div id="testlog"> </div>
- <script type="text/javascript" language="javascript" charset="utf-8">
- // <![CDATA[
- Test.context("RSpec editor tests (this won't be in the final editor - it's just self tests)",{
- 'should extract story narrative': function() {
- var narrative = StoryDom.narrativeText($$('p')[0].innerHTML);
- narrative.shouldEqual(
- " As a savings account holder\n" +
- " I want to transfer money from my savings account\n" +
- " So that I can get cash easily from an ATM\n"
- );
- },
-
- 'should extract step text with two spans': function() {
- var stepText = StoryDom.stepText('Given <span class="param">this</span> and <span class="param">that</span> stuff');
- stepText.shouldEqual("Given this and that stuff");
- },
-
- 'should extract scenario': function() {
- var scenario = StoryDom.scenario($$('dl')[1]);
- scenario.shouldEqual(
- " Scenario: savings account is in credit\n" +
- " Given my savings account balance is 100 dollars\n" +
- " Given my cash account balance is 10 dollars\n" +
- " When I transfer 20 dollars\n" +
- " Then my savings account balance should be 80 dollars\n" +
- " Then my cash account balance should be 30 dollars\n"
- );
- },
-
- 'should extract story from page': function() {
- var story = StoryDom.story();
- story.shouldEqual(
- "Story: transfer to cash account\n" +
- "\n" +
- " As a savings account holder\n" +
- " I want to transfer money from my savings account\n" +
- " So that I can get cash easily from an ATM\n" +
- "\n" +
- " Scenario: savings account is in credit\n" +
- " Given my savings account balance is 100 dollars\n" +
- " Given my cash account balance is 10 dollars\n" +
- " When I transfer 20 dollars\n" +
- " Then my savings account balance should be 80 dollars\n" +
- " Then my cash account balance should be 30 dollars\n" +
- "\n" +
- " Scenario: savings account is overdrawn\n" +
- " Given my savings account balance is -20 dollars\n" +
- " Given my cash account balance is 10 dollars\n" +
- " When I transfer 20 dollars\n" +
- " Then my savings account balance should be -20 dollars\n" +
- " Then my cash account balance should be 10 dollars\n" +
- " Then I should still be poor\n"
- );
- },
-
- 'should extract stock steps from dom': function() {
- var stockSteps = RSpec.stockSteps();
- stockSteps.shouldEqualEnum([
- 'Given my $which account has been blocked for $n days',
- 'Given my cash account balance is $balance dollars',
- 'Given my savings account balance is $balance dollars',
- 'Then my cash account balance should be $balance dollars',
- 'Then my savings account balance should be $balance dollars',
- 'When I transfer $amount dollars'
- ]);
- },
-
- 'should add new stock steps unless they already exist': function() {
- RSpec.addStockStep('When Godzilla chews over a cable');
- RSpec.stockSteps().shouldEqualEnum([
- 'Given my $which account has been blocked for $n days',
- 'Given my cash account balance is $balance dollars',
- 'Given my savings account balance is $balance dollars',
- 'Then my cash account balance should be $balance dollars',
- 'Then my savings account balance should be $balance dollars',
- 'When Godzilla chews over a cable',
- 'When I transfer $amount dollars'
- ]);
- RSpec.addStockStep('When Godzilla chews over a cable');
- RSpec.stockSteps().shouldEqualEnum([
- 'Given my $which account has been blocked for $n days',
- 'Given my cash account balance is $balance dollars',
- 'Given my savings account balance is $balance dollars',
- 'Then my cash account balance should be $balance dollars',
- 'Then my savings account balance should be $balance dollars',
- 'When Godzilla chews over a cable',
- 'When I transfer $amount dollars'
- ]);
- }
- });
- // ]]>
- </script>
-
- </div>
- </body>
-</html>
diff --git a/vendor/plugins/rspec/story_server/prototype/stylesheets/rspec.css b/vendor/plugins/rspec/story_server/prototype/stylesheets/rspec.css
deleted file mode 100644
index 90f4b9be6..000000000
--- a/vendor/plugins/rspec/story_server/prototype/stylesheets/rspec.css
+++ /dev/null
@@ -1,136 +0,0 @@
-body {
- background: #fff;
- font-size: 80%;
- margin:0pt;
- padding:0pt;
-}
-
-#nav {
- border-bottom:1px solid #222222;
- border-top-style:solid;
- border-top-width:0.5em;
- font-family:Helvetica,Arial,sans-serif;
- font-size:1.1em;
- padding:0.2em 0pt;
- position:fixed;
- text-align:center;
- width:100%;
- z-index:50;
-
- background-color: #000000;
- opacity: 0.6;
-}
-
-#container {
- background:white none repeat scroll 0%;
- font-family:Helvetica,Arial,sans-serif;
- margin:0pt auto;
- position:relative;
- text-align:left;
- top:4.0em;
- width:78em;
-}
-
-dl {
- font: normal 11px "Lucida Grande", Helvetica, sans-serif;
-}
-
-dt {
- color: #fff;
-}
-
-dl.passed {
- border-left: 5px solid #65C400;
-}
-
-dl.failed {
- border-left: 5px solid #C20000;
-}
-
-dt {
- padding: 3px;
- font-weight: bold;
-}
-
-dd {
- margin: 0px 0px 0px 0px;
-}
-
-dd p {
- padding: 5px;
- margin-top: 0;
- margin-bottom: 5px;
-}
-
-dd > dl {
- margin-left: 5px;
-}
-
-dl.passed > dt {
- background: #65C400;
-}
-
-dl.failed > dt {
- background: #C20000;
-}
-
-dl.passed > dd > p, li.passed {
- background: #DBFFB4; color: #3D7700;
- border-bottom: 1px solid #65C400;
-}
-
-dl.failed > dd > p, li.failed {
- color: #C20000; background: #FFFBD3;
- border-bottom: 1px solid #C20000;
-}
-
-dl.pending > dd > p, li.pending {
- color: #131313; background: #FCFB98;
- border-bottom: 1px solid #FAF834;
-}
-
-dl.new > dd > p, li.new {
- color: #444444; background: #DDDDDD;
- border-bottom: 1px solid #444444;
-}
-
-dl > dd > p.wastebin {
- background-color: black;
-}
-
-span.param, span.param_editor {
- font-weight: bold;
-}
-
-input {
- width: 100%;
-}
-
-ul.steps {
- padding: 0px;
- list-style: none;
-}
-
-ul.steps > li {
- margin: 5px 0px 5px 5px;
- padding: 3px 3px 3px 5px;
-}
-
-div.auto_complete ul {
- list-style-type: none;
- border: 2px solid #F0F0F0;
- margin: 0px;
- padding: 0px;
-}
-
-div.auto_complete ul li {
- background-color: white;
- list-style-type: none;
- display: block;
- margin: 0;
- padding: 2px;
-}
-
-div.auto_complete ul li.selected {
- color: #444444; background: #DDDDDD;
-}
diff --git a/vendor/plugins/rspec/story_server/prototype/stylesheets/test.css b/vendor/plugins/rspec/story_server/prototype/stylesheets/test.css
deleted file mode 100644
index 8c738a396..000000000
--- a/vendor/plugins/rspec/story_server/prototype/stylesheets/test.css
+++ /dev/null
@@ -1,90 +0,0 @@
-body, div, p, h1, h2, h3, ul, ol, span, a, table, td, form, img, li {
- font-family: sans-serif;
-}
-
-body {
- font-size:0.8em;
-}
-
-.navigation {
- background: #9DC569;
- color: #fff;
-}
-
-.navigation h1 {
- font-size: 20px;
-}
-
-.navigation h2 {
- font-size: 16px;
- font-weight: normal;
- margin: 0;
- border: 1px solid #e8a400;
- border-bottom: 0;
- background: #ffc;
- color: #E8A400;
- padding: 8px;
- padding-bottom: 0;
-}
-
-.navigation ul {
- margin-top: 0;
- border: 1px solid #E8A400;
- border-top: none;
- background: #ffc;
- padding: 8px;
- margin-left: 0;
-}
-
-.navigation ul li {
- font-size: 12px;
- list-style-type: none;
- margin-top: 1px;
- margin-bottom: 1px;
- color: #555;
-}
-
-.navigation a {
- color: #ffc;
-}
-
-.navigation ul li a {
- color: #000;
-}
-
-#log {
- padding-bottom: 1em;
- border-bottom: 2px solid #000;
- margin-bottom: 2em;
-}
-
-#logsummary {
- margin-bottom: 1em;
- padding: 1ex;
- border: 1px solid #000;
- font-weight: bold;
-}
-
-#logtable {
- width:100%;
- border-collapse: collapse;
- border: 1px dotted #666;
-}
-
-#logtable td, #logtable th {
- text-align: left;
- padding: 3px 8px;
- border: 1px dotted #666;
-}
-
-#logtable .passed {
- background-color: #cfc;
-}
-
-#logtable .failed, #logtable .error {
- background-color: #fcc;
-}
-
-#logtable .nameCell {
- cursor: pointer;
-} \ No newline at end of file