aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/views/admin_general/debug.rhtml29
-rw-r--r--config/environment.rb2
-rw-r--r--config/packages1
-rwxr-xr-xscript/rails-post-deploy8
-rw-r--r--spec/controllers/application_spec.rb10
-rw-r--r--spec/spec_helper.rb4
-rw-r--r--vendor/.gitignore1
-rw-r--r--vendor/plugins/action_mailer_layouts-old/CHANGELOG21
-rw-r--r--vendor/plugins/action_mailer_layouts-old/READ_ME30
-rw-r--r--vendor/plugins/action_mailer_layouts-old/init.rb7
-rw-r--r--vendor/plugins/action_mailer_layouts-old/plugin.rb37
-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
-rw-r--r--vendor/plugins/rspec_on_rails/.gitignore4
-rw-r--r--vendor/plugins/rspec_on_rails/CHANGES21
-rw-r--r--vendor/plugins/rspec_on_rails/MIT-LICENSE31
-rw-r--r--vendor/plugins/rspec_on_rails/README3
-rw-r--r--vendor/plugins/rspec_on_rails/Rakefile9
-rw-r--r--vendor/plugins/rspec_on_rails/generators/helpers/rails_identifier.rb11
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec/CHANGES1
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb35
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec/templates/all_stories.rb4
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec/templates/previous_failures.txt0
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec/templates/rcov.opts2
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec4
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server116
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts4
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb47
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec/templates/stories_helper.rb3
-rwxr-xr-xvendor/plugins/rspec_on_rails/generators/rspec_controller/USAGE33
-rwxr-xr-xvendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb49
-rwxr-xr-xvendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb25
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/helper_spec.rb11
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb12
-rwxr-xr-xvendor/plugins/rspec_on_rails/generators/rspec_model/USAGE18
-rwxr-xr-xvendor/plugins/rspec_on_rails/generators/rspec_model/rspec_model_generator.rb30
-rwxr-xr-xvendor/plugins/rspec_on_rails/generators/rspec_model/templates/model_spec.rb11
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb167
-rwxr-xr-xvendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb313
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/edit_erb_spec.rb25
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb11
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb22
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb26
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/routing_spec.rb61
-rw-r--r--vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb22
-rw-r--r--vendor/plugins/rspec_on_rails/init.rb9
-rw-r--r--vendor/plugins/rspec_on_rails/lib/autotest/discover.rb1
-rw-r--r--vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb81
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails.rb52
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/example.rb46
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/example/assigns_hash_proxy.rb43
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/example/controller_example_group.rb271
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/example/functional_example_group.rb59
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/example/helper_example_group.rb130
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/example/ivar_proxy.rb62
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/example/model_example_group.rb14
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/example/rails_example_group.rb25
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/example/render_observer.rb90
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/example/view_example_group.rb178
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb12
-rwxr-xr-xvendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb14
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/rescue.rb21
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/test_response.rb11
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb27
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb30
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/object.rb5
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/example/configuration.rb71
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/matchers/have.rb21
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb30
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb130
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb57
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/include_text.rb54
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb113
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb70
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/mocks.rb115
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb71
-rw-r--r--vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb23
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb36
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb8
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb60
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb83
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb62
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb206
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb112
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb135
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb64
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb18
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb16
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb33
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb272
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb54
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb48
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb14
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb783
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb37
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb13
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb62
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/matchers/include_text_spec.rb70
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb209
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb169
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/mocks/ar_classes.rb10
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb64
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/mocks/stub_model_spec.rb78
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/sample_modified_fixture.rb8
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb8
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb96
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb11
-rw-r--r--vendor/plugins/rspec_on_rails/spec/rails_suite.rb7
-rw-r--r--vendor/plugins/rspec_on_rails/spec/spec_helper.rb46
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/controllers/action_view_base_spec_controller.rb2
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb68
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/controllers/redirect_spec_controller.rb59
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/controllers/render_spec_controller.rb26
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/controllers/rjs_spec_controller.rb58
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/helpers/explicit_helper.rb10
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/helpers/more_explicit_helper.rb5
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/helpers/plugin_application_helper.rb6
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/helpers/view_spec_helper.rb13
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/_partial.rhtml0
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_the_assigns_hash.rhtml0
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_errors_in_template.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_template.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/_a_partial.rhtml0
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.js.rjs1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rhtml0
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rjs1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/_replacement_partial.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_div.rjs1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_page_element.rjs1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/insert_html.rjs1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace.rjs1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html.rjs1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html_with_partial.rjs1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_effect.rjs1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_toggle_effect.rjs1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/no_tags.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_no_attributes.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_one_attribute.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial.rhtml2
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_used_twice.rhtml0
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_local_variable.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_sub_partial.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_spacer.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/accessor.rhtml5
-rwxr-xr-xvendor/plugins/rspec_on_rails/spec_resources/views/view_spec/entry_form.rhtml2
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/explicit_helper.rhtml2
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/foo/show.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/implicit_helper.rhtml2
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/multiple_helpers.rhtml3
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial.rhtml5
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_using_collection.rhtml3
-rw-r--r--vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_with_array.rhtml1
-rw-r--r--vendor/plugins/rspec_on_rails/stories/all.rb10
-rw-r--r--vendor/plugins/rspec_on_rails/stories/helper.rb5
-rw-r--r--vendor/plugins/rspec_on_rails/stories/steps/people.rb8
-rw-r--r--vendor/plugins/rspec_on_rails/stories/transactions_should_rollback15
-rw-r--r--vendor/plugins/rspec_on_rails/stories/transactions_should_rollback.rb25
-rw-r--r--vendor/plugins/rspec_on_rails/tasks/rspec.rake137
530 files changed, 7046 insertions, 33018 deletions
diff --git a/app/views/admin_general/debug.rhtml b/app/views/admin_general/debug.rhtml
index aaac901f8..3b87fb8e2 100644
--- a/app/views/admin_general/debug.rhtml
+++ b/app/views/admin_general/debug.rhtml
@@ -12,7 +12,9 @@ TMail::VERSION::STRING <%=TMail::VERSION::STRING%>
<br>
Xapian::version_string <%=Xapian::version_string%>
<br>
-Spec::VERSION::NAME/STRING <%=Spec::VERSION::NAME%> <%=Spec::VERSION::STRING%>
+Spec::VERSION::STRING <%=Spec::VERSION::STRING%>
+<br>
+Spec::Rails::VERSION::STRING <%=Spec::Rails::VERSION::STRING%>
</p>
<h2>Configuration</h2>
@@ -23,16 +25,23 @@ Spec::VERSION::NAME/STRING <%=Spec::VERSION::NAME%> <%=Spec::VERSION::STRING%>
</p>
<h2>Environment variables</h2>
-<pre>
-<%= @request_env.to_yaml %>
-</pre>
+<table>
+<% for k,v in @request_env %>
+ <tr><td><%=k%></td><td><%=v%></td></tr>
+<% end %>
+</table>
<h2>Parameters</h2>
-<pre>
-<%= params.to_yaml %>
-</pre>
+<table>
+<% for k,v in params %>
+ <tr><td><%=k%></td><td><%=v%></td></tr>
+<% end %>
+</table>
<h2>Session</h2>
-<pre>
-<%= session.to_yaml %>
-</pre>
+<table>
+<% for k,v in session %>
+ <tr><td><%=k%></td><td><%=v%></td></tr>
+<% end %>
+</table>
+
diff --git a/config/environment.rb b/config/environment.rb
index 377b347ee..fb9c31b60 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -96,7 +96,7 @@ ActionView::Helpers::TagHelper.module_eval do
end
# Domain for URLs (so can work for scripts, not just web pages)
-ActionController::UrlWriter.default_url_options[:host] = MySociety::Config.get("DOMAIN", 'localhost:3000')
+ActionMailer::Base.default_url_options[:host] = MySociety::Config.get("DOMAIN", 'localhost:3000')
# So that javascript assets use full URL, so proxied admin URLs read javascript OK
if (MySociety::Config.get("DOMAIN", "") != "")
diff --git a/config/packages b/config/packages
index 6f03209d8..f0bed1763 100644
--- a/config/packages
+++ b/config/packages
@@ -22,3 +22,4 @@ mahoro-ruby1.8 | libmahoro-ruby1.8
wdg-html-validator
#libapache2-mod-passenger
mutt
+librack-ruby1.8
diff --git a/script/rails-post-deploy b/script/rails-post-deploy
index e25c84073..1dce32797 100755
--- a/script/rails-post-deploy
+++ b/script/rails-post-deploy
@@ -34,9 +34,9 @@ mkdir -p vendor
cd vendor
# see if rails is frozen or not
-if [ -d "rails-2.1.0" ]
+if [ -d "rails-2.3.2" ]
then
- LN_PATH=rails-2.1.0
+ LN_PATH=rails-2.3.2
elif [ -d "rails" ]
then
LN_PATH=rails
@@ -45,7 +45,7 @@ else
fi
# make symlinks to global rails installation
-for X in actionmailer actionpack activerecord activesupport railties
+for X in actionmailer actionpack activerecord activeresource activesupport railties
do
rm -f $X
ln -s $LN_PATH/$X $X
@@ -87,6 +87,6 @@ else
fi
# upgrade database
-rake db:migrate
+rake db:migrate #--trace
diff --git a/spec/controllers/application_spec.rb b/spec/controllers/application_spec.rb
deleted file mode 100644
index af2ea1634..000000000
--- a/spec/controllers/application_spec.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.dirname(__FILE__) + '/../spec_helper'
-
-describe ApplicationController, "when authenticating user" do
- integrate_views
- fixtures :users
-
-# it "blah" do
-# end
-end
-
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index d79b36f94..516ad998c 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -72,9 +72,9 @@ if $tempfilecount.nil?
# Hook into the process function, so can automatically get HTML after each request
alias :original_process :process
- def process(action, parameters = nil, session = nil, flash = nil)
+ def process(action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
# Call original process function
- self.original_process(action, parameters, session, flash)
+ self.original_process(action, parameters, session, flash, http_method)
# XXX Is there a better way to check this than calling a private method?
return unless @response.template.controller.instance_eval { integrate_views? }
diff --git a/vendor/.gitignore b/vendor/.gitignore
index 223211c95..3570752c9 100644
--- a/vendor/.gitignore
+++ b/vendor/.gitignore
@@ -2,5 +2,6 @@ actionmailer
actionpack
activerecord
activesupport
+activeresource
rails
railties
diff --git a/vendor/plugins/action_mailer_layouts-old/CHANGELOG b/vendor/plugins/action_mailer_layouts-old/CHANGELOG
deleted file mode 100644
index 0b3f47667..000000000
--- a/vendor/plugins/action_mailer_layouts-old/CHANGELOG
+++ /dev/null
@@ -1,21 +0,0 @@
-2008-06-03
-* Added support for Rails 2.0 and 2.1. Thanks to Scott Windsor.
-
-2008-02-08
-* Added support for *.<format>.erb layouts and templates. Thanks to Eric Wollensen.
-
-2007-12-20
-* Fixed a bug present when specifying the layout with a string (eg: layout 'subdir/layout_template') in a multipart mail, which caused the plugin to only render one part and not the other. Thanks to Andres Koetsier.
-
-2007-12-12
-* Now works with Rails 2.0.
-
-2007-11-27
-* Now supports helpers defined in the mailer class. Thanks to Marshall Roch.
-
-2007-24-07
-* Now requires actionmailer-1.3.3.
-
-2007-05-07
-* No longer have to specify a :layout. The layout name is now inferred from the mailer class name. Thanks to Peter Boctor.
-* Helper methods are now available to action mailer layouts. Thanks to Peter Boctor. \ No newline at end of file
diff --git a/vendor/plugins/action_mailer_layouts-old/READ_ME b/vendor/plugins/action_mailer_layouts-old/READ_ME
deleted file mode 100644
index bb33c8bdf..000000000
--- a/vendor/plugins/action_mailer_layouts-old/READ_ME
+++ /dev/null
@@ -1,30 +0,0 @@
-A plugin to enable layouts for ActionMailer templates.
-
-Adds a new 'layout' property to the ActionMailer::Base class. Specify the name
-of the layout you want to use. The plugin will look in app/views/layouts for your
-layout. If no layout is specified, the plugin will look for a layout that matches
-the name of your mailer class.
-
-For example:
-
-If your mailer class is called UserNotifier and you are rendering the activation.rhtml
-template, then the plugin will attempt to load the user_notifier.rhtml layout. If you are
-rendering the activation.text.html.rhtml template, the plugin will look for the
-user_notifier.text.html.rhtml layout. In other words, the plugin attempts to load the
-layout named after the your ActionMailer class.
-
-You can overload this behavior by setting the layout property of your mailer:
-
-class UserNotfier < ActionMailer::Base
- def activation(user)
- @recipients = user.email
- @from = 'you@domain.com'
- @sent_on = Time.now
- @subject = 'Activate your account!'
- @layout = :email
- end
-end
-
-This arrangement will cause the plugin to render the content in
-views/user_notifier/activation.text.html.rhtml in the views/layouts/email.text.html.rhtml
-layout. \ No newline at end of file
diff --git a/vendor/plugins/action_mailer_layouts-old/init.rb b/vendor/plugins/action_mailer_layouts-old/init.rb
deleted file mode 100644
index 8289c4eb9..000000000
--- a/vendor/plugins/action_mailer_layouts-old/init.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-begin
- require File.join(File.dirname(__FILE__), 'plugin.rb')
- ActionController::Base.logger.fatal '** Loaded layouts plugin for ActionMailer'
-rescue Exception => e
- puts e.inspect
- ActionController::Base.logger.fatal e if ActionController::Base.logger
-end \ No newline at end of file
diff --git a/vendor/plugins/action_mailer_layouts-old/plugin.rb b/vendor/plugins/action_mailer_layouts-old/plugin.rb
deleted file mode 100644
index 377471e21..000000000
--- a/vendor/plugins/action_mailer_layouts-old/plugin.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-module ActionMailer
- class Base
-
- # Specify the layout name
- adv_attr_accessor :layout
-
- alias_method :render_message_without_layouts, :render_message
-
- def render_message(method_name, body)
- layout = (@layout ? @layout.to_s.clone : self.class.to_s.underscore)
- md = /^([^\.]+)\.([^\.]+\.[^\.]+)\.(erb|rhtml|rxml)$/.match(method_name)
- layout << ".#{md.captures[1]}" if md && md.captures[1]
- layout << ".#{md.captures[2]}" if md && md.captures[2]
- layout << ".rhtml" # if Rails::VERSION::MAJOR < 2
- if File.exists?(File.join(layouts_path, layout))
- body[:content_for_layout] = render_message_without_layouts(method_name, body)
- initialize_layout_template_class(body).render(:file => "/#{layout}")
- else
- render_message_without_layouts(method_name, body)
- end
- end
-
- def initialize_layout_template_class(assigns)
- # for Rails 2.1 (and greater), we have to process view paths first!
- if Rails::VERSION::MAJOR >= 2 and Rails::VERSION::MINOR >= 1
- ActionView::TemplateFinder.process_view_paths(layouts_path)
- end
- returning(template = ActionView::Base.new(layouts_path, assigns, self)) do
- template.extend self.class.master_helper_module
- end
- end
-
- def layouts_path
- File.join(template_root, 'layouts')
- end
- end
-end
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
diff --git a/vendor/plugins/rspec_on_rails/.gitignore b/vendor/plugins/rspec_on_rails/.gitignore
deleted file mode 100644
index 8c6c23dc2..000000000
--- a/vendor/plugins/rspec_on_rails/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-tmtags
-.DS_Store
-.emacs-project
-*~
diff --git a/vendor/plugins/rspec_on_rails/CHANGES b/vendor/plugins/rspec_on_rails/CHANGES
deleted file mode 100644
index 9a54a1c81..000000000
--- a/vendor/plugins/rspec_on_rails/CHANGES
+++ /dev/null
@@ -1,21 +0,0 @@
-== Version 1.1.4
-
-Maintenance release.
-
-* Moved mock_model and stub_model to their own module: Spec::Rails::Mocks
-* Setting mock_model object id with stubs hash - patch from Adam Meehan
-* Added as_new_record to stub_model e.g. stub_model(Foo).as_new_record
-* Improved stub_model such that new_record? does "the right thing"
-* Patch from Pat Maddox to get integrate_views to work in nested example groups.
-* Patch from Pat Maddox to get controller_name to work in nested example groups.
-* Patch from Corey Haines to add include_text matcher
-* Added stub_model method which creates a real model instance with :id stubbed and data access prohibited.
-* Applied patch from Pat Maddox to handle redirect_to w/ SSL. Closes #320.
-* Added #helper and #assigns to helper specs.
-* Applied patch from Bryan Helmkamp to tweak format of generated spec.opts to be more obvious. Closes #162.
-* Tweaked list of exceptions (ignores) for autotest
-* Applied patch from Rick Olson to get rspec_on_rails working with rails edge (>= 8862)
-* Applied patch from Wincent Colaiuta to invert sense of "spec --diff". Closes #281.
-* Allow any type of render in view specs. Closes #57.
-* Applied patch from Ian White to get rspec working with edge rails (8804). Closes #271.
-* Applied patch from Jon Strother to have spec_server reload fixtures. Closes #344. \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/MIT-LICENSE b/vendor/plugins/rspec_on_rails/MIT-LICENSE
deleted file mode 100644
index 239d8e7ee..000000000
--- a/vendor/plugins/rspec_on_rails/MIT-LICENSE
+++ /dev/null
@@ -1,31 +0,0 @@
-====================================================================
-== RSpec
-Copyright (c) 2005-2007 The RSpec Development Team
-====================================================================
-== ARTS
-Copyright (c) 2006 Kevin Clark, Jake Howerton
-====================================================================
-== ZenTest
-Copyright (c) 2001-2006 Ryan Davis, Eric Hodel, Zen Spider Software
-====================================================================
-== AssertSelect
-Copyright (c) 2006 Assaf Arkin
-====================================================================
-
-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_on_rails/README b/vendor/plugins/rspec_on_rails/README
deleted file mode 100644
index 9008b8a57..000000000
--- a/vendor/plugins/rspec_on_rails/README
+++ /dev/null
@@ -1,3 +0,0 @@
-See the rdoc for Spec::Rails for usage documentation.
-
-See ~/rspec/README for instructions on running rspec_on_rails' examples. \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/Rakefile b/vendor/plugins/rspec_on_rails/Rakefile
deleted file mode 100644
index 39b5d2256..000000000
--- a/vendor/plugins/rspec_on_rails/Rakefile
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'rake'
-require 'rake/rdoctask'
-
-desc 'Generate RDoc'
-rd = Rake::RDocTask.new do |rdoc|
- rdoc.rdoc_dir = '../doc/output/rdoc-rails'
- rdoc.options << '--title' << 'Spec::Rails' << '--line-numbers' << '--inline-source' << '--main' << 'Spec::Rails'
- rdoc.rdoc_files.include('MIT-LICENSE', 'lib/**/*.rb')
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/helpers/rails_identifier.rb b/vendor/plugins/rspec_on_rails/generators/helpers/rails_identifier.rb
deleted file mode 100644
index 23668568f..000000000
--- a/vendor/plugins/rspec_on_rails/generators/helpers/rails_identifier.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-module RailsIdentifier
- class << self
- def using_legacy_templates?
- if ActionView::Base.respond_to?(:handler_for_extension) &&
- ActionView::Base.handler_for_extension(:erb) == ActionView::TemplateHandlers::ERB
- return false
- end
- true
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/CHANGES b/vendor/plugins/rspec_on_rails/generators/rspec/CHANGES
deleted file mode 100644
index 69f37090e..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec/CHANGES
+++ /dev/null
@@ -1 +0,0 @@
-Please refer to the CHANGES file for RSpec's core \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb b/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb
deleted file mode 100644
index d5512e386..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec/rspec_generator.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require 'rbconfig'
-
-# This generator bootstraps a Rails project for use with RSpec
-class RspecGenerator < Rails::Generator::Base
- DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
- Config::CONFIG['ruby_install_name'])
-
- def initialize(runtime_args, runtime_options = {})
- super
- end
-
- def manifest
- record do |m|
- script_options = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
-
- m.directory 'spec'
- m.template 'spec_helper.rb', 'spec/spec_helper.rb'
- m.file 'spec.opts', 'spec/spec.opts'
- m.file 'rcov.opts', 'spec/rcov.opts'
- m.file 'script/spec_server', 'script/spec_server', script_options
- m.file 'script/spec', 'script/spec', script_options
-
- m.directory 'stories'
- m.file 'all_stories.rb', 'stories/all.rb'
- m.file 'stories_helper.rb', 'stories/helper.rb'
- end
- end
-
-protected
-
- def banner
- "Usage: #{$0} rspec"
- end
-
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/all_stories.rb b/vendor/plugins/rspec_on_rails/generators/rspec/templates/all_stories.rb
deleted file mode 100644
index 2e8f46a40..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/all_stories.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-dir = File.dirname(__FILE__)
-Dir[File.expand_path("#{dir}/**/*.rb")].uniq.each do |file|
- require file
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/previous_failures.txt b/vendor/plugins/rspec_on_rails/generators/rspec/templates/previous_failures.txt
deleted file mode 100644
index e69de29bb..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/previous_failures.txt
+++ /dev/null
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/rcov.opts b/vendor/plugins/rspec_on_rails/generators/rspec/templates/rcov.opts
deleted file mode 100644
index baf694c9c..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/rcov.opts
+++ /dev/null
@@ -1,2 +0,0 @@
---exclude "spec/*,gems/*"
---rails \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec b/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec
deleted file mode 100644
index d81556575..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env ruby
-$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../vendor/plugins/rspec/lib"))
-require 'spec'
-exit ::Spec::Runner::CommandLine.run(::Spec::Runner::OptionParser.parse(ARGV, STDERR, STDOUT))
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server b/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server
deleted file mode 100644
index 1e839355f..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/script/spec_server
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/env ruby
-$LOAD_PATH.unshift File.dirname(__FILE__) + '/../vendor/plugins/rspec/lib' # For rspec installed as plugin
-require 'rubygems'
-require 'drb/drb'
-require 'rbconfig'
-require 'spec'
-require 'optparse'
-
-# This is based on Florian Weber's TDDMate
-module Spec
- module Runner
- class RailsSpecServer
- def run(argv, stderr, stdout)
- $stdout = stdout
- $stderr = stderr
-
- base = ActiveRecord::Base
- def base.clear_reloadable_connections!
- active_connections.each do |name, conn|
- if conn.requires_reloading?
- conn.disconnect!
- active_connections.delete(name)
- end
- end
- end
-
- if ActionController.const_defined?(:Dispatcher)
- dispatcher = ::ActionController::Dispatcher.new($stdout)
- dispatcher.cleanup_application
- elsif ::Dispatcher.respond_to?(:reset_application!)
- ::Dispatcher.reset_application!
- else
- raise "Application reloading failed"
- end
- if Object.const_defined?(:Fixtures) && Fixtures.respond_to?(:reset_cache)
- Fixtures.reset_cache
- end
-
- ::Dependencies.mechanism = :load
- require_dependency('application.rb') unless Object.const_defined?(:ApplicationController)
- load File.dirname(__FILE__) + '/../spec/spec_helper.rb'
-
- if in_memory_database?
- load "#{RAILS_ROOT}/db/schema.rb" # use db agnostic schema by default
- ActiveRecord::Migrator.up('db/migrate') # use migrations
- end
-
- ::Spec::Runner::CommandLine.run(
- ::Spec::Runner::OptionParser.parse(
- argv,
- $stderr,
- $stdout
- )
- )
- end
-
- def in_memory_database?
- ENV["RAILS_ENV"] == "test" and
- ::ActiveRecord::Base.connection.class.to_s == "ActiveRecord::ConnectionAdapters::SQLite3Adapter" and
- ::Rails::Configuration.new.database_configuration['test']['database'] == ':memory:'
- end
- end
- end
-end
-puts "Loading Rails environment"
-
-ENV["RAILS_ENV"] = "test"
-require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
-require 'dispatcher'
-
-def restart_test_server
- puts "restarting"
- config = ::Config::CONFIG
- ruby = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
- command_line = [ruby, $0, ARGV].flatten.join(' ')
- exec(command_line)
-end
-
-def daemonize(pid_file = nil)
- return yield if $DEBUG
- pid = Process.fork{
- Process.setsid
- Dir.chdir(RAILS_ROOT)
- trap("SIGINT"){ exit! 0 }
- trap("SIGTERM"){ exit! 0 }
- trap("SIGHUP"){ restart_test_server }
- File.open("/dev/null"){|f|
- STDERR.reopen f
- STDIN.reopen f
- STDOUT.reopen f
- }
- yield
- }
- puts "spec_server launched. (PID: %d)" % pid
- File.open(pid_file,"w"){|f| f.puts pid } if pid_file
- exit! 0
-end
-
-options = Hash.new
-opts = OptionParser.new
-opts.on("-d", "--daemon"){|v| options[:daemon] = true }
-opts.on("-p", "--pid PIDFILE"){|v| options[:pid] = v }
-opts.parse!(ARGV)
-
-puts "Ready"
-exec_server = lambda {
- trap("USR2") { restart_test_server } if Signal.list.has_key?("USR2")
- DRb.start_service("druby://localhost:8989", Spec::Runner::RailsSpecServer.new)
- DRb.thread.join
-}
-
-if options[:daemon]
- daemonize(options[:pid], &exec_server)
-else
- exec_server.call
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts b/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts
deleted file mode 100644
index 391705bf8..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec.opts
+++ /dev/null
@@ -1,4 +0,0 @@
---colour
---format progress
---loadby mtime
---reverse
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb b/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb
deleted file mode 100644
index 938dd7b49..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/spec_helper.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# This file is copied to ~/spec when you run 'ruby script/generate rspec'
-# from the project root directory.
-ENV["RAILS_ENV"] = "test"
-require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
-require 'spec'
-require 'spec/rails'
-
-Spec::Runner.configure do |config|
- # If you're not using ActiveRecord you should remove these
- # lines, delete config/database.yml and disable :active_record
- # in your config/boot.rb
- config.use_transactional_fixtures = true
- config.use_instantiated_fixtures = false
- config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
-
- # == Fixtures
- #
- # You can declare fixtures for each example_group like this:
- # describe "...." do
- # fixtures :table_a, :table_b
- #
- # Alternatively, if you prefer to declare them only once, you can
- # do so right here. Just uncomment the next line and replace the fixture
- # names with your fixtures.
- #
- # config.global_fixtures = :table_a, :table_b
- #
- # If you declare global fixtures, be aware that they will be declared
- # for all of your examples, even those that don't use them.
- #
- # You can also declare which fixtures to use (for example fixtures for test/fixtures):
- #
- # config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
- #
- # == Mock Framework
- #
- # RSpec uses it's own mocking framework by default. If you prefer to
- # use mocha, flexmock or RR, uncomment the appropriate line:
- #
- # config.mock_with :mocha
- # config.mock_with :flexmock
- # config.mock_with :rr
- #
- # == Notes
- #
- # For more information take a look at Spec::Example::Configuration and Spec::Runner
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec/templates/stories_helper.rb b/vendor/plugins/rspec_on_rails/generators/rspec/templates/stories_helper.rb
deleted file mode 100644
index da7a13a69..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec/templates/stories_helper.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-ENV["RAILS_ENV"] = "test"
-require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
-require 'spec/rails/story_adapter' \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_controller/USAGE b/vendor/plugins/rspec_on_rails/generators/rspec_controller/USAGE
deleted file mode 100755
index 1546c325d..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_controller/USAGE
+++ /dev/null
@@ -1,33 +0,0 @@
-Description:
- The rspec_controller generator creates stub specs and files for a new
- controller and its views.
-
- The generator takes a controller name and a list of views as arguments.
- The controller name may be given in CamelCase or under_score and should
- not be suffixed with 'Controller'. To create a controller within a
- module, specify the controller name as 'module/controller'.
-
- The generator creates stubs for a controller (and spec), a view (and spec)
- for each view in the argument list, plus a helper.
-
-Example:
- ./script/generate rspec_controller dog bark fetch
- ...
- create spec/controllers/dog_controller_spec.rb
- create app/controllers/dog_controller.rb
- create app/helpers/dog_helper.rb
- create spec/views/dog/bark_view_spec.rb
- create app/views/dog/bark.rhtml
- create spec/views/dog/fetch_view_spec.rb
- create app/views/dog/fetch.rhtml
-
-Modules Example:
- ./script/generate rspec_controller 'pets/dog' bark fetch
- ...
- create spec/controllers/pets/dog_controller_spec.rb
- create app/controllers/pets/dog_controller.rb
- create app/helpers/pets/dog_helper.rb
- create spec/views/pets/dog/bark_view_spec.rb
- create app/views/pets/dog/bark.rhtml
- create spec/views/pets/dog/fetch_view_spec.rb
- create app/views/pets/dog/fetch.rhtml
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb b/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb
deleted file mode 100755
index 933483054..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_controller/rspec_controller_generator.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-require 'rails_generator/generators/components/controller/controller_generator'
-
-class RspecControllerGenerator < ControllerGenerator
-
- def manifest
- record do |m|
- # Check for class naming collisions.
- m.class_collisions class_path, "#{class_name}Controller", "#{class_name}Helper"
-
- # Controller, helper, views, and spec directories.
- m.directory File.join('app/controllers', class_path)
- m.directory File.join('app/helpers', class_path)
- m.directory File.join('app/views', class_path, file_name)
- m.directory File.join('spec/controllers', class_path)
- m.directory File.join('spec/helpers', class_path)
- m.directory File.join('spec/views', class_path, file_name)
-
- if Rails::VERSION::STRING < "2.0.0"
- @default_file_extension = "rhtml"
- else
- @default_file_extension = "html.erb"
- end
-
- # Controller spec, class, and helper.
- m.template 'controller_spec.rb',
- File.join('spec/controllers', class_path, "#{file_name}_controller_spec.rb")
-
- m.template 'helper_spec.rb',
- File.join('spec/helpers', class_path, "#{file_name}_helper_spec.rb")
-
- m.template 'controller:controller.rb',
- File.join('app/controllers', class_path, "#{file_name}_controller.rb")
-
- m.template 'controller:helper.rb',
- File.join('app/helpers', class_path, "#{file_name}_helper.rb")
-
- # Spec and view template for each action.
- actions.each do |action|
- m.template 'view_spec.rb',
- File.join('spec/views', class_path, file_name, "#{action}.#{@default_file_extension}_spec.rb"),
- :assigns => { :action => action, :model => file_name }
- path = File.join('app/views', class_path, file_name, "#{action}.#{@default_file_extension}")
- m.template "controller:view.#{@default_file_extension}",
- path,
- :assigns => { :action => action, :path => path }
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb
deleted file mode 100755
index cb25fe777..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/controller_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
-
-describe <%= class_name %>Controller do
-
-<% if actions.empty? -%>
- #Delete this example and add some real ones
-<% else -%>
- #Delete these examples and add some real ones
-<% end -%>
- it "should use <%= class_name %>Controller" do
- controller.should be_an_instance_of(<%= class_name %>Controller)
- end
-
-<% unless actions.empty? -%>
-<% for action in actions -%>
-
- describe "GET '<%= action %>'" do
- it "should be successful" do
- get '<%= action %>'
- response.should be_success
- end
- end
-<% end -%>
-<% end -%>
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/helper_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/helper_spec.rb
deleted file mode 100644
index 11c650480..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/helper_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
-
-describe <%= class_name %>Helper do
-
- #Delete this example and add some real ones or delete this file
- it "should be included in the object returned by #helper" do
- included_modules = (class << helper; self; end).send :included_modules
- included_modules.should include(<%= class_name %>Helper)
- end
-
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb
deleted file mode 100644
index d550d6a1b..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_controller/templates/view_spec.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper')
-
-describe "/<%= class_name.underscore %>/<%= action %>" do
- before(:each) do
- render '<%= class_name.underscore %>/<%= action %>'
- end
-
- #Delete this example and add some real ones or delete this file
- it "should tell you where to find the file" do
- response.should have_tag('p', %r[Find me in app/views/<%= class_name.underscore %>/<%= action %>])
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_model/USAGE b/vendor/plugins/rspec_on_rails/generators/rspec_model/USAGE
deleted file mode 100755
index a7b781414..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_model/USAGE
+++ /dev/null
@@ -1,18 +0,0 @@
-Description:
- The rspec_model generator creates stubs for a new model.
-
- The generator takes a model name as its argument. The model name may be
- given in CamelCase or under_score and should not be suffixed with 'Model'.
-
- The generator creates a model class in app/models, an RSpec spec in
- spec/models, database fixtures in spec/fixtures/plural_name.yml, and a migration
- in db/migrate.
-
-Example:
- ./script/generate rspec_model Account
-
- This will create an Account model:
- Model: app/models/account.rb
- Spec: spec/models/account_spec.rb
- Fixtures: spec/fixtures/accounts.yml
- Migration: db/migrate/XXX_add_accounts.rb
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_model/rspec_model_generator.rb b/vendor/plugins/rspec_on_rails/generators/rspec_model/rspec_model_generator.rb
deleted file mode 100755
index 7f5e34948..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_model/rspec_model_generator.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-require 'rails_generator/generators/components/model/model_generator'
-
-class RspecModelGenerator < ModelGenerator
-
- def manifest
-
- record do |m|
- # Check for class naming collisions.
- m.class_collisions class_path, class_name
-
- # Model, spec, and fixture directories.
- m.directory File.join('app/models', class_path)
- m.directory File.join('spec/models', class_path)
- m.directory File.join('spec/fixtures', class_path)
-
- # Model class, spec and fixtures.
- m.template 'model:model.rb', File.join('app/models', class_path, "#{file_name}.rb")
- m.template 'model:fixtures.yml', File.join('spec/fixtures', class_path, "#{table_name}.yml")
- m.template 'model_spec.rb', File.join('spec/models', class_path, "#{file_name}_spec.rb")
-
- unless options[:skip_migration]
- m.migration_template 'model:migration.rb', 'db/migrate', :assigns => {
- :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}"
- }, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"
- end
-
- end
- end
-
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_model/templates/model_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_model/templates/model_spec.rb
deleted file mode 100755
index 648908b4c..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_model/templates/model_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
-
-describe <%= class_name %> do
- before(:each) do
- @<%= file_name %> = <%= class_name %>.new
- end
-
- it "should be valid" do
- @<%= file_name %>.should be_valid
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb
deleted file mode 100644
index 0dab8250b..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/rspec_scaffold_generator.rb
+++ /dev/null
@@ -1,167 +0,0 @@
-class RspecScaffoldGenerator < Rails::Generator::NamedBase
- default_options :skip_migration => false
-
- attr_reader :controller_name,
- :controller_class_path,
- :controller_file_path,
- :controller_class_nesting,
- :controller_class_nesting_depth,
- :controller_class_name,
- :controller_singular_name,
- :controller_plural_name,
- :resource_edit_path,
- :default_file_extension
- alias_method :controller_file_name, :controller_singular_name
- alias_method :controller_table_name, :controller_plural_name
-
- def initialize(runtime_args, runtime_options = {})
- super
-
- @controller_name = @name.pluralize
-
- base_name, @controller_class_path, @controller_file_path, @controller_class_nesting, @controller_class_nesting_depth = extract_modules(@controller_name)
- @controller_class_name_without_nesting, @controller_singular_name, @controller_plural_name = inflect_names(base_name)
-
- if @controller_class_nesting.empty?
- @controller_class_name = @controller_class_name_without_nesting
- else
- @controller_class_name = "#{@controller_class_nesting}::#{@controller_class_name_without_nesting}"
- end
-
- if Rails::VERSION::STRING < "2.0.0"
- @resource_generator = "scaffold_resource"
- @default_file_extension = "rhtml"
- else
- @resource_generator = "scaffold"
- @default_file_extension = "html.erb"
- end
-
- if ActionController::Base.respond_to?(:resource_action_separator)
- @resource_edit_path = "/edit"
- else
- @resource_edit_path = ";edit"
- end
- end
-
- def manifest
- record do |m|
-
- # Check for class naming collisions.
- m.class_collisions(controller_class_path, "#{controller_class_name}Controller", "#{controller_class_name}Helper")
- m.class_collisions(class_path, "#{class_name}")
-
- # Controller, helper, views, and spec directories.
- m.directory(File.join('app/models', class_path))
- m.directory(File.join('app/controllers', controller_class_path))
- m.directory(File.join('app/helpers', controller_class_path))
- m.directory(File.join('app/views', controller_class_path, controller_file_name))
- m.directory(File.join('spec/controllers', controller_class_path))
- m.directory(File.join('spec/models', class_path))
- m.directory(File.join('spec/helpers', class_path))
- m.directory File.join('spec/fixtures', class_path)
- m.directory File.join('spec/views', controller_class_path, controller_file_name)
-
- # Controller spec, class, and helper.
- m.template 'rspec_scaffold:routing_spec.rb',
- File.join('spec/controllers', controller_class_path, "#{controller_file_name}_routing_spec.rb")
-
- m.template 'rspec_scaffold:controller_spec.rb',
- File.join('spec/controllers', controller_class_path, "#{controller_file_name}_controller_spec.rb")
-
- m.template "#{@resource_generator}:controller.rb",
- File.join('app/controllers', controller_class_path, "#{controller_file_name}_controller.rb")
-
- m.template 'rspec_scaffold:helper_spec.rb',
- File.join('spec/helpers', class_path, "#{controller_file_name}_helper_spec.rb")
-
- m.template "#{@resource_generator}:helper.rb",
- File.join('app/helpers', controller_class_path, "#{controller_file_name}_helper.rb")
-
- for action in scaffold_views
- m.template(
- "#{@resource_generator}:view_#{action}.#{@default_file_extension}",
- File.join('app/views', controller_class_path, controller_file_name, "#{action}.#{default_file_extension}")
- )
- end
-
- # Model class, unit test, and fixtures.
- m.template 'model:model.rb', File.join('app/models', class_path, "#{file_name}.rb")
- m.template 'model:fixtures.yml', File.join('spec/fixtures', class_path, "#{table_name}.yml")
- m.template 'rspec_model:model_spec.rb', File.join('spec/models', class_path, "#{file_name}_spec.rb")
-
- # View specs
- m.template "rspec_scaffold:edit_erb_spec.rb",
- File.join('spec/views', controller_class_path, controller_file_name, "edit.#{default_file_extension}_spec.rb")
- m.template "rspec_scaffold:index_erb_spec.rb",
- File.join('spec/views', controller_class_path, controller_file_name, "index.#{default_file_extension}_spec.rb")
- m.template "rspec_scaffold:new_erb_spec.rb",
- File.join('spec/views', controller_class_path, controller_file_name, "new.#{default_file_extension}_spec.rb")
- m.template "rspec_scaffold:show_erb_spec.rb",
- File.join('spec/views', controller_class_path, controller_file_name, "show.#{default_file_extension}_spec.rb")
-
- unless options[:skip_migration]
- m.migration_template(
- 'model:migration.rb', 'db/migrate',
- :assigns => {
- :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}",
- :attributes => attributes
- },
- :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"
- )
- end
-
- m.route_resources controller_file_name
-
- end
- end
-
- protected
- # Override with your own usage banner.
- def banner
- "Usage: #{$0} rspec_scaffold ModelName [field:type field:type]"
- end
-
- def add_options!(opt)
- opt.separator ''
- opt.separator 'Options:'
- opt.on("--skip-migration",
- "Don't generate a migration file for this model") { |v| options[:skip_migration] = v }
- end
-
- def scaffold_views
- %w[ index show new edit ]
- end
-
- def model_name
- class_name.demodulize
- end
-end
-
-module Rails
- module Generator
- class GeneratedAttribute
- def default_value
- @default_value ||= case type
- when :int, :integer then "\"1\""
- when :float then "\"1.5\""
- when :decimal then "\"9.99\""
- when :datetime, :timestamp, :time then "Time.now"
- when :date then "Date.today"
- when :string then "\"MyString\""
- when :text then "\"MyText\""
- when :boolean then "false"
- else
- ""
- end
- end
-
- def input_type
- @input_type ||= case type
- when :text then "textarea"
- else
- "input"
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb
deleted file mode 100755
index ae7b1a701..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/controller_spec.rb
+++ /dev/null
@@ -1,313 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
-
-describe <%= controller_class_name %>Controller do
- describe "handling GET /<%= table_name %>" do
-
- before(:each) do
- @<%= file_name %> = mock_model(<%= class_name %>)
- <%= class_name %>.stub!(:find).and_return([@<%= file_name %>])
- end
-
- def do_get
- get :index
- end
-
- it "should be successful" do
- do_get
- response.should be_success
- end
-
- it "should render index template" do
- do_get
- response.should render_template('index')
- end
-
- it "should find all <%= table_name %>" do
- <%= class_name %>.should_receive(:find).with(:all).and_return([@<%= file_name %>])
- do_get
- end
-
- it "should assign the found <%= table_name %> for the view" do
- do_get
- assigns[:<%= table_name %>].should == [@<%= file_name %>]
- end
- end
-
- describe "handling GET /<%= table_name %>.xml" do
-
- before(:each) do
- @<%= file_name.pluralize %> = mock("Array of <%= class_name.pluralize %>", :to_xml => "XML")
- <%= class_name %>.stub!(:find).and_return(@<%= file_name.pluralize %>)
- end
-
- def do_get
- @request.env["HTTP_ACCEPT"] = "application/xml"
- get :index
- end
-
- it "should be successful" do
- do_get
- response.should be_success
- end
-
- it "should find all <%= table_name %>" do
- <%= class_name %>.should_receive(:find).with(:all).and_return(@<%= file_name.pluralize %>)
- do_get
- end
-
- it "should render the found <%= table_name %> as xml" do
- @<%= file_name.pluralize %>.should_receive(:to_xml).and_return("XML")
- do_get
- response.body.should == "XML"
- end
- end
-
- describe "handling GET /<%= table_name %>/1" do
-
- before(:each) do
- @<%= file_name %> = mock_model(<%= class_name %>)
- <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
- end
-
- def do_get
- get :show, :id => "1"
- end
-
- it "should be successful" do
- do_get
- response.should be_success
- end
-
- it "should render show template" do
- do_get
- response.should render_template('show')
- end
-
- it "should find the <%= file_name %> requested" do
- <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
- do_get
- end
-
- it "should assign the found <%= file_name %> for the view" do
- do_get
- assigns[:<%= file_name %>].should equal(@<%= file_name %>)
- end
- end
-
- describe "handling GET /<%= table_name %>/1.xml" do
-
- before(:each) do
- @<%= file_name %> = mock_model(<%= class_name %>, :to_xml => "XML")
- <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
- end
-
- def do_get
- @request.env["HTTP_ACCEPT"] = "application/xml"
- get :show, :id => "1"
- end
-
- it "should be successful" do
- do_get
- response.should be_success
- end
-
- it "should find the <%= file_name %> requested" do
- <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
- do_get
- end
-
- it "should render the found <%= file_name %> as xml" do
- @<%= file_name %>.should_receive(:to_xml).and_return("XML")
- do_get
- response.body.should == "XML"
- end
- end
-
- describe "handling GET /<%= table_name %>/new" do
-
- before(:each) do
- @<%= file_name %> = mock_model(<%= class_name %>)
- <%= class_name %>.stub!(:new).and_return(@<%= file_name %>)
- end
-
- def do_get
- get :new
- end
-
- it "should be successful" do
- do_get
- response.should be_success
- end
-
- it "should render new template" do
- do_get
- response.should render_template('new')
- end
-
- it "should create an new <%= file_name %>" do
- <%= class_name %>.should_receive(:new).and_return(@<%= file_name %>)
- do_get
- end
-
- it "should not save the new <%= file_name %>" do
- @<%= file_name %>.should_not_receive(:save)
- do_get
- end
-
- it "should assign the new <%= file_name %> for the view" do
- do_get
- assigns[:<%= file_name %>].should equal(@<%= file_name %>)
- end
- end
-
- describe "handling GET /<%= table_name %>/1/edit" do
-
- before(:each) do
- @<%= file_name %> = mock_model(<%= class_name %>)
- <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
- end
-
- def do_get
- get :edit, :id => "1"
- end
-
- it "should be successful" do
- do_get
- response.should be_success
- end
-
- it "should render edit template" do
- do_get
- response.should render_template('edit')
- end
-
- it "should find the <%= file_name %> requested" do
- <%= class_name %>.should_receive(:find).and_return(@<%= file_name %>)
- do_get
- end
-
- it "should assign the found <%= class_name %> for the view" do
- do_get
- assigns[:<%= file_name %>].should equal(@<%= file_name %>)
- end
- end
-
- describe "handling POST /<%= table_name %>" do
-
- before(:each) do
- @<%= file_name %> = mock_model(<%= class_name %>, :to_param => "1")
- <%= class_name %>.stub!(:new).and_return(@<%= file_name %>)
- end
-
- describe "with successful save" do
-
- def do_post
- @<%= file_name %>.should_receive(:save).and_return(true)
- post :create, :<%= file_name %> => {}
- end
-
- it "should create a new <%= file_name %>" do
- <%= class_name %>.should_receive(:new).with({}).and_return(@<%= file_name %>)
- do_post
- end
-
- it "should redirect to the new <%= file_name %>" do
- do_post
- response.should redirect_to(<%= table_name.singularize %>_url("1"))
- end
-
- end
-
- describe "with failed save" do
-
- def do_post
- @<%= file_name %>.should_receive(:save).and_return(false)
- post :create, :<%= file_name %> => {}
- end
-
- it "should re-render 'new'" do
- do_post
- response.should render_template('new')
- end
-
- end
- end
-
- describe "handling PUT /<%= table_name %>/1" do
-
- before(:each) do
- @<%= file_name %> = mock_model(<%= class_name %>, :to_param => "1")
- <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
- end
-
- describe "with successful update" do
-
- def do_put
- @<%= file_name %>.should_receive(:update_attributes).and_return(true)
- put :update, :id => "1"
- end
-
- it "should find the <%= file_name %> requested" do
- <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
- do_put
- end
-
- it "should update the found <%= file_name %>" do
- do_put
- assigns(:<%= file_name %>).should equal(@<%= file_name %>)
- end
-
- it "should assign the found <%= file_name %> for the view" do
- do_put
- assigns(:<%= file_name %>).should equal(@<%= file_name %>)
- end
-
- it "should redirect to the <%= file_name %>" do
- do_put
- response.should redirect_to(<%= table_name.singularize %>_url("1"))
- end
-
- end
-
- describe "with failed update" do
-
- def do_put
- @<%= file_name %>.should_receive(:update_attributes).and_return(false)
- put :update, :id => "1"
- end
-
- it "should re-render 'edit'" do
- do_put
- response.should render_template('edit')
- end
-
- end
- end
-
- describe "handling DELETE /<%= table_name %>/1" do
-
- before(:each) do
- @<%= file_name %> = mock_model(<%= class_name %>, :destroy => true)
- <%= class_name %>.stub!(:find).and_return(@<%= file_name %>)
- end
-
- def do_delete
- delete :destroy, :id => "1"
- end
-
- it "should find the <%= file_name %> requested" do
- <%= class_name %>.should_receive(:find).with("1").and_return(@<%= file_name %>)
- do_delete
- end
-
- it "should call destroy on the found <%= file_name %>" do
- @<%= file_name %>.should_receive(:destroy)
- do_delete
- end
-
- it "should redirect to the <%= table_name %> list" do
- do_delete
- response.should redirect_to(<%= table_name %>_url)
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/edit_erb_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/edit_erb_spec.rb
deleted file mode 100644
index 86e23a27e..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/edit_erb_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper')
-
-describe "/<%= table_name %>/edit.<%= default_file_extension %>" do
- include <%= controller_class_name %>Helper
-
- before do
- @<%= file_name %> = mock_model(<%= class_name %>)
-<% for attribute in attributes -%>
- @<%= file_name %>.stub!(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
-<% end -%>
- assigns[:<%= file_name %>] = @<%= file_name %>
- end
-
- it "should render edit form" do
- render "/<%= table_name %>/edit.<%= default_file_extension %>"
-
- response.should have_tag("form[action=#{<%= file_name %>_path(@<%= file_name %>)}][method=post]") do
-<% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
- with_tag('<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>[name=?]', "<%= file_name %>[<%= attribute.name %>]")
-<% end -%><% end -%>
- end
- end
-end
-
-
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb
deleted file mode 100644
index 900b027aa..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/helper_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
-
-describe <%= controller_class_name %>Helper do
-
- #Delete this example and add some real ones or delete this file
- it "should be included in the object returned by #helper" do
- included_modules = (class << helper; self; end).send :included_modules
- included_modules.should include(<%= controller_class_name %>Helper)
- end
-
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb
deleted file mode 100644
index 660c284f5..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/index_erb_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper')
-
-describe "/<%= table_name %>/index.<%= default_file_extension %>" do
- include <%= controller_class_name %>Helper
-
- before(:each) do
-<% [98,99].each do |id| -%>
- <%= file_name %>_<%= id %> = mock_model(<%= class_name %>)
-<% for attribute in attributes -%>
- <%= file_name %>_<%= id %>.should_receive(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
-<% end -%><% end %>
- assigns[:<%= table_name %>] = [<%= file_name %>_98, <%= file_name %>_99]
- end
-
- it "should render list of <%= table_name %>" do
- render "/<%= table_name %>/index.<%= default_file_extension %>"
-<% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
- response.should have_tag("tr>td", <%= attribute.default_value %>, 2)
-<% end -%><% end -%>
- end
-end
-
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb
deleted file mode 100644
index f0442e9b1..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/new_erb_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper')
-
-describe "/<%= table_name %>/new.<%= default_file_extension %>" do
- include <%= controller_class_name %>Helper
-
- before(:each) do
- @<%= file_name %> = mock_model(<%= class_name %>)
- @<%= file_name %>.stub!(:new_record?).and_return(true)
-<% for attribute in attributes -%>
- @<%= file_name %>.stub!(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
-<% end -%>
- assigns[:<%= file_name %>] = @<%= file_name %>
- end
-
- it "should render new form" do
- render "/<%= table_name %>/new.<%= default_file_extension %>"
-
- response.should have_tag("form[action=?][method=post]", <%= table_name %>_path) do
-<% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
- with_tag("<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>[name=?]", "<%= file_name %>[<%= attribute.name %>]")
-<% end -%><% end -%>
- end
- end
-end
-
-
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/routing_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/routing_spec.rb
deleted file mode 100644
index ca53a7caa..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/routing_spec.rb
+++ /dev/null
@@ -1,61 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../spec_helper')
-
-describe <%= controller_class_name %>Controller do
- describe "route generation" do
-
- it "should map { :controller => '<%= table_name %>', :action => 'index' } to /<%= table_name %>" do
- route_for(:controller => "<%= table_name %>", :action => "index").should == "/<%= table_name %>"
- end
-
- it "should map { :controller => '<%= table_name %>', :action => 'new' } to /<%= table_name %>/new" do
- route_for(:controller => "<%= table_name %>", :action => "new").should == "/<%= table_name %>/new"
- end
-
- it "should map { :controller => '<%= table_name %>', :action => 'show', :id => 1 } to /<%= table_name %>/1" do
- route_for(:controller => "<%= table_name %>", :action => "show", :id => 1).should == "/<%= table_name %>/1"
- end
-
- it "should map { :controller => '<%= table_name %>', :action => 'edit', :id => 1 } to /<%= table_name %>/1<%= resource_edit_path %>" do
- route_for(:controller => "<%= table_name %>", :action => "edit", :id => 1).should == "/<%= table_name %>/1<%= resource_edit_path %>"
- end
-
- it "should map { :controller => '<%= table_name %>', :action => 'update', :id => 1} to /<%= table_name %>/1" do
- route_for(:controller => "<%= table_name %>", :action => "update", :id => 1).should == "/<%= table_name %>/1"
- end
-
- it "should map { :controller => '<%= table_name %>', :action => 'destroy', :id => 1} to /<%= table_name %>/1" do
- route_for(:controller => "<%= table_name %>", :action => "destroy", :id => 1).should == "/<%= table_name %>/1"
- end
- end
-
- describe "route recognition" do
-
- it "should generate params { :controller => '<%= table_name %>', action => 'index' } from GET /<%= table_name %>" do
- params_from(:get, "/<%= table_name %>").should == {:controller => "<%= table_name %>", :action => "index"}
- end
-
- it "should generate params { :controller => '<%= table_name %>', action => 'new' } from GET /<%= table_name %>/new" do
- params_from(:get, "/<%= table_name %>/new").should == {:controller => "<%= table_name %>", :action => "new"}
- end
-
- it "should generate params { :controller => '<%= table_name %>', action => 'create' } from POST /<%= table_name %>" do
- params_from(:post, "/<%= table_name %>").should == {:controller => "<%= table_name %>", :action => "create"}
- end
-
- it "should generate params { :controller => '<%= table_name %>', action => 'show', id => '1' } from GET /<%= table_name %>/1" do
- params_from(:get, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "show", :id => "1"}
- end
-
- it "should generate params { :controller => '<%= table_name %>', action => 'edit', id => '1' } from GET /<%= table_name %>/1;edit" do
- params_from(:get, "/<%= table_name %>/1<%= resource_edit_path %>").should == {:controller => "<%= table_name %>", :action => "edit", :id => "1"}
- end
-
- it "should generate params { :controller => '<%= table_name %>', action => 'update', id => '1' } from PUT /<%= table_name %>/1" do
- params_from(:put, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "update", :id => "1"}
- end
-
- it "should generate params { :controller => '<%= table_name %>', action => 'destroy', id => '1' } from DELETE /<%= table_name %>/1" do
- params_from(:delete, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "destroy", :id => "1"}
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb b/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb
deleted file mode 100644
index 36dae5490..000000000
--- a/vendor/plugins/rspec_on_rails/generators/rspec_scaffold/templates/show_erb_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../../spec_helper')
-
-describe "/<%= table_name %>/show.<%= default_file_extension %>" do
- include <%= controller_class_name %>Helper
-
- before(:each) do
- @<%= file_name %> = mock_model(<%= class_name %>)
-<% for attribute in attributes -%>
- @<%= file_name %>.stub!(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
-<% end -%>
-
- assigns[:<%= file_name %>] = @<%= file_name %>
- end
-
- it "should render attributes in <p>" do
- render "/<%= table_name %>/show.<%= default_file_extension %>"
-<% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
- response.should have_text(/<%= Regexp.escape(attribute.default_value)[1..-2]%>/)
-<% end -%><% end -%>
- end
-end
-
diff --git a/vendor/plugins/rspec_on_rails/init.rb b/vendor/plugins/rspec_on_rails/init.rb
deleted file mode 100644
index 6262f0368..000000000
--- a/vendor/plugins/rspec_on_rails/init.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# Placeholder to satisfy Rails.
-#
-# Do NOT add any require statements to this file. Doing
-# so will cause Rails to load this plugin all of the time.
-#
-# Running 'ruby script/generate rspec' will
-# generate spec/spec_helper.rb, which includes the necessary
-# require statements and configuration. This file should
-# be required by all of your spec files. \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/lib/autotest/discover.rb b/vendor/plugins/rspec_on_rails/lib/autotest/discover.rb
deleted file mode 100644
index 8e6968e20..000000000
--- a/vendor/plugins/rspec_on_rails/lib/autotest/discover.rb
+++ /dev/null
@@ -1 +0,0 @@
-# This needs to be here for >= ZenTest-3.9.0 to add this directory to the load path. \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb b/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb
deleted file mode 100644
index c6fe446b1..000000000
--- a/vendor/plugins/rspec_on_rails/lib/autotest/rails_rspec.rb
+++ /dev/null
@@ -1,81 +0,0 @@
-# (c) Copyright 2006 Nick Sieger <nicksieger@gmail.com>
-#
-# 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.
-
-$:.push(*Dir["vendor/rails/*/lib"])
-
-require 'active_support'
-require 'autotest/rspec'
-
-Autotest.add_hook :initialize do |at|
- %w{config/ coverage/ db/ doc/ log/ public/ script/ tmp/ vendor/rails vendor/plugins previous_failures.txt}.each do |exception|
- at.add_exception(exception)
- end
-
- at.clear_mappings
-
- at.add_mapping(%r%^(test|spec)/fixtures/(.*).yml$%) { |_, m|
- ["spec/models/#{m[2].singularize}_spec.rb"] + at.files_matching(%r%^spec\/views\/#{m[2]}/.*_spec\.rb$%)
- }
- at.add_mapping(%r%^spec/(models|controllers|views|helpers|lib)/.*rb$%) { |filename, _|
- filename
- }
- at.add_mapping(%r%^app/models/(.*)\.rb$%) { |_, m|
- ["spec/models/#{m[1]}_spec.rb"]
- }
- at.add_mapping(%r%^app/views/(.*)$%) { |_, m|
- at.files_matching %r%^spec/views/#{m[1]}_spec.rb$%
- }
- at.add_mapping(%r%^app/controllers/(.*)\.rb$%) { |_, m|
- if m[1] == "application"
- at.files_matching %r%^spec/controllers/.*_spec\.rb$%
- else
- ["spec/controllers/#{m[1]}_spec.rb"]
- end
- }
- at.add_mapping(%r%^app/helpers/(.*)_helper\.rb$%) { |_, m|
- if m[1] == "application" then
- at.files_matching(%r%^spec/(views|helpers)/.*_spec\.rb$%)
- else
- ["spec/helpers/#{m[1]}_helper_spec.rb"] + at.files_matching(%r%^spec\/views\/#{m[1]}/.*_spec\.rb$%)
- end
- }
- at.add_mapping(%r%^config/routes\.rb$%) {
- at.files_matching %r%^spec/(controllers|views|helpers)/.*_spec\.rb$%
- }
- at.add_mapping(%r%^config/database\.yml$%) { |_, m|
- at.files_matching %r%^spec/models/.*_spec\.rb$%
- }
- at.add_mapping(%r%^(spec/(spec_helper|shared/.*)|config/(boot|environment(s/test)?))\.rb$%) {
- at.files_matching %r%^spec/(models|controllers|views|helpers)/.*_spec\.rb$%
- }
- at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m|
- ["spec/lib/#{m[1]}_spec.rb"]
- }
-end
-
-class Autotest::RailsRspec < Autotest::Rspec
-
- def spec_command
- "script/spec"
- end
-
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails.rb
deleted file mode 100644
index 74fc3929b..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails.rb
+++ /dev/null
@@ -1,52 +0,0 @@
-silence_warnings { RAILS_ENV = "test" }
-
-require 'application'
-require 'action_controller/test_process'
-require 'action_controller/integration'
-require 'active_record/fixtures' if defined?(ActiveRecord::Base)
-require 'test/unit'
-
-require 'spec'
-
-require 'spec/rails/matchers'
-require 'spec/rails/mocks'
-require 'spec/rails/example'
-require 'spec/rails/extensions'
-require 'spec/rails/version'
-
-module Spec
- # = Spec::Rails
- #
- # Spec::Rails (a.k.a. RSpec on Rails) is a Ruby on Rails plugin that allows you to drive the development
- # of your RoR application using RSpec, a framework that aims to enable Example Driven Development
- # in Ruby.
- #
- # == Features
- #
- # * Use RSpec to independently specify Rails Models, Views, Controllers and Helpers
- # * Integrated fixture loading
- # * Special generators for Resources, Models, Views and Controllers that generate Specs instead of Tests.
- #
- # == Vision
- #
- # For people for whom TDD is a brand new concept, the testing support built into Ruby on Rails
- # is a huge leap forward. The fact that it is built right in is fantastic, and Ruby on Rails
- # apps are generally much easier to maintain than they might have been without such support.
- #
- # For those of us coming from a history with TDD, and now BDD, the existing support presents some problems related to dependencies across specs. To that end, RSpec on Rails supports 4 types of specs. We’ve also built in first class mocking and stubbing support in order to break dependencies across these different concerns.
- #
- # == More Information
- #
- # See Spec::Rails::Runner for information about the different kinds of contexts
- # you can use to spec the different Rails components
- #
- # See Spec::Rails::Expectations for information about Rails-specific expectations
- # you can set on responses and models, etc.
- #
- # == License
- #
- # RSpec on Rails is licensed under the same license as RSpec itself,
- # the MIT-LICENSE.
- module Rails
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/example.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/example.rb
deleted file mode 100644
index f104f51e5..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/example.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-dir = File.dirname(__FILE__)
-
-require 'spec/rails/example/assigns_hash_proxy'
-
-require "spec/rails/example/render_observer"
-require "spec/rails/example/rails_example_group"
-require "spec/rails/example/model_example_group"
-require "spec/rails/example/functional_example_group"
-require "spec/rails/example/controller_example_group"
-require "spec/rails/example/helper_example_group"
-require "spec/rails/example/view_example_group"
-
-module Spec
- module Rails
- # Spec::Rails::Example extends Spec::Example (RSpec's core Example module) to provide
- # Rails-specific contexts for describing Rails Models, Views, Controllers and Helpers.
- #
- # == Model Examples
- #
- # These are the equivalent of unit tests in Rails' built in testing. Ironically (for the traditional TDD'er) these are the only specs that we feel should actually interact with the database.
- #
- # See Spec::Rails::Example::ModelExampleGroup
- #
- # == Controller Examples
- #
- # These align somewhat with functional tests in rails, except that they do not actually render views (though you can force rendering of views if you prefer). Instead of setting expectations about what goes on a page, you set expectations about what templates get rendered.
- #
- # See Spec::Rails::Example::ControllerExampleGroup
- #
- # == View Examples
- #
- # This is the other half of Rails functional testing. View specs allow you to set up assigns and render
- # a template. By assigning mock model data, you can specify view behaviour with no dependency on a database
- # or your real models.
- #
- # See Spec::Rails::Example::ViewExampleGroup
- #
- # == Helper Examples
- #
- # These let you specify directly methods that live in your helpers.
- #
- # See Spec::Rails::Example::HelperExampleGroup
- module Example
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/assigns_hash_proxy.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/example/assigns_hash_proxy.rb
deleted file mode 100644
index c8a7d0662..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/assigns_hash_proxy.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-module Spec
- module Rails
- module Example
- class AssignsHashProxy #:nodoc:
- def initialize(object)
- @object = object
- end
-
- def [](ivar)
- if assigns.include?(ivar.to_s)
- assigns[ivar.to_s]
- elsif assigns.include?(ivar)
- assigns[ivar]
- else
- nil
- end
- end
-
- def []=(ivar, val)
- @object.instance_variable_set "@#{ivar}", val
- assigns[ivar.to_s] = val
- end
-
- def delete(name)
- assigns.delete(name.to_s)
- end
-
- def each(&block)
- assigns.each &block
- end
-
- def has_key?(key)
- assigns.key?(key.to_s)
- end
-
- protected
- def assigns
- @object.assigns
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/controller_example_group.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/example/controller_example_group.rb
deleted file mode 100644
index a686b6a39..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/controller_example_group.rb
+++ /dev/null
@@ -1,271 +0,0 @@
-module Spec
- module Rails
- module Example
- # Controller Examples live in $RAILS_ROOT/spec/controllers/.
- #
- # Controller Examples use Spec::Rails::Example::ControllerExampleGroup, which supports running specs for
- # Controllers in two modes, which represent the tension between the more granular
- # testing common in TDD and the more high level testing built into
- # rails. BDD sits somewhere in between: we want to a balance between
- # specs that are close enough to the code to enable quick fault
- # isolation and far enough away from the code to enable refactoring
- # with minimal changes to the existing specs.
- #
- # == Isolation mode (default)
- #
- # No dependencies on views because none are ever rendered. The
- # benefit of this mode is that can spec the controller completely
- # independent of the view, allowing that responsibility to be
- # handled later, or by somebody else. Combined w/ separate view
- # specs, this also provides better fault isolation.
- #
- # == Integration mode
- #
- # To run in this mode, include the +integrate_views+ declaration
- # in your controller context:
- #
- # describe ThingController do
- # integrate_views
- # ...
- #
- # In this mode, controller specs are run in the same way that
- # rails functional tests run - one set of tests for both the
- # controllers and the views. The benefit of this approach is that
- # you get wider coverage from each spec. Experienced rails
- # developers may find this an easier approach to begin with, however
- # we encourage you to explore using the isolation mode and revel
- # in its benefits.
- #
- # == Expecting Errors
- #
- # Rspec on Rails will raise errors that occur in controller actions.
- # In contrast, Rails will swallow errors that are raised in controller
- # actions and return an error code in the header. If you wish to override
- # Rspec and have Rail's default behaviour,tell the controller to use
- # rails error handling ...
- #
- # before(:each) do
- # controller.use_rails_error_handling!
- # end
- #
- # When using Rail's error handling, you can expect error codes in headers ...
- #
- # it "should return an error in the header" do
- # response.should be_error
- # end
- #
- # it "should return a 501" do
- # response.response_code.should == 501
- # end
- #
- # it "should return a 501" do
- # response.code.should == "501"
- # end
- class ControllerExampleGroup < FunctionalExampleGroup
- class << self
-
- # Use this to instruct RSpec to render views in your controller examples (Integration Mode).
- #
- # describe ThingController do
- # integrate_views
- # ...
- #
- # See Spec::Rails::Example::ControllerExampleGroup for more information about
- # Integration and Isolation modes.
- def integrate_views(integrate_views = true)
- @integrate_views = integrate_views
- end
-
- def integrate_views? # :nodoc:
- @integrate_views
- end
-
- def inherited(klass) # :nodoc:
- klass.controller_class_name = controller_class_name
- klass.integrate_views(integrate_views?)
- super
- end
-
- # You MUST provide a controller_name within the context of
- # your controller specs:
- #
- # describe "ThingController" do
- # controller_name :thing
- # ...
- def controller_name(name)
- @controller_class_name = "#{name}_controller".camelize
- end
- attr_accessor :controller_class_name # :nodoc:
- end
-
- before(:each) do
- # Some Rails apps explicitly disable ActionMailer in environment.rb
- if defined?(ActionMailer)
- @deliveries = []
- ActionMailer::Base.deliveries = @deliveries
- end
-
- unless @controller.class.ancestors.include?(ActionController::Base)
- Spec::Expectations.fail_with <<-EOE
- You have to declare the controller name in controller specs. For example:
- describe "The ExampleController" do
- controller_name "example" #invokes the ExampleController
- end
- EOE
- end
- (class << @controller; self; end).class_eval do
- def controller_path #:nodoc:
- self.class.name.underscore.gsub('_controller', '')
- end
- include ControllerInstanceMethods
- end
- @controller.integrate_views! if @integrate_views
- @controller.session = session
- end
-
- attr_reader :response, :request, :controller
-
- def initialize(defined_description, &implementation) #:nodoc:
- super
- controller_class_name = self.class.controller_class_name
- if controller_class_name
- @controller_class_name = controller_class_name.to_s
- else
- @controller_class_name = self.class.described_type.to_s
- end
- @integrate_views = self.class.integrate_views?
- end
-
- # Uses ActionController::Routing::Routes to generate
- # the correct route for a given set of options.
- # == Example
- # route_for(:controller => 'registrations', :action => 'edit', :id => 1)
- # => '/registrations/1;edit'
- def route_for(options)
- ensure_that_routes_are_loaded
- ActionController::Routing::Routes.generate(options)
- end
-
- # Uses ActionController::Routing::Routes to parse
- # an incoming path so the parameters it generates can be checked
- # == Example
- # params_from(:get, '/registrations/1;edit')
- # => :controller => 'registrations', :action => 'edit', :id => 1
- def params_from(method, path)
- ensure_that_routes_are_loaded
- ActionController::Routing::Routes.recognize_path(path, :method => method)
- end
-
- protected
- def _assigns_hash_proxy
- @_assigns_hash_proxy ||= AssignsHashProxy.new @controller
- end
-
- private
- def ensure_that_routes_are_loaded
- ActionController::Routing::Routes.reload if ActionController::Routing::Routes.empty?
- end
-
- module ControllerInstanceMethods #:nodoc:
- include Spec::Rails::Example::RenderObserver
-
- # === render(options = nil, deprecated_status_or_extra_options = nil, &block)
- #
- # This gets added to the controller's singleton meta class,
- # allowing Controller Examples to run in two modes, freely switching
- # from context to context.
- def render(options=nil, deprecated_status_or_extra_options=nil, &block)
- if ::Rails::VERSION::STRING >= '2.0.0' && deprecated_status_or_extra_options.nil?
- deprecated_status_or_extra_options = {}
- end
-
- unless block_given?
- unless integrate_views?
- if @template.respond_to?(:finder)
- (class << @template.finder; self; end).class_eval do
- define_method :file_exists? do
- true
- end
- end
- else
- (class << @template; self; end).class_eval do
- define_method :file_exists? do
- true
- end
- end
- end
- (class << @template; self; end).class_eval do
- define_method :render_file do |*args|
- @first_render ||= args[0]
- end
- end
- end
- end
-
- if matching_message_expectation_exists(options)
- expect_render_mock_proxy.render(options, &block)
- @performed_render = true
- else
- unless matching_stub_exists(options)
- super(options, deprecated_status_or_extra_options, &block)
- end
- end
- end
-
- def raise_with_disable_message(old_method, new_method)
- raise %Q|
- controller.#{old_method}(:render) has been disabled because it
- can often produce unexpected results. Instead, you should
- use the following (before the action):
-
- controller.#{new_method}(*args)
-
- See the rdoc for #{new_method} for more information.
- |
- end
- def should_receive(*args)
- if args[0] == :render
- raise_with_disable_message("should_receive", "expect_render")
- else
- super
- end
- end
- def stub!(*args)
- if args[0] == :render
- raise_with_disable_message("stub!", "stub_render")
- else
- super
- end
- end
-
- def response(&block)
- # NOTE - we're setting @update for the assert_select_spec - kinda weird, huh?
- @update = block
- @_response || @response
- end
-
- def integrate_views!
- @integrate_views = true
- end
-
- private
-
- def integrate_views?
- @integrate_views
- end
-
- def matching_message_expectation_exists(options)
- expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options)
- end
-
- def matching_stub_exists(options)
- expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_method_stub, :render, options)
- end
-
- end
-
- Spec::Example::ExampleGroupFactory.register(:controller, self)
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/functional_example_group.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/example/functional_example_group.rb
deleted file mode 100644
index 6bdb1823a..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/functional_example_group.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-module Spec
- module Rails
- module Example
- class FunctionalExampleGroup < RailsExampleGroup
- include ActionController::TestProcess
- include ActionController::Assertions
-
- attr_reader :request, :response
- before(:each) do
- @controller_class = Object.path2class @controller_class_name
- raise "Can't determine controller class for #{@controller_class_name}" if @controller_class.nil?
-
- @controller = @controller_class.new
- @request = ActionController::TestRequest.new
- @response = ActionController::TestResponse.new
- @response.session = @request.session
- end
-
- def params
- request.parameters
- end
-
- def flash
- response.flash
- end
-
- def session
- @response.session
- end
-
- # :call-seq:
- # assigns()
- #
- # Hash of instance variables to values that are made available to
- # views. == Examples
- #
- # #in thing_controller.rb
- # def new
- # @thing = Thing.new
- # end
- #
- # #in thing_controller_spec
- # get 'new'
- # assigns[:registration].should == Thing.new
- #--
- # NOTE - Even though docs only use assigns[:key] format, this supports
- # assigns(:key) in order to avoid breaking old specs.
- #++
- def assigns(key = nil)
- if key.nil?
- _assigns_hash_proxy
- else
- _assigns_hash_proxy[key]
- end
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/helper_example_group.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/example/helper_example_group.rb
deleted file mode 100644
index 7e60728ef..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/helper_example_group.rb
+++ /dev/null
@@ -1,130 +0,0 @@
-module Spec
- module Rails
- module Example
- # Helper Specs live in $RAILS_ROOT/spec/helpers/.
- #
- # Helper Specs use Spec::Rails::Example::HelperExampleGroup, which allows you to
- # include your Helper directly in the context and write specs directly
- # against its methods.
- #
- # HelperExampleGroup also includes the standard lot of ActionView::Helpers in case your
- # helpers rely on any of those.
- #
- # == Example
- #
- # class ThingHelper
- # def number_of_things
- # Thing.count
- # end
- # end
- #
- # describe "ThingHelper example_group" do
- # include ThingHelper
- # it "should tell you the number of things" do
- # Thing.should_receive(:count).and_return(37)
- # number_of_things.should == 37
- # end
- # end
- class HelperExampleGroup < FunctionalExampleGroup
- class HelperObject < ActionView::Base
- def protect_against_forgery?
- false
- end
- end
-
- class << self
- # The helper name....
- def helper_name(name=nil)
- @helper_being_described = "#{name}_helper".camelize.constantize
- send :include, @helper_being_described
- end
-
- def helper
- @helper_object ||= returning HelperObject.new do |helper_object|
- if @helper_being_described.nil?
- if described_type.class == Module
- helper_object.extend described_type
- end
- else
- helper_object.extend @helper_being_described
- end
- end
- end
- end
-
- # Returns an instance of ActionView::Base with the helper being spec'd
- # included.
- #
- # == Example
- #
- # describe PersonHelper do
- # it "should write a link to person with the name" do
- # assigns[:person] = mock_model(Person, :full_name => "Full Name", :id => 37, :new_record? => false)
- # helper.link_to_person.should == %{<a href="/people/37">Full Name</a>}
- # end
- # end
- #
- # module PersonHelper
- # def link_to_person
- # link_to person.full_name, url_for(person)
- # end
- # end
- #
- def helper
- self.class.helper
- end
-
- # Reverse the load order so that custom helpers which are defined last
- # are also loaded last.
- ActionView::Base.included_modules.reverse.each do |mod|
- include mod if mod.parents.include?(ActionView::Helpers)
- end
-
- before(:all) do
- @controller_class_name = 'Spec::Rails::Example::HelperBehaviourController'
- end
-
- before(:each) do
- @controller.request = @request
- @controller.url = ActionController::UrlRewriter.new @request, {} # url_for
-
- @flash = ActionController::Flash::FlashHash.new
- session['flash'] = @flash
-
- ActionView::Helpers::AssetTagHelper::reset_javascript_include_default
- end
-
- def flash
- @flash
- end
-
- def eval_erb(text)
- helper.instance_eval do
- ERB.new(text).result(binding)
- end
- end
-
- # TODO: BT - Helper Examples should proxy method_missing to a Rails View instance.
- # When that is done, remove this method
- def protect_against_forgery?
- false
- end
-
- Spec::Example::ExampleGroupFactory.register(:helper, self)
-
- protected
- def _assigns_hash_proxy
- @_assigns_hash_proxy ||= AssignsHashProxy.new helper
- end
-
- end
-
- class HelperBehaviourController < ApplicationController #:nodoc:
- attr_accessor :request, :url
-
- # Re-raise errors
- def rescue_action(e); raise e; end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/ivar_proxy.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/example/ivar_proxy.rb
deleted file mode 100644
index bf9b790b2..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/ivar_proxy.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-##
-# A wrapper that allows instance variables to be manipulated using +[]+ and
-# +[]=+
-
-module Spec
- module Rails
- module Example
- class IvarProxy #:nodoc:
-
- ##
- # Wraps +object+ allowing its instance variables to be manipulated.
-
- def initialize(object)
- @object = object
- end
-
- ##
- # Retrieves +ivar+ from the wrapped object.
-
- def [](ivar)
- get_variable "@#{ivar}"
- end
-
- ##
- # Sets +ivar+ to +val+ on the wrapped object.
-
- def []=(ivar, val)
- set_variable "@#{ivar}", val
- end
-
- def each
- @object.instance_variables.each do |variable_full_name|
- variable_name = variable_full_name[1...variable_full_name.length]
- yield variable_name, get_variable(variable_full_name)
- end
- end
-
- def delete(key)
- var_name = "@#{key}"
- if @object.instance_variables.include?(var_name)
- @object.send(:remove_instance_variable, var_name)
- else
- return nil
- end
- end
-
- def has_key?(key)
- @object.instance_variables.include?("@#{key}")
- end
-
- protected
- def get_variable(name)
- @object.instance_variable_get name
- end
-
- def set_variable(name, value)
- @object.instance_variable_set name, value
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/model_example_group.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/example/model_example_group.rb
deleted file mode 100644
index 3bdab2591..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/model_example_group.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-module Spec
- module Rails
- module Example
- # Model examples live in $RAILS_ROOT/spec/models/.
- #
- # Model examples use Spec::Rails::Example::ModelExampleGroup, which
- # provides support for fixtures and some custom expectations via extensions
- # to ActiveRecord::Base.
- class ModelExampleGroup < RailsExampleGroup
- Spec::Example::ExampleGroupFactory.register(:model, self)
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/rails_example_group.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/example/rails_example_group.rb
deleted file mode 100644
index 257cc3b99..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/rails_example_group.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require 'spec/interop/test'
-
-module Spec
- module Rails
-
- module Example
- class RailsExampleGroup < Test::Unit::TestCase
-
- # Rails >= r8570 uses setup/teardown_fixtures explicitly
- before(:each) do
- setup_fixtures if self.respond_to?(:setup_fixtures)
- end
- after(:each) do
- teardown_fixtures if self.respond_to?(:teardown_fixtures)
- end
-
- include Spec::Rails::Matchers
- include Spec::Rails::Mocks
-
- Spec::Example::ExampleGroupFactory.default(self)
-
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/render_observer.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/example/render_observer.rb
deleted file mode 100644
index 31086e227..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/render_observer.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-require 'spec/mocks/framework'
-
-module Spec
- module Rails
- module Example
- # Provides specialized mock-like behaviour for controller and view examples,
- # allowing you to mock or stub calls to render with specific arguments while
- # ignoring all other calls.
- module RenderObserver
-
- # Similar to mocking +render+ with the exception that calls to +render+ with
- # any other options are passed on to the receiver (i.e. controller in
- # controller examples, template in view examples).
- #
- # This is necessary because Rails uses the +render+ method on both
- # controllers and templates as a dispatcher to render different kinds of
- # things, sometimes resulting in many calls to the render method within one
- # request. This approach makes it impossible to use a normal mock object, which
- # is designed to observe all incoming messages with a given name.
- #
- # +expect_render+ is auto-verifying, so failures will be reported without
- # requiring you to explicitly request verification.
- #
- # Also, +expect_render+ uses parts of RSpec's mock expectation framework. Because
- # it wraps only a subset of the framework, using this will create no conflict with
- # other mock frameworks if you choose to use them. Additionally, the object returned
- # by expect_render is an RSpec mock object, which means that you can call any of the
- # chained methods available in RSpec's mocks.
- #
- # == Controller Examples
- #
- # controller.expect_render(:partial => 'thing', :object => thing)
- # controller.expect_render(:partial => 'thing', :collection => things).once
- #
- # controller.stub_render(:partial => 'thing', :object => thing)
- # controller.stub_render(:partial => 'thing', :collection => things).twice
- #
- # == View Examples
- #
- # template.expect_render(:partial => 'thing', :object => thing)
- # template.expect_render(:partial => 'thing', :collection => things)
- #
- # template.stub_render(:partial => 'thing', :object => thing)
- # template.stub_render(:partial => 'thing', :collection => things)
- #
- def expect_render(opts={})
- register_verify_after_each
- expect_render_mock_proxy.should_receive(:render, :expected_from => caller(1)[0]).with(opts)
- end
-
- # This is exactly like expect_render, with the exception that the call to render will not
- # be verified. Use this if you are trying to isolate your example from a complicated render
- # operation but don't care whether it is called or not.
- def stub_render(opts={})
- register_verify_after_each
- expect_render_mock_proxy.stub!(:render, :expected_from => caller(1)[0]).with(opts)
- end
-
- def verify_rendered # :nodoc:
- expect_render_mock_proxy.rspec_verify
- end
-
- def unregister_verify_after_each #:nodoc:
- proc = verify_rendered_proc
- Spec::Example::ExampleGroup.remove_after(:each, &proc)
- end
-
- protected
-
- def verify_rendered_proc #:nodoc:
- template = self
- @verify_rendered_proc ||= Proc.new do
- template.verify_rendered
- template.unregister_verify_after_each
- end
- end
-
- def register_verify_after_each #:nodoc:
- proc = verify_rendered_proc
- Spec::Example::ExampleGroup.after(:each, &proc)
- end
-
- def expect_render_mock_proxy #:nodoc:
- @expect_render_mock_proxy ||= Spec::Mocks::Mock.new("expect_render_mock_proxy")
- end
-
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/view_example_group.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/example/view_example_group.rb
deleted file mode 100644
index e77d2fbd8..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/example/view_example_group.rb
+++ /dev/null
@@ -1,178 +0,0 @@
-module Spec
- module Rails
- module Example
- # View Examples live in $RAILS_ROOT/spec/views/.
- #
- # View Specs use Spec::Rails::Example::ViewExampleGroup,
- # which provides access to views without invoking any of your controllers.
- # See Spec::Rails::Expectations::Matchers for information about specific
- # expectations that you can set on views.
- #
- # == Example
- #
- # describe "login/login" do
- # before do
- # render 'login/login'
- # end
- #
- # it "should display login form" do
- # response.should have_tag("form[action=/login]") do
- # with_tag("input[type=text][name=email]")
- # with_tag("input[type=password][name=password]")
- # with_tag("input[type=submit][value=Login]")
- # end
- # end
- # end
- class ViewExampleGroup < FunctionalExampleGroup
- before(:each) do
- ensure_that_flash_and_session_work_properly
- end
-
- after(:each) do
- ensure_that_base_view_path_is_not_set_across_example_groups
- end
-
- def initialize(defined_description, &implementation) #:nodoc:
- super
- @controller_class_name = "Spec::Rails::Example::ViewExampleGroupController"
- end
-
- def ensure_that_flash_and_session_work_properly #:nodoc:
- @controller.send :initialize_template_class, @response
- @controller.send :assign_shortcuts, @request, @response
- @session = @controller.session
- @controller.class.send :public, :flash
- end
-
- def ensure_that_base_view_path_is_not_set_across_example_groups #:nodoc:
- ActionView::Base.base_view_path = nil
- end
-
- def set_base_view_path(options) #:nodoc:
- ActionView::Base.base_view_path = base_view_path(options)
- end
-
- def base_view_path(options) #:nodoc:
- "/#{derived_controller_name(options)}/"
- end
-
- def derived_controller_name(options) #:nodoc:
- parts = subject_of_render(options).split('/').reject { |part| part.empty? }
- "#{parts[0..-2].join('/')}"
- end
-
- def derived_action_name(options) #:nodoc:
- parts = subject_of_render(options).split('/').reject { |part| part.empty? }
- "#{parts.last}"
- end
-
- def subject_of_render(options) #:nodoc:
- [:template, :partial, :file].each do |render_type|
- if options.has_key?(render_type)
- return options[render_type]
- end
- end
- return ""
- end
-
- def add_helpers(options) #:nodoc:
- @controller.add_helper("application")
- @controller.add_helper(derived_controller_name(options))
- @controller.add_helper(options[:helper]) if options[:helper]
- options[:helpers].each { |helper| @controller.add_helper(helper) } if options[:helpers]
- end
-
- # Renders a template for a View Spec, which then provides access to the result
- # through the +response+. Also supports render with :inline, which you can
- # use to spec custom form builders, helpers, etc, in the context of a view.
- #
- # == Examples
- #
- # render('/people/list')
- # render('/people/list', :helper => MyHelper)
- # render('/people/list', :helpers => [MyHelper, MyOtherHelper])
- # render(:partial => '/people/_address')
- # render(:inline => "<% custom_helper 'argument', 'another argument' %>")
- #
- # See Spec::Rails::Example::ViewExampleGroup for more information.
- def render(*args)
- options = Hash === args.last ? args.pop : {}
- options[:template] = args.first.to_s unless args.empty?
-
- set_base_view_path(options)
- add_helpers(options)
-
- assigns[:action_name] = @action_name
-
- @request.path_parameters = {
- :controller => derived_controller_name(options),
- :action => derived_action_name(options)
- }
-
- defaults = { :layout => false }
- options = defaults.merge options
-
- @controller.send(:params).reverse_merge! @request.parameters
-
- @controller.send :initialize_current_url
-
- @controller.class.instance_eval %{
- def controller_path
- "#{derived_controller_name(options)}"
- end
-
- def controller_name
- "#{derived_controller_name(options).split('/').last}"
- end
- }
-
- @controller.send :forget_variables_added_to_assigns
- @controller.send :render, options
- @controller.send :process_cleanup
- end
-
- # This provides the template. Use this to set mock
- # expectations for dealing with partials
- #
- # == Example
- #
- # describe "/person/new" do
- # it "should use the form partial" do
- # template.should_receive(:render).with(:partial => 'form')
- # render "/person/new"
- # end
- # end
- def template
- @controller.template
- end
-
- Spec::Example::ExampleGroupFactory.register(:view, self)
-
- protected
- def _assigns_hash_proxy
- @_assigns_hash_proxy ||= AssignsHashProxy.new @controller
- end
- end
-
- class ViewExampleGroupController < ApplicationController #:nodoc:
- include Spec::Rails::Example::RenderObserver
- attr_reader :template
-
- def add_helper_for(template_path)
- add_helper(template_path.split('/')[0])
- end
-
- def add_helper(name)
- begin
- helper_module = "#{name}_helper".camelize.constantize
- rescue
- return
- end
- (class << template; self; end).class_eval do
- include helper_module
- end
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb
deleted file mode 100644
index 2a4b9ecca..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require 'spec'
-
-require 'spec/rails/extensions/object'
-
-require 'spec/rails/extensions/spec/example/configuration'
-require 'spec/rails/extensions/spec/matchers/have'
-
-require 'spec/rails/extensions/active_record/base'
-require 'spec/rails/extensions/action_controller/base'
-require 'spec/rails/extensions/action_controller/rescue'
-require 'spec/rails/extensions/action_controller/test_response'
-require 'spec/rails/extensions/action_view/base'
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb
deleted file mode 100755
index 1f7edf83c..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/base.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-module ActionController
- class Base
- class << self
- def set_view_path(path)
- [:append_view_path, :view_paths=, :template_root=].each do |method|
- if respond_to?(method)
- return send(method, path)
- end
- end
- end
- end
- end
-end
-
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/rescue.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/rescue.rb
deleted file mode 100644
index 03dc57276..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/rescue.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-module ActionController
- module Rescue
- def use_rails_error_handling!
- @use_rails_error_handling = true
- end
-
- def use_rails_error_handling?
- @use_rails_error_handling ||= false
- end
-
- protected
- def rescue_action_with_fast_errors(exception)
- if use_rails_error_handling?
- rescue_action_without_fast_errors exception
- else
- raise exception
- end
- end
- alias_method_chain :rescue_action, :fast_errors
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/test_response.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/test_response.rb
deleted file mode 100644
index 85badf9a0..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_controller/test_response.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-module ActionController #:nodoc:
- class TestResponse #:nodoc:
- attr_writer :controller_path
-
- def capture(name)
- template.instance_variable_get "@content_for_#{name.to_s}"
- end
- alias [] capture
-
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb
deleted file mode 100644
index 47c717a9d..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/action_view/base.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-module ActionView #:nodoc:
- class Base #:nodoc:
- include Spec::Rails::Example::RenderObserver
- cattr_accessor :base_view_path
- def render_partial(partial_path, local_assigns = nil, deprecated_local_assigns = nil) #:nodoc:
- if partial_path.is_a?(String)
- unless partial_path.include?("/")
- unless self.class.base_view_path.nil?
- partial_path = "#{self.class.base_view_path}/#{partial_path}"
- end
- end
- end
- super(partial_path, local_assigns, deprecated_local_assigns)
- end
-
- alias_method :orig_render, :render
- def render(options = {}, old_local_assigns = {}, &block)
- if expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_expectation, :render, options)
- expect_render_mock_proxy.render(options)
- else
- unless expect_render_mock_proxy.send(:__mock_proxy).send(:find_matching_method_stub, :render, options)
- orig_render(options, old_local_assigns, &block)
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb
deleted file mode 100644
index fd6d50f5f..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/active_record/base.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-if defined?(ActiveRecord::Base)
- module ActiveRecord #:nodoc:
- class Base
-
- (class << self; self; end).class_eval do
- # Extension for <tt>should have</tt> on AR Model classes
- #
- # ModelClass.should have(:no).records
- # ModelClass.should have(1).record
- # ModelClass.should have(n).records
- def records
- find(:all)
- end
- alias :record :records
- end
-
- # Extension for <tt>should have</tt> on AR Model instances
- #
- # model.should have(:no).errors_on(:attribute)
- # model.should have(1).error_on(:attribute)
- # model.should have(n).errors_on(:attribute)
- def errors_on(attribute)
- self.valid?
- [self.errors.on(attribute)].flatten.compact
- end
- alias :error_on :errors_on
-
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/object.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/object.rb
deleted file mode 100644
index 68fce0ba8..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/object.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class Object # :nodoc:
- def self.path2class(klassname)
- klassname.split('::').inject(Object) { |k,n| k.const_get n }
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/example/configuration.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/example/configuration.rb
deleted file mode 100644
index 22d40a08b..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/example/configuration.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-require 'spec/example/configuration'
-begin
-module Spec
- module Example
- class Configuration
- # Rails 1.2.3 does a copy of the @inheritable_attributes to the subclass when the subclass is
- # created. This causes an ordering issue when setting state on Configuration because the data is
- # already copied.
- # Iterating over EXAMPLE_GROUP_CLASSES causes the base ExampleGroup classes to have their
- # @inheritable_attributes updated.
- # TODO: BT - When we no longer support Rails 1.2.3, we can remove this functionality
- EXAMPLE_GROUP_CLASSES = [
- ::Test::Unit::TestCase,
- ::Spec::Rails::Example::RailsExampleGroup,
- ::Spec::Rails::Example::FunctionalExampleGroup,
- ::Spec::Rails::Example::ControllerExampleGroup,
- ::Spec::Rails::Example::ViewExampleGroup,
- ::Spec::Rails::Example::HelperExampleGroup,
- ::Spec::Rails::Example::ModelExampleGroup
- ]
- # All of this is ActiveRecord related and makes no sense if it's not used by the app
- if defined?(ActiveRecord::Base)
- def initialize
- super
- self.fixture_path = RAILS_ROOT + '/spec/fixtures'
- end
-
- def use_transactional_fixtures
- Test::Unit::TestCase.use_transactional_fixtures
- end
- def use_transactional_fixtures=(value)
- EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.use_transactional_fixtures = value
- end
- end
-
- def use_instantiated_fixtures
- Test::Unit::TestCase.use_instantiated_fixtures
- end
- def use_instantiated_fixtures=(value)
- EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.use_instantiated_fixtures = value
- end
- end
-
- def fixture_path
- Test::Unit::TestCase.fixture_path
- end
- def fixture_path=(path)
- EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.fixture_path = path
- end
- end
-
- def global_fixtures
- ::Test::Unit::TestCase.fixture_table_names
- end
- def global_fixtures=(fixtures)
- EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.fixtures(*fixtures)
- end
- end
- end
- end
- end
-end
-rescue Exception => e
- puts e.message
- puts e.backtrace
- raise e
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/matchers/have.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/matchers/have.rb
deleted file mode 100644
index dc01e4009..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/extensions/spec/matchers/have.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'spec/matchers/have'
-
-module Spec #:nodoc:
- module Matchers #:nodoc:
- class Have #:nodoc:
- alias_method :__original_failure_message, :failure_message
- def failure_message
- return "expected #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}, got #{@actual}" if @collection_name == :errors_on
- return "expected #{relativities[@relativity]}#{@expected} error on :#{@args[0]}, got #{@actual}" if @collection_name == :error_on
- return __original_failure_message
- end
-
- alias_method :__original_description, :description
- def description
- return "should have #{relativities[@relativity]}#{@expected} errors on :#{@args[0]}" if @collection_name == :errors_on
- return "should have #{relativities[@relativity]}#{@expected} error on :#{@args[0]}" if @collection_name == :error_on
- return __original_description
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb
deleted file mode 100644
index 6c18b2a99..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-dir = File.dirname(__FILE__)
-require 'spec/rails/matchers/assert_select'
-require 'spec/rails/matchers/have_text'
-require 'spec/rails/matchers/include_text'
-require 'spec/rails/matchers/redirect_to'
-require 'spec/rails/matchers/render_template'
-
-module Spec
- module Rails
- # Spec::Rails::Expectations::Matchers provides several expectation matchers
- # intended to work with Rails components like models and responses. For example:
- #
- # response.should redirect_to("some/url") #redirect_to(url) is the matcher.
- #
- # In addition to those you see below, the arbitrary predicate feature of RSpec
- # makes the following available as well:
- #
- # response.should be_success #passes if response.success?
- # response.should be_redirect #passes if response.redirect?
- #
- # Note that many of these matchers are part of a wrapper of <tt>assert_select</tt>, so
- # the documentation comes straight from that with some slight modifications.
- # <tt>assert_select</tt> is a Test::Unit extension originally contributed to the
- # Rails community as a plugin by Assaf Arkin and eventually shipped as part of Rails.
- #
- # For more info on <tt>assert_select</tt>, see the relevant Rails documentation.
- module Matchers
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb
deleted file mode 100644
index 1af35118f..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/assert_select.rb
+++ /dev/null
@@ -1,130 +0,0 @@
-# This is a wrapper of assert_select for rspec.
-
-module Spec # :nodoc:
- module Rails
- module Matchers
-
- class AssertSelect #:nodoc:
-
- def initialize(assertion, spec_scope, *args, &block)
- @assertion = assertion
- @spec_scope = spec_scope
- @args = args
- @block = block
- end
-
- def matches?(response_or_text, &block)
- if ActionController::TestResponse === response_or_text and
- response_or_text.headers.key?('Content-Type') and
- response_or_text.headers['Content-Type'].to_sym == :xml
- @args.unshift(HTML::Document.new(response_or_text.body, false, true).root)
- elsif String === response_or_text
- @args.unshift(HTML::Document.new(response_or_text).root)
- end
- @block = block if block
- begin
- @spec_scope.send(@assertion, *@args, &@block)
- rescue ::Test::Unit::AssertionFailedError => @error
- end
-
- @error.nil?
- end
-
- def failure_message; @error.message; end
- def negative_failure_message; "should not #{description}, but did"; end
-
- def description
- {
- :assert_select => "have tag#{format_args(*@args)}",
- :assert_select_email => "send email#{format_args(*@args)}",
- }[@assertion]
- end
-
- private
-
- def format_args(*args)
- return "" if args.empty?
- return "(#{arg_list(*args)})"
- end
-
- def arg_list(*args)
- args.collect do |arg|
- arg.respond_to?(:description) ? arg.description : arg.inspect
- end.join(", ")
- end
-
- end
-
- # :call-seq:
- # response.should have_tag(*args, &block)
- # string.should have_tag(*args, &block)
- #
- # wrapper for assert_select with additional support for using
- # css selectors to set expectation on Strings. Use this in
- # helper specs, for example, to set expectations on the results
- # of helper methods.
- #
- # == Examples
- #
- # # in a controller spec
- # response.should have_tag("div", "some text")
- #
- # # in a helper spec (person_address_tag is a method in the helper)
- # person_address_tag.should have_tag("input#person_address")
- #
- # see documentation for assert_select at http://api.rubyonrails.org/
- def have_tag(*args, &block)
- AssertSelect.new(:assert_select, self, *args, &block)
- end
-
- # wrapper for a nested assert_select
- #
- # response.should have_tag("div#form") do
- # with_tag("input#person_name[name=?]", "person[name]")
- # end
- #
- # see documentation for assert_select at http://api.rubyonrails.org/
- def with_tag(*args, &block)
- should have_tag(*args, &block)
- end
-
- # wrapper for a nested assert_select with false
- #
- # response.should have_tag("div#1") do
- # without_tag("span", "some text that shouldn't be there")
- # end
- #
- # see documentation for assert_select at http://api.rubyonrails.org/
- def without_tag(*args, &block)
- should_not have_tag(*args, &block)
- end
-
- # :call-seq:
- # response.should have_rjs(*args, &block)
- #
- # wrapper for assert_select_rjs
- #
- # see documentation for assert_select_rjs at http://api.rubyonrails.org/
- def have_rjs(*args, &block)
- AssertSelect.new(:assert_select_rjs, self, *args, &block)
- end
-
- # :call-seq:
- # response.should send_email(*args, &block)
- #
- # wrapper for assert_select_email
- #
- # see documentation for assert_select_email at http://api.rubyonrails.org/
- def send_email(*args, &block)
- AssertSelect.new(:assert_select_email, self, *args, &block)
- end
-
- # wrapper for assert_select_encoded
- #
- # see documentation for assert_select_encoded at http://api.rubyonrails.org/
- def with_encoded(*args, &block)
- should AssertSelect.new(:assert_select_encoded, self, *args, &block)
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb
deleted file mode 100644
index e03029c7f..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/have_text.rb
+++ /dev/null
@@ -1,57 +0,0 @@
-module Spec
- module Rails
- module Matchers
-
- class HaveText #:nodoc:
-
- def initialize(expected)
- @expected = expected
- end
-
- def matches?(response_or_text)
- @actual = response_or_text.respond_to?(:body) ? response_or_text.body : response_or_text
- return actual =~ expected if Regexp === expected
- return actual == expected unless Regexp === expected
- end
-
- def failure_message
- "expected #{expected.inspect}, got #{actual.inspect}"
- end
-
- def negative_failure_message
- "expected not to have text #{expected.inspect}"
- end
-
- def to_s
- "have text #{expected.inspect}"
- end
-
- private
- attr_reader :expected
- attr_reader :actual
-
- end
-
- # :call-seq:
- # response.should have_text(expected)
- # response.should_not have_text(expected)
- #
- # Accepts a String or a Regexp, matching a String using ==
- # and a Regexp using =~.
- #
- # If response_or_text has a #body, then that is used as to match against
- # else it uses response_or_text
- #
- # Use this instead of <tt>response.should have_tag()</tt>
- # when you want to match the whole string or whole body
- #
- # == Examples
- #
- # response.should have_text("This is the expected text")
- def have_text(text)
- HaveText.new(text)
- end
-
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/include_text.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/include_text.rb
deleted file mode 100644
index 4be25bce6..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/include_text.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-module Spec
- module Rails
- module Matchers
-
- class IncludeText #:nodoc:
-
- def initialize(expected)
- @expected = expected
- end
-
- def matches?(response_or_text)
- @actual = response_or_text.respond_to?(:body) ? response_or_text.body : response_or_text
- return actual.include?(expected)
- end
-
- def failure_message
- "expected to find #{expected.inspect} in #{actual.inspect}"
- end
-
- def negative_failure_message
- "expected not to include text #{expected.inspect}"
- end
-
- def to_s
- "include text #{expected.inspect}"
- end
-
- private
- attr_reader :expected
- attr_reader :actual
-
- end
-
-
- # :call-seq:
- # response.should include_text(expected)
- # response.should_not include_text(expected)
- #
- # Accepts a String, matching using include?
- #
- # Use this instead of <tt>response.should have_text()</tt>
- # when you either don't know or don't care where on the page
- # this text appears.
- #
- # == Examples
- #
- # response.should include_text("This text will be in the actual string")
- def include_text(text)
- IncludeText.new(text)
- end
-
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb
deleted file mode 100644
index 12ce92516..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/redirect_to.rb
+++ /dev/null
@@ -1,113 +0,0 @@
-module Spec
- module Rails
- module Matchers
-
- class RedirectTo #:nodoc:
-
- def initialize(request, expected)
- @expected = expected
- @request = request
- end
-
- def matches?(response)
- @redirected = response.redirect?
- @actual = response.redirect_url
- return false unless @redirected
- if @expected.instance_of? Hash
- return false unless @actual =~ %r{^\w+://#{@request.host}}
- return false unless actual_redirect_to_valid_route
- return actual_hash == expected_hash
- else
- return @actual == expected_url
- end
- end
-
- def actual_hash
- hash_from_url @actual
- end
-
- def expected_hash
- hash_from_url expected_url
- end
-
- def actual_redirect_to_valid_route
- actual_hash
- end
-
- def hash_from_url(url)
- query_hash(url).merge(path_hash(url)).with_indifferent_access
- end
-
- def path_hash(url)
- path = url.sub(%r{^\w+://#{@request.host}(?::\d+)?}, "").split("?", 2)[0]
- ActionController::Routing::Routes.recognize_path path
- end
-
- def query_hash(url)
- query = url.split("?", 2)[1] || ""
- QueryParameterParser.parse_query_parameters(query, @request)
- end
-
- def expected_url
- case @expected
- when Hash
- return ActionController::UrlRewriter.new(@request, {}).rewrite(@expected)
- when :back
- return @request.env['HTTP_REFERER']
- when %r{^\w+://.*}
- return @expected
- else
- return "http://#{@request.host}" + (@expected.split('')[0] == '/' ? '' : '/') + @expected
- end
- end
-
- def failure_message
- if @redirected
- return %Q{expected redirect to #{@expected.inspect}, got redirect to #{@actual.inspect}}
- else
- return %Q{expected redirect to #{@expected.inspect}, got no redirect}
- end
- end
-
- def negative_failure_message
- return %Q{expected not to be redirected to #{@expected.inspect}, but was} if @redirected
- end
-
- def description
- "redirect to #{@actual.inspect}"
- end
-
- class QueryParameterParser
- def self.parse_query_parameters(query, request)
- if defined?(CGIMethods)
- CGIMethods.parse_query_parameters(query)
- else
- request.class.parse_query_parameters(query)
- end
- end
- end
- end
-
- # :call-seq:
- # response.should redirect_to(url)
- # response.should redirect_to(:action => action_name)
- # response.should redirect_to(:controller => controller_name, :action => action_name)
- # response.should_not redirect_to(url)
- # response.should_not redirect_to(:action => action_name)
- # response.should_not redirect_to(:controller => controller_name, :action => action_name)
- #
- # Passes if the response is a redirect to the url, action or controller/action.
- # Useful in controller specs (integration or isolation mode).
- #
- # == Examples
- #
- # response.should redirect_to("path/to/action")
- # response.should redirect_to("http://test.host/path/to/action")
- # response.should redirect_to(:action => 'list')
- def redirect_to(opts)
- RedirectTo.new(request, opts)
- end
- end
-
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb
deleted file mode 100644
index e36c8bce0..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/matchers/render_template.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-module Spec
- module Rails
- module Matchers
-
- class RenderTemplate #:nodoc:
-
- def initialize(expected, controller)
- @controller = controller
- @expected = expected
- end
-
- def matches?(response)
- @actual = response.rendered_file
- full_path(@actual) == full_path(@expected)
- end
-
- def failure_message
- "expected #{@expected.inspect}, got #{@actual.inspect}"
- end
-
- def negative_failure_message
- "expected not to render #{@expected.inspect}, but did"
- end
-
- def description
- "render template #{@expected.inspect}"
- end
-
- private
- def full_path(path)
- return nil if path.nil?
- path.include?('/') ? path : "#{@controller.class.to_s.underscore.gsub('_controller','')}/#{path}"
- end
-
- end
-
- # :call-seq:
- # response.should render_template(path)
- # response.should_not render_template(path)
- #
- # Passes if the specified template is rendered by the response.
- # Useful in controller specs (integration or isolation mode).
- #
- # <code>path</code> can include the controller path or not. It
- # can also include an optional extension (no extension assumes .rhtml).
- #
- # Note that partials must be spelled with the preceding underscore.
- #
- # == Examples
- #
- # response.should render_template('list')
- # response.should render_template('same_controller/list')
- # response.should render_template('other_controller/list')
- #
- # #rjs
- # response.should render_template('list.rjs')
- # response.should render_template('same_controller/list.rjs')
- # response.should render_template('other_controller/list.rjs')
- #
- # #partials
- # response.should render_template('_a_partial')
- # response.should render_template('same_controller/_a_partial')
- # response.should render_template('other_controller/_a_partial')
- def render_template(path)
- RenderTemplate.new(path.to_s, @controller)
- end
-
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/mocks.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/mocks.rb
deleted file mode 100644
index 34e1d18f4..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/mocks.rb
+++ /dev/null
@@ -1,115 +0,0 @@
-module Spec
- module Rails
-
- class IllegalDataAccessException < StandardError; end
-
- module Mocks
-
- # Creates a mock object instance for a +model_class+ with common
- # methods stubbed out. Additional methods may be easily stubbed (via
- # add_stubs) if +stubs+ is passed.
- def mock_model(model_class, options_and_stubs = {})
- id = next_id
- options_and_stubs.reverse_merge!({
- :id => id,
- :to_param => id.to_s,
- :new_record? => false,
- :errors => stub("errors", :count => 0)
- })
- m = mock("#{model_class.name}_#{options_and_stubs[:id]}", options_and_stubs)
- m.send(:__mock_proxy).instance_eval <<-CODE
- def @target.is_a?(other)
- #{model_class}.ancestors.include?(other)
- end
- def @target.kind_of?(other)
- #{model_class}.ancestors.include?(other)
- end
- def @target.instance_of?(other)
- other == #{model_class}
- end
- def @target.class
- #{model_class}
- end
- CODE
- yield m if block_given?
- m
- end
-
- # :call-seq:
- # stub_model(Model)
- # stub_model(Model).as_new_record
- # stub_model(Model, hash_of_stubs)
- #
- # Creates an instance of +Model+ that is prohibited from accessing the
- # database. For each key in +hash_of_stubs+, if the model has a
- # matching attribute (determined by asking it, which it answers based
- # on schema.rb) are simply assigned the submitted values. If the model
- # does not have a matching attribute, the key/value pair is assigned
- # as a stub return value using RSpec's mocking/stubbing framework.
- #
- # new_record? is overridden to return the result of id.nil? This means
- # that by default new_record? will return false. If you want the
- # object to behave as a new record, sending it +as_new_record+ will
- # set the id to nil. You can also explicitly set :id => nil, in which
- # case new_record? will return true, but using +as_new_record+ makes
- # the example a bit more descriptive.
- #
- # While you can use stub_model in any example (model, view,
- # controller, helper), it is especially useful in view examples,
- # which are inherently more state-based than interaction-based.
- #
- # == Examples
- #
- # stub_model(Person)
- # stub_model(Person).as_new_record
- # stub_model(Person, :id => 37)
- # stub_model(Person) do |person|
- # model.first_name = "David"
- # end
- def stub_model(model_class, stubs = {})
- stubs = {:id => next_id}.merge(stubs)
- returning model_class.new do |model|
- model.id = stubs.delete(:id)
- (class << model; self; end).class_eval do
- def connection
- raise Spec::Rails::IllegalDataAccessException.new("stubbed models are not allowed to access the database")
- end
- def new_record?
- id.nil?
- end
- def as_new_record
- self.id = nil
- self
- end
- end
- stubs.each do |k,v|
- if model.has_attribute?(k)
- model[k] = stubs.delete(k)
- end
- end
- add_stubs(model, stubs)
- yield model if block_given?
- end
- end
-
- #--
- # TODO - Shouldn't this just be an extension of stub! ??
- # - object.stub!(:method => return_value, :method2 => return_value2, :etc => etc)
- #++
- # Stubs methods on +object+ (if +object+ is a symbol or string a new mock
- # with that name will be created). +stubs+ is a Hash of <tt>method=>value</tt>
- def add_stubs(object, stubs = {}) #:nodoc:
- m = [String, Symbol].index(object.class) ? mock(object.to_s) : object
- stubs.each {|k,v| m.stub!(k).and_return(v)}
- m
- end
-
- private
- @@model_id = 1000
- def next_id
- @@model_id += 1
- end
-
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb
deleted file mode 100644
index 66124afe4..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/story_adapter.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-# WARNING - THIS IS PURELY EXPERIMENTAL AT THIS POINT
-# Courtesy of Brian Takita and Yurii Rashkovskii
-
-$:.unshift File.join(File.dirname(__FILE__), *%w[.. .. .. .. rspec lib])
-if defined?(ActiveRecord::Base)
- require 'test_help'
-else
- require 'action_controller/test_process'
- require 'action_controller/integration'
-end
-require 'test/unit/testresult'
-require 'spec'
-require 'spec/rails'
-
-Test::Unit.run = true
-
-ActionController::Integration::Session.send(:include, Spec::Matchers)
-ActionController::Integration::Session.send(:include, Spec::Rails::Matchers)
-
-class RailsStory < ActionController::IntegrationTest
- if defined?(ActiveRecord::Base)
- self.use_transactional_fixtures = true
- else
- def self.fixture_table_names; []; end # Workaround for projects that don't use ActiveRecord
- end
-
- def initialize #:nodoc:
- # TODO - eliminate this hack, which is here to stop
- # Rails Stories from dumping the example summary.
- Spec::Runner::Options.class_eval do
- def examples_should_be_run?
- false
- end
- end
- @_result = Test::Unit::TestResult.new
- end
-end
-
-class ActiveRecordSafetyListener
- include Singleton
- def scenario_started(*args)
- if defined?(ActiveRecord::Base)
- ActiveRecord::Base.send :increment_open_transactions unless Rails::VERSION::STRING == "1.1.6"
- ActiveRecord::Base.connection.begin_db_transaction
- end
- end
-
- def scenario_succeeded(*args)
- if defined?(ActiveRecord::Base)
- ActiveRecord::Base.connection.rollback_db_transaction
- ActiveRecord::Base.send :decrement_open_transactions unless Rails::VERSION::STRING == "1.1.6"
- end
- end
- alias :scenario_pending :scenario_succeeded
- alias :scenario_failed :scenario_succeeded
-end
-
-class Spec::Story::Runner::ScenarioRunner
- def initialize
- @listeners = [ActiveRecordSafetyListener.instance]
- end
-end
-
-class Spec::Story::GivenScenario
- def perform(instance, name = nil)
- scenario = Spec::Story::Runner::StoryRunner.scenario_from_current_story @name
- runner = Spec::Story::Runner::ScenarioRunner.new
- runner.instance_variable_set(:@listeners,[])
- runner.run(scenario, instance)
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb b/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb
deleted file mode 100644
index 68591125e..000000000
--- a/vendor/plugins/rspec_on_rails/lib/spec/rails/version.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-module Spec
- module Rails
- module VERSION #:nodoc:
- BUILD_TIME_UTC = 20080526202855
- end
- end
-end
-
-# Verify that the plugin has the same revision as RSpec
-if Spec::Rails::VERSION::BUILD_TIME_UTC != Spec::VERSION::BUILD_TIME_UTC
- raise <<-EOF
-
-############################################################################
-Your RSpec on Rails plugin is incompatible with your installed RSpec.
-
-RSpec : #{Spec::VERSION::BUILD_TIME_UTC}
-RSpec on Rails : #{Spec::Rails::VERSION::BUILD_TIME_UTC}
-
-Make sure your RSpec on Rails plugin is compatible with your RSpec gem.
-See http://rspec.rubyforge.org/documentation/rails/install.html for details.
-############################################################################
-EOF
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb
deleted file mode 100644
index 3ebf8909a..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/autotest/mappings_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require File.join(File.dirname(__FILE__), *%w[.. .. .. lib autotest rails_rspec])
-require File.join(File.dirname(__FILE__), *%w[.. .. .. .. rspec spec autotest_matchers])
-
-describe Autotest::RailsRspec, "file mapping" do
- before(:each) do
- @autotest = Autotest::RailsRspec.new
- @autotest.hook :initialize
- end
-
- it "should map model example to model" do
- @autotest.should map_specs(['spec/models/thing_spec.rb']).
- to('app/models/thing.rb')
- end
-
- it "should map controller example to controller" do
- @autotest.should map_specs(['spec/controllers/things_controller_spec.rb']).
- to('app/controllers/things_controller.rb')
- end
-
- it "should map view.rhtml" do
- @autotest.should map_specs(['spec/views/things/index.rhtml_spec.rb']).
- to('app/views/things/index.rhtml')
- end
-
- it "should map view.rhtml with underscores in example filename" do
- @autotest.should map_specs(['spec/views/things/index_rhtml_spec.rb']).
- to('app/views/things/index.rhtml')
- end
-
- it "should map view.html.erb" do
- @autotest.should map_specs(['spec/views/things/index.html.erb_spec.rb']).
- to('app/views/things/index.html.erb')
- end
-
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb
deleted file mode 100644
index 148e00561..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/autotest/rails_rspec_spec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require File.join(File.dirname(__FILE__), "..", "..", "..", "lib", "autotest", "rails_rspec")
-
-describe Autotest::RailsRspec do
- it "should provide the correct spec_command" do
- Autotest::RailsRspec.new.spec_command.should == "script/spec"
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb
deleted file mode 100644
index eab67f696..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/assigns_hash_proxy_spec.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe "AssignsHashProxy" do
- before(:each) do
- @object = Object.new
- @assigns = Hash.new
- @object.stub!(:assigns).and_return(@assigns)
- @proxy = Spec::Rails::Example::AssignsHashProxy.new(@object)
- end
-
- it "has [] accessor" do
- @proxy['foo'] = 'bar'
- @assigns['foo'].should == 'bar'
- @proxy['foo'].should == 'bar'
- end
-
- it "works for symbol key" do
- @assigns[:foo] = 2
- @proxy[:foo].should == 2
- end
-
- it "checks for string key before symbol key" do
- @assigns['foo'] = false
- @assigns[:foo] = 2
- @proxy[:foo].should == false
- end
-
- it "each method iterates through each element like a Hash" do
- values = {
- 'foo' => 1,
- 'bar' => 2,
- 'baz' => 3
- }
- @proxy['foo'] = values['foo']
- @proxy['bar'] = values['bar']
- @proxy['baz'] = values['baz']
-
- @proxy.each do |key, value|
- key.should == key
- value.should == values[key]
- end
- end
-
- it "delete method deletes the element of passed in key" do
- @proxy['foo'] = 'bar'
- @proxy.delete('foo').should == 'bar'
- @proxy['foo'].should be_nil
- end
-
- it "has_key? detects the presence of a key" do
- @proxy['foo'] = 'bar'
- @proxy.has_key?('foo').should == true
- @proxy.has_key?('bar').should == false
- end
-
- it "should sets an instance var" do
- @proxy['foo'] = 'bar'
- @object.instance_eval { @foo }.should == 'bar'
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb
deleted file mode 100644
index 91a1b265c..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/configuration_spec.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
- module Example
- describe Configuration, :shared => true do
- before(:each) { @config = Configuration.new }
- end
-
- describe Configuration, "#use_transactional_fixtures" do
- it_should_behave_like "Spec::Example::Configuration"
-
- it "should return Test::Unit::TestCase.use_transactional_fixtures" do
- @config.use_transactional_fixtures.should == Test::Unit::TestCase.use_transactional_fixtures
- end
-
- it "should set Test::Unit::TestCase.use_transactional_fixtures to false" do
- Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.should_receive(:use_transactional_fixtures=).with(false)
- end
- @config.use_transactional_fixtures = false
- end
-
- it "should set Test::Unit::TestCase.use_transactional_fixtures to true" do
- Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.should_receive(:use_transactional_fixtures=).with(true)
- end
- @config.use_transactional_fixtures = true
- end
- end
-
- describe Configuration, "#use_instantiated_fixtures" do
- it_should_behave_like "Spec::Example::Configuration"
-
- it "should return Test::Unit::TestCase.use_transactional_fixtures" do
- @config.use_instantiated_fixtures.should == Test::Unit::TestCase.use_instantiated_fixtures
- end
-
- it "should set Test::Unit::TestCase.use_instantiated_fixtures to false" do
- Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.should_receive(:use_instantiated_fixtures=).with(false)
- end
- @config.use_instantiated_fixtures = false
- end
-
- it "should set Test::Unit::TestCase.use_instantiated_fixtures to true" do
- Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.should_receive(:use_instantiated_fixtures=).with(true)
- end
- @config.use_instantiated_fixtures = true
- end
- end
-
- describe Configuration, "#fixture_path" do
- it_should_behave_like "Spec::Example::Configuration"
-
- it "should default to RAILS_ROOT + '/spec/fixtures'" do
- @config.fixture_path.should == RAILS_ROOT + '/spec/fixtures'
- Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.fixture_path.should == RAILS_ROOT + '/spec/fixtures'
- end
- end
-
- it "should set fixture_path" do
- @config.fixture_path = "/new/path"
- @config.fixture_path.should == "/new/path"
- Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.fixture_path.should == "/new/path"
- end
- end
- end
-
- describe Configuration, "#global_fixtures" do
- it_should_behave_like "Spec::Example::Configuration"
-
- it "should set fixtures on TestCase" do
- Configuration::EXAMPLE_GROUP_CLASSES.each do |example_group|
- example_group.should_receive(:fixtures).with(:blah)
- end
- @config.global_fixtures = [:blah]
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb
deleted file mode 100644
index 9e40047aa..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/controller_isolation_spec.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require 'controller_spec_controller'
-
-describe "a controller spec running in isolation mode", :type => :controller do
- controller_name :controller_spec
-
- it "should not care if the template doesn't exist" do
- get 'some_action'
- response.should be_success
- response.should render_template("template/that/does/not/actually/exist")
- end
-
- it "should not care if the template has errors" do
- get 'action_with_errors_in_template'
- response.should be_success
- response.should render_template("action_with_errors_in_template")
- end
-end
-
-describe "a controller spec running in integration mode", :type => :controller do
- controller_name :controller_spec
- integrate_views
-
- before(:each) do
- controller.class.send(:define_method, :rescue_action) { |e| raise e }
- end
-
- it "should render a template" do
- get 'action_with_template'
- response.should be_success
- response.should have_tag('div', 'This is action_with_template.rhtml')
- end
-
- it "should choke if the template doesn't exist" do
- error = defined?(ActionController::MissingTemplate) ? ActionController::MissingTemplate : ActionView::MissingTemplate
- lambda { get 'some_action' }.should raise_error(error)
- response.should_not be_success
- end
-
- it "should choke if the template has errors" do
- lambda { get 'action_with_errors_in_template' }.should raise_error(ActionView::TemplateError)
- response.should_not be_success
- end
-
- describe "nested" do
- it "should render a template" do
- get 'action_with_template'
- response.should be_success
- response.should have_tag('div', 'This is action_with_template.rhtml')
- end
-
- describe "with integrate_views turned off" do
- integrate_views false
-
- it "should not care if the template doesn't exist" do
- get 'some_action'
- response.should be_success
- response.should render_template("template/that/does/not/actually/exist")
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb
deleted file mode 100644
index afbb69f7a..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/controller_spec_spec.rb
+++ /dev/null
@@ -1,206 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require 'controller_spec_controller'
-
-['integration', 'isolation'].each do |mode|
- describe "A controller example running in #{mode} mode", :type => :controller do
- controller_name :controller_spec
- integrate_views if mode == 'integration'
-
- it "should provide controller.session as session" do
- get 'action_with_template'
- session.should equal(controller.session)
- end
-
- it "should provide the same session object before and after the action" do
- session_before = session
- get 'action_with_template'
- session.should equal(session_before)
- end
-
- it "should keep the same data in the session before and after the action" do
- session[:foo] = :bar
- get 'action_with_template'
- session[:foo].should == :bar
- end
-
- it "should ensure controller.session is NOT nil before the action" do
- controller.session.should_not be_nil
- get 'action_with_template'
- end
-
- it "should ensure controller.session is NOT nil after the action" do
- get 'action_with_template'
- controller.session.should_not be_nil
- end
-
- it "should allow specifying a partial with partial name only" do
- get 'action_with_partial'
- response.should render_template("_partial")
- end
-
- it "should allow specifying a partial with expect_render" do
- controller.expect_render(:partial => "controller_spec/partial")
- get 'action_with_partial'
- end
-
- it "should allow specifying a partial with expect_render with object" do
- controller.expect_render(:partial => "controller_spec/partial", :object => "something")
- get 'action_with_partial_with_object', :thing => "something"
- end
-
- it "should allow specifying a partial with expect_render with locals" do
- controller.expect_render(:partial => "controller_spec/partial", :locals => {:thing => "something"})
- get 'action_with_partial_with_locals', :thing => "something"
- end
-
- it "should yield to render :update" do
- template = stub("template")
- controller.expect_render(:update).and_yield(template)
- template.should_receive(:replace).with(:bottom, "replace_me", :partial => "non_existent_partial")
- get 'action_with_render_update'
- end
-
- it "should allow a path relative to RAILS_ROOT/app/views/ when specifying a partial" do
- get 'action_with_partial'
- response.should render_template("controller_spec/_partial")
- end
-
- it "should provide access to flash" do
- get 'action_which_sets_flash'
- flash[:flash_key].should == "flash value"
- end
-
- it "should provide access to flash values set after a session reset" do
- get 'action_setting_flash_after_session_reset'
- flash[:after_reset].should == "available"
- end
-
- it "should not provide access to flash values set before a session reset" do
- get 'action_setting_flash_before_session_reset'
- flash[:before_reset].should_not == "available"
- end
-
- it "should provide access to session" do
- session[:session_key] = "session value"
- lambda do
- get 'action_which_gets_session', :expected => "session value"
- end.should_not raise_error
- end
-
- it "should support custom routes" do
- route_for(:controller => "custom_route_spec", :action => "custom_route").should == "/custom_route"
- end
-
- it "should support existing routes" do
- route_for(:controller => "controller_spec", :action => "some_action").should == "/controller_spec/some_action"
- end
-
- it "should generate params for custom routes" do
- params_from(:get, '/custom_route').should == {:controller => "custom_route_spec", :action => "custom_route"}
- end
-
- it "should generate params for existing routes" do
- params_from(:get, '/controller_spec/some_action').should == {:controller => "controller_spec", :action => "some_action"}
- end
-
- it "should expose instance vars through the assigns hash" do
- get 'action_setting_the_assigns_hash'
- assigns[:indirect_assigns_key].should == :indirect_assigns_key_value
- end
-
- it "should expose the assigns hash directly" do
- get 'action_setting_the_assigns_hash'
- assigns[:direct_assigns_key].should == :direct_assigns_key_value
- end
-
- it "should complain when calling should_receive(:render) on the controller" do
- lambda {
- controller.should_receive(:render)
- }.should raise_error(RuntimeError, /should_receive\(:render\) has been disabled/)
- end
-
- it "should complain when calling stub!(:render) on the controller" do
- controller.extend Spec::Mocks::Methods
- lambda {
- controller.stub!(:render)
- }.should raise_error(RuntimeError, /stub!\(:render\) has been disabled/)
- end
-
- it "should NOT complain when calling should_receive with arguments other than :render" do
- controller.should_receive(:anything_besides_render)
- lambda {
- controller.rspec_verify
- }.should raise_error(Exception, /expected :anything_besides_render/)
- end
- end
-
- describe "Given a controller spec for RedirectSpecController running in #{mode} mode", :type => :controller do
- controller_name :redirect_spec
- integrate_views if mode == 'integration'
-
- it "a redirect should ignore the absence of a template" do
- get 'action_with_redirect_to_somewhere'
- response.should be_redirect
- response.redirect_url.should == "http://test.host/redirect_spec/somewhere"
- response.should redirect_to("http://test.host/redirect_spec/somewhere")
- end
-
- it "a call to response.should redirect_to should fail if no redirect" do
- get 'action_with_no_redirect'
- lambda {
- response.redirect?.should be_true
- }.should fail
- lambda {
- response.should redirect_to("http://test.host/redirect_spec/somewhere")
- }.should fail_with("expected redirect to \"http://test.host/redirect_spec/somewhere\", got no redirect")
- end
- end
-
- describe "Given a controller spec running in #{mode} mode" do
- example_group = describe "A controller spec"
- # , :type => :controller do
- # integrate_views if mode == 'integration'
- it "a spec in a context without controller_name set should fail with a useful warning" do
- pending("need a new way to deal with examples that should_raise")
- # ,
- # :should_raise => [
- # Spec::Expectations::ExpectationNotMetError,
- # /You have to declare the controller name in controller specs/
- # ] do
- end
- end
-
-end
-
-describe ControllerSpecController, :type => :controller do
- it "should not require naming the controller if describe is passed a type" do
- end
-end
-
-describe "A controller spec with controller_name set", :type => :controller do
- controller_name :controller_spec
-
- describe "nested" do
- it "should inherit the controller name" do
- get 'action_with_template'
- response.should be_success
- end
- end
-end
-
-module Spec
- module Rails
- module Example
- describe ControllerExampleGroup do
- it "should clear its name from the description" do
- group = describe("foo", :type => :controller) do
- $nested_group = describe("bar") do
- end
- end
- group.description.to_s.should == "foo"
- $nested_group.description.to_s.should == "foo bar"
- end
- end
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb
deleted file mode 100644
index 0803c2f29..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/example_group_factory_spec.rb
+++ /dev/null
@@ -1,112 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
- module Example
- describe ExampleGroupFactory do
- it "should return a ModelExampleGroup when given :type => :model" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :type => :model
- ) {}
- example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
- end
-
- it "should return a ModelExampleGroup when given :spec_path => '/blah/spec/models/'" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '/blah/spec/models/blah.rb'
- ) {}
- example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
- end
-
- it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\models\\' (windows format)" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '\\blah\\spec\\models\\blah.rb'
- ) {}
- example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
- end
-
- it "should return a RailsExampleGroup when given :spec_path => '/blah/spec/foo/' (anything other than controllers, views and helpers)" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '/blah/spec/foo/blah.rb'
- ) {}
- example_group.superclass.should == Spec::Rails::Example::RailsExampleGroup
- end
-
- it "should return a RailsExampleGroup when given :spec_path => '\\blah\\spec\\foo\\' (windows format) (anything other than controllers, views and helpers)" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '\\blah\\spec\\foo\\blah.rb'
- ) {}
- example_group.superclass.should == Spec::Rails::Example::RailsExampleGroup
- end
-
- it "should return a ViewExampleGroup when given :type => :model" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :type => :view
- ) {}
- example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
- end
-
- it "should return a ViewExampleGroup when given :spec_path => '/blah/spec/views/'" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '/blah/spec/views/blah.rb'
- ) {}
- example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
- end
-
- it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\views\\' (windows format)" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '\\blah\\spec\\views\\blah.rb'
- ) {}
- example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
- end
-
- it "should return a HelperExampleGroup when given :type => :helper" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :type => :helper
- ) {}
- example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
- end
-
- it "should return a HelperExampleGroup when given :spec_path => '/blah/spec/helpers/'" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '/blah/spec/helpers/blah.rb'
- ) {}
- example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
- end
-
- it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\helpers\\' (windows format)" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '\\blah\\spec\\helpers\\blah.rb'
- ) {}
- example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
- end
-
- it "should return a ControllerExampleGroup when given :type => :controller" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :type => :controller
- ) {}
- example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
- end
-
- it "should return a ControllerExampleGroup when given :spec_path => '/blah/spec/controllers/'" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '/blah/spec/controllers/blah.rb'
- ) {}
- example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
- end
-
- it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\controllers\\' (windows format)" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '\\blah\\spec\\controllers\\blah.rb'
- ) {}
- example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
- end
-
- it "should favor the :type over the :spec_path" do
- example_group = Spec::Example::ExampleGroupFactory.create_example_group(
- "name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller
- ) {}
- example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb
deleted file mode 100644
index 0ba2cd255..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/helper_spec_spec.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-Spec::Runner.configuration.global_fixtures = :people
-
-describe ExplicitHelper, :type => :helper do
- include ExplicitHelper
-
- it "should not require naming the helper if describe is passed a type" do
- method_in_explicit_helper.should match(/text from a method/)
- helper.method_in_explicit_helper.should match(/text from a method/)
- end
-end
-
-module Spec
- module Rails
- module Example
- describe HelperExampleGroup, :type => :helper do
- helper_name :explicit
-
- it "DEPRECATED should have direct access to methods defined in helpers" do
- method_in_explicit_helper.should =~ /text from a method/
- end
-
- it "should expose the helper with the #helper method" do
- helper.method_in_explicit_helper.should =~ /text from a method/
- end
-
- it "should have access to named routes" do
- rspec_on_rails_specs_url.should == "http://test.host/rspec_on_rails_specs"
- rspec_on_rails_specs_path.should == "/rspec_on_rails_specs"
- end
-
- it "should fail if the helper method deson't exist" do
- lambda { non_existent_helper_method }.should raise_error(NameError)
- lambda { helper.non_existent_helper_method }.should raise_error(NameError)
- end
- end
-
-
- describe HelperExampleGroup, "#eval_erb", :type => :helper do
- helper_name :explicit
-
- it "should support methods that accept blocks" do
- eval_erb("<% prepend 'foo' do %>bar<% end %>").should == "foobar"
- end
- end
-
- describe HelperExampleGroup, ".fixtures", :type => :helper do
- helper_name :explicit
- fixtures :animals
-
- it "should load fixtures" do
- pig = animals(:pig)
- pig.class.should == Animal
- end
-
- it "should load global fixtures" do
- lachie = people(:lachie)
- lachie.class.should == Person
- end
- end
-
- describe "methods from standard helpers", :type => :helper do
- helper_name :explicit
- it "should be exposed to the helper" do
- helper.link_to("Foo","http://bar").should have_tag("a")
- end
- end
-
- describe HelperExampleGroup, "included modules", :type => :helper do
- helpers = [
- ActionView::Helpers::ActiveRecordHelper,
- ActionView::Helpers::AssetTagHelper,
- ActionView::Helpers::BenchmarkHelper,
- ActionView::Helpers::CacheHelper,
- ActionView::Helpers::CaptureHelper,
- ActionView::Helpers::DateHelper,
- ActionView::Helpers::DebugHelper,
- ActionView::Helpers::FormHelper,
- ActionView::Helpers::FormOptionsHelper,
- ActionView::Helpers::FormTagHelper,
- ActionView::Helpers::JavaScriptHelper,
- ActionView::Helpers::NumberHelper,
- ActionView::Helpers::PrototypeHelper,
- ActionView::Helpers::ScriptaculousHelper,
- ActionView::Helpers::TagHelper,
- ActionView::Helpers::TextHelper,
- ActionView::Helpers::UrlHelper
- ]
- helpers << ActionView::Helpers::PaginationHelper rescue nil #removed for 2.0
- helpers << ActionView::Helpers::JavaScriptMacrosHelper rescue nil #removed for 2.0
- helpers.each do |helper_module|
- # it "should include #{helper_module}" do
- # self.class.ancestors.should include(helper_module)
- # helper.class.ancestors.should include(helper_module)
- # end
- end
- end
-
- # TODO: BT - Helper Examples should proxy method_missing to a Rails View instance.
- # When that is done, remove this method
- describe HelperExampleGroup, "#protect_against_forgery?", :type => :helper do
- it "should return false" do
- protect_against_forgery?.should be_false
- helper.protect_against_forgery?.should be_false
- end
- end
- end
- end
-end
-
-module Bug11223
- # see http://rubyforge.org/tracker/index.php?func=detail&aid=11223&group_id=797&atid=3149
- describe 'Accessing flash from helper spec', :type => :helper do
- it 'should not raise an error' do
- lambda { flash['test'] }.should_not raise_error
- end
- end
-end
-
-module Spec
- module Rails
- module Example
- describe HelperExampleGroup do
- it "should clear its name from the description" do
- group = describe("foo", :type => :helper) do
- $nested_group = describe("bar") do
- end
- end
- group.description.to_s.should == "foo"
- $nested_group.description.to_s.should == "foo bar"
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb
deleted file mode 100644
index af6729333..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/ivar_proxy_spec.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe "IvarProxy setup", :shared => true do
- before do
- @object = Object.new
- @proxy = Spec::Rails::Example::IvarProxy.new(@object)
- end
-end
-
-describe "IvarProxy" do
- it_should_behave_like "IvarProxy setup"
-
- it "has [] accessor" do
- @proxy['foo'] = 'bar'
- @object.instance_variable_get(:@foo).should == 'bar'
- @proxy['foo'].should == 'bar'
- end
-
- it "iterates through each element like a Hash" do
- values = {
- 'foo' => 1,
- 'bar' => 2,
- 'baz' => 3
- }
- @proxy['foo'] = values['foo']
- @proxy['bar'] = values['bar']
- @proxy['baz'] = values['baz']
-
- @proxy.each do |key, value|
- key.should == key
- value.should == values[key]
- end
- end
-
- it "detects the presence of a key" do
- @proxy['foo'] = 'bar'
- @proxy.has_key?('foo').should == true
- @proxy.has_key?('bar').should == false
- end
-end
-
-describe "IvarProxy", "#delete" do
- it_should_behave_like "IvarProxy setup"
-
- it "deletes the element with key" do
- @proxy['foo'] = 'bar'
- @proxy.delete('foo').should == 'bar'
- @proxy['foo'].should be_nil
- end
-
- it "deletes nil instance variables" do
- @proxy['foo'] = nil
- @object.instance_variables.should include("@foo")
- @proxy.delete('foo').should == nil
- @proxy['foo'].should be_nil
- @object.instance_variables.should_not include("@foo")
- end
-
- it "returns nil when key does not exist" do
- @proxy['foo'].should be_nil
- @proxy.delete('foo').should == nil
- @proxy['foo'].should be_nil
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb
deleted file mode 100644
index 938744dbb..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/model_spec_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
- module Rails
- module Example
- describe ModelExampleGroup do
- it "should clear its name from the description" do
- group = describe("foo", :type => :model) do
- $nested_group = describe("bar") do
- end
- end
- group.description.to_s.should == "foo"
- $nested_group.description.to_s.should == "foo bar"
- end
- end
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb
deleted file mode 100644
index ef19817d8..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/shared_behaviour_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe "A shared view example_group", :shared => true do
- it "should have some tag with some text" do
- response.should have_tag('div', 'This is text from a method in the ViewSpecHelper')
- end
-end
-
-describe "A view example_group", :type => :view do
- it_should_behave_like "A shared view example_group"
-
- before(:each) do
- render "view_spec/implicit_helper"
- end
-end
-
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb
deleted file mode 100644
index b7a838691..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/test_unit_assertion_accessibility_spec.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe "assert_equal", :shared => true do
- it "like assert_equal" do
- assert_equal 1, 1
- lambda {
- assert_equal 1, 2
- }.should raise_error(Test::Unit::AssertionFailedError)
- end
-end
-
-describe "A model spec should be able to access 'test/unit' assertions", :type => :model do
- it_should_behave_like "assert_equal"
-end
-
-describe "A view spec should be able to access 'test/unit' assertions", :type => :view do
- it_should_behave_like "assert_equal"
-end
-
-describe "A helper spec should be able to access 'test/unit' assertions", :type => :helper do
- it_should_behave_like "assert_equal"
-end
-
-describe "A controller spec with integrated views should be able to access 'test/unit' assertions", :type => :controller do
- controller_name :controller_spec
- integrate_views
- it_should_behave_like "assert_equal"
-end
-
-describe "A controller spec should be able to access 'test/unit' assertions", :type => :controller do
- controller_name :controller_spec
- it_should_behave_like "assert_equal"
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb
deleted file mode 100644
index 14159c65a..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/example/view_spec_spec.rb
+++ /dev/null
@@ -1,272 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe "A template with an implicit helper", :type => :view do
- before(:each) do
- render "view_spec/implicit_helper"
- end
-
- it "should include the helper" do
- response.should have_tag('div', :content => "This is text from a method in the ViewSpecHelper")
- end
-
- it "should include the application helper" do
- response.should have_tag('div', :content => "This is text from a method in the ApplicationHelper")
- end
-
- it "should have access to named routes" do
- rspec_on_rails_specs_url.should == "http://test.host/rspec_on_rails_specs"
- rspec_on_rails_specs_path.should == "/rspec_on_rails_specs"
- end
-end
-
-describe "A template requiring an explicit helper", :type => :view do
- before(:each) do
- render "view_spec/explicit_helper", :helper => 'explicit'
- end
-
- it "should include the helper if specified" do
- response.should have_tag('div', :content => "This is text from a method in the ExplicitHelper")
- end
-
- it "should include the application helper" do
- response.should have_tag('div', :content => "This is text from a method in the ApplicationHelper")
- end
-end
-
-describe "A template requiring multiple explicit helpers", :type => :view do
- before(:each) do
- render "view_spec/multiple_helpers", :helpers => ['explicit', 'more_explicit']
- end
-
- it "should include all specified helpers" do
- response.should have_tag('div', :content => "This is text from a method in the ExplicitHelper")
- response.should have_tag('div', :content => "This is text from a method in the MoreExplicitHelper")
- end
-
- it "should include the application helper" do
- response.should have_tag('div', :content => "This is text from a method in the ApplicationHelper")
- end
-end
-
-describe "Message Expectations on helper methods", :type => :view do
- it "should work" do
- template.should_receive(:method_in_plugin_application_helper).and_return('alternate message 1')
- render "view_spec/implicit_helper"
- response.body.should =~ /alternate message 1/
- end
-
- it "should work twice" do
- template.should_receive(:method_in_plugin_application_helper).and_return('alternate message 2')
- render "view_spec/implicit_helper"
- response.body.should =~ /alternate message 2/
- end
-end
-
-describe "A template that includes a partial", :type => :view do
- def render!
- render "view_spec/template_with_partial"
- end
-
- it "should render the enclosing template" do
- render!
- response.should have_tag('div', "method_in_partial in ViewSpecHelper")
- end
-
- it "should render the partial" do
- render!
- response.should have_tag('div', "method_in_template_with_partial in ViewSpecHelper")
- end
-
- it "should include the application helper" do
- render!
- response.should have_tag('div', "This is text from a method in the ApplicationHelper")
- end
-
- it "should pass expect_render with the right partial" do
- template.expect_render(:partial => 'partial')
- render!
- template.verify_rendered
- end
-
- it "should fail expect_render with the wrong partial" do
- template.expect_render(:partial => 'non_existent')
- render!
- begin
- template.verify_rendered
- rescue Spec::Mocks::MockExpectationError => e
- ensure
- e.backtrace.find{|line| line =~ /view_spec_spec\.rb\:92/}.should_not be_nil
- end
- end
-
- it "should pass expect_render when a partial is expected twice and happens twice" do
- template.expect_render(:partial => 'partial_used_twice').twice
- render!
- template.verify_rendered
- end
-
- it "should pass expect_render when a partial is expected once and happens twice" do
- template.expect_render(:partial => 'partial_used_twice')
- render!
- begin
- template.verify_rendered
- rescue Spec::Mocks::MockExpectationError => e
- ensure
- e.backtrace.find{|line| line =~ /view_spec_spec\.rb\:109/}.should_not be_nil
- end
- end
-
- it "should fail expect_render with the right partial but wrong options" do
- template.expect_render(:partial => 'partial', :locals => {:thing => Object.new})
- render!
- lambda {template.verify_rendered}.should raise_error(Spec::Mocks::MockExpectationError)
- end
-end
-
-describe "A partial that includes a partial", :type => :view do
- it "should support expect_render with nested partial" do
- obj = Object.new
- template.expect_render(:partial => 'partial', :object => obj)
- render :partial => "view_spec/partial_with_sub_partial", :locals => { :partial => obj }
- end
-end
-
-describe "A view that includes a partial using :collection and :spacer_template", :type => :view do
- it "should render the partial w/ spacer_tamplate" do
- render "view_spec/template_with_partial_using_collection"
- response.should have_tag('div',/method_in_partial/)
- response.should have_tag('div',/ApplicationHelper/)
- response.should have_tag('div',/ViewSpecHelper/)
- response.should have_tag('hr#spacer')
- end
-
- it "should render the partial" do
- template.expect_render(:partial => 'partial',
- :collection => ['Alice', 'Bob'],
- :spacer_template => 'spacer')
- render "view_spec/template_with_partial_using_collection"
- end
-
-end
-
-describe "A view that includes a partial using an array as partial_path", :type => :view do
- before(:each) do
- module ActionView::Partials
- def render_template_with_partial_with_array_support(partial_path, local_assigns = nil, deprecated_local_assigns = nil)
- if partial_path.is_a?(Array)
- "Array Partial"
- else
- render_partial_without_array_support(partial_path, local_assigns, deprecated_local_assigns)
- end
- end
-
- alias :render_partial_without_array_support :render_partial
- alias :render_partial :render_template_with_partial_with_array_support
- end
-
- @array = ['Alice', 'Bob']
- assigns[:array] = @array
- end
-
- after(:each) do
- module ActionView::Partials
- alias :render_template_with_partial_with_array_support :render_partial
- alias :render_partial :render_partial_without_array_support
- undef render_template_with_partial_with_array_support
- end
- end
-
- it "should render have the array passed through to render_partial without modification" do
- render "view_spec/template_with_partial_with_array"
- response.body.should match(/^Array Partial$/)
- end
-end
-
-describe "Different types of renders (not :template)", :type => :view do
- it "should render partial with local" do
- render :partial => "view_spec/partial_with_local_variable", :locals => {:x => "Ender"}
- response.should have_tag('div', :content => "Ender")
- end
-end
-
-describe "A view", :type => :view do
- before(:each) do
- session[:key] = "session"
- params[:key] = "params"
- flash[:key] = "flash"
- render "view_spec/accessor"
- end
-
- it "should have access to session data" do
- response.should have_tag("div#session", "session")
- end
-
- specify "should have access to params data" do
- response.should have_tag("div#params", "params")
- end
-
- it "should have access to flash data" do
- response.should have_tag("div#flash", "flash")
- end
-
- it "should have a controller param" do
- response.should have_tag("div#controller", "view_spec")
- end
-
- it "should have an action param" do
- response.should have_tag("div#action", "accessor")
- end
-end
-
-describe "A view with a form_tag", :type => :view do
- it "should render the right action" do
- render "view_spec/entry_form"
- response.should have_tag("form[action=?]","/view_spec/entry_form")
- end
-end
-
-describe "An instantiated ViewExampleGroupController", :type => :view do
- before do
- render "view_spec/foo/show"
- end
-
- it "should return the name of the real controller that it replaces" do
- @controller.controller_name.should == 'foo'
- end
-
- it "should return the path of the real controller that it replaces" do
- @controller.controller_path.should == 'view_spec/foo'
- end
-end
-
-describe "render :inline => ...", :type => :view do
- it "should render ERB right in the spec" do
- render :inline => %|<%= text_field_tag('field_name', 'Value') %>|
- response.should have_tag("input[type=?][name=?][value=?]","text","field_name","Value")
- end
-end
-
-module Spec
- module Rails
- module Example
- describe ViewExampleGroup do
- it "should clear its name from the description" do
- group = describe("foo", :type => :view) do
- $nested_group = describe("bar") do
- end
- end
- group.description.to_s.should == "foo"
- $nested_group.description.to_s.should == "foo bar"
- end
-
- it "should clear ActionView::Base.base_view_path on teardown" do
- group = describe("base_view_path_cleared flag", :type => :view) {}
- example = group.it{}
-
- ActionView::Base.should_receive(:base_view_path=).with(nil)
- group.run_after_each(example)
- end
- end
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb
deleted file mode 100644
index c25754585..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_controller_rescue_action_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module ActionController
- describe "Rescue", "#rescue_action in default mode" do
- before(:each) do
- @fixture = Object.new
- @fixture.extend ActionController::Rescue
- class << @fixture
- public :rescue_action
- end
- end
-
- it "should raise the passed in exception so examples fail fast" do
- proc {@fixture.rescue_action(RuntimeError.new("Foobar"))}.should raise_error(RuntimeError, "Foobar")
- end
- end
-
- class RescueOverriddenController < ActionController::Base
- def rescue_action(error)
- "successfully overridden"
- end
- end
-
- describe "Rescue", "#rescue_action, when overridden" do
- before(:each) do
- @fixture = RescueOverriddenController.new
- end
-
- it "should do whatever the overridden method does" do
- @fixture.rescue_action(RuntimeError.new("Foobar")).should == "successfully overridden"
- end
- end
-
- class SearchController < ActionController::Base
- end
-
- describe "Rescue", "#rescue_action when told to use rails error handling" do
- before(:each) do
- @controller = SearchController.new
- @controller.use_rails_error_handling!
- class << @controller
- public :rescue_action
- end
- end
-
- it "should use Rails exception handling" do
- exception = RuntimeError.new("The Error")
- exception.stub!(:backtrace).and_return(caller)
- @controller.should_receive(:rescue_action_locally).with(exception)
-
- @controller.rescue_action(exception)
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb
deleted file mode 100644
index 599249f06..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/extensions/action_view_base_spec.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require 'spec/mocks/errors'
-
-describe ActionView::Base, "with RSpec extensions:", :type => :view do
-
- describe "expect_render" do
- it "should not raise when render has been received" do
- template.expect_render(:partial => "name")
- template.render :partial => "name"
- end
-
- it "should raise when render has NOT been received" do
- template.expect_render(:partial => "name")
- lambda {
- template.verify_rendered
- }.should raise_error
- end
-
- it "should return something (like a normal mock)" do
- template.expect_render(:partial => "name").and_return("Little Johnny")
- result = template.render :partial => "name"
- result.should == "Little Johnny"
- end
- end
-
- describe "stub_render" do
- it "should not raise when stubbing and render has been received" do
- template.stub_render(:partial => "name")
- template.render :partial => "name"
- end
-
- it "should not raise when stubbing and render has NOT been received" do
- template.stub_render(:partial => "name")
- end
-
- it "should not raise when stubbing and render has been received with different options" do
- template.stub_render(:partial => "name")
- template.render :partial => "view_spec/spacer"
- end
-
- it "should not raise when stubbing and expecting and render has been received" do
- template.stub_render(:partial => "name")
- template.expect_render(:partial => "name")
- template.render(:partial => "name")
- end
- end
-
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb
deleted file mode 100644
index 95d43b25b..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/extensions/active_record_spec.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe "A model" do
- fixtures :things
- it "should tell you its required fields" do
- Thing.new.should have(1).error_on(:name)
- end
-
- it "should tell you how many records it has" do
- Thing.should have(:no).records
- Thing.create(:name => "THE THING")
- Thing.should have(1).record
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb
deleted file mode 100644
index bdc8cf0b8..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/assert_select_spec.rb
+++ /dev/null
@@ -1,783 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-# assert_select plugins for Rails
-#
-# Copyright (c) 2006 Assaf Arkin, under Creative Commons Attribution and/or MIT License
-# Developed for http://co.mments.com
-# Code and documention: http://labnotes.org
-
-class AssertSelectController < ActionController::Base
-
- def response=(content)
- @content = content
- end
-
- #NOTE - this is commented because response is implemented in lib/spec/rails/context/controller
- # def response(&block)
- # @update = block
- # end
- #
- def html()
- render :text=>@content, :layout=>false, :content_type=>Mime::HTML
- @content = nil
- end
-
- def rjs()
- update = @update
- render :update do |page|
- update.call page
- end
- @update = nil
- end
-
- def xml()
- render :text=>@content, :layout=>false, :content_type=>Mime::XML
- @content = nil
- end
-
- def rescue_action(e)
- raise e
- end
-
-end
-
-class AssertSelectMailer < ActionMailer::Base
-
- def test(html)
- recipients "test <test@test.host>"
- from "test@test.host"
- subject "Test e-mail"
- part :content_type=>"text/html", :body=>html
- end
-
-end
-
-module AssertSelectSpecHelpers
- def render_html(html)
- @controller.response = html
- get :html
- end
-
- def render_rjs(&block)
- clear_response
- @controller.response &block
- get :rjs
- end
-
- def render_xml(xml)
- @controller.response = xml
- get :xml
- end
-
- def first_non_rspec_line_in_backtrace_of(error)
- rspec_path = File.join('rspec', 'lib', 'spec')
- error.backtrace.reject { |line|
- line =~ /#{rspec_path}/
- }.first
- end
-
- private
- # necessary for 1.2.1
- def clear_response
- render_html("")
- end
-end
-
-unless defined?(SpecFailed)
- SpecFailed = Spec::Expectations::ExpectationNotMetError
-end
-
-describe "should have_tag", :type => :controller do
- include AssertSelectSpecHelpers
- controller_name :assert_select
- integrate_views
-
- it "should find specific numbers of elements" do
- render_html %Q{<div id="1"></div><div id="2"></div>}
- response.should have_tag( "div" )
- response.should have_tag("div", 2)
- lambda { response.should_not have_tag("div") }.should raise_error(SpecFailed, "should not have tag(\"div\"), but did")
-
- lambda { response.should have_tag("div", 3) }.should raise_error(SpecFailed)
- lambda { response.should have_tag("p") }.should raise_error(SpecFailed)
- end
-
- it "should expect to find elements when using true" do
- render_html %Q{<div id="1"></div><div id="2"></div>}
- response.should have_tag( "div", true )
- lambda { response.should have_tag( "p", true )}.should raise_error(SpecFailed)
- end
-
- it "should expect to not find elements when using false" do
- render_html %Q{<div id="1"></div><div id="2"></div>}
- response.should have_tag( "p", false )
- lambda { response.should have_tag( "div", false )}.should raise_error(SpecFailed)
- end
-
-
- it "should match submitted text using text or regexp" do
- render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
- response.should have_tag("div", "foo")
- response.should have_tag("div", /(foo|bar)/)
- response.should have_tag("div", :text=>"foo")
- response.should have_tag("div", :text=>/(foo|bar)/)
-
- lambda { response.should have_tag("div", "bar") }.should raise_error(SpecFailed)
- lambda { response.should have_tag("div", :text=>"bar") }.should raise_error(SpecFailed)
- lambda { response.should have_tag("p", :text=>"foo") }.should raise_error(SpecFailed)
-
- lambda { response.should have_tag("div", /foobar/) }.should raise_error(SpecFailed)
- lambda { response.should have_tag("div", :text=>/foobar/) }.should raise_error(SpecFailed)
- lambda { response.should have_tag("p", :text=>/foo/) }.should raise_error(SpecFailed)
- end
-
- it "should use submitted message" do
- render_html %Q{nothing here}
- lambda {
- response.should have_tag("div", {}, "custom message")
- }.should raise_error(SpecFailed, /custom message/)
- end
-
- it "should match submitted html" do
- render_html %Q{<p>\n<em>"This is <strong>not</strong> a big problem,"</em> he said.\n</p>}
- text = "\"This is not a big problem,\" he said."
- html = "<em>\"This is <strong>not</strong> a big problem,\"</em> he said."
- response.should have_tag("p", text)
- lambda { response.should have_tag("p", html) }.should raise_error(SpecFailed)
- response.should have_tag("p", :html=>html)
- lambda { response.should have_tag("p", :html=>text) }.should raise_error(SpecFailed)
-
- # # No stripping for pre.
- render_html %Q{<pre>\n<em>"This is <strong>not</strong> a big problem,"</em> he said.\n</pre>}
- text = "\n\"This is not a big problem,\" he said.\n"
- html = "\n<em>\"This is <strong>not</strong> a big problem,\"</em> he said.\n"
- response.should have_tag("pre", text)
- lambda { response.should have_tag("pre", html) }.should raise_error(SpecFailed)
- response.should have_tag("pre", :html=>html)
- lambda { response.should have_tag("pre", :html=>text) }.should raise_error(SpecFailed)
- end
-
- it "should match number of instances" do
- render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
- response.should have_tag("div", 2)
- lambda { response.should have_tag("div", 3) }.should raise_error(SpecFailed)
- response.should have_tag("div", 1..2)
- lambda { response.should have_tag("div", 3..4) }.should raise_error(SpecFailed)
- response.should have_tag("div", :count=>2)
- lambda { response.should have_tag("div", :count=>3) }.should raise_error(SpecFailed)
- response.should have_tag("div", :minimum=>1)
- response.should have_tag("div", :minimum=>2)
- lambda { response.should have_tag("div", :minimum=>3) }.should raise_error(SpecFailed)
- response.should have_tag("div", :maximum=>2)
- response.should have_tag("div", :maximum=>3)
- lambda { response.should have_tag("div", :maximum=>1) }.should raise_error(SpecFailed)
- response.should have_tag("div", :minimum=>1, :maximum=>2)
- lambda { response.should have_tag("div", :minimum=>3, :maximum=>4) }.should raise_error(SpecFailed)
- end
-
- it "substitution values" do
- render_html %Q{<div id="1">foo</div><div id="2">foo</div><span id="3"></span>}
- response.should have_tag("div#?", /\d+/) do |elements| #using do/end
- elements.size.should == 2
- end
- response.should have_tag("div#?", /\d+/) { |elements| #using {}
- elements.size.should == 2
- }
- lambda {
- response.should have_tag("div#?", /\d+/) do |elements|
- elements.size.should == 3
- end
- }.should raise_error(SpecFailed, "expected: 3,\n got: 2 (using ==)")
-
- lambda {
- response.should have_tag("div#?", /\d+/) { |elements|
- elements.size.should == 3
- }
- }.should raise_error(SpecFailed, "expected: 3,\n got: 2 (using ==)")
-
- response.should have_tag("div#?", /\d+/) do |elements|
- elements.size.should == 2
- with_tag("#1")
- with_tag("#2")
- without_tag("#3")
- end
- end
-
- #added for RSpec
- it "nested tags in form" do
- render_html %Q{
- <form action="test">
- <input type="text" name="email">
- </form>
- <form action="other">
- <input type="text" name="other_input">
- </form>
- }
- response.should have_tag("form[action=test]") { |form|
- with_tag("input[type=text][name=email]")
- }
- response.should have_tag("form[action=test]") { |form|
- with_tag("input[type=text][name=email]")
- }
-
- lambda {
- response.should have_tag("form[action=test]") { |form|
- with_tag("input[type=text][name=other_input]")
- }
- }.should raise_error(SpecFailed)
-
- lambda {
- response.should have_tag("form[action=test]") {
- with_tag("input[type=text][name=other_input]")
- }
- }.should raise_error(SpecFailed)
- end
-
- it "should report the correct line number for a nested failed expectation" do
- render_html %Q{
- <form action="test">
- <input type="text" name="email">
- </form>
- }
- begin
- response.should have_tag("form[action=test]") {
- @expected_error_line = __LINE__; should have_tag("input[type=text][name=other_input]")
- }
- rescue => e
- first_non_rspec_line_in_backtrace_of(e).should =~
- /#{File.basename(__FILE__)}:#{@expected_error_line}/
- else
- fail
- end
- end
-
- it "should report the correct line number for a nested raised exception" do
- render_html %Q{
- <form action="test">
- <input type="text" name="email">
- </form>
- }
- begin
- response.should have_tag("form[action=test]") {
- @expected_error_line = __LINE__; raise "Failed!"
- }
- rescue => e
- first_non_rspec_line_in_backtrace_of(e).should =~
- /#{File.basename(__FILE__)}:#{@expected_error_line}/
- else
- fail
- end
- end
-
- it "should report the correct line number for a nested failed test/unit assertion" do
- pending "Doesn't work at the moment. Do we want to support this?" do
- render_html %Q{
- <form action="test">
- <input type="text" name="email">
- </form>
- }
- begin
- response.should have_tag("form[action=test]") {
- @expected_error_line = __LINE__; assert false
- }
- rescue => e
- first_non_rspec_line_in_backtrace_of(e).should =~
- /#{File.basename(__FILE__)}:#{@expected_error_line}/
- else
- fail
- end
- end
- end
-
-
- it "beatles" do
- unless defined?(BEATLES)
- BEATLES = [
- ["John", "Guitar"],
- ["George", "Guitar"],
- ["Paul", "Bass"],
- ["Ringo", "Drums"]
- ]
- end
-
- render_html %Q{
- <div id="beatles">
- <div class="beatle">
- <h2>John</h2><p>Guitar</p>
- </div>
- <div class="beatle">
- <h2>George</h2><p>Guitar</p>
- </div>
- <div class="beatle">
- <h2>Paul</h2><p>Bass</p>
- </div>
- <div class="beatle">
- <h2>Ringo</h2><p>Drums</p>
- </div>
- </div>
- }
- response.should have_tag("div#beatles>div[class=\"beatle\"]", 4)
-
- response.should have_tag("div#beatles>div.beatle") {
- BEATLES.each { |name, instrument|
- with_tag("div.beatle>h2", name)
- with_tag("div.beatle>p", instrument)
- without_tag("div.beatle>span")
- }
- }
- end
-
- it "assert_select_text_match" do
- render_html %Q{<div id="1"><span>foo</span></div><div id="2"><span>bar</span></div>}
- response.should have_tag("div") do |divs|
- with_tag("div", "foo")
- with_tag("div", "bar")
- with_tag("div", /\w*/)
- with_tag("div", /\w*/, :count=>2)
- without_tag("div", :text=>"foo", :count=>2)
- with_tag("div", :html=>"<span>bar</span>")
- with_tag("div", :html=>"<span>bar</span>")
- with_tag("div", :html=>/\w*/)
- with_tag("div", :html=>/\w*/, :count=>2)
- without_tag("div", :html=>"<span>foo</span>", :count=>2)
- end
- end
-
-
- it "assert_select_from_rjs with one item" do
- render_rjs do |page|
- page.replace_html "test", "<div id=\"1\">foo</div>\n<div id=\"2\">foo</div>"
- end
- response.should have_tag("div") { |elements|
- elements.size.should == 2
- with_tag("#1")
- with_tag("#2")
- }
-
- lambda {
- response.should have_tag("div") { |elements|
- elements.size.should == 2
- with_tag("#1")
- with_tag("#3")
- }
- }.should raise_error(SpecFailed)
-
- lambda {
- response.should have_tag("div") { |elements|
- elements.size.should == 2
- with_tag("#1")
- without_tag("#2")
- }
- }.should raise_error(SpecFailed, "should not have tag(\"#2\"), but did")
-
- lambda {
- response.should have_tag("div") { |elements|
- elements.size.should == 3
- with_tag("#1")
- with_tag("#2")
- }
- }.should raise_error(SpecFailed)
-
-
- response.should have_tag("div#?", /\d+/) { |elements|
- with_tag("#1")
- with_tag("#2")
- }
- end
-
- it "assert_select_from_rjs with multiple items" do
- render_rjs do |page|
- page.replace_html "test", "<div id=\"1\">foo</div>"
- page.replace_html "test2", "<div id=\"2\">foo</div>"
- end
- response.should have_tag("div")
- response.should have_tag("div") { |elements|
- elements.size.should == 2
- with_tag("#1")
- with_tag("#2")
- }
-
- lambda {
- response.should have_tag("div") { |elements|
- with_tag("#3")
- }
- }.should raise_error(SpecFailed)
- end
-end
-
-describe "css_select", :type => :controller do
- include AssertSelectSpecHelpers
- controller_name :assert_select
- integrate_views
-
- it "can select tags from html" do
- render_html %Q{<div id="1"></div><div id="2"></div>}
- css_select("div").size.should == 2
- css_select("p").size.should == 0
- end
-
-
- it "can select nested tags from html" do
- render_html %Q{<div id="1">foo</div><div id="2">foo</div>}
- response.should have_tag("div#?", /\d+/) { |elements|
- css_select(elements[0], "div").should have(1).element
- css_select(elements[1], "div").should have(1).element
- }
- response.should have_tag("div") {
- css_select("div").should have(2).elements
- css_select("div").each { |element|
- # Testing as a group is one thing
- css_select("#1,#2").should have(2).elements
- # Testing individually is another
- css_select("#1").should have(1).element
- css_select("#2").should have(1).element
- }
- }
- end
-
- it "can select nested tags from rjs (one result)" do
- render_rjs do |page|
- page.replace_html "test", "<div id=\"1\">foo</div>\n<div id=\"2\">foo</div>"
- end
- css_select("div").should have(2).elements
- css_select("#1").should have(1).element
- css_select("#2").should have(1).element
- end
-
- it "can select nested tags from rjs (two results)" do
- render_rjs do |page|
- page.replace_html "test", "<div id=\"1\">foo</div>"
- page.replace_html "test2", "<div id=\"2\">foo</div>"
- end
- css_select("div").should have(2).elements
- css_select("#1").should have(1).element
- css_select("#2").should have(1).element
- end
-
-end
-
-describe "have_rjs behaviour_type", :type => :controller do
- include AssertSelectSpecHelpers
- controller_name :assert_select
- integrate_views
-
- before(:each) do
- render_rjs do |page|
- page.replace "test1", "<div id=\"1\">foo</div>"
- page.replace_html "test2", "<div id=\"2\">bar</div><div id=\"3\">none</div>"
- page.insert_html :top, "test3", "<div id=\"4\">loopy</div>"
- page.hide "test4"
- page["test5"].hide
- end
- end
-
- it "should pass if any rjs exists" do
- response.should have_rjs
- end
-
- it "should fail if no rjs exists" do
- render_rjs do |page|
- end
- lambda do
- response.should have_rjs
- end.should raise_error(SpecFailed)
- end
-
- it "should find all rjs from multiple statements" do
- response.should have_rjs do
- with_tag("#1")
- with_tag("#2")
- with_tag("#3")
- # with_tag("#4")
- # with_tag("#5")
- end
- end
-
- it "should find by id" do
- response.should have_rjs("test1") { |rjs|
- rjs.size.should == 1
- with_tag("div", 1)
- with_tag("div#1", "foo")
- }
-
- lambda do
- response.should have_rjs("test1") { |rjs|
- rjs.size.should == 1
- without_tag("div#1", "foo")
- }
- end.should raise_error(SpecFailed, "should not have tag(\"div#1\", \"foo\"), but did")
-
- response.should have_rjs("test2") { |rjs|
- rjs.size.should == 2
- with_tag("div", 2)
- with_tag("div#2", "bar")
- with_tag("div#3", "none")
- }
- # response.should have_rjs("test4")
- # response.should have_rjs("test5")
- end
-
- # specify "should find rjs using :hide" do
- # response.should have_rjs(:hide)
- # response.should have_rjs(:hide, "test4")
- # response.should have_rjs(:hide, "test5")
- # lambda do
- # response.should have_rjs(:hide, "test3")
- # end.should raise_error(SpecFailed)
- # end
-
- it "should find rjs using :replace" do
- response.should have_rjs(:replace) { |rjs|
- with_tag("div", 1)
- with_tag("div#1", "foo")
- }
- response.should have_rjs(:replace, "test1") { |rjs|
- with_tag("div", 1)
- with_tag("div#1", "foo")
- }
- lambda {
- response.should have_rjs(:replace, "test2")
- }.should raise_error(SpecFailed)
-
- lambda {
- response.should have_rjs(:replace, "test3")
- }.should raise_error(SpecFailed)
- end
-
- it "should find rjs using :replace_html" do
- response.should have_rjs(:replace_html) { |rjs|
- with_tag("div", 2)
- with_tag("div#2", "bar")
- with_tag("div#3", "none")
- }
-
- response.should have_rjs(:replace_html, "test2") { |rjs|
- with_tag("div", 2)
- with_tag("div#2", "bar")
- with_tag("div#3", "none")
- }
-
- lambda {
- response.should have_rjs(:replace_html, "test1")
- }.should raise_error(SpecFailed)
-
- lambda {
- response.should have_rjs(:replace_html, "test3")
- }.should raise_error(SpecFailed)
- end
-
- it "should find rjs using :insert_html (non-positioned)" do
- response.should have_rjs(:insert_html) { |rjs|
- with_tag("div", 1)
- with_tag("div#4", "loopy")
- }
-
- response.should have_rjs(:insert_html, "test3") { |rjs|
- with_tag("div", 1)
- with_tag("div#4", "loopy")
- }
-
- lambda {
- response.should have_rjs(:insert_html, "test1")
- }.should raise_error(SpecFailed)
-
- lambda {
- response.should have_rjs(:insert_html, "test2")
- }.should raise_error(SpecFailed)
- end
-
- it "should find rjs using :insert (positioned)" do
- render_rjs do |page|
- page.insert_html :top, "test1", "<div id=\"1\">foo</div>"
- page.insert_html :bottom, "test2", "<div id=\"2\">bar</div>"
- page.insert_html :before, "test3", "<div id=\"3\">none</div>"
- page.insert_html :after, "test4", "<div id=\"4\">loopy</div>"
- end
- response.should have_rjs(:insert, :top) do
- with_tag("div", 1)
- with_tag("#1")
- end
- response.should have_rjs(:insert, :top, "test1") do
- with_tag("div", 1)
- with_tag("#1")
- end
- lambda {
- response.should have_rjs(:insert, :top, "test2")
- }.should raise_error(SpecFailed)
- response.should have_rjs(:insert, :bottom) {|rjs|
- with_tag("div", 1)
- with_tag("#2")
- }
- response.should have_rjs(:insert, :bottom, "test2") {|rjs|
- with_tag("div", 1)
- with_tag("#2")
- }
- response.should have_rjs(:insert, :before) {|rjs|
- with_tag("div", 1)
- with_tag("#3")
- }
- response.should have_rjs(:insert, :before, "test3") {|rjs|
- with_tag("div", 1)
- with_tag("#3")
- }
- response.should have_rjs(:insert, :after) {|rjs|
- with_tag("div", 1)
- with_tag("#4")
- }
- response.should have_rjs(:insert, :after, "test4") {|rjs|
- with_tag("div", 1)
- with_tag("#4")
- }
- end
-end
-
-describe "send_email behaviour_type", :type => :controller do
- include AssertSelectSpecHelpers
- controller_name :assert_select
- integrate_views
-
- before(:each) do
- ActionMailer::Base.delivery_method = :test
- ActionMailer::Base.perform_deliveries = true
- ActionMailer::Base.deliveries = []
- end
-
- after(:each) do
- ActionMailer::Base.deliveries.clear
- end
-
- it "should fail with nothing sent" do
- response.should_not send_email
- lambda {
- response.should send_email{}
- }.should raise_error(SpecFailed, /No e-mail in delivery list./)
- end
-
- it "should pass otherwise" do
- AssertSelectMailer.deliver_test "<div><p>foo</p><p>bar</p></div>"
- response.should send_email
- lambda {
- response.should_not send_email
- }.should raise_error(SpecFailed)
- response.should send_email{}
- response.should send_email {
- with_tag("div:root") {
- with_tag("p:first-child", "foo")
- with_tag("p:last-child", "bar")
- }
- }
-
- lambda {
- response.should_not send_email
- }.should raise_error(SpecFailed, "should not send email, but did")
- end
-
-end
-
-# describe "An rjs call to :visual_effect, a 'should have_rjs' spec with",
-# :type => :view do
-#
-# before do
-# render 'rjs_spec/visual_effect'
-# end
-#
-# it "should pass with the correct element name" do
-# response.should have_rjs(:effect, :fade, 'mydiv')
-# end
-#
-# it "should fail the wrong element name" do
-# lambda {
-# response.should have_rjs(:effect, :fade, 'wrongname')
-# }.should raise_error(SpecFailed)
-# end
-#
-# it "should fail with the correct element but the wrong command" do
-# lambda {
-# response.should have_rjs(:effect, :puff, 'mydiv')
-# }.should raise_error(SpecFailed)
-# end
-#
-# end
-#
-# describe "An rjs call to :visual_effect for a toggle, a 'should have_rjs' spec with",
-# :type => :view do
-#
-# before do
-# render 'rjs_spec/visual_toggle_effect'
-# end
-#
-# it "should pass with the correct element name" do
-# response.should have_rjs(:effect, :toggle_blind, 'mydiv')
-# end
-#
-# it "should fail with the wrong element name" do
-# lambda {
-# response.should have_rjs(:effect, :toggle_blind, 'wrongname')
-# }.should raise_error(SpecFailed)
-# end
-#
-# it "should fail the correct element but the wrong command" do
-# lambda {
-# response.should have_rjs(:effect, :puff, 'mydiv')
-# }.should raise_error(SpecFailed)
-# end
-#
-# end
-
-describe "string.should have_tag", :type => :helper do
- include AssertSelectSpecHelpers
-
- it "should find root element" do
- "<p>a paragraph</p>".should have_tag("p", "a paragraph")
- end
-
- it "should not find non-existent element" do
- lambda do
- "<p>a paragraph</p>".should have_tag("p", "wrong text")
- end.should raise_error(SpecFailed)
- end
-
- it "should find child element" do
- "<div><p>a paragraph</p></div>".should have_tag("p", "a paragraph")
- end
-
- it "should find nested element" do
- "<div><p>a paragraph</p></div>".should have_tag("div") do
- with_tag("p", "a paragraph")
- end
- end
-
- it "should not find wrong nested element" do
- lambda do
- "<div><p>a paragraph</p></div>".should have_tag("div") do
- with_tag("p", "wrong text")
- end
- end.should raise_error(SpecFailed)
- end
-end
-
-describe "have_tag", :type => :controller do
- include AssertSelectSpecHelpers
- controller_name :assert_select
- integrate_views
-
- it "should work exactly the same as assert_select" do
- render_html %Q{
- <div id="wrapper">foo
- <div class="piece">
- <h3>Text</h3>
- </div>
- <div class="piece">
- <h3>Another</h3>
- </div>
- </div>
- }
-
- assert_select "#wrapper .piece h3", :text => "Text"
- assert_select "#wrapper .piece h3", :text => "Another"
-
- response.should have_tag("#wrapper .piece h3", :text => "Text")
- response.should have_tag("#wrapper .piece h3", :text => "Another")
- end
-end
-
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb
deleted file mode 100644
index 4fd2bcd1c..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/description_generation_spec.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-class DescriptionGenerationSpecController < ActionController::Base
- def render_action
- end
-
- def redirect_action
- redirect_to :action => :render_action
- end
-end
-
-describe "Description generation", :type => :controller do
- controller_name :description_generation_spec
-
- after(:each) do
- Spec::Matchers.clear_generated_description
- end
-
- it "should generate description for render_template" do
- get 'render_action'
- response.should render_template("render_action")
- Spec::Matchers.generated_description.should == "should render template \"render_action\""
- end
-
- it "should generate description for render_template with full path" do
- get 'render_action'
- response.should render_template("description_generation_spec/render_action")
- Spec::Matchers.generated_description.should == "should render template \"description_generation_spec/render_action\""
- end
-
- it "should generate description for redirect_to" do
- get 'redirect_action'
- response.should redirect_to("http://test.host/description_generation_spec/render_action")
- Spec::Matchers.generated_description.should == "should redirect to \"http://test.host/description_generation_spec/render_action\""
- end
-
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb
deleted file mode 100644
index f0b974394..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/errors_on_spec.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-describe "error_on" do
- it "should provide a message including the name of what the error is on" do
- have(1).error_on(:whatever).description.should == "should have 1 error on :whatever"
- end
-end
-
-describe "errors_on" do
- it "should provide a message including the name of what the error is on" do
- have(2).errors_on(:whatever).description.should == "should have 2 errors on :whatever"
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb
deleted file mode 100644
index 93a1ef059..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/have_text_spec.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
-
-describe "have_text" do
-
- describe "where target is a Regexp" do
- it 'should should match submitted text using a regexp' do
- string = 'foo'
- string.should have_text(/fo*/)
- end
- end
-
- describe "where target is a String" do
- it 'should match submitted text using a string' do
- string = 'foo'
- string.should have_text('foo')
- end
- end
-
-end
-
-describe "have_text",
- :type => :controller do
- ['isolation','integration'].each do |mode|
- if mode == 'integration'
- integrate_views
- end
-
- describe "where target is a response (in #{mode} mode)" do
- controller_name :render_spec
-
- it "should pass with exactly matching text" do
- post 'text_action'
- response.should have_text("this is the text for this action")
- end
-
- it "should pass with matching text (using Regexp)" do
- post 'text_action'
- response.should have_text(/is the text/)
- end
-
- it "should fail with matching text" do
- post 'text_action'
- lambda {
- response.should have_text("this is NOT the text for this action")
- }.should fail_with("expected \"this is NOT the text for this action\", got \"this is the text for this action\"")
- end
-
- it "should fail when a template is rendered" do
- post 'some_action'
- lambda {
- response.should have_text("this is the text for this action")
- }.should fail_with(/expected \"this is the text for this action\", got .*/)
- end
-
- it "should pass using should_not with incorrect text" do
- post 'text_action'
- response.should_not have_text("the accordian guy")
- end
- end
- end
-end
-
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/include_text_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/include_text_spec.rb
deleted file mode 100644
index 1ac3fd7c6..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/include_text_spec.rb
+++ /dev/null
@@ -1,70 +0,0 @@
-require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
-
-describe "include_text" do
-
- describe "where target is a String" do
- it 'should match submitted text using a string' do
- string = 'foo'
- string.should include_text('foo')
- end
-
- it 'should match if the text is contained' do
- string = 'I am a big piece of text'
- string.should include_text('big piece')
- end
-
- it 'should not match if text is not contained' do
- string = 'I am a big piece of text'
- string.should_not include_text('corey')
- end
- end
-
-end
-
-describe "include_text", :type => :controller do
- ['isolation','integration'].each do |mode|
- if mode == 'integration'
- integrate_views
- end
-
- describe "where target is a response (in #{mode} mode)" do
- controller_name :render_spec
-
- it "should pass with exactly matching text" do
- post 'text_action'
- response.should include_text("this is the text for this action")
- end
-
- it 'should pass with substring matching text' do
- post 'text_action'
- response.should include_text('text for this')
- end
-
- it "should fail with matching text" do
- post 'text_action'
- lambda {
- response.should include_text("this is NOT the text for this action")
- }.should fail_with("expected to find \"this is NOT the text for this action\" in \"this is the text for this action\"")
- end
-
- it "should fail when a template is rendered" do
- post 'some_action'
- failure_message = case mode
- when 'isolation'
- /expected to find \"this is the text for this action\" in \"render_spec\/some_action\"/
- when 'integration'
- /expected to find \"this is the text for this action\" in \"\"/
- end
- lambda {
- response.should include_text("this is the text for this action")
- }.should fail_with(failure_message)
- end
-
- it "should pass using should_not with incorrect text" do
- post 'text_action'
- response.should_not include_text("the accordian guy")
- end
- end
- end
-end
-
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb
deleted file mode 100644
index e3ce486d4..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/redirect_to_spec.rb
+++ /dev/null
@@ -1,209 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-['isolation','integration'].each do |mode|
- describe "redirect_to behaviour", :type => :controller do
- if mode == 'integration'
- integrate_views
- end
- controller_name :redirect_spec
-
- it "redirected to another action" do
- get 'action_with_redirect_to_somewhere'
- response.should redirect_to(:action => 'somewhere')
- end
-
- it "redirected to another controller and action" do
- get 'action_with_redirect_to_other_somewhere'
- response.should redirect_to(:controller => 'render_spec', :action => 'text_action')
- end
-
- it "redirected to another action (with 'and return')" do
- get 'action_with_redirect_to_somewhere_and_return'
- response.should redirect_to(:action => 'somewhere')
- end
-
- it "redirected from an SSL action to a non-SSL action" do
- request.stub!(:ssl?).and_return true
- get 'action_with_redirect_to_somewhere'
- response.should redirect_to(:action => 'somewhere')
- end
-
- it "redirected to correct path with leading /" do
- get 'action_with_redirect_to_somewhere'
- response.should redirect_to('/redirect_spec/somewhere')
- end
-
- it "redirected to correct path without leading /" do
- get 'action_with_redirect_to_somewhere'
- response.should redirect_to('redirect_spec/somewhere')
- end
-
- it "redirected to correct internal URL" do
- get 'action_with_redirect_to_somewhere'
- response.should redirect_to("http://test.host/redirect_spec/somewhere")
- end
-
- it "redirected to correct external URL" do
- get 'action_with_redirect_to_rspec_site'
- response.should redirect_to("http://rspec.rubyforge.org")
- end
-
- it "redirected :back" do
- request.env['HTTP_REFERER'] = "http://test.host/previous/page"
- get 'action_with_redirect_back'
- response.should redirect_to(:back)
- end
-
- it "redirected :back and should redirect_to URL matches" do
- request.env['HTTP_REFERER'] = "http://test.host/previous/page"
- get 'action_with_redirect_back'
- response.should redirect_to("http://test.host/previous/page")
- end
-
- it "redirected from within a respond_to block" do
- get 'action_with_redirect_in_respond_to'
- response.should redirect_to('redirect_spec/somewhere')
- end
-
- params_as_hash = {:action => "somewhere", :id => 1111, :param1 => "value1", :param2 => "value2"}
-
- it "redirected to an internal URL containing a query string" do
- get "action_with_redirect_which_creates_query_string"
- response.should redirect_to(params_as_hash)
- end
-
- it "redirected to an internal URL containing a query string, one way it might be generated" do
- get "action_with_redirect_with_query_string_order1"
- response.should redirect_to(params_as_hash)
- end
-
- it "redirected to an internal URL containing a query string, another way it might be generated" do
- get "action_with_redirect_with_query_string_order2"
- response.should redirect_to(params_as_hash)
- end
-
- it "redirected to an internal URL which is unroutable but matched via a string" do
- get "action_with_redirect_to_unroutable_url_inside_app"
- response.should redirect_to("http://test.host/nonexistant/none")
- end
-
- end
-
-
- describe "redirect_to with a controller spec in #{mode} mode and a custom request.host", :type => :controller do
- if mode == 'integration'
- integrate_views
- end
- controller_name :redirect_spec
- before do
- request.host = "some.custom.host"
- end
-
- it "should pass when redirected to another action" do
- get 'action_with_redirect_to_somewhere'
- response.should redirect_to(:action => 'somewhere')
- end
- end
-
- describe "Given a controller spec in #{mode} mode", :type => :controller do
- if mode == 'integration'
- integrate_views
- end
- controller_name :redirect_spec
-
- it "an action that redirects should not result in an error if no should redirect_to expectation is called" do
- get 'action_with_redirect_to_somewhere'
- end
-
- it "an action that redirects should not result in an error if should_not redirect_to expectation was called, but not to that action" do
- get 'action_with_redirect_to_somewhere'
- response.should_not redirect_to(:action => 'another_destination')
- end
-
- it "an action that redirects should result in an error if should_not redirect_to expectation was called to that action" do
- get 'action_with_redirect_to_somewhere'
- lambda {
- response.should_not redirect_to(:action => 'somewhere')
- }.should fail_with("expected not to be redirected to {:action=>\"somewhere\"}, but was")
- end
-
- it "an action that does not redirects should not result in an error if should_not redirect_to expectation was called" do
- get 'action_with_no_redirect'
- response.should_not redirect_to(:action => 'any_destination')
- end
-
-
- end
-
- describe "Given a controller spec in #{mode} mode, should redirect_to should fail when", :type => :controller do
- if mode == 'integration'
- integrate_views
- end
- controller_name :redirect_spec
-
- it "redirected to wrong action" do
- get 'action_with_redirect_to_somewhere'
- lambda {
- response.should redirect_to(:action => 'somewhere_else')
- }.should fail_with("expected redirect to {:action=>\"somewhere_else\"}, got redirect to \"http://test.host/redirect_spec/somewhere\"")
- end
-
- it "redirected to incorrect path with leading /" do
- get 'action_with_redirect_to_somewhere'
- lambda {
- response.should redirect_to('/redirect_spec/somewhere_else')
- }.should fail_with('expected redirect to "/redirect_spec/somewhere_else", got redirect to "http://test.host/redirect_spec/somewhere"')
- end
-
- it "redirected to incorrect path without leading /" do
- get 'action_with_redirect_to_somewhere'
- lambda {
- response.should redirect_to('redirect_spec/somewhere_else')
- }.should fail_with('expected redirect to "redirect_spec/somewhere_else", got redirect to "http://test.host/redirect_spec/somewhere"')
- end
-
- it "redirected to incorrect internal URL (based on the action)" do
- get 'action_with_redirect_to_somewhere'
- lambda {
- response.should redirect_to("http://test.host/redirect_spec/somewhere_else")
- }.should fail_with('expected redirect to "http://test.host/redirect_spec/somewhere_else", got redirect to "http://test.host/redirect_spec/somewhere"')
- end
-
- it "redirected to wrong external URL" do
- get 'action_with_redirect_to_rspec_site'
- lambda {
- response.should redirect_to("http://test.unit.rubyforge.org")
- }.should fail_with('expected redirect to "http://test.unit.rubyforge.org", got redirect to "http://rspec.rubyforge.org"')
- end
-
- it "redirected to incorrect internal URL (based on the directory path)" do
- get 'action_with_redirect_to_somewhere'
- lambda {
- response.should redirect_to("http://test.host/non_existent_controller/somewhere")
- }.should fail_with('expected redirect to "http://test.host/non_existent_controller/somewhere", got redirect to "http://test.host/redirect_spec/somewhere"')
- end
-
- it "expected redirect :back, but redirected to a new URL" do
- get 'action_with_no_redirect'
- lambda {
- response.should redirect_to(:back)
- }.should fail_with('expected redirect to :back, got no redirect')
- end
-
- it "no redirect at all" do
- get 'action_with_no_redirect'
- lambda {
- response.should redirect_to(:action => 'nowhere')
- }.should fail_with("expected redirect to {:action=>\"nowhere\"}, got no redirect")
- end
-
- it "redirected to an internal URL which is unroutable and matched via a hash" do
- get "action_with_redirect_to_unroutable_url_inside_app"
- route = {:controller => "nonexistant", :action => "none"}
- lambda {
- response.should redirect_to(route)
- }.should raise_error(ActionController::RoutingError, /(no route found to match|No route matches) \"\/nonexistant\/none\" with \{\}/)
- end
-
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb
deleted file mode 100644
index 93cca867f..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/matchers/render_spec.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-['isolation','integration'].each do |mode|
- describe "response.should render_template (in #{mode} mode)",
- :type => :controller do
- controller_name :render_spec
- if mode == 'integration'
- integrate_views
- end
-
- it "should match a simple path" do
- post 'some_action'
- response.should render_template('some_action')
- end
-
- it "should match a less simple path" do
- post 'some_action'
- response.should render_template('render_spec/some_action')
- end
-
- it "should match a less simple path to another controller" do
- post 'action_which_renders_template_from_other_controller'
- response.should render_template('controller_spec/action_with_template')
- end
-
- it "should match a symbol" do
- post 'some_action'
- response.should render_template(:some_action)
- end
-
- it "should match an rjs template" do
- xhr :post, 'some_action'
- if Rails::VERSION::STRING < "2.0.0"
- response.should render_template('render_spec/some_action.rjs')
- else
- response.should render_template('render_spec/some_action')
- end
- end
-
- it "should match a partial template (simple path)" do
- get 'action_with_partial'
- response.should render_template("_a_partial")
- end
-
- it "should match a partial template (complex path)" do
- get 'action_with_partial'
- response.should render_template("render_spec/_a_partial")
- end
-
- it "should fail when the wrong template is rendered" do
- post 'some_action'
- lambda do
- response.should render_template('non_existent_template')
- end.should fail_with("expected \"non_existent_template\", got \"render_spec/some_action\"")
- end
-
- it "should fail without full path when template is associated with a different controller" do
- post 'action_which_renders_template_from_other_controller'
- lambda do
- response.should render_template('action_with_template')
- end.should fail_with(%Q|expected "action_with_template", got "controller_spec/action_with_template"|)
- end
-
- it "should fail with incorrect full path when template is associated with a different controller" do
- post 'action_which_renders_template_from_other_controller'
- lambda do
- response.should render_template('render_spec/action_with_template')
- end.should fail_with(%Q|expected "render_spec/action_with_template", got "controller_spec/action_with_template"|)
- end
-
- it "should fail on the wrong extension (given rhtml)" do
- get 'some_action'
- lambda {
- response.should render_template('render_spec/some_action.rjs')
- }.should fail_with("expected \"render_spec/some_action.rjs\", got \"render_spec/some_action\"")
- end
-
- it "should fail when TEXT is rendered" do
- post 'text_action'
- lambda do
- response.should render_template('some_action')
- end.should fail_with("expected \"some_action\", got nil")
- end
- end
-
- describe "response.should_not render_template (in #{mode} mode)",
- :type => :controller do
- controller_name :render_spec
- if mode == 'integration'
- integrate_views
- end
-
- it "should pass when the action renders nothing" do
- post 'action_that_renders_nothing'
- response.should_not render_template('action_that_renders_nothing')
- end
-
- it "should pass when the action renders nothing (symbol)" do
- post 'action_that_renders_nothing'
- response.should_not render_template(:action_that_renders_nothing)
- end
-
- it "should pass when the action does not render the template" do
- post 'some_action'
- response.should_not render_template('some_other_template')
- end
-
- it "should pass when the action does not render the template (symbol)" do
- post 'some_action'
- response.should_not render_template(:some_other_template)
- end
-
- it "should pass when the action does not render the template (named with controller)" do
- post 'some_action'
- response.should_not render_template('render_spec/some_other_template')
- end
-
- it "should pass when the action renders the template with a different controller" do
- post 'action_which_renders_template_from_other_controller'
- response.should_not render_template('action_with_template')
- end
-
- it "should pass when the action renders the template (named with controller) with a different controller" do
- post 'action_which_renders_template_from_other_controller'
- response.should_not render_template('render_spec/action_with_template')
- end
-
- it "should pass when TEXT is rendered" do
- post 'text_action'
- response.should_not render_template('some_action')
- end
-
- it "should fail when the action renders the template" do
- post 'some_action'
- lambda do
- response.should_not render_template('some_action')
- end.should fail_with("expected not to render \"some_action\", but did")
- end
-
- it "should fail when the action renders the template (symbol)" do
- post 'some_action'
- lambda do
- response.should_not render_template(:some_action)
- end.should fail_with("expected not to render \"some_action\", but did")
- end
-
- it "should fail when the action renders the template (named with controller)" do
- post 'some_action'
- lambda do
- response.should_not render_template('render_spec/some_action')
- end.should fail_with("expected not to render \"render_spec/some_action\", but did")
- end
-
- it "should fail when the action renders the partial" do
- post 'action_with_partial'
- lambda do
- response.should_not render_template('_a_partial')
- end.should fail_with("expected not to render \"_a_partial\", but did")
- end
-
- it "should fail when the action renders the partial (named with controller)" do
- post 'action_with_partial'
- lambda do
- response.should_not render_template('render_spec/_a_partial')
- end.should fail_with("expected not to render \"render_spec/_a_partial\", but did")
- end
-
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/mocks/ar_classes.rb b/vendor/plugins/rspec_on_rails/spec/rails/mocks/ar_classes.rb
deleted file mode 100644
index 05213029a..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/mocks/ar_classes.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-class MockableModel < ActiveRecord::Base
- has_one :associated_model
-end
-
-class SubMockableModel < MockableModel
-end
-
-class AssociatedModel < ActiveRecord::Base
- belongs_to :mockable_model
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb
deleted file mode 100644
index 9ca171b8e..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/mocks/mock_model_spec.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require File.dirname(__FILE__) + '/ar_classes'
-
-describe "mock_model" do
- before(:each) do
- @model = mock_model(SubMockableModel)
- end
- it "should say it is_a? if it is" do
- @model.is_a?(SubMockableModel).should be(true)
- end
- it "should say it is_a? if it's ancestor is" do
- @model.is_a?(MockableModel).should be(true)
- end
- it "should say it is kind_of? if it is" do
- @model.kind_of?(SubMockableModel).should be(true)
- end
- it "should say it is kind_of? if it's ancestor is" do
- @model.kind_of?(MockableModel).should be(true)
- end
- it "should say it is instance_of? if it is" do
- @model.instance_of?(SubMockableModel).should be(true)
- end
- it "should not say it instance_of? if it isn't, even if it's ancestor is" do
- @model.instance_of?(MockableModel).should be(false)
- end
-end
-
-describe "mock_model with stubbed id", :type => :view do
- before(:each) do
- @model = mock_model(MockableModel, :id => 1)
- end
- it "should be named using the stubbed id value" do
- @model.instance_variable_get(:@name).should == "MockableModel_1"
- end
-end
-
-describe "mock_model with null_object", :type => :view do
- before(:each) do
- @model = mock_model(MockableModel, :null_object => true, :mocked_method => "mocked")
- end
-
- it "should be able to mock methods" do
- @model.mocked_method.should == "mocked"
- end
- it "should return itself to unmocked methods" do
- @model.unmocked_method.should equal(@model)
- end
-end
-
-describe "mock_model as association", :type => :view do
- before(:each) do
- @real = AssociatedModel.create!
- @mock_model = mock_model(MockableModel)
- @real.mockable_model = @mock_model
- end
-
- it "should pass associated_model == mock" do
- @mock_model.should == @real.mockable_model
- end
-
- it "should pass mock == associated_model" do
- @real.mockable_model.should == @mock_model
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/mocks/stub_model_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/mocks/stub_model_spec.rb
deleted file mode 100644
index c123de009..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/mocks/stub_model_spec.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-require File.dirname(__FILE__) + '/ar_classes'
-
-describe "stub_model" do
- describe "defaults" do
- it "should have an id" do
- stub_model(MockableModel).id.should be > 0
- end
-
- it "should say it is not a new record" do
- stub_model(MockableModel).should_not be_new_record
- end
- end
-
- it "should accept a stub id" do
- stub_model(MockableModel, :id => 37).id.should == 37
- end
-
- it "should say it is a new record when id is set to nil" do
- stub_model(MockableModel, :id => nil).should be_new_record
- end
-
- it "should accept any arbitrary stub" do
- stub_model(MockableModel, :foo => "bar").foo.should == "bar"
- end
-
- it "should accept a stub for save" do
- stub_model(MockableModel, :save => false).save.should be(false)
- end
-
- describe "#as_new_record" do
- it "should say it is a new record" do
- stub_model(MockableModel).as_new_record.should be_new_record
- end
-
- it "should have a nil id" do
- stub_model(MockableModel).as_new_record.id.should be(nil)
- end
- end
-
- it "should raise when hitting the db" do
- lambda do
- stub_model(MockableModel).save
- end.should raise_error(Spec::Rails::IllegalDataAccessException, /stubbed models are not allowed to access the database/)
- end
-
- it "should increment the id" do
- first = stub_model(MockableModel)
- second = stub_model(MockableModel)
- second.id.should == (first.id + 1)
- end
-
-end
-
-describe "stub_model as association" do
- before(:each) do
- @real = AssociatedModel.create!
- @stub_model = stub_model(MockableModel)
- @real.mockable_model = @stub_model
- end
-
- it "should pass associated_model == mock" do
- @stub_model.should == @real.mockable_model
- end
-
- it "should pass mock == associated_model" do
- @real.mockable_model.should == @stub_model
- end
-end
-
-describe "stub_model with a block" do
- it "should yield the model" do
- model = stub_model(MockableModel) do |block_arg|
- @block_arg = block_arg
- end
- model.should be(@block_arg)
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/sample_modified_fixture.rb b/vendor/plugins/rspec_on_rails/spec/rails/sample_modified_fixture.rb
deleted file mode 100644
index 832049768..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/sample_modified_fixture.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../spec_helper'
-
-describe "A sample spec", :type => :model do
- fixtures :animals
- it "should pass" do
- animals(:pig).name.should == "Piggy"
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb
deleted file mode 100644
index a88e6070e..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/sample_spec.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require File.dirname(__FILE__) + '/../spec_helper'
-
-describe "A sample spec", :type => :model do
- fixtures :animals
- it "should pass" do
- animals(:pig).name.should == "Pig"
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb
deleted file mode 100644
index b70f10d90..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/spec_server_spec.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-require File.dirname(__FILE__) + '/../spec_helper'
-
-describe "script/spec_server file", :shared => true do
- attr_accessor :tmbundle_install_directory
- attr_reader :animals_yml_path, :original_animals_content
-
- before do
- @animals_yml_path = File.expand_path("#{RAILS_ROOT}/spec/fixtures/animals.yml")
- @original_animals_content = File.read(animals_yml_path)
- end
-
- after do
- File.open(animals_yml_path, "w") do |f|
- f.write original_animals_content
- end
- end
-
- after(:each) do
- system "lsof -i tcp:8989 | sed /COMMAND/d | awk '{print $2}' | xargs kill"
- end
-
- xit "runs a spec" do
- dir = File.dirname(__FILE__)
- output = ""
- Timeout.timeout(10) do
- loop do
- output = `#{RAILS_ROOT}/script/spec #{dir}/sample_spec.rb --drb 2>&1`
- break unless output.include?("No server is running")
- end
- end
-
- if $?.exitstatus != 0 || output !~ /0 failures/
- flunk "command 'script/spec spec/sample_spec' failed\n#{output}"
- end
-
- fixtures = YAML.load(@original_animals_content)
- fixtures['pig']['name'] = "Piggy"
-
- File.open(animals_yml_path, "w") do |f|
- f.write YAML.dump(fixtures)
- end
-
- Timeout.timeout(10) do
- loop do
- output = `#{RAILS_ROOT}/script/spec #{dir}/sample_modified_fixture.rb --drb 2>&1`
- break unless output.include?("No server is running")
- end
- end
-
- if $?.exitstatus != 0 || output !~ /0 failures/
- flunk "command 'script/spec spec/sample_modified_fixture' failed\n#{output}"
- end
- end
-
- def start_spec_server
- dir = File.dirname(__FILE__)
- Thread.start do
- system "cd #{RAILS_ROOT}; script/spec_server"
- end
-
- file_content = ""
- end
-end
-
-describe "script/spec_server file without TextMate bundle" do
- it_should_behave_like "script/spec_server file"
- before(:each) do
- start_spec_server
- end
-end
-
-describe "script/spec_server file with TextMate bundle" do
- it_should_behave_like "script/spec_server file"
- before(:each) do
- dir = File.dirname(__FILE__)
- @tmbundle_install_directory = File.expand_path("#{Dir.tmpdir}/Library/Application Support/TextMate/Bundles")
- @bundle_name = "RSpec.tmbundle"
- FileUtils.mkdir_p(tmbundle_install_directory)
- bundle_dir = File.expand_path("#{dir}/../../../../../../#{@bundle_name}")
- File.directory?(bundle_dir).should be_true
- unless system(%Q|ln -s #{bundle_dir} "#{tmbundle_install_directory}"|)
- raise "Creating link to Textmate Bundle"
- end
- start_spec_server
- end
-
- after(:each) do
- bundle_file_to_remove = "#{tmbundle_install_directory}/#{@bundle_name}"
- if bundle_file_to_remove == "/"
- raise "bundle file path resolved to '/' - could not call rm"
- end
- unless system(%Q|rm "#{bundle_file_to_remove}"|)
- raise "Removing Textmate bundle link failed"
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb b/vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb
deleted file mode 100644
index ea258c7d8..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails/spec_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.dirname(__FILE__) + '/../spec_helper'
-
-describe "script/spec file" do
- it "should run a spec" do
- dir = File.dirname(__FILE__)
- output = `#{RAILS_ROOT}/script/spec #{dir}/sample_spec.rb`
- unless $?.exitstatus == 0
- flunk "command 'script/spec spec/sample_spec' failed\n#{output}"
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec/rails_suite.rb b/vendor/plugins/rspec_on_rails/spec/rails_suite.rb
deleted file mode 100644
index 15effae1c..000000000
--- a/vendor/plugins/rspec_on_rails/spec/rails_suite.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-dir = File.dirname(__FILE__)
-Dir["#{dir}/**/*_example.rb"].each do |file|
- require file
-end
-Dir["#{dir}/**/*_spec.rb"].each do |file|
- require file
-end
diff --git a/vendor/plugins/rspec_on_rails/spec/spec_helper.rb b/vendor/plugins/rspec_on_rails/spec/spec_helper.rb
deleted file mode 100644
index 2d2c7279f..000000000
--- a/vendor/plugins/rspec_on_rails/spec/spec_helper.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-dir = File.dirname(__FILE__)
-$LOAD_PATH.unshift(File.expand_path("#{dir}/../rspec/lib"))
-$LOAD_PATH.unshift(File.expand_path("#{dir}/../spec_resources/controllers"))
-$LOAD_PATH.unshift(File.expand_path("#{dir}/../spec_resources/helpers"))
-require File.expand_path("#{dir}/../../../../spec/spec_helper")
-require File.expand_path("#{dir}/../spec_resources/controllers/render_spec_controller")
-require File.expand_path("#{dir}/../spec_resources/controllers/rjs_spec_controller")
-require File.expand_path("#{dir}/../spec_resources/controllers/redirect_spec_controller")
-require File.expand_path("#{dir}/../spec_resources/controllers/action_view_base_spec_controller")
-require File.expand_path("#{dir}/../spec_resources/helpers/explicit_helper")
-require File.expand_path("#{dir}/../spec_resources/helpers/more_explicit_helper")
-require File.expand_path("#{dir}/../spec_resources/helpers/view_spec_helper")
-require File.expand_path("#{dir}/../spec_resources/helpers/plugin_application_helper")
-
-ActionController::Routing.controller_paths << "#{dir}/../spec_resources/controllers"
-
-module Spec
- module Rails
- module Example
- class ViewExampleGroupController
- set_view_path File.join(File.dirname(__FILE__), "..", "spec_resources", "views")
- end
- end
- end
-end
-
-def fail()
- raise_error(Spec::Expectations::ExpectationNotMetError)
-end
-
-def fail_with(message)
- raise_error(Spec::Expectations::ExpectationNotMetError,message)
-end
-
-class Proc
- def should_pass
- lambda { self.call }.should_not raise_error
- end
-end
-
-ActionController::Routing::Routes.draw do |map|
- map.resources :rspec_on_rails_specs
- map.connect 'custom_route', :controller => 'custom_route_spec', :action => 'custom_route'
- map.connect ":controller/:action/:id"
-end
-
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/controllers/action_view_base_spec_controller.rb b/vendor/plugins/rspec_on_rails/spec_resources/controllers/action_view_base_spec_controller.rb
deleted file mode 100644
index 924022178..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/controllers/action_view_base_spec_controller.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class ActionViewBaseSpecController < ActionController::Base
-end
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb b/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb
deleted file mode 100644
index 769f4c588..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/controllers/controller_spec_controller.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-class ControllerSpecController < ActionController::Base
- if ['edge','2.0.0'].include?(ENV['RSPEC_RAILS_VERSION'])
- set_view_path [File.join(File.dirname(__FILE__), "..", "views")]
- else
- set_view_path File.join(File.dirname(__FILE__), "..", "views")
- end
-
- def some_action
- render :template => "template/that/does/not/actually/exist"
- end
-
- def action_with_template
- render :template => "controller_spec/action_with_template"
- end
-
- def action_which_sets_flash
- flash[:flash_key] = "flash value"
- render :text => ""
- end
-
- def action_which_gets_session
- raise "expected #{params[:session_key].inspect}\ngot #{session[:session_key].inspect}" unless (session[:session_key] == params[:expected])
- render :text => ""
- end
-
- def action_which_sets_session
- session[:session_key] = "session value"
- end
-
- def action_with_partial
- render :partial => "controller_spec/partial"
- end
-
- def action_with_partial_with_object
- render :partial => "controller_spec/partial", :object => params[:thing]
- end
-
- def action_with_partial_with_locals
- render :partial => "controller_spec/partial", :locals => {:thing => params[:thing]}
- end
-
- def action_with_errors_in_template
- render :template => "controller_spec/action_with_errors_in_template"
- end
-
- def action_setting_the_assigns_hash
- assigns['direct_assigns_key'] = :direct_assigns_key_value
- @indirect_assigns_key = :indirect_assigns_key_value
- end
-
- def action_setting_flash_after_session_reset
- reset_session
- flash[:after_reset] = "available"
- end
-
- def action_setting_flash_before_session_reset
- flash[:before_reset] = 'available'
- reset_session
- end
-
- def action_with_render_update
- render :update do |page|
- page.replace :bottom, 'replace_me',
- :partial => 'non_existent_partial'
- end
- end
-end
-
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/controllers/redirect_spec_controller.rb b/vendor/plugins/rspec_on_rails/spec_resources/controllers/redirect_spec_controller.rb
deleted file mode 100644
index aa3b24a70..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/controllers/redirect_spec_controller.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-class RedirectSpecController < ApplicationController
-
- def action_with_no_redirect
- render :text => "this is just here to keep this from causing a MissingTemplate error"
- end
-
- def action_with_redirect_to_somewhere
- redirect_to :action => 'somewhere'
- end
-
- def action_with_redirect_to_other_somewhere
- redirect_to :controller => 'render_spec', :action => 'text_action'
- end
-
- def action_with_redirect_to_somewhere_and_return
- redirect_to :action => 'somewhere' and return
- render :text => "this is after the return"
- end
-
- def somewhere
- render :text => "this is just here to keep this from causing a MissingTemplate error"
- end
-
- def action_with_redirect_to_rspec_site
- redirect_to "http://rspec.rubyforge.org"
- end
-
- def action_with_redirect_back
- redirect_to :back
- end
-
- def action_with_redirect_in_respond_to
- respond_to do |wants|
- wants.html { redirect_to :action => 'somewhere' }
- end
- end
-
- def action_with_redirect_which_creates_query_string
- redirect_to :action => "somewhere", :id => 1111, :param1 => "value1", :param2 => "value2"
- end
-
- # note: sometimes this is the URL which rails will generate from the hash in
- # action_with_redirect_which_creates_query_string
- def action_with_redirect_with_query_string_order1
- redirect_to "http://test.host/redirect_spec/somewhere/1111?param1=value1&param2=value2"
- end
-
- # note: sometimes this is the URL which rails will generate from the hash in
- # action_with_redirect_which_creates_query_string
- def action_with_redirect_with_query_string_order2
- redirect_to "http://test.host/redirect_spec/somewhere/1111?param2=value2&param1=value1"
- end
-
- def action_with_redirect_to_unroutable_url_inside_app
- redirect_to :controller => "nonexistant", :action => "none"
- end
-
-end
-
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/controllers/render_spec_controller.rb b/vendor/plugins/rspec_on_rails/spec_resources/controllers/render_spec_controller.rb
deleted file mode 100644
index b546abe4c..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/controllers/render_spec_controller.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-class RenderSpecController < ApplicationController
- set_view_path File.join(File.dirname(__FILE__), "..", "views")
-
- def some_action
- respond_to do |format|
- format.html
- format.js
- end
- end
-
- def action_which_renders_template_from_other_controller
- render :template => 'controller_spec/action_with_template'
- end
-
- def text_action
- render :text => "this is the text for this action"
- end
-
- def action_with_partial
- render :partial => "a_partial"
- end
-
- def action_that_renders_nothing
- render :nothing => true
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/controllers/rjs_spec_controller.rb b/vendor/plugins/rspec_on_rails/spec_resources/controllers/rjs_spec_controller.rb
deleted file mode 100644
index e7131bc13..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/controllers/rjs_spec_controller.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-class RjsSpecController < ApplicationController
- set_view_path File.join(File.dirname(__FILE__), "..", "views")
-
- def replace_html
- end
-
- def insert_html
- end
-
- def replace
- end
-
- def hide_div
- end
-
- def hide_page_element
- end
-
- def replace_html_with_partial
- end
-
- def render_replace_html
- render :update do |page|
- page.replace_html 'mydiv', 'replacement text'
- page.replace_html 'myotherdiv', 'other replacement text'
- end
- end
-
- def render_replace_html_with_partial
- render :update do |page|
- page.replace_html 'mydiv', :partial => 'rjs_spec/replacement_partial'
- end
- end
-
- def render_insert_html
- render :update do |page|
- page.insert_html 'mydiv', 'replacement text'
- end
- end
-
- def render_replace
- render :update do |page|
- page.replace 'mydiv', 'replacement text'
- end
- end
-
- def render_hide_div
- render :update do |page|
- page.hide 'mydiv'
- end
- end
-
- def render_hide_page_element
- render :update do |page|
- page['mydiv'].hide
- end
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/helpers/explicit_helper.rb b/vendor/plugins/rspec_on_rails/spec_resources/helpers/explicit_helper.rb
deleted file mode 100644
index f39f0ccce..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/helpers/explicit_helper.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-module ExplicitHelper
- def method_in_explicit_helper
- "<div>This is text from a method in the ExplicitHelper</div>"
- end
-
- # this is an example of a method spec'able with eval_erb in helper specs
- def prepend(arg, &block)
- concat(arg, block.binding) + block.call
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/helpers/more_explicit_helper.rb b/vendor/plugins/rspec_on_rails/spec_resources/helpers/more_explicit_helper.rb
deleted file mode 100644
index 7468741b2..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/helpers/more_explicit_helper.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-module MoreExplicitHelper
- def method_in_more_explicit_helper
- "<div>This is text from a method in the MoreExplicitHelper</div>"
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/helpers/plugin_application_helper.rb b/vendor/plugins/rspec_on_rails/spec_resources/helpers/plugin_application_helper.rb
deleted file mode 100644
index 2107d2218..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/helpers/plugin_application_helper.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-# Methods added to this helper will be available to all templates in the application.
-module ApplicationHelper
- def method_in_plugin_application_helper
- "<div>This is text from a method in the ApplicationHelper</div>"
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/helpers/view_spec_helper.rb b/vendor/plugins/rspec_on_rails/spec_resources/helpers/view_spec_helper.rb
deleted file mode 100644
index b05fc53f7..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/helpers/view_spec_helper.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-module ViewSpecHelper
- def method_in_helper
- "<div>This is text from a method in the ViewSpecHelper</div>"
- end
-
- def method_in_template_with_partial
- "<div>method_in_template_with_partial in ViewSpecHelper</div>"
- end
-
- def method_in_partial
- "<div>method_in_partial in ViewSpecHelper</div>"
- end
-end
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/_partial.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/_partial.rhtml
deleted file mode 100644
index e69de29bb..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/_partial.rhtml
+++ /dev/null
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml
deleted file mode 100644
index 8b1378917..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml
deleted file mode 100644
index 8b1378917..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_the_assigns_hash.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_the_assigns_hash.rhtml
deleted file mode 100644
index e69de29bb..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_setting_the_assigns_hash.rhtml
+++ /dev/null
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_errors_in_template.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_errors_in_template.rhtml
deleted file mode 100644
index 0f957b2c8..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_errors_in_template.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<% raise %> \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_template.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_template.rhtml
deleted file mode 100644
index 6e1f05847..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/controller_spec/action_with_template.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<div>This is action_with_template.rhtml</div>
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/_a_partial.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/_a_partial.rhtml
deleted file mode 100644
index e69de29bb..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/_a_partial.rhtml
+++ /dev/null
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.js.rjs b/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.js.rjs
deleted file mode 100644
index 4472f4b4c..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.js.rjs
+++ /dev/null
@@ -1 +0,0 @@
-# This is used for rails > 1.2.3 \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rhtml
deleted file mode 100644
index e69de29bb..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rhtml
+++ /dev/null
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rjs b/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rjs
deleted file mode 100644
index c67be9b1f..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/render_spec/some_action.rjs
+++ /dev/null
@@ -1 +0,0 @@
-# This is used for rails <= 1.2.3
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/_replacement_partial.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/_replacement_partial.rhtml
deleted file mode 100644
index d2820659c..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/_replacement_partial.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-This is the text in the replacement partial. \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_div.rjs b/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_div.rjs
deleted file mode 100644
index 1fe2139be..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_div.rjs
+++ /dev/null
@@ -1 +0,0 @@
-page.hide 'mydiv'
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_page_element.rjs b/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_page_element.rjs
deleted file mode 100644
index de1ebc9d0..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/hide_page_element.rjs
+++ /dev/null
@@ -1 +0,0 @@
-page['mydiv'].hide
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/insert_html.rjs b/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/insert_html.rjs
deleted file mode 100644
index f8a59e0ca..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/insert_html.rjs
+++ /dev/null
@@ -1 +0,0 @@
-page.insert_html 'mydiv', 'replacement text'
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace.rjs b/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace.rjs
deleted file mode 100644
index aca59a97a..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace.rjs
+++ /dev/null
@@ -1 +0,0 @@
-page.replace 'mydiv', 'replacement text'
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html.rjs b/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html.rjs
deleted file mode 100644
index 717c598e6..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html.rjs
+++ /dev/null
@@ -1 +0,0 @@
-page.replace_html 'mydiv', 'replacement text' \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html_with_partial.rjs b/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html_with_partial.rjs
deleted file mode 100644
index 0531804dd..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/replace_html_with_partial.rjs
+++ /dev/null
@@ -1 +0,0 @@
-page.replace_html 'mydiv', :partial => 'rjs_spec/replacement_partial' \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_effect.rjs b/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_effect.rjs
deleted file mode 100644
index 1c37b32ad..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_effect.rjs
+++ /dev/null
@@ -1 +0,0 @@
-page.visual_effect :fade, 'mydiv'
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_toggle_effect.rjs b/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_toggle_effect.rjs
deleted file mode 100644
index 97cf6bbeb..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/rjs_spec/visual_toggle_effect.rjs
+++ /dev/null
@@ -1 +0,0 @@
-page.visual_effect :toggle_blind, 'mydiv'
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/no_tags.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/no_tags.rhtml
deleted file mode 100644
index 877b90815..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/no_tags.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<!-THIS FILE HAS NO TAGS-> \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_no_attributes.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_no_attributes.rhtml
deleted file mode 100644
index 281c6866c..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_no_attributes.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<div></div> \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_one_attribute.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_one_attribute.rhtml
deleted file mode 100644
index c664e76e7..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/tag_spec/single_div_with_one_attribute.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<div key="value"></div> \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial.rhtml
deleted file mode 100644
index 39505da3d..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial.rhtml
+++ /dev/null
@@ -1,2 +0,0 @@
-<%= method_in_plugin_application_helper %>
-<%= method_in_partial %> \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_used_twice.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_used_twice.rhtml
deleted file mode 100644
index e69de29bb..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_used_twice.rhtml
+++ /dev/null
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_local_variable.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_local_variable.rhtml
deleted file mode 100644
index 47274481b..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_local_variable.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<div><%= x %></div> \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_sub_partial.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_sub_partial.rhtml
deleted file mode 100644
index 90207a30d..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_partial_with_sub_partial.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<%= render :partial => 'partial', :object => partial %> \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_spacer.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_spacer.rhtml
deleted file mode 100644
index c952f6e9a..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/_spacer.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<hr id="spacer" />
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/accessor.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/accessor.rhtml
deleted file mode 100644
index 1d6f96b01..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/accessor.rhtml
+++ /dev/null
@@ -1,5 +0,0 @@
-<div id="session"><%= session[:key] %></div>
-<div id="params"><%= params[:key] %></div>
-<div id="flash"><%= flash[:key] %></div>
-<div id="controller"><%= params[:controller] %></div>
-<div id="action"><%= params[:action] %></div>
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/entry_form.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/entry_form.rhtml
deleted file mode 100755
index 7b11d9723..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/entry_form.rhtml
+++ /dev/null
@@ -1,2 +0,0 @@
-<% form_tag do %>
-<% end %> \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/explicit_helper.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/explicit_helper.rhtml
deleted file mode 100644
index 49aa081cd..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/explicit_helper.rhtml
+++ /dev/null
@@ -1,2 +0,0 @@
-<%= method_in_plugin_application_helper %>
-<%= method_in_explicit_helper %>
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/foo/show.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/foo/show.rhtml
deleted file mode 100644
index 2cc5fd98e..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/foo/show.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<%= method_in_plugin_application_helper %>
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/implicit_helper.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/implicit_helper.rhtml
deleted file mode 100644
index 816c66744..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/implicit_helper.rhtml
+++ /dev/null
@@ -1,2 +0,0 @@
-<%= method_in_plugin_application_helper %>
-<%= method_in_helper %>
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/multiple_helpers.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/multiple_helpers.rhtml
deleted file mode 100644
index ae5a72b65..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/multiple_helpers.rhtml
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= method_in_plugin_application_helper %>
-<%= method_in_explicit_helper %>
-<%= method_in_more_explicit_helper %> \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial.rhtml
deleted file mode 100644
index 0e13ba3b2..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial.rhtml
+++ /dev/null
@@ -1,5 +0,0 @@
-<%= method_in_template_with_partial %>
-<%= render :partial => 'partial' %>
-
-<%= render :partial => 'partial_used_twice' %>
-<%= render :partial => 'partial_used_twice' %>
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_using_collection.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_using_collection.rhtml
deleted file mode 100644
index 79d82156e..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_using_collection.rhtml
+++ /dev/null
@@ -1,3 +0,0 @@
-<%= render :partial => 'partial',
- :collection => ['Alice', 'Bob'],
- :spacer_template => 'spacer' %>
diff --git a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_with_array.rhtml b/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_with_array.rhtml
deleted file mode 100644
index 7d53476d6..000000000
--- a/vendor/plugins/rspec_on_rails/spec_resources/views/view_spec/template_with_partial_with_array.rhtml
+++ /dev/null
@@ -1 +0,0 @@
-<%= render :partial => @array %>
diff --git a/vendor/plugins/rspec_on_rails/stories/all.rb b/vendor/plugins/rspec_on_rails/stories/all.rb
deleted file mode 100644
index 7e55f8afa..000000000
--- a/vendor/plugins/rspec_on_rails/stories/all.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[helper])
-require File.join(File.dirname(__FILE__), *%w[steps people])
-
-# Run transactions_should_rollback in Ruby
-require File.join(File.dirname(__FILE__), *%w[transactions_should_rollback])
-
-# Run transactions_should_rollback in Plain Text
-with_steps_for :people do
- run File.join(File.dirname(__FILE__), *%w[transactions_should_rollback]), :type => RailsStory
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/stories/helper.rb b/vendor/plugins/rspec_on_rails/stories/helper.rb
deleted file mode 100644
index 50c6ee694..000000000
--- a/vendor/plugins/rspec_on_rails/stories/helper.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-dir = File.dirname(__FILE__)
-$LOAD_PATH.unshift File.expand_path("#{dir}/../lib")
-require File.expand_path("#{dir}/../../../../spec/spec_helper")
-
-require 'spec/rails/story_adapter' \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/stories/steps/people.rb b/vendor/plugins/rspec_on_rails/stories/steps/people.rb
deleted file mode 100644
index a3bf25e9e..000000000
--- a/vendor/plugins/rspec_on_rails/stories/steps/people.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-steps_for :people do
- When "I add a Person" do
- Person.create!(:name => "Foo")
- end
- Then "there should be one person" do
- Person.count.should == 1
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback b/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback
deleted file mode 100644
index 9367676a4..000000000
--- a/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback
+++ /dev/null
@@ -1,15 +0,0 @@
-Story: transactions should rollback in plain text
- As an RSpec/Rails Story author
- I want transactions to roll back between scenarios in plain text
- So that I can have confidence in the state of the database
-
- Scenario: add one Person
- When I add a Person
-
- Scenario: add another person
- GivenScenario: add one Person
- Then there should be one person
-
- Scenario: add yet another person
- GivenScenario: add one Person
- Then there should be one person
diff --git a/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback.rb b/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback.rb
deleted file mode 100644
index 3e2bdda75..000000000
--- a/vendor/plugins/rspec_on_rails/stories/transactions_should_rollback.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require File.join(File.dirname(__FILE__), *%w[helper])
-
-Story "transactions should rollback", %{
- As an RSpec/Rails Story author
- I want transactions to roll back between scenarios
- So that I can have confidence in the state of the database
-}, :type => RailsStory do
- Scenario "add one Person" do
- When "I add a Person" do
- Person.create!(:name => "Foo")
- end
- end
-
- Scenario "add another person" do
- GivenScenario "add one Person"
- Then "there should be one person" do
- Person.count.should == 1
- end
- end
-
- Scenario "add yet another person" do
- GivenScenario "add one Person"
- Then "there should be one person"
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/rspec_on_rails/tasks/rspec.rake b/vendor/plugins/rspec_on_rails/tasks/rspec.rake
deleted file mode 100644
index 0230234fa..000000000
--- a/vendor/plugins/rspec_on_rails/tasks/rspec.rake
+++ /dev/null
@@ -1,137 +0,0 @@
-# In rails 1.2, plugins aren't available in the path until they're loaded.
-# Check to see if the rspec plugin is installed first and require
-# it if it is. If not, use the gem version.
-rspec_base = File.expand_path(File.dirname(__FILE__) + '/../../rspec/lib')
-$LOAD_PATH.unshift(rspec_base) if File.exist?(rspec_base)
-require 'spec/rake/spectask'
-require 'spec/translator'
-
-spec_prereq = File.exist?(File.join(RAILS_ROOT, 'config', 'database.yml')) ? "db:test:prepare" : :noop
-task :noop do
-end
-
-task :default => :spec
-task :stats => "spec:statsetup"
-
-desc "Run all specs in spec directory (excluding plugin specs)"
-Spec::Rake::SpecTask.new(:spec => spec_prereq) do |t|
- t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
- t.spec_files = FileList['spec/**/*_spec.rb']
-end
-
-namespace :spec do
- desc "Run all specs in spec directory with RCov (excluding plugin specs)"
- Spec::Rake::SpecTask.new(:rcov) do |t|
- t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
- t.spec_files = FileList['spec/**/*_spec.rb']
- t.rcov = true
- t.rcov_opts = lambda do
- IO.readlines("#{RAILS_ROOT}/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
- end
- end
-
- desc "Print Specdoc for all specs (excluding plugin specs)"
- Spec::Rake::SpecTask.new(:doc) do |t|
- t.spec_opts = ["--format", "specdoc", "--dry-run"]
- t.spec_files = FileList['spec/**/*_spec.rb']
- end
-
- desc "Print Specdoc for all plugin specs"
- Spec::Rake::SpecTask.new(:plugin_doc) do |t|
- t.spec_opts = ["--format", "specdoc", "--dry-run"]
- t.spec_files = FileList['vendor/plugins/**/spec/**/*_spec.rb'].exclude('vendor/plugins/rspec/*')
- end
-
- [:models, :controllers, :views, :helpers, :lib].each do |sub|
- desc "Run the specs under spec/#{sub}"
- Spec::Rake::SpecTask.new(sub => spec_prereq) do |t|
- t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
- t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
- end
- end
-
- desc "Run the specs under vendor/plugins (except RSpec's own)"
- Spec::Rake::SpecTask.new(:plugins => spec_prereq) do |t|
- t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
- t.spec_files = FileList['vendor/plugins/**/spec/**/*_spec.rb'].exclude('vendor/plugins/rspec/*').exclude("vendor/plugins/rspec-rails/*")
- end
-
- namespace :plugins do
- desc "Runs the examples for rspec_on_rails"
- Spec::Rake::SpecTask.new(:rspec_on_rails) do |t|
- t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""]
- t.spec_files = FileList['vendor/plugins/rspec-rails/spec/**/*_spec.rb']
- end
- end
-
- desc "Translate/upgrade specs using the built-in translator"
- task :translate do
- translator = ::Spec::Translator.new
- dir = RAILS_ROOT + '/spec'
- translator.translate(dir, dir)
- end
-
- # Setup specs for stats
- task :statsetup do
- require 'code_statistics'
- ::STATS_DIRECTORIES << %w(Model\ specs spec/models) if File.exist?('spec/models')
- ::STATS_DIRECTORIES << %w(View\ specs spec/views) if File.exist?('spec/views')
- ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers) if File.exist?('spec/controllers')
- ::STATS_DIRECTORIES << %w(Helper\ specs spec/helpers) if File.exist?('spec/helpers')
- ::STATS_DIRECTORIES << %w(Library\ specs spec/lib) if File.exist?('spec/lib')
- ::CodeStatistics::TEST_TYPES << "Model specs" if File.exist?('spec/models')
- ::CodeStatistics::TEST_TYPES << "View specs" if File.exist?('spec/views')
- ::CodeStatistics::TEST_TYPES << "Controller specs" if File.exist?('spec/controllers')
- ::CodeStatistics::TEST_TYPES << "Helper specs" if File.exist?('spec/helpers')
- ::CodeStatistics::TEST_TYPES << "Library specs" if File.exist?('spec/lib')
- ::STATS_DIRECTORIES.delete_if {|a| a[0] =~ /test/}
- end
-
- namespace :db do
- namespace :fixtures do
- desc "Load fixtures (from spec/fixtures) into the current environment's database. Load specific fixtures using FIXTURES=x,y"
- task :load => :environment do
- require 'active_record/fixtures'
- ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
- (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'spec', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
- Fixtures.create_fixtures('spec/fixtures', File.basename(fixture_file, '.*'))
- end
- end
- end
- end
-
- namespace :server do
- daemonized_server_pid = File.expand_path("spec_server.pid", RAILS_ROOT + "/tmp")
-
- desc "start spec_server."
- task :start do
- if File.exist?(daemonized_server_pid)
- $stderr.puts "spec_server is already running."
- else
- $stderr.puts "Starting up spec server."
- system("ruby", "script/spec_server", "--daemon", "--pid", daemonized_server_pid)
- end
- end
-
- desc "stop spec_server."
- task :stop do
- unless File.exist?(daemonized_server_pid)
- $stderr.puts "No server running."
- else
- $stderr.puts "Shutting down spec_server."
- system("kill", "-s", "TERM", File.read(daemonized_server_pid).strip) &&
- File.delete(daemonized_server_pid)
- end
- end
-
- desc "reload spec_server."
- task :restart do
- unless File.exist?(daemonized_server_pid)
- $stderr.puts "No server running."
- else
- $stderr.puts "Reloading down spec_server."
- system("kill", "-s", "USR2", File.read(daemonized_server_pid).strip)
- end
- end
- end
-end