summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--autotest/rspec.rb95
-rw-r--r--spec/Rakefile19
-rw-r--r--spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb16
-rw-r--r--spec/spec.opts4
-rw-r--r--spec/spec_helper.rb9
-rw-r--r--test/lib/mocha/expectation_error.rb6
-rw-r--r--test/lib/mocha/missing_expectation.rb27
-rw-r--r--test/lib/mocha/parameter_matchers.rb9
-rw-r--r--vendor/gems/mocha-0.5.6/._RELEASEbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/._Rakefilebin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/COPYING3
-rw-r--r--vendor/gems/mocha-0.5.6/MIT-LICENSE7
-rw-r--r--vendor/gems/mocha-0.5.6/README35
-rw-r--r--vendor/gems/mocha-0.5.6/RELEASE188
-rw-r--r--vendor/gems/mocha-0.5.6/Rakefile149
-rw-r--r--vendor/gems/mocha-0.5.6/examples/._misc.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/examples/._mocha.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/examples/._stubba.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/examples/misc.rb44
-rw-r--r--vendor/gems/mocha-0.5.6/examples/mocha.rb26
-rw-r--r--vendor/gems/mocha-0.5.6/examples/stubba.rb65
-rw-r--r--vendor/gems/mocha-0.5.6/lib/._mocha.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha.rb (renamed from test/lib/mocha.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._any_instance_method.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._auto_verify.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._central.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._class_method.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._deprecation.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._expectation.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._expectation_error.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._expectation_list.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._infinite_range.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._inspect.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._instance_method.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._metaclass.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._method_matcher.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._missing_expectation.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._mock.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._object.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._parameter_matchers.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._parameters_matcher.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._pretty_parameters.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._return_values.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._sequence.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._setup_and_teardown.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._single_return_value.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._standalone.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._test_case_adapter.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/._yield_parameters.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/any_instance_method.rb (renamed from test/lib/mocha/any_instance_method.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/auto_verify.rb (renamed from test/lib/mocha/auto_verify.rb)75
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/central.rb (renamed from test/lib/mocha/central.rb)2
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/class_method.rb (renamed from test/lib/mocha/class_method.rb)6
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/deprecation.rb (renamed from test/lib/mocha/deprecation.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/exception_raiser.rb (renamed from test/lib/mocha/exception_raiser.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/expectation.rb (renamed from test/lib/mocha/expectation.rb)120
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/expectation_error.rb15
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/expectation_list.rb46
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/infinite_range.rb (renamed from test/lib/mocha/infinite_range.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/inspect.rb (renamed from test/lib/mocha/inspect.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/instance_method.rb (renamed from test/lib/mocha/instance_method.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/is_a.rb (renamed from test/lib/mocha/is_a.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/metaclass.rb (renamed from test/lib/mocha/metaclass.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/method_matcher.rb21
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/missing_expectation.rb17
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/mock.rb (renamed from test/lib/mocha/mock.rb)95
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/multiple_yields.rb (renamed from test/lib/mocha/multiple_yields.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/no_yields.rb (renamed from test/lib/mocha/no_yields.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/object.rb (renamed from test/lib/mocha/object.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers.rb25
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._all_of.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._any_of.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._any_parameters.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._anything.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._base.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._equals.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_entries.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_entry.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_key.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_value.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._includes.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._instance_of.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._is_a.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._kind_of.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._not.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._object.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._optionally.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._regexp_matches.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/all_of.rb (renamed from test/lib/mocha/parameter_matchers/all_of.rb)9
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/any_of.rb (renamed from test/lib/mocha/parameter_matchers/any_of.rb)9
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/any_parameters.rb40
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/anything.rb (renamed from test/lib/mocha/parameter_matchers/anything.rb)7
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/base.rb15
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/equals.rb42
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_entries.rb42
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_entry.rb (renamed from test/lib/mocha/parameter_matchers/has_entry.rb)24
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_key.rb (renamed from test/lib/mocha/parameter_matchers/has_key.rb)7
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_value.rb (renamed from test/lib/mocha/parameter_matchers/has_value.rb)7
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/includes.rb (renamed from test/lib/mocha/parameter_matchers/includes.rb)7
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/instance_of.rb42
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/is_a.rb42
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/kind_of.rb42
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/not.rb42
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/object.rb9
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/optionally.rb33
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/regexp_matches.rb43
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/parameters_matcher.rb37
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/pretty_parameters.rb (renamed from test/lib/mocha/pretty_parameters.rb)2
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/return_values.rb (renamed from test/lib/mocha/return_values.rb)11
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/sequence.rb42
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/setup_and_teardown.rb (renamed from test/lib/mocha/setup_and_teardown.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/single_return_value.rb (renamed from test/lib/mocha/single_return_value.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/single_yield.rb (renamed from test/lib/mocha/single_yield.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/standalone.rb (renamed from test/lib/mocha/standalone.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/stub.rb (renamed from test/lib/mocha/stub.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/test_case_adapter.rb (renamed from test/lib/mocha/test_case_adapter.rb)0
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha/yield_parameters.rb (renamed from test/lib/mocha/yield_parameters.rb)6
-rw-r--r--vendor/gems/mocha-0.5.6/lib/mocha_standalone.rb2
-rw-r--r--vendor/gems/mocha-0.5.6/lib/stubba.rb2
-rw-r--r--vendor/gems/mocha-0.5.6/test/._deprecation_disabler.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/._execution_point.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/._method_definer.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/._test_helper.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/._test_runner.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/._expected_invocation_count_acceptance_test.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/._mocha_acceptance_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/._mock_with_initializer_block_acceptance_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/._mocked_methods_dispatch_acceptance_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/._optional_parameters_acceptance_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/._parameter_matcher_acceptance_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/._partial_mocks_acceptance_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/._sequence_acceptance_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/._standalone_acceptance_test.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/._stubba_acceptance_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/expected_invocation_count_acceptance_test.rb187
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/mocha_acceptance_test.rb98
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/mock_with_initializer_block_acceptance_test.rb44
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/mocked_methods_dispatch_acceptance_test.rb71
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/optional_parameters_acceptance_test.rb63
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/parameter_matcher_acceptance_test.rb117
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/partial_mocks_acceptance_test.rb40
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/sequence_acceptance_test.rb179
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/standalone_acceptance_test.rb131
-rw-r--r--vendor/gems/mocha-0.5.6/test/acceptance/stubba_acceptance_test.rb102
-rw-r--r--vendor/gems/mocha-0.5.6/test/active_record_test_case.rb36
-rw-r--r--vendor/gems/mocha-0.5.6/test/deprecation_disabler.rb15
-rw-r--r--vendor/gems/mocha-0.5.6/test/execution_point.rb34
-rw-r--r--vendor/gems/mocha-0.5.6/test/integration/._mocha_test_result_integration_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/integration/._stubba_integration_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/integration/._stubba_test_result_integration_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/integration/mocha_test_result_integration_test.rb105
-rw-r--r--vendor/gems/mocha-0.5.6/test/integration/stubba_integration_test.rb89
-rw-r--r--vendor/gems/mocha-0.5.6/test/integration/stubba_test_result_integration_test.rb85
-rw-r--r--vendor/gems/mocha-0.5.6/test/method_definer.rb18
-rw-r--r--vendor/gems/mocha-0.5.6/test/test_helper.rb12
-rw-r--r--vendor/gems/mocha-0.5.6/test/test_runner.rb31
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._any_instance_method_test.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._auto_verify_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._central_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._class_method_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._expectation_error_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._expectation_list_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._expectation_test.rbbin0 -> 179 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._hash_inspect_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._method_matcher_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._missing_expectation_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._mock_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._object_inspect_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._parameters_matcher_test.rbbin0 -> 176 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/._sequence_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/any_instance_method_test.rb126
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/array_inspect_test.rb16
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/auto_verify_test.rb129
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/central_test.rb124
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/class_method_test.rb200
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/date_time_inspect_test.rb21
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/expectation_error_test.rb24
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/expectation_list_test.rb75
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/expectation_raiser_test.rb28
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/expectation_test.rb483
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/hash_inspect_test.rb16
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/infinite_range_test.rb53
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/metaclass_test.rb22
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/method_matcher_test.rb23
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/missing_expectation_test.rb42
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/mock_test.rb323
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/multiple_yields_test.rb18
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/no_yield_test.rb18
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/object_inspect_test.rb37
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/object_test.rb165
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._all_of_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._any_of_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._anything_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_entries_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_entry_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_key_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_value_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._includes_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._instance_of_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._is_a_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._kind_of_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._not_test.rbbin0 -> 177 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._regexp_matches_test.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._stub_matcher.rbbin0 -> 178 bytes
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/all_of_test.rb26
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/any_of_test.rb26
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/anything_test.rb21
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_entries_test.rb30
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_entry_test.rb40
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_key_test.rb25
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_value_test.rb25
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/includes_test.rb25
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/instance_of_test.rb25
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/is_a_test.rb25
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/kind_of_test.rb25
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/not_test.rb26
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/regexp_matches_test.rb25
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/stub_matcher.rb23
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/parameters_matcher_test.rb121
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/return_values_test.rb63
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/sequence_test.rb104
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/setup_and_teardown_test.rb76
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/single_return_value_test.rb33
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/single_yield_test.rb18
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/string_inspect_test.rb11
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/stub_test.rb24
-rw-r--r--vendor/gems/mocha-0.5.6/test/unit/yield_parameters_test.rb93
-rw-r--r--vendor/gems/rspec/CHANGES164
-rw-r--r--vendor/gems/rspec/EXAMPLES.rd111
-rw-r--r--vendor/gems/rspec/README24
-rw-r--r--vendor/gems/rspec/Rakefile83
-rw-r--r--vendor/gems/rspec/TODO2
-rwxr-xr-xvendor/gems/rspec/bin/spec3
-rwxr-xr-x[-rw-r--r--]vendor/gems/rspec/bin/spec_translator16
-rw-r--r--vendor/gems/rspec/examples/helper_method_example.rb11
-rw-r--r--vendor/gems/rspec/examples/multi_threaded_behaviour_runner.rb25
-rw-r--r--vendor/gems/rspec/examples/pure/autogenerated_docstrings_example.rb (renamed from vendor/gems/rspec/examples/auto_spec_description_example.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/before_and_after_example.rb (renamed from vendor/gems/rspec/examples/before_and_after_example.rb)1
-rwxr-xr-x[-rw-r--r--]vendor/gems/rspec/examples/pure/behave_as_example.rb (renamed from vendor/gems/rspec/examples/behave_as_example.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/custom_expectation_matchers.rb (renamed from vendor/gems/rspec/examples/custom_expectation_matchers.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/custom_formatter.rb (renamed from vendor/gems/rspec/examples/custom_formatter.rb)1
-rw-r--r--vendor/gems/rspec/examples/pure/dynamic_spec.rb (renamed from vendor/gems/rspec/examples/dynamic_spec.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/file_accessor.rb (renamed from vendor/gems/rspec/examples/file_accessor.rb)1
-rw-r--r--vendor/gems/rspec/examples/pure/file_accessor_spec.rb (renamed from vendor/gems/rspec/examples/file_accessor_spec.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/greeter_spec.rb (renamed from vendor/gems/rspec/examples/greeter_spec.rb)1
-rw-r--r--vendor/gems/rspec/examples/pure/helper_method_example.rb14
-rw-r--r--vendor/gems/rspec/examples/pure/io_processor.rb (renamed from vendor/gems/rspec/examples/io_processor.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/io_processor_spec.rb (renamed from vendor/gems/rspec/examples/io_processor_spec.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/legacy_spec.rb (renamed from vendor/gems/rspec/examples/legacy_spec.rb)1
-rw-r--r--vendor/gems/rspec/examples/pure/mocking_example.rb (renamed from vendor/gems/rspec/examples/mocking_example.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/multi_threaded_behaviour_runner.rb28
-rw-r--r--vendor/gems/rspec/examples/pure/nested_classes_example.rb36
-rw-r--r--vendor/gems/rspec/examples/pure/partial_mock_example.rb (renamed from vendor/gems/rspec/examples/partial_mock_example.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/pending_example.rb (renamed from vendor/gems/rspec/examples/pending_example.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/predicate_example.rb (renamed from vendor/gems/rspec/examples/predicate_example.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/priority.txt (renamed from vendor/gems/rspec/examples/priority.txt)0
-rw-r--r--vendor/gems/rspec/examples/pure/shared_example_group_example.rb81
-rw-r--r--vendor/gems/rspec/examples/pure/shared_stack_examples.rb38
-rw-r--r--vendor/gems/rspec/examples/pure/spec_helper.rb3
-rw-r--r--vendor/gems/rspec/examples/pure/stack.rb (renamed from vendor/gems/rspec/examples/stack.rb)0
-rw-r--r--vendor/gems/rspec/examples/pure/stack_spec.rb (renamed from vendor/gems/rspec/examples/stack_spec.rb)36
-rw-r--r--vendor/gems/rspec/examples/pure/stack_spec_with_nested_example_groups.rb67
-rw-r--r--vendor/gems/rspec/examples/pure/stubbing_example.rb (renamed from vendor/gems/rspec/examples/stubbing_example.rb)0
-rw-r--r--vendor/gems/rspec/examples/shared_behaviours_example.rb39
-rw-r--r--vendor/gems/rspec/examples/spec_helper.rb1
-rw-r--r--vendor/gems/rspec/examples/stories/adder.rb13
-rw-r--r--vendor/gems/rspec/examples/stories/addition34
-rw-r--r--vendor/gems/rspec/examples/stories/addition.rb9
-rw-r--r--vendor/gems/rspec/examples/stories/calculator.rb65
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/README.txt21
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/everything.rb6
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/examples/examples.rb3
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb35
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb66
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story21
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story21
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story42
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story42
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story17
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story53
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb52
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/helper.rb6
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb26
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/steps.rb5
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/stories.rb3
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/stories.txt22
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/life.rb3
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/life/game.rb23
-rw-r--r--vendor/gems/rspec/examples/stories/game-of-life/life/grid.rb43
-rw-r--r--vendor/gems/rspec/examples/stories/helper.rb9
-rw-r--r--vendor/gems/rspec/examples/stories/steps/addition_steps.rb18
-rw-r--r--vendor/gems/rspec/examples/test_case_adapter_example.rb26
-rw-r--r--vendor/gems/rspec/examples/test_case_spec.rb65
-rw-r--r--vendor/gems/rspec/failing_examples/README.txt7
-rw-r--r--vendor/gems/rspec/failing_examples/diffing_spec.rb36
-rw-r--r--vendor/gems/rspec/failing_examples/failing_autogenerated_docstrings_example.rb19
-rw-r--r--vendor/gems/rspec/failing_examples/failure_in_setup.rb10
-rw-r--r--vendor/gems/rspec/failing_examples/failure_in_teardown.rb10
-rw-r--r--vendor/gems/rspec/failing_examples/mocking_example.rb40
-rw-r--r--vendor/gems/rspec/failing_examples/mocking_with_flexmock.rb26
-rw-r--r--vendor/gems/rspec/failing_examples/mocking_with_mocha.rb25
-rw-r--r--vendor/gems/rspec/failing_examples/mocking_with_rr.rb27
-rw-r--r--vendor/gems/rspec/failing_examples/partial_mock_example.rb20
-rw-r--r--vendor/gems/rspec/failing_examples/predicate_example.rb29
-rw-r--r--vendor/gems/rspec/failing_examples/raising_example.rb47
-rw-r--r--vendor/gems/rspec/failing_examples/spec_helper.rb3
-rw-r--r--vendor/gems/rspec/failing_examples/syntax_error_example.rb7
-rw-r--r--vendor/gems/rspec/failing_examples/team_spec.rb44
-rw-r--r--vendor/gems/rspec/failing_examples/timeout_behaviour.rb7
-rw-r--r--vendor/gems/rspec/lib/autotest/rspec.rb95
-rw-r--r--vendor/gems/rspec/lib/spec.rb31
-rw-r--r--vendor/gems/rspec/lib/spec/dsl.rb11
-rw-r--r--vendor/gems/rspec/lib/spec/dsl/behaviour.rb220
-rw-r--r--vendor/gems/rspec/lib/spec/dsl/behaviour_callbacks.rb82
-rw-r--r--vendor/gems/rspec/lib/spec/dsl/behaviour_eval.rb231
-rw-r--r--vendor/gems/rspec/lib/spec/dsl/behaviour_factory.rb42
-rw-r--r--vendor/gems/rspec/lib/spec/dsl/composite_proc_builder.rb33
-rw-r--r--vendor/gems/rspec/lib/spec/dsl/description.rb76
-rw-r--r--vendor/gems/rspec/lib/spec/dsl/example.rb135
-rw-r--r--vendor/gems/rspec/lib/spec/dsl/example_matcher.rb40
-rw-r--r--vendor/gems/rspec/lib/spec/dsl/example_should_raise_handler.rb74
-rw-r--r--vendor/gems/rspec/lib/spec/example.rb12
-rwxr-xr-x[-rw-r--r--]vendor/gems/rspec/lib/spec/example/configuration.rb (renamed from vendor/gems/rspec/lib/spec/dsl/configuration.rb)87
-rw-r--r--vendor/gems/rspec/lib/spec/example/errors.rb (renamed from vendor/gems/rspec/lib/spec/dsl/errors.rb)4
-rw-r--r--vendor/gems/rspec/lib/spec/example/example_group.rb16
-rwxr-xr-xvendor/gems/rspec/lib/spec/example/example_group_factory.rb62
-rw-r--r--vendor/gems/rspec/lib/spec/example/example_group_methods.rb424
-rwxr-xr-xvendor/gems/rspec/lib/spec/example/example_matcher.rb42
-rw-r--r--vendor/gems/rspec/lib/spec/example/example_methods.rb106
-rw-r--r--vendor/gems/rspec/lib/spec/example/module_reopening_fix.rb21
-rw-r--r--vendor/gems/rspec/lib/spec/example/pending.rb18
-rw-r--r--vendor/gems/rspec/lib/spec/example/shared_example_group.rb58
-rw-r--r--vendor/gems/rspec/lib/spec/expectations/differs/default.rb25
-rw-r--r--vendor/gems/rspec/lib/spec/expectations/errors.rb8
-rw-r--r--vendor/gems/rspec/lib/spec/expectations/extensions/object.rb19
-rw-r--r--vendor/gems/rspec/lib/spec/expectations/handler.rb17
-rwxr-xr-x[-rw-r--r--]vendor/gems/rspec/lib/spec/extensions.rb2
-rw-r--r--vendor/gems/rspec/lib/spec/extensions/class.rb24
-rw-r--r--vendor/gems/rspec/lib/spec/extensions/main.rb102
-rwxr-xr-x[-rw-r--r--]vendor/gems/rspec/lib/spec/extensions/object.rb6
-rw-r--r--vendor/gems/rspec/lib/spec/interop/test.rb12
-rw-r--r--vendor/gems/rspec/lib/spec/interop/test/unit/autorunner.rb6
-rw-r--r--vendor/gems/rspec/lib/spec/interop/test/unit/testcase.rb61
-rw-r--r--vendor/gems/rspec/lib/spec/interop/test/unit/testresult.rb6
-rw-r--r--vendor/gems/rspec/lib/spec/interop/test/unit/testsuite_adapter.rb34
-rw-r--r--vendor/gems/rspec/lib/spec/interop/test/unit/ui/console/testrunner.rb61
-rw-r--r--vendor/gems/rspec/lib/spec/matchers.rb24
-rw-r--r--vendor/gems/rspec/lib/spec/matchers/be.rb32
-rw-r--r--vendor/gems/rspec/lib/spec/matchers/change.rb26
-rw-r--r--vendor/gems/rspec/lib/spec/matchers/exist.rb17
-rw-r--r--vendor/gems/rspec/lib/spec/matchers/have.rb3
-rwxr-xr-x[-rw-r--r--]vendor/gems/rspec/lib/spec/matchers/operator_matcher.rb1
-rw-r--r--vendor/gems/rspec/lib/spec/matchers/raise_error.rb34
-rw-r--r--vendor/gems/rspec/lib/spec/matchers/simple_matcher.rb29
-rw-r--r--vendor/gems/rspec/lib/spec/matchers/throw_symbol.rb2
-rw-r--r--vendor/gems/rspec/lib/spec/mocks.rb7
-rw-r--r--vendor/gems/rspec/lib/spec/mocks/argument_expectation.rb2
-rw-r--r--vendor/gems/rspec/lib/spec/mocks/message_expectation.rb119
-rw-r--r--vendor/gems/rspec/lib/spec/mocks/methods.rb4
-rw-r--r--vendor/gems/rspec/lib/spec/mocks/mock.rb27
-rw-r--r--vendor/gems/rspec/lib/spec/mocks/proxy.rb49
-rw-r--r--vendor/gems/rspec/lib/spec/mocks/space.rb2
-rw-r--r--vendor/gems/rspec/lib/spec/mocks/spec_methods.rb32
-rw-r--r--vendor/gems/rspec/lib/spec/rake/spectask.rb22
-rw-r--r--vendor/gems/rspec/lib/spec/rake/verify_rcov.rb2
-rw-r--r--vendor/gems/rspec/lib/spec/runner.rb69
-rw-r--r--vendor/gems/rspec/lib/spec/runner/backtrace_tweaker.rb6
-rw-r--r--vendor/gems/rspec/lib/spec/runner/behaviour_runner.rb123
-rw-r--r--vendor/gems/rspec/lib/spec/runner/class_and_arguments_parser.rb16
-rw-r--r--vendor/gems/rspec/lib/spec/runner/command_line.rb30
-rw-r--r--vendor/gems/rspec/lib/spec/runner/drb_command_line.rb9
-rw-r--r--vendor/gems/rspec/lib/spec/runner/example_group_runner.rb59
-rw-r--r--vendor/gems/rspec/lib/spec/runner/extensions/kernel.rb50
-rw-r--r--vendor/gems/rspec/lib/spec/runner/extensions/object.rb32
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter.rb9
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/base_formatter.rb18
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/base_text_formatter.rb36
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/failing_behaviours_formatter.rb29
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/failing_example_groups_formatter.rb31
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/failing_examples_formatter.rb8
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/html_formatter.rb64
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/profile_formatter.rb47
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb7
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/rdoc_formatter.rb24
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/specdoc_formatter.rb36
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/story/html_formatter.rb128
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/story/plain_text_formatter.rb131
-rw-r--r--vendor/gems/rspec/lib/spec/runner/formatter/text_mate_formatter.rb16
-rw-r--r--vendor/gems/rspec/lib/spec/runner/heckle_runner.rb18
-rw-r--r--vendor/gems/rspec/lib/spec/runner/option_parser.rb266
-rw-r--r--vendor/gems/rspec/lib/spec/runner/options.rb289
-rw-r--r--vendor/gems/rspec/lib/spec/runner/reporter.rb98
-rw-r--r--vendor/gems/rspec/lib/spec/runner/spec_parser.rb77
-rw-r--r--vendor/gems/rspec/lib/spec/story.rb10
-rw-r--r--vendor/gems/rspec/lib/spec/story/extensions.rb3
-rw-r--r--vendor/gems/rspec/lib/spec/story/extensions/main.rb86
-rw-r--r--vendor/gems/rspec/lib/spec/story/extensions/regexp.rb9
-rw-r--r--vendor/gems/rspec/lib/spec/story/extensions/string.rb9
-rw-r--r--vendor/gems/rspec/lib/spec/story/given_scenario.rb14
-rw-r--r--vendor/gems/rspec/lib/spec/story/runner.rb56
-rw-r--r--vendor/gems/rspec/lib/spec/story/runner/plain_text_story_runner.rb48
-rw-r--r--vendor/gems/rspec/lib/spec/story/runner/scenario_collector.rb18
-rw-r--r--vendor/gems/rspec/lib/spec/story/runner/scenario_runner.rb46
-rw-r--r--vendor/gems/rspec/lib/spec/story/runner/story_mediator.rb123
-rw-r--r--vendor/gems/rspec/lib/spec/story/runner/story_parser.rb227
-rw-r--r--vendor/gems/rspec/lib/spec/story/runner/story_runner.rb68
-rw-r--r--vendor/gems/rspec/lib/spec/story/scenario.rb14
-rw-r--r--vendor/gems/rspec/lib/spec/story/step.rb58
-rw-r--r--vendor/gems/rspec/lib/spec/story/step_group.rb89
-rw-r--r--vendor/gems/rspec/lib/spec/story/step_mother.rb37
-rw-r--r--vendor/gems/rspec/lib/spec/story/story.rb42
-rw-r--r--vendor/gems/rspec/lib/spec/story/world.rb125
-rw-r--r--vendor/gems/rspec/lib/spec/test_case_adapter.rb10
-rw-r--r--vendor/gems/rspec/lib/spec/version.rb45
-rw-r--r--vendor/gems/rspec/plugins/mock_frameworks/rspec.rb2
-rw-r--r--vendor/gems/rspec/pre_commit/lib/pre_commit.rb4
-rw-r--r--vendor/gems/rspec/pre_commit/lib/pre_commit/core.rb50
-rw-r--r--vendor/gems/rspec/pre_commit/lib/pre_commit/pre_commit.rb54
-rw-r--r--vendor/gems/rspec/pre_commit/lib/pre_commit/rspec.rb111
-rw-r--r--vendor/gems/rspec/pre_commit/lib/pre_commit/rspec_on_rails.rb313
-rw-r--r--vendor/gems/rspec/pre_commit/spec/pre_commit/pre_commit_spec.rb15
-rw-r--r--vendor/gems/rspec/pre_commit/spec/pre_commit/rspec_on_rails_spec.rb36
-rw-r--r--vendor/gems/rspec/pre_commit/spec/spec_helper.rb3
-rw-r--r--vendor/gems/rspec/pre_commit/spec/spec_suite.rb11
-rw-r--r--vendor/gems/rspec/rake_tasks/examples.rake7
-rw-r--r--vendor/gems/rspec/rake_tasks/examples_with_rcov.rake9
-rw-r--r--vendor/gems/rspec/rake_tasks/failing_examples_with_html.rake9
-rw-r--r--vendor/gems/rspec/rake_tasks/verify_rcov.rake7
-rw-r--r--vendor/gems/rspec/spec/README.jruby15
-rw-r--r--vendor/gems/rspec/spec/autotest/rspec_spec.rb117
-rw-r--r--vendor/gems/rspec/spec/autotest_helper.rb8
-rw-r--r--vendor/gems/rspec/spec/autotest_matchers.rb47
-rw-r--r--vendor/gems/rspec/spec/rspec_suite.rb7
-rw-r--r--vendor/gems/rspec/spec/ruby_forker.rb13
-rw-r--r--vendor/gems/rspec/spec/spec.opts6
-rw-r--r--vendor/gems/rspec/spec/spec/dsl/behaviour_eval_spec.rb79
-rw-r--r--vendor/gems/rspec/spec/spec/dsl/behaviour_factory_spec.rb48
-rw-r--r--vendor/gems/rspec/spec/spec/dsl/behaviour_spec.rb661
-rw-r--r--vendor/gems/rspec/spec/spec/dsl/composite_proc_builder_spec.rb44
-rw-r--r--vendor/gems/rspec/spec/spec/dsl/configuration_spec.rb55
-rw-r--r--vendor/gems/rspec/spec/spec/dsl/description_spec.rb89
-rw-r--r--vendor/gems/rspec/spec/spec/dsl/example_class_spec.rb24
-rw-r--r--vendor/gems/rspec/spec/spec/dsl/example_instance_spec.rb160
-rw-r--r--vendor/gems/rspec/spec/spec/dsl/example_should_raise_spec.rb137
-rw-r--r--vendor/gems/rspec/spec/spec/dsl/shared_behaviour_spec.rb252
-rwxr-xr-xvendor/gems/rspec/spec/spec/example/configuration_spec.rb282
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_group_class_definition_spec.rb48
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_group_factory_spec.rb129
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_group_methods_spec.rb489
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_group_spec.rb711
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_matcher_spec.rb (renamed from vendor/gems/rspec/spec/spec/dsl/example_matcher_spec.rb)41
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_methods_spec.rb104
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_runner_spec.rb194
-rw-r--r--vendor/gems/rspec/spec/spec/example/example_spec.rb53
-rw-r--r--vendor/gems/rspec/spec/spec/example/nested_example_group_spec.rb59
-rw-r--r--vendor/gems/rspec/spec/spec/example/pending_module_spec.rb31
-rwxr-xr-x[-rw-r--r--]vendor/gems/rspec/spec/spec/example/predicate_matcher_spec.rb (renamed from vendor/gems/rspec/spec/spec/dsl/predicate_matcher_spec.rb)2
-rw-r--r--vendor/gems/rspec/spec/spec/example/shared_example_group_spec.rb265
-rw-r--r--vendor/gems/rspec/spec/spec/example/subclassing_example_group_spec.rb25
-rw-r--r--vendor/gems/rspec/spec/spec/expectations/differs/default_spec.rb8
-rw-r--r--vendor/gems/rspec/spec/spec/expectations/extensions/object_spec.rb65
-rw-r--r--vendor/gems/rspec/spec/spec/extensions/main_spec.rb76
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb38
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/spec_spec.rb45
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb14
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/testcase_spec.rb45
-rw-r--r--vendor/gems/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb9
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/be_spec.rb15
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/change_spec.rb87
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/description_generation_spec.rb68
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/exist_spec.rb53
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/handler_spec.rb43
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/have_spec.rb21
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/match_spec.rb6
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb2
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/operator_matcher_spec.rb2
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/raise_error_spec.rb8
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/simple_matcher_spec.rb31
-rw-r--r--vendor/gems/rspec/spec/spec/matchers/throw_symbol_spec.rb5
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_10263.rb24
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_15719_spec.rb30
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/bug_report_8165_spec.rb4
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb1
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/mock_spec.rb302
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/multiple_return_value_spec.rb2
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/options_hash_spec.rb26
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/partial_mock_spec.rb40
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb6
-rw-r--r--vendor/gems/rspec/spec/spec/mocks/stub_spec.rb218
-rw-r--r--vendor/gems/rspec/spec/spec/package/bin_spec_spec.rb12
-rw-r--r--vendor/gems/rspec/spec/spec/runner/behaviour_runner_spec.rb229
-rw-r--r--vendor/gems/rspec/spec/spec/runner/class_and_argument_parser_spec.rb23
-rw-r--r--vendor/gems/rspec/spec/spec/runner/command_line_spec.rb168
-rw-r--r--vendor/gems/rspec/spec/spec/runner/context_matching_spec.rb27
-rw-r--r--vendor/gems/rspec/spec/spec/runner/drb_command_line_spec.rb66
-rw-r--r--vendor/gems/rspec/spec/spec/runner/empty_file.txt0
-rw-r--r--vendor/gems/rspec/spec/spec/runner/examples.txt2
-rw-r--r--vendor/gems/rspec/spec/spec/runner/extensions/bug_report_10577_spec.rb35
-rw-r--r--vendor/gems/rspec/spec/spec/runner/extensions/kernel_spec.rb36
-rw-r--r--vendor/gems/rspec/spec/spec/runner/failed.txt3
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb40
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb44
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb27
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html365
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html387
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html371
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html381
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html365
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/html_formatter_spec.rb110
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb65
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb20
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb36
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb42
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb19
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/rdoc_formatter_spec.rb46
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb21
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb103
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb21
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb142
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb61
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb335
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html365
-rw-r--r--vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html365
-rw-r--r--vendor/gems/rspec/spec/spec/runner/heckle_runner_spec.rb43
-rw-r--r--vendor/gems/rspec/spec/spec/runner/heckler_spec.rb9
-rw-r--r--vendor/gems/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb10
-rw-r--r--vendor/gems/rspec/spec/spec/runner/object_ext_spec.rb11
-rw-r--r--vendor/gems/rspec/spec/spec/runner/option_parser_spec.rb239
-rw-r--r--vendor/gems/rspec/spec/spec/runner/options_spec.rb427
-rw-r--r--vendor/gems/rspec/spec/spec/runner/output_one_time_fixture.rb7
-rw-r--r--vendor/gems/rspec/spec/spec/runner/output_one_time_fixture_runner.rb8
-rw-r--r--vendor/gems/rspec/spec/spec/runner/output_one_time_spec.rb16
-rw-r--r--vendor/gems/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb12
-rw-r--r--vendor/gems/rspec/spec/spec/runner/reporter_spec.rb310
-rw-r--r--vendor/gems/rspec/spec/spec/runner/resources/a_bar.rb0
-rw-r--r--vendor/gems/rspec/spec/spec/runner/resources/a_foo.rb0
-rw-r--r--vendor/gems/rspec/spec/spec/runner/resources/a_spec.rb1
-rw-r--r--vendor/gems/rspec/spec/spec/runner/spec.opts2
-rw-r--r--vendor/gems/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb70
-rw-r--r--vendor/gems/rspec/spec/spec/runner/spec_parser_spec.rb94
-rw-r--r--vendor/gems/rspec/spec/spec/runner/spec_spaced.opts2
-rw-r--r--vendor/gems/rspec/spec/spec/runner_spec.rb11
-rw-r--r--vendor/gems/rspec/spec/spec/spec_classes.rb24
-rw-r--r--vendor/gems/rspec/spec/spec/story/builders.rb46
-rw-r--r--vendor/gems/rspec/spec/spec/story/extensions/main_spec.rb161
-rw-r--r--vendor/gems/rspec/spec/spec/story/extensions_spec.rb14
-rw-r--r--vendor/gems/rspec/spec/spec/story/given_scenario_spec.rb27
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb92
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/scenario_collector_spec.rb27
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/scenario_runner_spec.rb142
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/story_mediator_spec.rb133
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/story_parser_spec.rb384
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner/story_runner_spec.rb256
-rw-r--r--vendor/gems/rspec/spec/spec/story/runner_spec.rb106
-rw-r--r--vendor/gems/rspec/spec/spec/story/scenario_spec.rb20
-rw-r--r--vendor/gems/rspec/spec/spec/story/step_group_spec.rb157
-rw-r--r--vendor/gems/rspec/spec/spec/story/step_mother_spec.rb72
-rw-r--r--vendor/gems/rspec/spec/spec/story/step_spec.rb200
-rw-r--r--vendor/gems/rspec/spec/spec/story/story_helper.rb2
-rw-r--r--vendor/gems/rspec/spec/spec/story/story_spec.rb86
-rw-r--r--vendor/gems/rspec/spec/spec/story/world_spec.rb423
-rw-r--r--vendor/gems/rspec/spec/spec/translator_spec.rb3
-rw-r--r--vendor/gems/rspec/spec/spec_helper.rb61
-rw-r--r--vendor/gems/rspec/stories/all.rb5
-rw-r--r--vendor/gems/rspec/stories/example_groups/autogenerated_docstrings45
-rw-r--r--vendor/gems/rspec/stories/example_groups/example_group_with_should_methods17
-rw-r--r--vendor/gems/rspec/stories/example_groups/nested_groups17
-rw-r--r--vendor/gems/rspec/stories/example_groups/output25
-rw-r--r--vendor/gems/rspec/stories/example_groups/stories.rb7
-rw-r--r--vendor/gems/rspec/stories/helper.rb6
-rw-r--r--vendor/gems/rspec/stories/interop/examples_and_tests_together30
-rw-r--r--vendor/gems/rspec/stories/interop/stories.rb7
-rw-r--r--vendor/gems/rspec/stories/interop/test_case_with_should_methods17
-rw-r--r--vendor/gems/rspec/stories/pending_stories/README3
-rw-r--r--vendor/gems/rspec/stories/resources/helpers/cmdline.rb9
-rw-r--r--vendor/gems/rspec/stories/resources/helpers/story_helper.rb16
-rw-r--r--vendor/gems/rspec/stories/resources/matchers/smart_match.rb37
-rw-r--r--vendor/gems/rspec/stories/resources/spec/example_group_with_should_methods.rb12
-rw-r--r--vendor/gems/rspec/stories/resources/spec/simple_spec.rb8
-rw-r--r--vendor/gems/rspec/stories/resources/steps/running_rspec.rb50
-rw-r--r--vendor/gems/rspec/stories/resources/stories/failing_story.rb15
-rw-r--r--vendor/gems/rspec/stories/resources/test/spec_and_test_together.rb57
-rw-r--r--vendor/gems/rspec/stories/resources/test/test_case_with_should_methods.rb30
589 files changed, 22387 insertions, 5737 deletions
diff --git a/autotest/rspec.rb b/autotest/rspec.rb
index d4b77ea6b..ebafbfe91 100644
--- a/autotest/rspec.rb
+++ b/autotest/rspec.rb
@@ -1,85 +1,65 @@
require 'autotest'
+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%^lib/(.*)\.rb$%) { |_, m|
+ ["spec/#{m[1]}_spec.rb"]
+ }
+ at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.rb$%) {
+ at.files_matching %r{^spec/.*_spec\.rb$}
+ }
+end
+
class RspecCommandError < StandardError; end
class Autotest::Rspec < Autotest
-
- def initialize(kernel=Kernel, separator=File::SEPARATOR, alt_separator=File::ALT_SEPARATOR) # :nodoc:
- super()
- @kernel, @separator, @alt_separator = kernel, separator, alt_separator
- @spec_command = spec_command
- # watch out: Ruby bug (1.8.6):
- # %r(/) != /\//
- # since Ruby compares the REGEXP source, not the resulting pattern
- @test_mappings = {
- %r%^spec/.*\.rb$% => kernel.proc { |filename, _|
- filename
- },
- %r%^lib/(.*)\.rb$% => kernel.proc { |_, m|
- ["spec/#{m[1]}_spec.rb"]
- },
- %r%^spec/(spec_helper|shared/.*)\.rb$% => kernel.proc {
- files_matching %r%^spec/.*_spec\.rb$%
- }
- }
- end
-
- def tests_for_file(filename)
- super.select { |f| @files.has_key? f }
- end
-
- alias :specs_for_file :tests_for_file
-
- def failed_results(results)
- results.scan(/^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m)
- end
+ def initialize
+ super
- def handle_results(results)
- @files_to_test = consolidate_failures failed_results(results)
- unless @files_to_test.empty? then
- hook :red
- else
- hook :green
- end unless $TESTING
- @tainted = true unless @files_to_test.empty?
+ self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m
+ self.completed_re = /\Z/ # FIX: some sort of summary line at the end?
end
def consolidate_failures(failed)
filters = Hash.new { |h,k| h[k] = [] }
failed.each do |spec, failed_trace|
- @files.keys.select{|f| f =~ /spec\//}.each do |f|
- if failed_trace =~ Regexp.new(f)
- filters[f] << spec
- break
- end
+ if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) } then
+ filters[f] << spec
+ break
end
end
return filters
end
def make_test_cmd(files_to_test)
- return "#{ruby} -S #{@spec_command} #{add_options_if_present} #{files_to_test.keys.flatten.join(' ')}"
+ return "#{ruby} -S #{spec_command} #{add_options_if_present} #{files_to_test.keys.flatten.join(' ')}"
end
def add_options_if_present
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
- spec_commands.each do |command|
- if File.exists?(command)
- return @alt_separator ? (command.gsub @separator, @alt_separator) : command
- 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
-
- raise RspecCommandError, "No spec command could be found!"
+ @spec_command
end
-
+
# Autotest will look for spec commands in the following
# locations, in this order:
#
@@ -87,9 +67,8 @@ class Autotest::Rspec < Autotest
# * default spec bin/loader installed in Rubygems
def spec_commands
[
- File.join('bin', 'spec'),
+ File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec')),
File.join(Config::CONFIG['bindir'], 'spec')
]
end
-
end
diff --git a/spec/Rakefile b/spec/Rakefile
index 8b45eff89..8026fd959 100644
--- a/spec/Rakefile
+++ b/spec/Rakefile
@@ -7,10 +7,23 @@ puppetlibdir = File.join(basedir, "../lib")
puppettestlibdir = File.join(basedir, "../test/lib")
speclibdir = File.join(basedir, "lib")
+libs = [puppetlibdir, puppettestlibdir, speclibdir]
+
desc "Run all spec unit tests"
Spec::Rake::SpecTask.new('unit') do |t|
- t.spec_files = FileList['unit/**/*.rb', 'integration/**/*.rb']
- t.libs = [puppetlibdir, puppettestlibdir, speclibdir]
+ t.spec_files = FileList['unit/**/*.rb']
+ t.libs = libs
+ t.spec_opts = ['--options', 'spec.opts']
+end
+
+desc "Run all spec integration tests"
+Spec::Rake::SpecTask.new('integration') do |t|
+ t.spec_files = FileList['integration/**/*.rb']
+ t.libs = libs
+ t.spec_opts = ['--options', 'spec.opts']
end
-task :default => [:unit]
+desc "Run all specs"
+task :all => [:unit, :integration]
+
+task :default => [:all]
diff --git a/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb b/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb
index 941baa8de..3152c1bda 100644
--- a/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb
+++ b/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb
@@ -10,7 +10,7 @@ require 'puppettest/runnable_test'
module Spec
module Runner
- class BehaviourRunner
+ class ExampleGroupRunner
def run_behaviours
@behaviours.each do |behaviour|
# LAK:NOTE: this 'runnable' test is Puppet-specific.
@@ -23,9 +23,17 @@ module Spec
end
module Spec
- module DSL
- class EvalModule < Module
- include PuppetTest::RunnableTest
+ module Example
+ class ExampleGroup
+ extend PuppetTest::RunnableTest
+ end
+ end
+end
+
+module Test
+ module Unit
+ class TestCase
+ extend PuppetTest::RunnableTest
end
end
end
diff --git a/spec/spec.opts b/spec/spec.opts
index 2cac5f260..2f9bf0d0a 100644
--- a/spec/spec.opts
+++ b/spec/spec.opts
@@ -1,5 +1,3 @@
--colour
---format
-s
--loadby
-mtime \ No newline at end of file
+mtime
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 3aa3b0202..97ab007b0 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift("#{dir}/../lib")
$LOAD_PATH.unshift("#{dir}/../test/lib") # Add the old test dir, so that we can still find our local mocha and spec
# include any gems in vendor/gems
-Dir["#{dir}/../vendor/gems/**"].map do |path|
+Dir["#{dir}/../vendor/gems/**"].each do |path|
libpath = File.join(path, "lib")
if File.directory?(libpath)
$LOAD_PATH.unshift(libpath)
@@ -19,13 +19,16 @@ require 'puppettest/runnable_test'
require 'mocha'
require 'spec'
+
Spec::Runner.configure do |config|
config.mock_with :mocha
- config.prepend_before :each do
+
+ config.prepend_before :all do
+ setup_mocks_for_rspec
setup() if respond_to? :setup
end
- config.prepend_after :each do
+ config.prepend_after :all do
teardown() if respond_to? :teardown
end
end
diff --git a/test/lib/mocha/expectation_error.rb b/test/lib/mocha/expectation_error.rb
deleted file mode 100644
index c01482e63..000000000
--- a/test/lib/mocha/expectation_error.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-module Mocha
-
- class ExpectationError < StandardError
- end
-
-end \ No newline at end of file
diff --git a/test/lib/mocha/missing_expectation.rb b/test/lib/mocha/missing_expectation.rb
deleted file mode 100644
index f84227d1a..000000000
--- a/test/lib/mocha/missing_expectation.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require 'mocha/expectation'
-
-module Mocha # :nodoc:
-
- class MissingExpectation < Expectation # :nodoc:
-
- def initialize(mock, method_name)
- super
- @invoked_count = true
- end
-
- def verify
- msg = error_message(0, 1)
- similar_expectations_list = similar_expectations.collect { |expectation| expectation.method_signature }.join("\n")
- msg << "\nSimilar expectations:\n#{similar_expectations_list}" unless similar_expectations.empty?
- error = ExpectationError.new(msg)
- error.set_backtrace(filtered_backtrace)
- raise error if @invoked_count
- end
-
- def similar_expectations
- @mock.expectations.select { |expectation| expectation.method_name == self.method_name }
- end
-
- end
-
-end \ No newline at end of file
diff --git a/test/lib/mocha/parameter_matchers.rb b/test/lib/mocha/parameter_matchers.rb
deleted file mode 100644
index 193f77d93..000000000
--- a/test/lib/mocha/parameter_matchers.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-module Mocha
-
- # Used as parameters for Expectation#with to restrict the parameter values which will match the expectation.
- module ParameterMatchers; end
-
-end
-
-
-Dir[File.expand_path(File.join(File.dirname(__FILE__), 'parameter_matchers', "*.rb"))].each { |lib| require lib }
diff --git a/vendor/gems/mocha-0.5.6/._RELEASE b/vendor/gems/mocha-0.5.6/._RELEASE
new file mode 100644
index 000000000..12bf79cb2
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/._RELEASE
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/._Rakefile b/vendor/gems/mocha-0.5.6/._Rakefile
new file mode 100644
index 000000000..22220c1ee
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/._Rakefile
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/COPYING b/vendor/gems/mocha-0.5.6/COPYING
new file mode 100644
index 000000000..8f74d7116
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/COPYING
@@ -0,0 +1,3 @@
+Copyright Revieworld Ltd. 2006
+
+You may use, copy and redistribute this library under the same terms as Ruby itself (see http://www.ruby-lang.org/en/LICENSE.txt) or under the MIT license (see MIT-LICENSE file).
diff --git a/vendor/gems/mocha-0.5.6/MIT-LICENSE b/vendor/gems/mocha-0.5.6/MIT-LICENSE
new file mode 100644
index 000000000..fa4efe793
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/MIT-LICENSE
@@ -0,0 +1,7 @@
+Copyright (c) 2006 Revieworld Ltd.
+
+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. \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/README b/vendor/gems/mocha-0.5.6/README
new file mode 100644
index 000000000..262c6ec27
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/README
@@ -0,0 +1,35 @@
+= Mocha
+
+Mocha is a library for mocking and stubbing using a syntax like that of JMock[http://www.jmock.org], and SchMock[http://rubyforge.org/projects/schmock]. Most commonly Mocha is used in conjunction with Test::Unit[http://www.ruby-doc.org/core/classes/Test/Unit.html], but it can be used in other contexts.
+
+One of its main advantages is that it allows you to mock and stub methods on _real_ (non-mock) classes and instances. You can for example stub ActiveRecord[http://api.rubyonrails.com/classes/ActiveRecord/Base.html] instance methods like +create+, +save+, +destroy+ and even class methods like +find+ to avoid hitting the database in unit tests.
+
+Mocha provides a unified, simple and readable syntax for both traditional mocking and for mocking with _real_ objects.
+
+Mocha has been harvested from projects at Reevoo[http://www.reevoo.com] by me (James[http://blog.floehopper.org]) and my colleagues Ben[http://www.reevoo.com/blogs/bengriffiths], Chris[http://blog.seagul.co.uk] and Paul[http://po-ru.com]. Mocha is in use on real-world Rails[http://www.rubyonrails.org] projects.
+
+== Download and Installation
+
+Install the gem with the following command...
+
+ $ gem install mocha
+
+Or install the Rails[http://www.rubyonrails.org] plugin...
+
+ $ script/plugin install svn://rubyforge.org/var/svn/mocha/trunk
+
+Or download Mocha from here - http://rubyforge.org/projects/mocha
+
+== Examples
+
+* Quick Start - {Usage Examples}[link:examples/misc.html]
+* Traditional mocking - {Star Trek Example}[link:examples/mocha.html]
+* Setting expectations on real classes - {Order Example}[link:examples/stubba.html]
+* More examples on {Floehopper's Blog}[http://blog.floehopper.org]
+* {Mailing List Archives}[http://rubyforge.org/pipermail/mocha-developer/]
+
+== License
+
+Copyright Revieworld Ltd. 2006
+
+You may use, copy and redistribute this library under the same terms as {Ruby itself}[http://www.ruby-lang.org/en/LICENSE.txt] or under the {MIT license}[http://mocha.rubyforge.org/files/MIT-LICENSE.html]. \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/RELEASE b/vendor/gems/mocha-0.5.6/RELEASE
new file mode 100644
index 000000000..0e8fb8573
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/RELEASE
@@ -0,0 +1,188 @@
+= 0.5.5 (r167)
+
+- Renamed Matches parameter matcher to RegexpMatches for clarity.
+- Added noframes tag to rdoc index to assist Google.
+
+= 0.5.4 (r166)
+
+- Added matches parameter matcher for matching regular expressions.
+
+= 0.5.3 (r165)
+
+- Attempt to fix packaging problems by switching to newer version (1.15.1) of gnutar and setting COPY_EXTENDED_ATTRIBUTES_DISABLE environment variable.
+- Removed unused ExpectationSequenceError exception.
+- Added instance_of and kind_of parameter matchers.
+- Added Google Webmaster meta tag to rdoc template header.
+- Put Google Webmaster meta tag in the right header i.e. the one for the index page.
+
+= 0.5.2 (r159)
+
+- Fix bug 11885 - "never doesn't work with stub_everything" submitted by Alexander Lang. In fixing this bug, also fixed undiscoverd bug where expected & actual invocation counts were being incorrectly reported which seems to have been introduced when fixes were added for invocation dispatch (see MockedMethodDispatchAcceptanceTest).
+- Previously when an expectation did not allow more invocations, it was treated as not matching. Now we prefer matching expectations which allow more invocations, but still match expectations which cannot allow more invocations. I think this may be overcomplicating things, but let's see how it goes.
+
+= 0.5.1 (r149)
+
+- Fixed bug #11583 "Mocha 0.5.0 throwing unexpected warnings". Also switched on ruby warning for all rake test tasks. Fixed majority of warnings, but some left to fix.
+
+= 0.5.0 (r147)
+
+- Parameter Matchers - I’ve added a few Hamcrest-style parameter matchers which are designed to be used inside Expectation#with. The following matchers are currently available: anything(), includes(), has_key(), has_value(), has_entry(), all_of() & any_of(). More to follow soon. The idea is eventually to get rid of the nasty parameter_block option on Expectation#with.
+
+ object = mock()
+ object.expects(:method).with(has_key('key_1'))
+ object.method('key_1' => 1, 'key_2' => 2)
+ # no verification error raised
+
+ object = mock()
+ object.expects(:method).with(has_key('key_1'))
+ object.method('key_2' => 2)
+ # verification error raised, because method was not called with Hash containing key: 'key_1'
+
+- Values Returned and Exceptions Raised on Consecutive Invocations - Allow multiple calls to Expectation#returns and Expectation#raises to build up a sequence of responses to invocations on the mock. Added syntactic sugar method Expectation#then to allow more readable expectations.
+
+ object = mock()
+ object.stubs(:method).returns(1, 2).then.raises(Exception).then.returns(4)
+ object.method # => 1
+ object.method # => 2
+ object.method # => raises exception of class Exception
+ object.method # => 4
+
+- Yields on Consecutive Invocations - Allow multiple calls to yields on single expectation to allow yield parameters to be specified for consecutive invocations.
+
+ object = mock()
+ object.stubs(:method).yields(1, 2).then.yields(3)
+ object.method { |*values| p values } # => [1, 2]
+ object.method { |*values| p values } # => [3]
+
+- Multiple Yields on Single Invocation - Added Expectation#multiple_yields to allow a mocked or stubbed method to yield multiple times for a single invocation.
+
+ object = mock()
+ object.stubs(:method).multiple_yields([1, 2], [3])
+ object.method { |*values| p values } # => [1, 2] # => [3]
+
+- Invocation Dispatch - Expectations were already being matched in reverse order i.e. the most recently defined one was being found first. This is still the case, but we now stop matching an expectation when its maximum number of expected invocations is reached. c.f. JMock v1. A stub will never stop matching by default. Hopefully this means we can soon get rid of the need to pass a Proc to Expectation#returns.
+
+ object = mock()
+ object.stubs(:method).returns(2)
+ object.expects(:method).once.returns(1)
+ object.method # => 1
+ object.method # => 2
+ object.method # => 2
+ # no verification error raised
+
+ # The following should still work...
+
+ Time.stubs(:now).returns(Time.parse('Mon Jan 01 00:00:00 UTC 2007'))
+ Time.now # => Mon Jan 01 00:00:00 UTC 2007
+ Time.stubs(:now).returns(Time.parse('Thu Feb 01 00:00:00 UTC 2007'))
+ Time.now # => Thu Feb 01 00:00:00 UTC 2007
+
+- Deprecate passing an instance of Proc to Expectation#returns.
+- Explicitly include all Rakefile dependencies in project.
+- Fixed old Stubba example.
+- Fix so that it is possible for a stubbed method to raise an Interrupt exception without a message in Ruby 1.8.6
+- Added responds_like and quacks_like.
+- Capture standard object methods before Mocha adds any.
+- Added Expectation#once method to make interface less surprising.
+- Use Rake::TestTask to run tests. Created three separate tasks to run unit, integration & acceptance tests. Split inspect_test into one file per TestCase. Deleted superfluous all_tests file.
+- Fiddled with mocha_inspect and tests to give more sensible results on x86 platform.
+- Fixed bug #7834 "infinite_range.rb makes incorrect assumption about to_f" logged by James Moore.
+
+= 0.4.0 (r92)
+
+- Allow naming of mocks (patch from Chris Roos).
+- Specify multiple return values for consecutive calls.
+- Improved consistency of expectation error messages.
+- Allow mocking of Object instance methods e.g. kind_of?, type.
+- Provide aliased versions of #expects and #stubs to allow mocking of these methods.
+- Added at_least, at_most, at_most_once methods to expectation.
+- Allow expects and stubs to take a hash of method and return values.
+- Eliminate warning: "instance variable @yield not initialized" (patch from Xavier Shay).
+- Restore instance methods on partial mocks (patch from Chris Roos).
+- Allow stubbing of a method with non-word characters in its name (patch from Paul Battley).
+- Removed coupling to Test::Unit.
+- Allow specified exception instance to be raised (patch from Chris Roos).
+- Make mock object_id appear in hex like normal Ruby inspect (patch from Paul Battley).
+- Fix path to object.rb in rdoc rake task (patch from Tomas Pospisek).
+- Reverse order in which expectations are matched, so that last expectation is matched first. This allows e.g. a call to #stubs to be effectively overridden by a call to #expects (patch from Tobias Lutke).
+- Stubba & SmartTestCase modules incorporated into Mocha module so only need to require 'mocha' - no longer need to require 'stubba'.
+- AutoMocha removed.
+
+= 0.3.3
+
+- Quick bug fix to restore instance methods on partial mocks (for Kevin Clark).
+
+= 0.3.2
+
+- Examples added.
+
+= 0.3.1
+
+- Dual licensing with MIT license added.
+
+= 0.3.0
+
+* Rails plugin.
+* Auto-verify for expectations on concrete classes.
+* Include each expectation verification in the test result assertion count.
+* Filter out noise from assertion backtraces.
+* Point assertion backtrace to line where failing expectation was created.
+* New yields method for expectations.
+* Create stubs which stub all method calls.
+* Mocks now respond_to? expected methods.
+
+= 0.2.1
+
+* Rename MochaAcceptanceTest::Rover#move method to avoid conflict with Rake (in Ruby 1.8.4 only?)
+
+= 0.2.0
+
+* Small change to SetupAndTeardown#teardown_stubs suggested by Luke Redpath (http://www.lukeredpath.co.uk) to allow use of Stubba with RSpec (http://rspec.rubyforge.org).
+* Reorganized directory structure and extracted addition of setup and teardown methods into SmartTestCase mini-library.
+* Addition of auto-verify for Mocha (but not Stubba). This means there is more significance in the choice of expects or stubs in that any expects on a mock will automatically get verified.
+
+So instead of...
+
+ wotsit = Mocha.new
+ wotsit.expects(:thingummy).with(5).returns(10)
+ doobrey = Doobrey.new(wotsit)
+ doobrey.hoojamaflip
+ wotsit.verify
+
+you need to do...
+
+ wotsit = mock()
+ wotsit.expects(:thingummy).with(5).returns(10)
+ doobrey = Doobrey.new(wotsit)
+ doobrey.hoojamaflip
+ # no need to verify
+
+There are also shortcuts as follows...
+
+instead of...
+
+ wotsit = Mocha.new
+ wotsit.expects(:thingummy).returns(10)
+ wotsit.expects(:summat).returns(25)
+
+you can have...
+
+ wotsit = mock(:thingummy => 5, :summat => 25)
+
+and instead of...
+
+ wotsit = Mocha.new
+ wotsit.stubs(:thingummy).returns(10)
+ wotsit.stubs(:summat).returns(25)
+
+you can have...
+
+ wotsit = stub(:thingummy => 5, :summat => 25)
+
+= 0.1.2
+
+* Minor tweaks
+
+= 0.1.1
+
+* Initial release.
diff --git a/vendor/gems/mocha-0.5.6/Rakefile b/vendor/gems/mocha-0.5.6/Rakefile
new file mode 100644
index 000000000..2e2f7287a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/Rakefile
@@ -0,0 +1,149 @@
+require 'rubygems'
+require 'rake/rdoctask'
+require 'rake/gempackagetask'
+require 'rake/testtask'
+require 'rake/contrib/sshpublisher'
+
+module Mocha
+ VERSION = "0.5.6"
+end
+
+desc "Run all tests"
+task :default => :test_all
+
+task :test_all => [:test_unit, :test_integration, :test_acceptance]
+
+desc "Run unit tests"
+Rake::TestTask.new(:test_unit) do |t|
+ t.libs << 'test'
+ t.test_files = FileList['test/unit/**/*_test.rb']
+ t.verbose = true
+ t.warning = true
+end
+
+desc "Run integration tests"
+Rake::TestTask.new(:test_integration) do |t|
+ t.libs << 'test'
+ t.test_files = FileList['test/integration/*_test.rb']
+ t.verbose = true
+ t.warning = true
+end
+
+desc "Run acceptance tests"
+Rake::TestTask.new(:test_acceptance) do |t|
+ t.libs << 'test'
+ t.test_files = FileList['test/acceptance/*_test.rb']
+ t.verbose = true
+ t.warning = true
+end
+
+desc 'Generate RDoc'
+Rake::RDocTask.new do |task|
+ task.main = 'README'
+ task.title = "Mocha #{Mocha::VERSION}"
+ task.rdoc_dir = 'doc'
+ task.template = File.expand_path(File.join(File.dirname(__FILE__), "templates", "html_with_google_analytics"))
+ task.rdoc_files.include('README', 'RELEASE', 'COPYING', 'MIT-LICENSE', 'agiledox.txt', 'lib/mocha/auto_verify.rb', 'lib/mocha/mock.rb', 'lib/mocha/expectation.rb', 'lib/mocha/object.rb', 'lib/mocha/parameter_matchers.rb', 'lib/mocha/parameter_matchers')
+end
+task :rdoc => :examples
+
+desc "Upload RDoc to RubyForge"
+task :publish_rdoc => [:rdoc, :examples] do
+ Rake::SshDirPublisher.new("jamesmead@rubyforge.org", "/var/www/gforge-projects/mocha", "doc").upload
+end
+
+desc "Generate agiledox-like documentation for tests"
+file 'agiledox.txt' do
+ File.open('agiledox.txt', 'w') do |output|
+ tests = FileList['test/**/*_test.rb']
+ tests.each do |file|
+ m = %r".*/([^/].*)_test.rb".match(file)
+ output << m[1]+" should:\n"
+ test_definitions = File::readlines(file).select {|line| line =~ /.*def test.*/}
+ test_definitions.sort.each do |definition|
+ m = %r"test_(should_)?(.*)".match(definition)
+ output << " - "+m[2].gsub(/_/," ") << "\n"
+ end
+ end
+ end
+end
+
+desc "Convert example ruby files to syntax-highlighted html"
+task :examples do
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), "vendor", "coderay-0.7.4.215", "lib"))
+ require 'coderay'
+ mkdir_p 'doc/examples'
+ File.open('doc/examples/coderay.css', 'w') do |output|
+ output << CodeRay::Encoders[:html]::CSS.new.stylesheet
+ end
+ ['mocha', 'stubba', 'misc'].each do |filename|
+ File.open("doc/examples/#{filename}.html", 'w') do |file|
+ file << "<html>"
+ file << "<head>"
+ file << %q(<link rel="stylesheet" media="screen" href="coderay.css" type="text/css">)
+ file << "</head>"
+ file << "<body>"
+ file << CodeRay.scan_file("examples/#{filename}.rb").html.div
+ file << "</body>"
+ file << "</html>"
+ end
+ end
+end
+
+Gem::manage_gems
+
+specification = Gem::Specification.new do |s|
+ s.name = "mocha"
+ s.summary = "Mocking and stubbing library"
+ s.version = Mocha::VERSION
+ s.platform = Gem::Platform::RUBY
+ s.author = 'James Mead'
+ s.description = <<-EOF
+ Mocking and stubbing library with JMock/SchMock syntax, which allows mocking and stubbing of methods on real (non-mock) classes.
+ EOF
+ s.email = 'mocha-developer@rubyforge.org'
+ s.homepage = 'http://mocha.rubyforge.org'
+ s.rubyforge_project = 'mocha'
+
+ s.has_rdoc = true
+ s.extra_rdoc_files = ['README', 'COPYING']
+ s.rdoc_options << '--title' << 'Mocha' << '--main' << 'README' << '--line-numbers'
+
+ s.autorequire = 'mocha'
+ s.add_dependency('rake')
+ s.files = FileList['{lib,test,examples}/**/*.rb', '[A-Z]*'].exclude('TODO').to_a
+end
+
+Rake::GemPackageTask.new(specification) do |package|
+ package.need_zip = true
+ package.need_tar = true
+end
+
+task :verify_user do
+ raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
+end
+
+task :verify_password do
+ raise "RUBYFORGE_PASSWORD environment variable not set!" unless ENV['RUBYFORGE_PASSWORD']
+end
+
+desc "Publish package files on RubyForge."
+task :publish_packages => [:verify_user, :verify_password, :package] do
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), "vendor", "meta_project-0.4.15", "lib"))
+ require 'meta_project'
+ require 'rake/contrib/xforge'
+ release_files = FileList[
+ "pkg/mocha-#{Mocha::VERSION}.gem",
+ "pkg/mocha-#{Mocha::VERSION}.tgz",
+ "pkg/mocha-#{Mocha::VERSION}.zip"
+ ]
+
+ Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new('mocha')) do |release|
+ release.user_name = ENV['RUBYFORGE_USER']
+ release.password = ENV['RUBYFORGE_PASSWORD']
+ release.files = release_files.to_a
+ release.release_name = "Mocha #{Mocha::VERSION}"
+ release.release_changes = ''
+ release.release_notes = ''
+ end
+end
diff --git a/vendor/gems/mocha-0.5.6/examples/._misc.rb b/vendor/gems/mocha-0.5.6/examples/._misc.rb
new file mode 100644
index 000000000..c425bb341
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/examples/._misc.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/examples/._mocha.rb b/vendor/gems/mocha-0.5.6/examples/._mocha.rb
new file mode 100644
index 000000000..0c1998db8
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/examples/._mocha.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/examples/._stubba.rb b/vendor/gems/mocha-0.5.6/examples/._stubba.rb
new file mode 100644
index 000000000..4eae8fa0f
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/examples/._stubba.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/examples/misc.rb b/vendor/gems/mocha-0.5.6/examples/misc.rb
new file mode 100644
index 000000000..1cb8b55d0
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/examples/misc.rb
@@ -0,0 +1,44 @@
+require 'test/unit'
+require 'rubygems'
+require 'mocha'
+
+class MiscExampleTest < Test::Unit::TestCase
+
+ def test_mocking_a_class_method
+ product = Product.new
+ Product.expects(:find).with(1).returns(product)
+ assert_equal product, Product.find(1)
+ end
+
+ def test_mocking_an_instance_method_on_a_real_object
+ product = Product.new
+ product.expects(:save).returns(true)
+ assert product.save
+ end
+
+ def test_stubbing_instance_methods_on_real_objects
+ prices = [stub(:pence => 1000), stub(:pence => 2000)]
+ product = Product.new
+ product.stubs(:prices).returns(prices)
+ assert_equal [1000, 2000], product.prices.collect {|p| p.pence}
+ end
+
+ def test_stubbing_an_instance_method_on_all_instances_of_a_class
+ Product.any_instance.stubs(:name).returns('stubbed_name')
+ product = Product.new
+ assert_equal 'stubbed_name', product.name
+ end
+
+ def test_traditional_mocking
+ object = mock()
+ object.expects(:expected_method).with(:p1, :p2).returns(:result)
+ assert_equal :result, object.expected_method(:p1, :p2)
+ end
+
+ def test_shortcuts
+ object = stub(:method1 => :result1, :method2 => :result2)
+ assert_equal :result1, object.method1
+ assert_equal :result2, object.method2
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/examples/mocha.rb b/vendor/gems/mocha-0.5.6/examples/mocha.rb
new file mode 100644
index 000000000..863270d53
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/examples/mocha.rb
@@ -0,0 +1,26 @@
+class Enterprise
+
+ def initialize(dilithium)
+ @dilithium = dilithium
+ end
+
+ def go(warp_factor)
+ warp_factor.times { @dilithium.nuke(:anti_matter) }
+ end
+
+end
+
+require 'test/unit'
+require 'rubygems'
+require 'mocha'
+
+class EnterpriseTest < Test::Unit::TestCase
+
+ def test_should_boldly_go
+ dilithium = mock()
+ dilithium.expects(:nuke).with(:anti_matter).at_least_once # auto-verified at end of test
+ enterprise = Enterprise.new(dilithium)
+ enterprise.go(2)
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/examples/stubba.rb b/vendor/gems/mocha-0.5.6/examples/stubba.rb
new file mode 100644
index 000000000..2788d1b62
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/examples/stubba.rb
@@ -0,0 +1,65 @@
+class Order
+
+ attr_accessor :shipped_on
+
+ def total_cost
+ line_items.inject(0) { |total, line_item| total + line_item.price } + shipping_cost
+ end
+
+ def total_weight
+ line_items.inject(0) { |total, line_item| total + line_item.weight }
+ end
+
+ def shipping_cost
+ total_weight * 5 + 10
+ end
+
+ class << self
+
+ def find_all
+ # Database.connection.execute('select * from orders...
+ end
+
+ def number_shipped_since(date)
+ find_all.select { |order| order.shipped_on > date }.length
+ end
+
+ def unshipped_value
+ find_all.inject(0) { |total, order| order.shipped_on ? total : total + order.total_cost }
+ end
+
+ end
+
+end
+
+require 'test/unit'
+require 'rubygems'
+require 'mocha'
+
+class OrderTest < Test::Unit::TestCase
+
+ # illustrates stubbing instance method
+ def test_should_calculate_shipping_cost_based_on_total_weight
+ order = Order.new
+ order.stubs(:total_weight).returns(10)
+ assert_equal 60, order.shipping_cost
+ end
+
+ # illustrates stubbing class method
+ def test_should_count_number_of_orders_shipped_after_specified_date
+ now = Time.now; week_in_secs = 7 * 24 * 60 * 60
+ order_1 = Order.new; order_1.shipped_on = now - 1 * week_in_secs
+ order_2 = Order.new; order_2.shipped_on = now - 3 * week_in_secs
+ Order.stubs(:find_all).returns([order_1, order_2])
+ assert_equal 1, Order.number_shipped_since(now - 2 * week_in_secs)
+ end
+
+ # illustrates stubbing instance method for all instances of a class
+ def test_should_calculate_value_of_unshipped_orders
+ Order.stubs(:find_all).returns([Order.new, Order.new, Order.new])
+ Order.any_instance.stubs(:shipped_on).returns(nil)
+ Order.any_instance.stubs(:total_cost).returns(10)
+ assert_equal 30, Order.unshipped_value
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/lib/._mocha.rb b/vendor/gems/mocha-0.5.6/lib/._mocha.rb
new file mode 100644
index 000000000..cf6ff4839
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/._mocha.rb
Binary files differ
diff --git a/test/lib/mocha.rb b/vendor/gems/mocha-0.5.6/lib/mocha.rb
index 58571156a..58571156a 100644
--- a/test/lib/mocha.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha.rb
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._any_instance_method.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._any_instance_method.rb
new file mode 100644
index 000000000..00711bd39
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._any_instance_method.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._auto_verify.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._auto_verify.rb
new file mode 100644
index 000000000..b0167dfe3
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._auto_verify.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._central.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._central.rb
new file mode 100644
index 000000000..8515018e0
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._central.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._class_method.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._class_method.rb
new file mode 100644
index 000000000..66871a56f
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._class_method.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._deprecation.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._deprecation.rb
new file mode 100644
index 000000000..3e11a4d5a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._deprecation.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._expectation.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._expectation.rb
new file mode 100644
index 000000000..2deed467d
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._expectation.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._expectation_error.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._expectation_error.rb
new file mode 100644
index 000000000..dbb6154b3
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._expectation_error.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._expectation_list.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._expectation_list.rb
new file mode 100644
index 000000000..21a5f32b4
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._expectation_list.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._infinite_range.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._infinite_range.rb
new file mode 100644
index 000000000..07e0b709a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._infinite_range.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._inspect.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._inspect.rb
new file mode 100644
index 000000000..28d27abde
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._inspect.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._instance_method.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._instance_method.rb
new file mode 100644
index 000000000..c11d0ea30
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._instance_method.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._metaclass.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._metaclass.rb
new file mode 100644
index 000000000..3ab4a8b5f
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._metaclass.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._method_matcher.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._method_matcher.rb
new file mode 100644
index 000000000..392843f65
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._method_matcher.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._missing_expectation.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._missing_expectation.rb
new file mode 100644
index 000000000..4049e36b4
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._missing_expectation.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._mock.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._mock.rb
new file mode 100644
index 000000000..8eefd1314
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._mock.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._object.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._object.rb
new file mode 100644
index 000000000..2fa785b57
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._object.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._parameter_matchers.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._parameter_matchers.rb
new file mode 100644
index 000000000..1a81dea1e
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._parameter_matchers.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._parameters_matcher.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._parameters_matcher.rb
new file mode 100644
index 000000000..de250a8e2
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._parameters_matcher.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._pretty_parameters.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._pretty_parameters.rb
new file mode 100644
index 000000000..0a4f4854b
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._pretty_parameters.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._return_values.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._return_values.rb
new file mode 100644
index 000000000..0d41af3d6
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._return_values.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._sequence.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._sequence.rb
new file mode 100644
index 000000000..af2494888
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._sequence.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._setup_and_teardown.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._setup_and_teardown.rb
new file mode 100644
index 000000000..fb1bde164
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._setup_and_teardown.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._single_return_value.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._single_return_value.rb
new file mode 100644
index 000000000..fec4c56f5
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._single_return_value.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._standalone.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._standalone.rb
new file mode 100644
index 000000000..f33f028a2
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._standalone.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._test_case_adapter.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._test_case_adapter.rb
new file mode 100644
index 000000000..99a49dc52
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._test_case_adapter.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/._yield_parameters.rb b/vendor/gems/mocha-0.5.6/lib/mocha/._yield_parameters.rb
new file mode 100644
index 000000000..a9646d7bb
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/._yield_parameters.rb
Binary files differ
diff --git a/test/lib/mocha/any_instance_method.rb b/vendor/gems/mocha-0.5.6/lib/mocha/any_instance_method.rb
index 4d55293b9..4d55293b9 100644
--- a/test/lib/mocha/any_instance_method.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/any_instance_method.rb
diff --git a/test/lib/mocha/auto_verify.rb b/vendor/gems/mocha-0.5.6/lib/mocha/auto_verify.rb
index dce877bde..896648bcd 100644
--- a/test/lib/mocha/auto_verify.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/auto_verify.rb
@@ -1,4 +1,5 @@
require 'mocha/mock'
+require 'mocha/sequence'
module Mocha # :nodoc:
@@ -17,9 +18,9 @@ module Mocha # :nodoc:
@mocks = nil
end
- # :call-seq: mock(name) -> mock object
- # mock(expected_methods = {}) -> mock object
- # mock(name, expected_methods = {}) -> mock object
+ # :call-seq: mock(name, &block) -> mock object
+ # mock(expected_methods = {}, &block) -> mock object
+ # mock(name, expected_methods = {}, &block) -> mock object
#
# Creates a mock object.
#
@@ -27,6 +28,8 @@ module Mocha # :nodoc:
#
# +expected_methods+ is a +Hash+ with expected method name symbols as keys and corresponding return values as values.
#
+ # +block+ is a block to be evaluated against the mock object instance, giving an alernative way to set up expectations & stubs.
+ #
# Note that (contrary to expectations set up by #stub) these expectations <b>must</b> be fulfilled during the test.
# def test_product
# product = mock('ipod_product', :manufacturer => 'ipod', :price => 100)
@@ -34,14 +37,18 @@ module Mocha # :nodoc:
# assert_equal 100, product.price
# # an error will be raised unless both Product#manufacturer and Product#price have been called
# end
- def mock(*args)
- name, expectations = name_and_expectations_from_args(args)
- build_mock_with_expectations(:expects, expectations, name)
+ def mock(*arguments, &block)
+ name = arguments.shift if arguments.first.is_a?(String)
+ expectations = arguments.shift || {}
+ mock = Mock.new(name, &block)
+ mock.expects(expectations)
+ mocks << mock
+ mock
end
- # :call-seq: stub(name) -> mock object
- # stub(stubbed_methods = {}) -> mock object
- # stub(name, stubbed_methods = {}) -> mock object
+ # :call-seq: stub(name, &block) -> mock object
+ # stub(stubbed_methods = {}, &block) -> mock object
+ # stub(name, stubbed_methods = {}, &block) -> mock object
#
# Creates a mock object.
#
@@ -49,6 +56,8 @@ module Mocha # :nodoc:
#
# +stubbed_methods+ is a +Hash+ with stubbed method name symbols as keys and corresponding return values as values.
#
+ # +block+ is a block to be evaluated against the mock object instance, giving an alernative way to set up expectations & stubs.
+ #
# Note that (contrary to expectations set up by #mock) these expectations <b>need not</b> be fulfilled during the test.
# def test_product
# product = stub('ipod_product', :manufacturer => 'ipod', :price => 100)
@@ -56,19 +65,25 @@ module Mocha # :nodoc:
# assert_equal 100, product.price
# # an error will not be raised even if Product#manufacturer and Product#price have not been called
# end
- def stub(*args)
- name, expectations = name_and_expectations_from_args(args)
- build_mock_with_expectations(:stubs, expectations, name)
+ def stub(*arguments, &block)
+ name = arguments.shift if arguments.first.is_a?(String)
+ expectations = arguments.shift || {}
+ stub = Mock.new(name, &block)
+ stub.stubs(expectations)
+ mocks << stub
+ stub
end
- # :call-seq: stub_everything(name) -> mock object
- # stub_everything(stubbed_methods = {}) -> mock object
- # stub_everything(name, stubbed_methods = {}) -> mock object
+ # :call-seq: stub_everything(name, &block) -> mock object
+ # stub_everything(stubbed_methods = {}, &block) -> mock object
+ # stub_everything(name, stubbed_methods = {}, &block) -> mock object
#
# Creates a mock object that accepts calls to any method.
#
# By default it will return +nil+ for any method call.
#
+ # +block+ is a block to be evaluated against the mock object instance, giving an alernative way to set up expectations & stubs.
+ #
# +name+ and +stubbed_methods+ work in the same way as for #stub.
# def test_product
# product = stub_everything('ipod_product', :price => 100)
@@ -76,9 +91,14 @@ module Mocha # :nodoc:
# assert_nil product.any_old_method
# assert_equal 100, product.price
# end
- def stub_everything(*args)
- name, expectations = name_and_expectations_from_args(args)
- build_mock_with_expectations(:stub_everything, expectations, name)
+ def stub_everything(*arguments, &block)
+ name = arguments.shift if arguments.first.is_a?(String)
+ expectations = arguments.shift || {}
+ stub = Mock.new(name, &block)
+ stub.stub_everything
+ stub.stubs(expectations)
+ mocks << stub
+ stub
end
def verify_mocks # :nodoc:
@@ -88,24 +108,9 @@ module Mocha # :nodoc:
def teardown_mocks # :nodoc:
reset_mocks
end
-
- def build_mock_with_expectations(expectation_type = :expects, expectations = {}, name = nil) # :nodoc:
- stub_everything = (expectation_type == :stub_everything)
- expectation_type = :stubs if expectation_type == :stub_everything
- mock = Mocha::Mock.new(stub_everything, name)
- expectations.each do |method, result|
- mock.__send__(expectation_type, method).returns(result)
- end
- mocks << mock
- mock
- end
- private
-
- def name_and_expectations_from_args(args) # :nodoc:
- name = args.first.is_a?(String) ? args.delete_at(0) : nil
- expectations = args.first || {}
- [name, expectations]
+ def sequence(name) # :nodoc:
+ Sequence.new(name)
end
end
diff --git a/test/lib/mocha/central.rb b/vendor/gems/mocha-0.5.6/lib/mocha/central.rb
index 3dde7350f..0445f2151 100644
--- a/test/lib/mocha/central.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/central.rb
@@ -24,7 +24,7 @@ module Mocha
end
def unstub_all
- while stubba_methods.size > 0
+ while stubba_methods.length > 0
method = stubba_methods.pop
method.unstub
end
diff --git a/test/lib/mocha/class_method.rb b/vendor/gems/mocha-0.5.6/lib/mocha/class_method.rb
index 915fe71b5..e2178be17 100644
--- a/test/lib/mocha/class_method.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/class_method.rb
@@ -42,7 +42,11 @@ module Mocha
end
def hidden_method
- method_name = method.to_s.gsub(/\W/) {|s| "_substituted_character_#{s[0]}_" }
+ if RUBY_VERSION < '1.9'
+ method_name = method.to_s.gsub(/\W/) { |s| "_substituted_character_#{s[0]}_" }
+ else
+ method_name = method.to_s.gsub(/\W/) { |s| "_substituted_character_#{s.ord}_" }
+ end
"__stubba__#{method_name}__stubba__"
end
diff --git a/test/lib/mocha/deprecation.rb b/vendor/gems/mocha-0.5.6/lib/mocha/deprecation.rb
index 7448510ec..7448510ec 100644
--- a/test/lib/mocha/deprecation.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/deprecation.rb
diff --git a/test/lib/mocha/exception_raiser.rb b/vendor/gems/mocha-0.5.6/lib/mocha/exception_raiser.rb
index 266e209a2..266e209a2 100644
--- a/test/lib/mocha/exception_raiser.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/exception_raiser.rb
diff --git a/test/lib/mocha/expectation.rb b/vendor/gems/mocha-0.5.6/lib/mocha/expectation.rb
index 49b39bea9..e3da2533f 100644
--- a/test/lib/mocha/expectation.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/expectation.rb
@@ -1,5 +1,6 @@
require 'mocha/infinite_range'
-require 'mocha/pretty_parameters'
+require 'mocha/method_matcher'
+require 'mocha/parameters_matcher'
require 'mocha/expectation_error'
require 'mocha/return_values'
require 'mocha/exception_raiser'
@@ -11,42 +12,6 @@ module Mocha # :nodoc:
# Methods on expectations returned from Mock#expects, Mock#stubs, Object#expects and Object#stubs.
class Expectation
- # :stopdoc:
-
- class AlwaysEqual
- def ==(other)
- true
- end
- end
-
- attr_reader :method_name, :backtrace
-
- def initialize(mock, method_name, backtrace = nil)
- @mock, @method_name = mock, method_name
- @expected_count = 1
- @parameters, @parameter_block = AlwaysEqual.new, nil
- @invoked_count, @return_values = 0, ReturnValues.new
- @backtrace = backtrace || caller
- @yield_parameters = YieldParameters.new
- end
-
- def match?(method_name, *arguments)
- return false unless @method_name == method_name
- if @parameter_block then
- return false unless @parameter_block.call(*arguments)
- else
- return false unless (@parameters == arguments)
- end
- if @expected_count.is_a?(Range) then
- return false unless @invoked_count < @expected_count.last
- else
- return false unless @invoked_count < @expected_count
- end
- return true
- end
-
- # :startdoc:
-
# :call-seq: times(range) -> expectation
#
# Modifies expectation so that the number of calls to the expected method must be within a specific +range+.
@@ -183,9 +148,9 @@ module Mocha # :nodoc:
self
end
- # :call-seq: with(*arguments, &parameter_block) -> expectation
+ # :call-seq: with(*expected_parameters, &matching_block) -> expectation
#
- # Modifies expectation so that the expected method must be called with specified +arguments+.
+ # Modifies expectation so that the expected method must be called with +expected_parameters+.
# object = mock()
# object.expects(:expected_method).with(:param1, :param2)
# object.expected_method(:param1, :param2)
@@ -197,7 +162,7 @@ module Mocha # :nodoc:
# # => verify fails
# May be used with parameter matchers in Mocha::ParameterMatchers.
#
- # If a +parameter_block+ is given, the block is called with the parameters passed to the expected method.
+ # If a +matching_block+ is given, the block is called with the parameters passed to the expected method.
# The expectation is matched if the block evaluates to +true+.
# object = mock()
# object.expects(:expected_method).with() { |value| value % 4 == 0 }
@@ -208,9 +173,8 @@ module Mocha # :nodoc:
# object.expects(:expected_method).with() { |value| value % 4 == 0 }
# object.expected_method(17)
# # => verify fails
- def with(*arguments, &parameter_block)
- @parameters, @parameter_block = arguments, parameter_block
- class << @parameters; def to_s; join(', '); end; end
+ def with(*expected_parameters, &matching_block)
+ @parameters_matcher = ParametersMatcher.new(expected_parameters, &matching_block)
self
end
@@ -259,7 +223,7 @@ module Mocha # :nodoc:
end
# :call-seq: returns(value) -> expectation
- # :call-seq: returns(*values) -> expectation
+ # returns(*values) -> expectation
#
# Modifies expectation so that when the expected method is called, it returns the specified +value+.
# object = mock()
@@ -335,6 +299,56 @@ module Mocha # :nodoc:
# :stopdoc:
+ def in_sequence(*sequences)
+ sequences.each { |sequence| sequence.constrain_as_next_in_sequence(self) }
+ self
+ end
+
+ attr_reader :backtrace
+
+ def initialize(mock, expected_method_name, backtrace = nil)
+ @mock = mock
+ @method_matcher = MethodMatcher.new(expected_method_name)
+ @parameters_matcher = ParametersMatcher.new
+ @ordering_constraints = []
+ @expected_count, @invoked_count = 1, 0
+ @return_values = ReturnValues.new
+ @yield_parameters = YieldParameters.new
+ @backtrace = backtrace || caller
+ end
+
+ def add_ordering_constraint(ordering_constraint)
+ @ordering_constraints << ordering_constraint
+ end
+
+ def in_correct_order?
+ @ordering_constraints.all? { |ordering_constraint| ordering_constraint.allows_invocation_now? }
+ end
+
+ def matches_method?(method_name)
+ @method_matcher.match?(method_name)
+ end
+
+ def match?(actual_method_name, *actual_parameters)
+ @method_matcher.match?(actual_method_name) && @parameters_matcher.match?(actual_parameters) && in_correct_order?
+ end
+
+ def invocations_allowed?
+ if @expected_count.is_a?(Range) then
+ @invoked_count < @expected_count.last
+ else
+ @invoked_count < @expected_count
+ end
+ end
+
+ def satisfied?
+ if @expected_count.is_a?(Range) then
+ @invoked_count >= @expected_count.first
+ else
+ @invoked_count >= @expected_count
+ end
+ end
+
def invoke
@invoked_count += 1
if block_given? then
@@ -348,27 +362,19 @@ module Mocha # :nodoc:
def verify
yield(self) if block_given?
unless (@expected_count === @invoked_count) then
- error = ExpectationError.new(error_message(@expected_count, @invoked_count))
- error.set_backtrace(filtered_backtrace)
+ error = ExpectationError.new(error_message(@expected_count, @invoked_count), backtrace)
raise error
end
end
- def mocha_lib_directory
- File.expand_path(File.join(File.dirname(__FILE__), "..")) + File::SEPARATOR
- end
-
- def filtered_backtrace
- backtrace.reject { |location| Regexp.new(mocha_lib_directory).match(File.expand_path(location)) }
- end
-
def method_signature
- return "#{method_name}" if @parameters.__is_a__(AlwaysEqual)
- "#{@method_name}(#{PrettyParameters.new(@parameters).pretty})"
+ signature = "#{@mock.mocha_inspect}.#{@method_matcher.mocha_inspect}#{@parameters_matcher.mocha_inspect}"
+ signature << "; #{@ordering_constraints.map { |oc| oc.mocha_inspect }.join("; ")}" unless @ordering_constraints.empty?
+ signature
end
def error_message(expected_count, actual_count)
- "#{@mock.mocha_inspect}.#{method_signature} - expected calls: #{expected_count.mocha_inspect}, actual calls: #{actual_count}"
+ "#{method_signature} - expected calls: #{expected_count.mocha_inspect}, actual calls: #{actual_count}"
end
# :startdoc:
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/expectation_error.rb b/vendor/gems/mocha-0.5.6/lib/mocha/expectation_error.rb
new file mode 100644
index 000000000..705571b85
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/expectation_error.rb
@@ -0,0 +1,15 @@
+module Mocha
+
+ class ExpectationError < StandardError
+
+ LIB_DIRECTORY = File.expand_path(File.join(File.dirname(__FILE__), "..")) + File::SEPARATOR
+
+ def initialize(message = nil, backtrace = [], lib_directory = LIB_DIRECTORY)
+ super(message)
+ filtered_backtrace = backtrace.reject { |location| Regexp.new(lib_directory).match(File.expand_path(location)) }
+ set_backtrace(filtered_backtrace)
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/expectation_list.rb b/vendor/gems/mocha-0.5.6/lib/mocha/expectation_list.rb
new file mode 100644
index 000000000..5ca13d5af
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/expectation_list.rb
@@ -0,0 +1,46 @@
+module Mocha # :nodoc:
+
+ class ExpectationList
+
+ def initialize
+ @expectations = []
+ end
+
+ def add(expectation)
+ @expectations << expectation
+ expectation
+ end
+
+ def matches_method?(method_name)
+ @expectations.any? { |expectation| expectation.matches_method?(method_name) }
+ end
+
+ def similar(method_name)
+ @expectations.select { |expectation| expectation.matches_method?(method_name) }
+ end
+
+ def detect(method_name, *arguments)
+ expectations = @expectations.reverse.select { |e| e.match?(method_name, *arguments) }
+ expectation = expectations.detect { |e| e.invocations_allowed? }
+ expectation || expectations.first
+ end
+
+ def verify(&block)
+ @expectations.each { |expectation| expectation.verify(&block) }
+ end
+
+ def to_a
+ @expectations
+ end
+
+ def to_set
+ @expectations.to_set
+ end
+
+ def length
+ @expectations.length
+ end
+
+ end
+
+end
diff --git a/test/lib/mocha/infinite_range.rb b/vendor/gems/mocha-0.5.6/lib/mocha/infinite_range.rb
index 05dfe559e..05dfe559e 100644
--- a/test/lib/mocha/infinite_range.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/infinite_range.rb
diff --git a/test/lib/mocha/inspect.rb b/vendor/gems/mocha-0.5.6/lib/mocha/inspect.rb
index ad82ef70e..ad82ef70e 100644
--- a/test/lib/mocha/inspect.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/inspect.rb
diff --git a/test/lib/mocha/instance_method.rb b/vendor/gems/mocha-0.5.6/lib/mocha/instance_method.rb
index f0d4b04b8..f0d4b04b8 100644
--- a/test/lib/mocha/instance_method.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/instance_method.rb
diff --git a/test/lib/mocha/is_a.rb b/vendor/gems/mocha-0.5.6/lib/mocha/is_a.rb
index ee23c86a9..ee23c86a9 100644
--- a/test/lib/mocha/is_a.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/is_a.rb
diff --git a/test/lib/mocha/metaclass.rb b/vendor/gems/mocha-0.5.6/lib/mocha/metaclass.rb
index f78fb892b..f78fb892b 100644
--- a/test/lib/mocha/metaclass.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/metaclass.rb
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/method_matcher.rb b/vendor/gems/mocha-0.5.6/lib/mocha/method_matcher.rb
new file mode 100644
index 000000000..6ce5f6d57
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/method_matcher.rb
@@ -0,0 +1,21 @@
+module Mocha
+
+ class MethodMatcher
+
+ attr_reader :expected_method_name
+
+ def initialize(expected_method_name)
+ @expected_method_name = expected_method_name
+ end
+
+ def match?(actual_method_name)
+ @expected_method_name == actual_method_name
+ end
+
+ def mocha_inspect
+ "#{@expected_method_name}"
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/missing_expectation.rb b/vendor/gems/mocha-0.5.6/lib/mocha/missing_expectation.rb
new file mode 100644
index 000000000..ccff6bff4
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/missing_expectation.rb
@@ -0,0 +1,17 @@
+require 'mocha/expectation'
+
+module Mocha # :nodoc:
+
+ class MissingExpectation < Expectation # :nodoc:
+
+ def verify
+ message = error_message(0, 1)
+ similar_expectations = @mock.expectations.similar(@method_matcher.expected_method_name)
+ method_signatures = similar_expectations.map { |expectation| expectation.method_signature }
+ message << "\nSimilar expectations:\n#{method_signatures.join("\n")}" unless method_signatures.empty?
+ raise ExpectationError.new(message, backtrace)
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/test/lib/mocha/mock.rb b/vendor/gems/mocha-0.5.6/lib/mocha/mock.rb
index 18c23fede..59193e728 100644
--- a/test/lib/mocha/mock.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/mock.rb
@@ -1,28 +1,16 @@
require 'mocha/expectation'
+require 'mocha/expectation_list'
require 'mocha/stub'
require 'mocha/missing_expectation'
require 'mocha/metaclass'
module Mocha # :nodoc:
-
+
# Traditional mock object.
#
# Methods return an Expectation which can be further modified by methods on Expectation.
class Mock
- # :stopdoc:
-
- def initialize(stub_everything = false, name = nil)
- @stub_everything = stub_everything
- @mock_name = name
- @expectations = []
- @responder = nil
- end
-
- attr_reader :stub_everything, :expectations
-
- # :startdoc:
-
# :call-seq: expects(method_name) -> expectation
# expects(method_names) -> last expectation
#
@@ -50,10 +38,12 @@ module Mocha # :nodoc:
def expects(method_name_or_hash, backtrace = nil)
if method_name_or_hash.is_a?(Hash) then
method_name_or_hash.each do |method_name, return_value|
- add_expectation(Expectation.new(self, method_name, backtrace).returns(return_value))
+ ensure_method_not_already_defined(method_name)
+ @expectations.add(Expectation.new(self, method_name, backtrace).returns(return_value))
end
else
- add_expectation(Expectation.new(self, method_name_or_hash, backtrace))
+ ensure_method_not_already_defined(method_name_or_hash)
+ @expectations.add(Expectation.new(self, method_name_or_hash, backtrace))
end
end
@@ -81,10 +71,12 @@ module Mocha # :nodoc:
def stubs(method_name_or_hash, backtrace = nil)
if method_name_or_hash.is_a?(Hash) then
method_name_or_hash.each do |method_name, return_value|
- add_expectation(Stub.new(self, method_name, backtrace).returns(return_value))
+ ensure_method_not_already_defined(method_name)
+ @expectations.add(Stub.new(self, method_name, backtrace).returns(return_value))
end
else
- add_expectation(Stub.new(self, method_name_or_hash, backtrace))
+ ensure_method_not_already_defined(method_name_or_hash)
+ @expectations.add(Stub.new(self, method_name_or_hash, backtrace))
end
end
@@ -134,6 +126,16 @@ module Mocha # :nodoc:
end
# :stopdoc:
+
+ def initialize(name = nil, &block)
+ @mock_name = name
+ @expectations = ExpectationList.new
+ @everything_stubbed = false
+ @responder = nil
+ instance_eval(&block) if block
+ end
+
+ attr_reader :everything_stubbed, :expectations
alias_method :__expects__, :expects
@@ -142,52 +144,41 @@ module Mocha # :nodoc:
alias_method :quacks_like, :responds_like
def add_expectation(expectation)
- @expectations << expectation
- method_name = expectation.method_name
- self.__metaclass__.send(:undef_method, method_name) if self.__metaclass__.method_defined?(method_name)
- expectation
+ @expectations.add(expectation)
end
-
+
+ def stub_everything
+ @everything_stubbed = true
+ end
+
def method_missing(symbol, *arguments, &block)
if @responder and not @responder.respond_to?(symbol)
raise NoMethodError, "undefined method `#{symbol}' for #{self.mocha_inspect} which responds like #{@responder.mocha_inspect}"
end
- matching_expectation = matching_expectation(symbol, *arguments)
+ matching_expectation = @expectations.detect(symbol, *arguments)
if matching_expectation then
matching_expectation.invoke(&block)
- elsif stub_everything then
+ elsif @everything_stubbed then
return
else
- begin
- super_method_missing(symbol, *arguments, &block)
- rescue NoMethodError
- unexpected_method_called(symbol, *arguments)
- end
- end
- end
-
- def respond_to?(symbol)
- if @responder then
- @responder.respond_to?(symbol)
+ unexpected_method_called(symbol, *arguments)
+ end
+ end
+
+ def respond_to?(symbol)
+ if @responder then
+ @responder.respond_to?(symbol)
else
- @expectations.any? { |expectation| expectation.method_name == symbol }
- end
- end
-
- def super_method_missing(symbol, *arguments, &block)
- raise NoMethodError
+ @expectations.matches_method?(symbol)
+ end
end
-
- def unexpected_method_called(symbol, *arguments)
+
+ def unexpected_method_called(symbol, *arguments)
MissingExpectation.new(self, symbol).with(*arguments).verify
end
-
- def matching_expectation(symbol, *arguments)
- @expectations.reverse.detect { |expectation| expectation.match?(symbol, *arguments) }
- end
def verify(&block)
- @expectations.each { |expectation| expectation.verify(&block) }
+ @expectations.verify(&block)
end
def mocha_inspect
@@ -199,9 +190,13 @@ module Mocha # :nodoc:
def inspect
mocha_inspect
end
+
+ def ensure_method_not_already_defined(method_name)
+ self.__metaclass__.send(:undef_method, method_name) if self.__metaclass__.method_defined?(method_name)
+ end
# :startdoc:
end
-end \ No newline at end of file
+end
diff --git a/test/lib/mocha/multiple_yields.rb b/vendor/gems/mocha-0.5.6/lib/mocha/multiple_yields.rb
index 8186c3076..8186c3076 100644
--- a/test/lib/mocha/multiple_yields.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/multiple_yields.rb
diff --git a/test/lib/mocha/no_yields.rb b/vendor/gems/mocha-0.5.6/lib/mocha/no_yields.rb
index b0fba415d..b0fba415d 100644
--- a/test/lib/mocha/no_yields.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/no_yields.rb
diff --git a/test/lib/mocha/object.rb b/vendor/gems/mocha-0.5.6/lib/mocha/object.rb
index 7ccdbad0d..7ccdbad0d 100644
--- a/test/lib/mocha/object.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/object.rb
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers.rb
new file mode 100644
index 000000000..a11047998
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers.rb
@@ -0,0 +1,25 @@
+module Mocha
+
+ # Used as parameters for Expectation#with to restrict the parameter values which will match the expectation.
+ module ParameterMatchers; end
+
+end
+
+require 'mocha/parameter_matchers/object'
+
+require 'mocha/parameter_matchers/all_of'
+require 'mocha/parameter_matchers/any_of'
+require 'mocha/parameter_matchers/any_parameters'
+require 'mocha/parameter_matchers/anything'
+require 'mocha/parameter_matchers/equals'
+require 'mocha/parameter_matchers/has_entry'
+require 'mocha/parameter_matchers/has_entries'
+require 'mocha/parameter_matchers/has_key'
+require 'mocha/parameter_matchers/has_value'
+require 'mocha/parameter_matchers/includes'
+require 'mocha/parameter_matchers/instance_of'
+require 'mocha/parameter_matchers/is_a'
+require 'mocha/parameter_matchers/kind_of'
+require 'mocha/parameter_matchers/not'
+require 'mocha/parameter_matchers/optionally'
+require 'mocha/parameter_matchers/regexp_matches'
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._all_of.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._all_of.rb
new file mode 100644
index 000000000..41edbb869
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._all_of.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._any_of.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._any_of.rb
new file mode 100644
index 000000000..ff228f5c7
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._any_of.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._any_parameters.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._any_parameters.rb
new file mode 100644
index 000000000..7f2968c8c
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._any_parameters.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._anything.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._anything.rb
new file mode 100644
index 000000000..5efdf5440
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._anything.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._base.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._base.rb
new file mode 100644
index 000000000..fc871fdda
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._base.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._equals.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._equals.rb
new file mode 100644
index 000000000..c0dfb4cf5
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._equals.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_entries.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_entries.rb
new file mode 100644
index 000000000..622858418
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_entries.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_entry.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_entry.rb
new file mode 100644
index 000000000..fe7b51cfa
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_entry.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_key.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_key.rb
new file mode 100644
index 000000000..e045911be
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_key.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_value.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_value.rb
new file mode 100644
index 000000000..a9565f2d4
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._has_value.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._includes.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._includes.rb
new file mode 100644
index 000000000..0139a2dd2
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._includes.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._instance_of.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._instance_of.rb
new file mode 100644
index 000000000..718e37697
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._instance_of.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._is_a.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._is_a.rb
new file mode 100644
index 000000000..189a411cd
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._is_a.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._kind_of.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._kind_of.rb
new file mode 100644
index 000000000..b99d0d771
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._kind_of.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._not.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._not.rb
new file mode 100644
index 000000000..72ad06517
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._not.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._object.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._object.rb
new file mode 100644
index 000000000..5b117348e
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._object.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._optionally.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._optionally.rb
new file mode 100644
index 000000000..2177fc74a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._optionally.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._regexp_matches.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._regexp_matches.rb
new file mode 100644
index 000000000..2b30b084a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/._regexp_matches.rb
Binary files differ
diff --git a/test/lib/mocha/parameter_matchers/all_of.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/all_of.rb
index 343d9eea0..369eb4340 100644
--- a/test/lib/mocha/parameter_matchers/all_of.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/all_of.rb
@@ -1,3 +1,5 @@
+require 'mocha/parameter_matchers/base'
+
module Mocha
module ParameterMatchers
@@ -18,14 +20,15 @@ module Mocha
AllOf.new(*matchers)
end
- class AllOf # :nodoc:
+ class AllOf < Base # :nodoc:
def initialize(*matchers)
@matchers = matchers
end
- def ==(parameter)
- @matchers.all? { |matcher| matcher == parameter }
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
+ @matchers.all? { |matcher| matcher.matches?([parameter]) }
end
def mocha_inspect
diff --git a/test/lib/mocha/parameter_matchers/any_of.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/any_of.rb
index a1f88075d..dd254b12f 100644
--- a/test/lib/mocha/parameter_matchers/any_of.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/any_of.rb
@@ -1,3 +1,5 @@
+require 'mocha/parameter_matchers/base'
+
module Mocha
module ParameterMatchers
@@ -23,14 +25,15 @@ module Mocha
AnyOf.new(*matchers)
end
- class AnyOf # :nodoc:
+ class AnyOf < Base # :nodoc:
def initialize(*matchers)
@matchers = matchers
end
- def ==(parameter)
- @matchers.any? { |matcher| matcher == parameter }
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
+ @matchers.any? { |matcher| matcher.matches?([parameter]) }
end
def mocha_inspect
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/any_parameters.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/any_parameters.rb
new file mode 100644
index 000000000..11dae83ed
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/any_parameters.rb
@@ -0,0 +1,40 @@
+require 'mocha/parameter_matchers/base'
+
+module Mocha
+
+ module ParameterMatchers
+
+ # :call-seq: any_parameters() -> parameter_matcher
+ #
+ # Matches any parameters.
+ # object = mock()
+ # object.expects(:method_1).with(any_parameters)
+ # object.method_1(1, 2, 3, 4)
+ # # no error raised
+ #
+ # object = mock()
+ # object.expects(:method_1).with(any_parameters)
+ # object.method_1(5, 6, 7, 8, 9, 0)
+ # # no error raised
+ def any_parameters
+ AnyParameters.new
+ end
+
+ class AnyParameters < Base # :nodoc:
+
+ def matches?(available_parameters)
+ while available_parameters.length > 0 do
+ available_parameters.shift
+ end
+ return true
+ end
+
+ def mocha_inspect
+ "any_parameters"
+ end
+
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/test/lib/mocha/parameter_matchers/anything.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/anything.rb
index 57d0eeab4..e82ef86a0 100644
--- a/test/lib/mocha/parameter_matchers/anything.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/anything.rb
@@ -1,3 +1,5 @@
+require 'mocha/parameter_matchers/base'
+
module Mocha
module ParameterMatchers
@@ -13,9 +15,10 @@ module Mocha
Anything.new
end
- class Anything # :nodoc:
+ class Anything < Base # :nodoc:
- def ==(parameter)
+ def matches?(available_parameters)
+ available_parameters.shift
return true
end
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/base.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/base.rb
new file mode 100644
index 000000000..6aaec51a1
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/base.rb
@@ -0,0 +1,15 @@
+module Mocha
+
+ module ParameterMatchers
+
+ class Base # :nodoc:
+
+ def to_matcher
+ self
+ end
+
+ end
+
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/equals.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/equals.rb
new file mode 100644
index 000000000..bdc61a0f5
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/equals.rb
@@ -0,0 +1,42 @@
+require 'mocha/parameter_matchers/base'
+
+module Mocha
+
+ module ParameterMatchers
+
+ # :call-seq: equals(value) -> parameter_matcher
+ #
+ # Matches +Object+ equalling +value+.
+ # object = mock()
+ # object.expects(:method_1).with(equals(2))
+ # object.method_1(2)
+ # # no error raised
+ #
+ # object = mock()
+ # object.expects(:method_1).with(equals(2))
+ # object.method_1(3)
+ # # error raised, because method_1 was not called with Object equalling 3
+ def equals(value)
+ Equals.new(value)
+ end
+
+ class Equals < Base # :nodoc:
+
+ def initialize(value)
+ @value = value
+ end
+
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
+ parameter == @value
+ end
+
+ def mocha_inspect
+ @value.mocha_inspect
+ end
+
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_entries.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_entries.rb
new file mode 100644
index 000000000..30cf025a5
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_entries.rb
@@ -0,0 +1,42 @@
+require 'mocha/parameter_matchers/base'
+
+module Mocha
+
+ module ParameterMatchers
+
+ # :call-seq: has_entries(entries) -> parameter_matcher
+ #
+ # Matches +Hash+ containing all +entries+.
+ # object = mock()
+ # object.expects(:method_1).with(has_entries('key_1' => 1, 'key_2' => 2))
+ # object.method_1('key_1' => 1, 'key_2' => 2, 'key_3' => 3)
+ # # no error raised
+ #
+ # object = mock()
+ # object.expects(:method_1).with(has_entries('key_1' => 1, 'key_2' => 2))
+ # object.method_1('key_1' => 1, 'key_2' => 99)
+ # # error raised, because method_1 was not called with Hash containing entries: 'key_1' => 1, 'key_2' => 2
+ def has_entries(entries)
+ HasEntries.new(entries)
+ end
+
+ class HasEntries < Base # :nodoc:
+
+ def initialize(entries)
+ @entries = entries
+ end
+
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
+ @entries.all? { |key, value| parameter[key] == value }
+ end
+
+ def mocha_inspect
+ "has_entries(#{@entries.mocha_inspect})"
+ end
+
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/test/lib/mocha/parameter_matchers/has_entry.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_entry.rb
index 3d7cac4e6..b6459613d 100644
--- a/test/lib/mocha/parameter_matchers/has_entry.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_entry.rb
@@ -1,8 +1,11 @@
+require 'mocha/parameter_matchers/base'
+
module Mocha
module ParameterMatchers
# :call-seq: has_entry(key, value) -> parameter_matcher
+ # has_entry(key => value) -> parameter_matcher
#
# Matches +Hash+ containing entry with +key+ and +value+.
# object = mock()
@@ -11,20 +14,33 @@ module Mocha
# # no error raised
#
# object = mock()
+ # object.expects(:method_1).with(has_entry('key_1' => 1))
+ # object.method_1('key_1' => 1, 'key_2' => 2)
+ # # no error raised
+ #
+ # object = mock()
# object.expects(:method_1).with(has_entry('key_1', 1))
# object.method_1('key_1' => 2, 'key_2' => 1)
# # error raised, because method_1 was not called with Hash containing entry: 'key_1' => 1
- def has_entry(key, value)
+ #
+ # object = mock()
+ # object.expects(:method_1).with(has_entry('key_1' => 1))
+ # object.method_1('key_1' => 2, 'key_2' => 1)
+ # # error raised, because method_1 was not called with Hash containing entry: 'key_1' => 1
+ def has_entry(*options)
+ key, value = options.shift, options.shift
+ key, value = key.to_a[0][0..1] if key.is_a?(Hash)
HasEntry.new(key, value)
end
-
- class HasEntry # :nodoc:
+
+ class HasEntry < Base # :nodoc:
def initialize(key, value)
@key, @value = key, value
end
- def ==(parameter)
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
parameter[@key] == @value
end
diff --git a/test/lib/mocha/parameter_matchers/has_key.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_key.rb
index 5a1fcd2e8..247815219 100644
--- a/test/lib/mocha/parameter_matchers/has_key.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_key.rb
@@ -1,3 +1,5 @@
+require 'mocha/parameter_matchers/base'
+
module Mocha
module ParameterMatchers
@@ -18,13 +20,14 @@ module Mocha
HasKey.new(key)
end
- class HasKey # :nodoc:
+ class HasKey < Base # :nodoc:
def initialize(key)
@key = key
end
- def ==(parameter)
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
parameter.keys.include?(@key)
end
diff --git a/test/lib/mocha/parameter_matchers/has_value.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_value.rb
index 742f84268..2c6fe7c5e 100644
--- a/test/lib/mocha/parameter_matchers/has_value.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/has_value.rb
@@ -1,3 +1,5 @@
+require 'mocha/parameter_matchers/base'
+
module Mocha
module ParameterMatchers
@@ -18,13 +20,14 @@ module Mocha
HasValue.new(value)
end
- class HasValue # :nodoc:
+ class HasValue < Base # :nodoc:
def initialize(value)
@value = value
end
- def ==(parameter)
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
parameter.values.include?(@value)
end
diff --git a/test/lib/mocha/parameter_matchers/includes.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/includes.rb
index 0e4fbe960..4539a5c44 100644
--- a/test/lib/mocha/parameter_matchers/includes.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/includes.rb
@@ -1,3 +1,5 @@
+require 'mocha/parameter_matchers/base'
+
module Mocha
module ParameterMatchers
@@ -16,13 +18,14 @@ module Mocha
Includes.new(item)
end
- class Includes # :nodoc:
+ class Includes < Base # :nodoc:
def initialize(item)
@item = item
end
- def ==(parameter)
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
return parameter.include?(@item)
end
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/instance_of.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/instance_of.rb
new file mode 100644
index 000000000..49b4a478d
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/instance_of.rb
@@ -0,0 +1,42 @@
+require 'mocha/parameter_matchers/base'
+
+module Mocha
+
+ module ParameterMatchers
+
+ # :call-seq: instance_of(klass) -> parameter_matcher
+ #
+ # Matches any object that is an instance of +klass+
+ # object = mock()
+ # object.expects(:method_1).with(instance_of(String))
+ # object.method_1('string')
+ # # no error raised
+ #
+ # object = mock()
+ # object.expects(:method_1).with(instance_of(String))
+ # object.method_1(99)
+ # # error raised, because method_1 was not called with an instance of String
+ def instance_of(klass)
+ InstanceOf.new(klass)
+ end
+
+ class InstanceOf < Base # :nodoc:
+
+ def initialize(klass)
+ @klass = klass
+ end
+
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
+ parameter.instance_of?(@klass)
+ end
+
+ def mocha_inspect
+ "instance_of(#{@klass.mocha_inspect})"
+ end
+
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/is_a.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/is_a.rb
new file mode 100644
index 000000000..a721db523
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/is_a.rb
@@ -0,0 +1,42 @@
+require 'mocha/parameter_matchers/base'
+
+module Mocha
+
+ module ParameterMatchers
+
+ # :call-seq: is_a(klass) -> parameter_matcher
+ #
+ # Matches any object that is a +klass+
+ # object = mock()
+ # object.expects(:method_1).with(is_a(Integer))
+ # object.method_1(99)
+ # # no error raised
+ #
+ # object = mock()
+ # object.expects(:method_1).with(is_a(Integer))
+ # object.method_1('string')
+ # # error raised, because method_1 was not called with an Integer
+ def is_a(klass)
+ IsA.new(klass)
+ end
+
+ class IsA < Base # :nodoc:
+
+ def initialize(klass)
+ @klass = klass
+ end
+
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
+ parameter.is_a?(@klass)
+ end
+
+ def mocha_inspect
+ "is_a(#{@klass.mocha_inspect})"
+ end
+
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/kind_of.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/kind_of.rb
new file mode 100644
index 000000000..710d709d0
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/kind_of.rb
@@ -0,0 +1,42 @@
+require 'mocha/parameter_matchers/base'
+
+module Mocha
+
+ module ParameterMatchers
+
+ # :call-seq: kind_of(klass) -> parameter_matcher
+ #
+ # Matches any object that is a kind of +klass+
+ # object = mock()
+ # object.expects(:method_1).with(kind_of(Integer))
+ # object.method_1(99)
+ # # no error raised
+ #
+ # object = mock()
+ # object.expects(:method_1).with(kind_of(Integer))
+ # object.method_1('string')
+ # # error raised, because method_1 was not called with a kind of Integer
+ def kind_of(klass)
+ KindOf.new(klass)
+ end
+
+ class KindOf < Base # :nodoc:
+
+ def initialize(klass)
+ @klass = klass
+ end
+
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
+ parameter.kind_of?(@klass)
+ end
+
+ def mocha_inspect
+ "kind_of(#{@klass.mocha_inspect})"
+ end
+
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/not.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/not.rb
new file mode 100644
index 000000000..ec48ade3d
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/not.rb
@@ -0,0 +1,42 @@
+require 'mocha/parameter_matchers/base'
+
+module Mocha
+
+ module ParameterMatchers
+
+ # :call-seq: Not(matcher) -> parameter_matcher
+ #
+ # Matches if +matcher+ does not match.
+ # object = mock()
+ # object.expects(:method_1).with(Not(includes(1)))
+ # object.method_1([0, 2, 3])
+ # # no error raised
+ #
+ # object = mock()
+ # object.expects(:method_1).with(Not(includes(1)))
+ # object.method_1([0, 1, 2, 3])
+ # # error raised, because method_1 was not called with object not including 1
+ def Not(matcher)
+ Not.new(matcher)
+ end
+
+ class Not < Base # :nodoc:
+
+ def initialize(matcher)
+ @matcher = matcher
+ end
+
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
+ !@matcher.matches?([parameter])
+ end
+
+ def mocha_inspect
+ "Not(#{@matcher.mocha_inspect})"
+ end
+
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/object.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/object.rb
new file mode 100644
index 000000000..f3a639bfa
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/object.rb
@@ -0,0 +1,9 @@
+require 'mocha/parameter_matchers/equals'
+
+class Object
+
+ def to_matcher
+ Mocha::ParameterMatchers::Equals.new(self)
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/optionally.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/optionally.rb
new file mode 100644
index 000000000..bb9625187
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/optionally.rb
@@ -0,0 +1,33 @@
+module Mocha
+
+ module ParameterMatchers
+
+ def optionally(*matchers)
+ Optionally.new(*matchers)
+ end
+
+ class Optionally < Base # :nodoc:
+
+ def initialize(*parameters)
+ @matchers = parameters.map { |parameter| parameter.to_matcher }
+ end
+
+ def matches?(available_parameters)
+ index = 0
+ while (available_parameters.length > 0) && (index < @matchers.length) do
+ matcher = @matchers[index]
+ return false unless matcher.matches?(available_parameters)
+ index += 1
+ end
+ return true
+ end
+
+ def mocha_inspect
+ "optionally(#{@matchers.map { |matcher| matcher.mocha_inspect }.join(", ") })"
+ end
+
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/regexp_matches.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/regexp_matches.rb
new file mode 100644
index 000000000..cc46436eb
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameter_matchers/regexp_matches.rb
@@ -0,0 +1,43 @@
+require 'mocha/parameter_matchers/base'
+
+module Mocha
+
+ module ParameterMatchers
+
+ # :call-seq: regexp_matches(regexp) -> parameter_matcher
+ #
+ # Matches any object that matches the regular expression, +regexp+.
+ # object = mock()
+ # object.expects(:method_1).with(regexp_matches(/e/))
+ # object.method_1('hello')
+ # # no error raised
+ #
+ # object = mock()
+ # object.expects(:method_1).with(regexp_matches(/a/))
+ # object.method_1('hello')
+ # # error raised, because method_1 was not called with a parameter that matched the
+ # # regular expression
+ def regexp_matches(regexp)
+ RegexpMatches.new(regexp)
+ end
+
+ class RegexpMatches < Base # :nodoc:
+
+ def initialize(regexp)
+ @regexp = regexp
+ end
+
+ def matches?(available_parameters)
+ parameter = available_parameters.shift
+ parameter =~ @regexp
+ end
+
+ def mocha_inspect
+ "regexp_matches(#{@regexp.mocha_inspect})"
+ end
+
+ end
+
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/parameters_matcher.rb b/vendor/gems/mocha-0.5.6/lib/mocha/parameters_matcher.rb
new file mode 100644
index 000000000..d43ae4375
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/parameters_matcher.rb
@@ -0,0 +1,37 @@
+require 'mocha/inspect'
+require 'mocha/parameter_matchers'
+
+module Mocha
+
+ class ParametersMatcher
+
+ def initialize(expected_parameters = [ParameterMatchers::AnyParameters.new], &matching_block)
+ @expected_parameters, @matching_block = expected_parameters, matching_block
+ end
+
+ def match?(actual_parameters = [])
+ if @matching_block
+ return @matching_block.call(*actual_parameters)
+ else
+ return parameters_match?(actual_parameters)
+ end
+ end
+
+ def parameters_match?(actual_parameters)
+ matchers.all? { |matcher| matcher.matches?(actual_parameters) } && (actual_parameters.length == 0)
+ end
+
+ def mocha_inspect
+ signature = matchers.mocha_inspect
+ signature = signature.gsub(/^\[|\]$/, '')
+ signature = signature.gsub(/^\{|\}$/, '') if matchers.length == 1
+ "(#{signature})"
+ end
+
+ def matchers
+ @expected_parameters.map { |parameter| parameter.to_matcher }
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/test/lib/mocha/pretty_parameters.rb b/vendor/gems/mocha-0.5.6/lib/mocha/pretty_parameters.rb
index 6d3c165f8..59ed636f8 100644
--- a/test/lib/mocha/pretty_parameters.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/pretty_parameters.rb
@@ -20,7 +20,7 @@ module Mocha
end
def remove_outer_hash_braces!
- @params_string = @params_string.gsub(/^\{|\}$/, '') if @params.size == 1
+ @params_string = @params_string.gsub(/^\{|\}$/, '') if @params.length == 1
end
end
diff --git a/test/lib/mocha/return_values.rb b/vendor/gems/mocha-0.5.6/lib/mocha/return_values.rb
index ea0fbbd40..b4852c5f6 100644
--- a/test/lib/mocha/return_values.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/return_values.rb
@@ -15,10 +15,13 @@ module Mocha # :nodoc:
end
def next
- case @values.size
- when 0: nil
- when 1: @values.first.evaluate
- else @values.shift.evaluate
+ case @values.length
+ when 0
+ nil
+ when 1
+ @values.first.evaluate
+ else
+ @values.shift.evaluate
end
end
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha/sequence.rb b/vendor/gems/mocha-0.5.6/lib/mocha/sequence.rb
new file mode 100644
index 000000000..ed9852e0c
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/sequence.rb
@@ -0,0 +1,42 @@
+module Mocha # :nodoc:
+
+ class Sequence
+
+ class InSequenceOrderingConstraint
+
+ def initialize(sequence, index)
+ @sequence, @index = sequence, index
+ end
+
+ def allows_invocation_now?
+ @sequence.satisfied_to_index?(@index)
+ end
+
+ def mocha_inspect
+ "in sequence #{@sequence.mocha_inspect}"
+ end
+
+ end
+
+ def initialize(name)
+ @name = name
+ @expectations = []
+ end
+
+ def constrain_as_next_in_sequence(expectation)
+ index = @expectations.length
+ @expectations << expectation
+ expectation.add_ordering_constraint(InSequenceOrderingConstraint.new(self, index))
+ end
+
+ def satisfied_to_index?(index)
+ @expectations[0...index].all? { |expectation| expectation.satisfied? }
+ end
+
+ def mocha_inspect
+ "#{@name.mocha_inspect}"
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/test/lib/mocha/setup_and_teardown.rb b/vendor/gems/mocha-0.5.6/lib/mocha/setup_and_teardown.rb
index 034ce1d6b..034ce1d6b 100644
--- a/test/lib/mocha/setup_and_teardown.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/setup_and_teardown.rb
diff --git a/test/lib/mocha/single_return_value.rb b/vendor/gems/mocha-0.5.6/lib/mocha/single_return_value.rb
index f420b8b8c..f420b8b8c 100644
--- a/test/lib/mocha/single_return_value.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/single_return_value.rb
diff --git a/test/lib/mocha/single_yield.rb b/vendor/gems/mocha-0.5.6/lib/mocha/single_yield.rb
index 5af571621..5af571621 100644
--- a/test/lib/mocha/single_yield.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/single_yield.rb
diff --git a/test/lib/mocha/standalone.rb b/vendor/gems/mocha-0.5.6/lib/mocha/standalone.rb
index 8e3a7cefc..8e3a7cefc 100644
--- a/test/lib/mocha/standalone.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/standalone.rb
diff --git a/test/lib/mocha/stub.rb b/vendor/gems/mocha-0.5.6/lib/mocha/stub.rb
index 1b3cccb8a..1b3cccb8a 100644
--- a/test/lib/mocha/stub.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/stub.rb
diff --git a/test/lib/mocha/test_case_adapter.rb b/vendor/gems/mocha-0.5.6/lib/mocha/test_case_adapter.rb
index dc7e33b68..dc7e33b68 100644
--- a/test/lib/mocha/test_case_adapter.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/test_case_adapter.rb
diff --git a/test/lib/mocha/yield_parameters.rb b/vendor/gems/mocha-0.5.6/lib/mocha/yield_parameters.rb
index b1623bf71..cb5898508 100644
--- a/test/lib/mocha/yield_parameters.rb
+++ b/vendor/gems/mocha-0.5.6/lib/mocha/yield_parameters.rb
@@ -11,9 +11,9 @@ module Mocha # :nodoc:
end
def next_invocation
- case @parameter_groups.size
- when 0: NoYields.new
- when 1: @parameter_groups.first
+ case @parameter_groups.length
+ when 0; NoYields.new
+ when 1; @parameter_groups.first
else @parameter_groups.shift
end
end
diff --git a/vendor/gems/mocha-0.5.6/lib/mocha_standalone.rb b/vendor/gems/mocha-0.5.6/lib/mocha_standalone.rb
new file mode 100644
index 000000000..ce605811a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/mocha_standalone.rb
@@ -0,0 +1,2 @@
+require 'mocha/standalone'
+require 'mocha/object'
diff --git a/vendor/gems/mocha-0.5.6/lib/stubba.rb b/vendor/gems/mocha-0.5.6/lib/stubba.rb
new file mode 100644
index 000000000..eade747f6
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/lib/stubba.rb
@@ -0,0 +1,2 @@
+# for backwards compatibility
+require 'mocha' \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/._deprecation_disabler.rb b/vendor/gems/mocha-0.5.6/test/._deprecation_disabler.rb
new file mode 100644
index 000000000..64a1d063a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/._deprecation_disabler.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/._execution_point.rb b/vendor/gems/mocha-0.5.6/test/._execution_point.rb
new file mode 100644
index 000000000..dd624fd16
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/._execution_point.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/._method_definer.rb b/vendor/gems/mocha-0.5.6/test/._method_definer.rb
new file mode 100644
index 000000000..d51c1adf4
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/._method_definer.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/._test_helper.rb b/vendor/gems/mocha-0.5.6/test/._test_helper.rb
new file mode 100644
index 000000000..ef386d597
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/._test_helper.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/._test_runner.rb b/vendor/gems/mocha-0.5.6/test/._test_runner.rb
new file mode 100644
index 000000000..614cc3f52
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/._test_runner.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/._expected_invocation_count_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/._expected_invocation_count_acceptance_test.rb
new file mode 100644
index 000000000..86e37bdbb
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/._expected_invocation_count_acceptance_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/._mocha_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/._mocha_acceptance_test.rb
new file mode 100644
index 000000000..39f36f877
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/._mocha_acceptance_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/._mock_with_initializer_block_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/._mock_with_initializer_block_acceptance_test.rb
new file mode 100644
index 000000000..8e3a0e715
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/._mock_with_initializer_block_acceptance_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/._mocked_methods_dispatch_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/._mocked_methods_dispatch_acceptance_test.rb
new file mode 100644
index 000000000..de0671d7e
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/._mocked_methods_dispatch_acceptance_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/._optional_parameters_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/._optional_parameters_acceptance_test.rb
new file mode 100644
index 000000000..b21de1fbc
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/._optional_parameters_acceptance_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/._parameter_matcher_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/._parameter_matcher_acceptance_test.rb
new file mode 100644
index 000000000..421ef5a29
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/._parameter_matcher_acceptance_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/._partial_mocks_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/._partial_mocks_acceptance_test.rb
new file mode 100644
index 000000000..c5650224d
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/._partial_mocks_acceptance_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/._sequence_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/._sequence_acceptance_test.rb
new file mode 100644
index 000000000..8bb33ec9f
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/._sequence_acceptance_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/._standalone_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/._standalone_acceptance_test.rb
new file mode 100644
index 000000000..68a7236cd
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/._standalone_acceptance_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/._stubba_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/._stubba_acceptance_test.rb
new file mode 100644
index 000000000..5140f1228
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/._stubba_acceptance_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/expected_invocation_count_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/expected_invocation_count_acceptance_test.rb
new file mode 100644
index 000000000..c09168cb5
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/expected_invocation_count_acceptance_test.rb
@@ -0,0 +1,187 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha'
+require 'test_runner'
+
+class ExpectedInvocationCountAcceptanceTest < Test::Unit::TestCase
+
+ include TestRunner
+
+ def test_should_pass_if_method_is_never_expected_and_is_never_called
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).never
+ 0.times { mock.method }
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_fail_if_method_is_never_expected_but_is_called_once
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).never
+ 1.times { mock.method }
+ end
+ assert_failed(test_result)
+ failure_messages = test_result.failures.map { |failure| failure.message }
+ assert_equal ['#<Mock:mock>.method(any_parameters) - expected calls: 0, actual calls: 1'], failure_messages
+ end
+
+ def test_should_pass_if_method_is_expected_twice_and_is_called_twice
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).times(2)
+ 2.times { mock.method }
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_fail_if_method_is_expected_twice_but_is_called_once
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).times(2)
+ 1.times { mock.method }
+ end
+ assert_failed(test_result)
+ failure_messages = test_result.failures.map { |failure| failure.message }
+ assert_equal ['#<Mock:mock>.method(any_parameters) - expected calls: 2, actual calls: 1'], failure_messages
+ end
+
+ def test_should_fail_if_method_is_expected_twice_but_is_called_three_times
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).times(2)
+ 3.times { mock.method }
+ end
+ assert_failed(test_result)
+ failure_messages = test_result.failures.map { |failure| failure.message }
+ assert_equal ['#<Mock:mock>.method(any_parameters) - expected calls: 2, actual calls: 3'], failure_messages
+ end
+
+ def test_should_pass_if_method_is_expected_between_two_and_four_times_and_is_called_twice
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).times(2..4)
+ 2.times { mock.method }
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_pass_if_method_is_expected_between_two_and_four_times_and_is_called_three_times
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).times(2..4)
+ 3.times { mock.method }
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_pass_if_method_is_expected_between_two_and_four_times_and_is_called_four_times
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).times(2..4)
+ 4.times { mock.method }
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_fail_if_method_is_expected_between_two_and_four_times_and_is_called_once
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).times(2..4)
+ 1.times { mock.method }
+ end
+ assert_failed(test_result)
+ failure_messages = test_result.failures.map { |failure| failure.message }
+ assert_equal ['#<Mock:mock>.method(any_parameters) - expected calls: 2..4, actual calls: 1'], failure_messages
+ end
+
+ def test_should_fail_if_method_is_expected_between_two_and_four_times_and_is_called_five_times
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).times(2..4)
+ 5.times { mock.method }
+ end
+ assert_failed(test_result)
+ failure_messages = test_result.failures.map { |failure| failure.message }
+ assert_equal ['#<Mock:mock>.method(any_parameters) - expected calls: 2..4, actual calls: 5'], failure_messages
+ end
+
+ def test_should_pass_if_method_is_expected_at_least_once_and_is_called_once
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).at_least_once
+ 1.times { mock.method }
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_pass_if_method_is_expected_at_least_once_and_is_called_twice
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).at_least_once
+ 2.times { mock.method }
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_fail_if_method_is_expected_at_least_once_but_is_never_called
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).at_least_once
+ 0.times { mock.method }
+ end
+ assert_failed(test_result)
+ failure_messages = test_result.failures.map { |failure| failure.message }
+ assert_equal ['#<Mock:mock>.method(any_parameters) - expected calls: at least 1, actual calls: 0'], failure_messages
+ end
+
+ def test_should_pass_if_method_is_expected_at_most_once_and_is_never_called
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).at_most_once
+ 0.times { mock.method }
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_pass_if_method_is_expected_at_most_once_and_called_once
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).at_most_once
+ 1.times { mock.method }
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_fail_if_method_is_expected_at_most_once_but_is_called_twice
+ test_result = run_test do
+ mock = mock('mock')
+ mock.expects(:method).at_most_once
+ 2.times { mock.method }
+ end
+ assert_failed(test_result)
+ failure_messages = test_result.failures.map { |failure| failure.message }
+ assert_equal ['#<Mock:mock>.method(any_parameters) - expected calls: at most 1, actual calls: 2'], failure_messages
+ end
+
+ def test_should_pass_if_method_is_never_expected_and_is_never_called_even_if_everything_is_stubbed
+ test_result = run_test do
+ stub = stub_everything('stub')
+ stub.expects(:method).never
+ 0.times { stub.method }
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_fail_if_method_is_never_expected_but_is_called_once_even_if_everything_is_stubbed
+ test_result = run_test do
+ stub = stub_everything('stub')
+ stub.expects(:method).never
+ 1.times { stub.method }
+ end
+ assert_failed(test_result)
+ failure_messages = test_result.failures.map { |failure| failure.message }
+ assert_equal ['#<Mock:stub>.method(any_parameters) - expected calls: 0, actual calls: 1'], failure_messages
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/mocha_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/mocha_acceptance_test.rb
new file mode 100644
index 000000000..4e38b4e57
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/mocha_acceptance_test.rb
@@ -0,0 +1,98 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha'
+
+class MochaAcceptanceTest < Test::Unit::TestCase
+
+ class Rover
+
+ def initialize(left_track, right_track, steps_per_metre, steps_per_degree)
+ @left_track, @right_track, @steps_per_metre, @steps_per_degree = left_track, right_track, steps_per_metre, steps_per_degree
+ end
+
+ def forward(metres)
+ @left_track.step(metres * @steps_per_metre)
+ @right_track.step(metres * @steps_per_metre)
+ wait
+ end
+
+ def backward(metres)
+ forward(-metres)
+ end
+
+ def left(degrees)
+ @left_track.step(-degrees * @steps_per_degree)
+ @right_track.step(+degrees * @steps_per_degree)
+ wait
+ end
+
+ def right(degrees)
+ left(-degrees)
+ end
+
+ def wait
+ while (@left_track.moving? or @right_track.moving?); end
+ end
+
+ end
+
+ def test_should_step_both_tracks_forward_ten_steps
+ left_track = mock('left_track')
+ right_track = mock('right_track')
+ steps_per_metre = 5
+ rover = Rover.new(left_track, right_track, steps_per_metre, nil)
+
+ left_track.expects(:step).with(10)
+ right_track.expects(:step).with(10)
+
+ left_track.stubs(:moving?).returns(false)
+ right_track.stubs(:moving?).returns(false)
+
+ rover.forward(2)
+ end
+
+ def test_should_step_both_tracks_backward_ten_steps
+ left_track = mock('left_track')
+ right_track = mock('right_track')
+ steps_per_metre = 5
+ rover = Rover.new(left_track, right_track, steps_per_metre, nil)
+
+ left_track.expects(:step).with(-10)
+ right_track.expects(:step).with(-10)
+
+ left_track.stubs(:moving?).returns(false)
+ right_track.stubs(:moving?).returns(false)
+
+ rover.backward(2)
+ end
+
+ def test_should_step_left_track_forwards_five_steps_and_right_track_backwards_five_steps
+ left_track = mock('left_track')
+ right_track = mock('right_track')
+ steps_per_degree = 5.0 / 90.0
+ rover = Rover.new(left_track, right_track, nil, steps_per_degree)
+
+ left_track.expects(:step).with(+5)
+ right_track.expects(:step).with(-5)
+
+ left_track.stubs(:moving?).returns(false)
+ right_track.stubs(:moving?).returns(false)
+
+ rover.right(90)
+ end
+
+ def test_should_step_left_track_backwards_five_steps_and_right_track_forwards_five_steps
+ left_track = mock('left_track')
+ right_track = mock('right_track')
+ steps_per_degree = 5.0 / 90.0
+ rover = Rover.new(left_track, right_track, nil, steps_per_degree)
+
+ left_track.expects(:step).with(-5)
+ right_track.expects(:step).with(+5)
+
+ left_track.stubs(:moving?).returns(false)
+ right_track.stubs(:moving?).returns(false)
+
+ rover.left(90)
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/mock_with_initializer_block_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/mock_with_initializer_block_acceptance_test.rb
new file mode 100644
index 000000000..51488e61f
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/mock_with_initializer_block_acceptance_test.rb
@@ -0,0 +1,44 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha'
+require 'test_runner'
+
+class MockWithInitializerBlockAcceptanceTest < Test::Unit::TestCase
+
+ include TestRunner
+
+ def test_should_expect_two_method_invocations_and_receive_both_of_them
+ test_result = run_test do
+ mock = mock() do
+ expects(:method_1)
+ expects(:method_2)
+ end
+ mock.method_1
+ mock.method_2
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_expect_two_method_invocations_but_receive_only_one_of_them
+ test_result = run_test do
+ mock = mock() do
+ expects(:method_1)
+ expects(:method_2)
+ end
+ mock.method_1
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_stub_methods
+ test_result = run_test do
+ mock = mock() do
+ stubs(:method_1).returns(1)
+ stubs(:method_2).returns(2)
+ end
+ assert_equal 1, mock.method_1
+ assert_equal 2, mock.method_2
+ end
+ assert_passed(test_result)
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/mocked_methods_dispatch_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/mocked_methods_dispatch_acceptance_test.rb
new file mode 100644
index 000000000..d77021553
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/mocked_methods_dispatch_acceptance_test.rb
@@ -0,0 +1,71 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha'
+require 'test_runner'
+
+class MockedMethodDispatchAcceptanceTest < Test::Unit::TestCase
+
+ include TestRunner
+
+ def test_should_find_latest_matching_expectation
+ test_result = run_test do
+ mock = mock()
+ mock.stubs(:method).returns(1)
+ mock.stubs(:method).returns(2)
+ assert_equal 2, mock.method
+ assert_equal 2, mock.method
+ assert_equal 2, mock.method
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_find_latest_expectation_which_has_not_stopped_matching
+ test_result = run_test do
+ mock = mock()
+ mock.stubs(:method).returns(1)
+ mock.stubs(:method).once.returns(2)
+ assert_equal 2, mock.method
+ assert_equal 1, mock.method
+ assert_equal 1, mock.method
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_keep_finding_later_stub_and_so_never_satisfy_earlier_expectation
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).returns(1)
+ mock.stubs(:method).returns(2)
+ assert_equal 2, mock.method
+ assert_equal 2, mock.method
+ assert_equal 2, mock.method
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_find_later_expectation_until_it_stops_matching_then_find_earlier_stub
+ test_result = run_test do
+ mock = mock()
+ mock.stubs(:method).returns(1)
+ mock.expects(:method).returns(2)
+ assert_equal 2, mock.method
+ assert_equal 1, mock.method
+ assert_equal 1, mock.method
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_find_latest_expectation_with_range_of_expected_invocation_count_which_has_not_stopped_matching
+ test_result = run_test do
+ mock = mock()
+ mock.stubs(:method).returns(1)
+ mock.stubs(:method).times(2..3).returns(2)
+ assert_equal 2, mock.method
+ assert_equal 2, mock.method
+ assert_equal 2, mock.method
+ assert_equal 1, mock.method
+ assert_equal 1, mock.method
+ end
+ assert_passed(test_result)
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/optional_parameters_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/optional_parameters_acceptance_test.rb
new file mode 100644
index 000000000..3a6f8322e
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/optional_parameters_acceptance_test.rb
@@ -0,0 +1,63 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha'
+require 'test_runner'
+
+class OptionalParameterMatcherAcceptanceTest < Test::Unit::TestCase
+
+ include TestRunner
+
+ def test_should_pass_if_all_required_parameters_match_and_no_optional_parameters_are_supplied
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(1, 2, optionally(3, 4))
+ mock.method(1, 2)
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_pass_if_all_required_and_optional_parameters_match_and_some_optional_parameters_are_supplied
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(1, 2, optionally(3, 4))
+ mock.method(1, 2, 3)
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_pass_if_all_required_and_optional_parameters_match_and_all_optional_parameters_are_supplied
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(1, 2, optionally(3, 4))
+ mock.method(1, 2, 3, 4)
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_fail_if_all_required_and_optional_parameters_match_but_too_many_optional_parameters_are_supplied
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(1, 2, optionally(3, 4))
+ mock.method(1, 2, 3, 4, 5)
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_fail_if_all_required_parameters_match_but_some_optional_parameters_do_not_match
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(1, 2, optionally(3, 4))
+ mock.method(1, 2, 4)
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_fail_if_all_required_parameters_match_but_no_optional_parameters_match
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(1, 2, optionally(3, 4))
+ mock.method(1, 2, 4, 5)
+ end
+ assert_failed(test_result)
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/parameter_matcher_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/parameter_matcher_acceptance_test.rb
new file mode 100644
index 000000000..c23880d16
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/parameter_matcher_acceptance_test.rb
@@ -0,0 +1,117 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha'
+require 'test_runner'
+
+class ParameterMatcherAcceptanceTest < Test::Unit::TestCase
+
+ include TestRunner
+
+ def test_should_match_hash_parameter_with_specified_key
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(has_key(:key_1))
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_not_match_hash_parameter_with_specified_key
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(has_key(:key_1))
+ mock.method(:key_2 => 'value_2')
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_match_hash_parameter_with_specified_value
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(has_value('value_1'))
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_not_match_hash_parameter_with_specified_value
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(has_value('value_1'))
+ mock.method(:key_2 => 'value_2')
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_match_hash_parameter_with_specified_key_value_pair
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(has_entry(:key_1, 'value_1'))
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_not_match_hash_parameter_with_specified_key_value_pair
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(has_entry(:key_1, 'value_2'))
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_match_hash_parameter_with_specified_hash_entry
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(has_entry(:key_1 => 'value_1'))
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_not_match_hash_parameter_with_specified_hash_entry
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(has_entry(:key_1 => 'value_2'))
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_match_hash_parameter_with_specified_entries
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(has_entries(:key_1 => 'value_1', :key_2 => 'value_2'))
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2', :key_3 => 'value_3')
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_not_match_hash_parameter_with_specified_entries
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(has_entries(:key_1 => 'value_1', :key_2 => 'value_2'))
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_3')
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_match_parameter_that_matches_regular_expression
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(regexp_matches(/meter/))
+ mock.method('this parameter should match')
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_not_match_parameter_that_does_not_match_regular_expression
+ test_result = run_test do
+ mock = mock()
+ mock.expects(:method).with(regexp_matches(/something different/))
+ mock.method('this parameter should not match')
+ end
+ assert_failed(test_result)
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/partial_mocks_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/partial_mocks_acceptance_test.rb
new file mode 100644
index 000000000..20fc7b84e
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/partial_mocks_acceptance_test.rb
@@ -0,0 +1,40 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha'
+require 'test_runner'
+
+class PartialMockAcceptanceTest < Test::Unit::TestCase
+
+ include TestRunner
+
+ def test_should_pass_if_all_expectations_are_satisfied
+ test_result = run_test do
+ partial_mock_one = "partial_mock_one"
+ partial_mock_two = "partial_mock_two"
+
+ partial_mock_one.expects(:first)
+ partial_mock_one.expects(:second)
+ partial_mock_two.expects(:third)
+
+ partial_mock_one.first
+ partial_mock_one.second
+ partial_mock_two.third
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_fail_if_all_expectations_are_not_satisfied
+ test_result = run_test do
+ partial_mock_one = "partial_mock_one"
+ partial_mock_two = "partial_mock_two"
+
+ partial_mock_one.expects(:first)
+ partial_mock_one.expects(:second)
+ partial_mock_two.expects(:third)
+
+ partial_mock_one.first
+ partial_mock_two.third
+ end
+ assert_failed(test_result)
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/sequence_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/sequence_acceptance_test.rb
new file mode 100644
index 000000000..3be6e7d75
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/sequence_acceptance_test.rb
@@ -0,0 +1,179 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha'
+require 'test_runner'
+
+class SequenceAcceptanceTest < Test::Unit::TestCase
+
+ include TestRunner
+
+ def test_should_constrain_invocations_to_occur_in_expected_order
+ test_result = run_test do
+ mock = mock()
+ sequence = sequence('one')
+
+ mock.expects(:first).in_sequence(sequence)
+ mock.expects(:second).in_sequence(sequence)
+
+ mock.second
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_allow_invocations_in_sequence
+ test_result = run_test do
+ mock = mock()
+ sequence = sequence('one')
+
+ mock.expects(:first).in_sequence(sequence)
+ mock.expects(:second).in_sequence(sequence)
+
+ mock.first
+ mock.second
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_constrain_invocations_to_occur_in_expected_order_even_if_expected_on_different_mocks
+ test_result = run_test do
+ mock_one = mock('1')
+ mock_two = mock('2')
+ sequence = sequence('one')
+
+ mock_one.expects(:first).in_sequence(sequence)
+ mock_two.expects(:second).in_sequence(sequence)
+
+ mock_two.second
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_allow_invocations_in_sequence_even_if_expected_on_different_mocks
+ test_result = run_test do
+ mock_one = mock('1')
+ mock_two = mock('2')
+ sequence = sequence('one')
+
+ mock_one.expects(:first).in_sequence(sequence)
+ mock_two.expects(:second).in_sequence(sequence)
+
+ mock_one.first
+ mock_two.second
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_constrain_invocations_to_occur_in_expected_order_even_if_expected_on_partial_mocks
+ test_result = run_test do
+ partial_mock_one = "1"
+ partial_mock_two = "2"
+ sequence = sequence('one')
+
+ partial_mock_one.expects(:first).in_sequence(sequence)
+ partial_mock_two.expects(:second).in_sequence(sequence)
+
+ partial_mock_two.second
+ end
+ assert_failed(test_result)
+ end
+
+ def test_should_allow_invocations_in_sequence_even_if_expected_on_partial_mocks
+ test_result = run_test do
+ partial_mock_one = "1"
+ partial_mock_two = "2"
+ sequence = sequence('one')
+
+ partial_mock_one.expects(:first).in_sequence(sequence)
+ partial_mock_two.expects(:second).in_sequence(sequence)
+
+ partial_mock_one.first
+ partial_mock_two.second
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_allow_stub_expectations_to_be_skipped_in_sequence
+ test_result = run_test do
+ mock = mock()
+ sequence = sequence('one')
+
+ mock.expects(:first).in_sequence(sequence)
+ s = mock.stubs(:second).in_sequence(sequence)
+ mock.expects(:third).in_sequence(sequence)
+
+ mock.first
+ mock.third
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_regard_sequences_as_independent_of_each_other
+ test_result = run_test do
+ mock = mock()
+ sequence_one = sequence('one')
+ sequence_two = sequence('two')
+
+ mock.expects(:first).in_sequence(sequence_one)
+ mock.expects(:second).in_sequence(sequence_one)
+
+ mock.expects(:third).in_sequence(sequence_two)
+ mock.expects(:fourth).in_sequence(sequence_two)
+
+ mock.first
+ mock.third
+ mock.second
+ mock.fourth
+ end
+ assert_passed(test_result)
+ end
+
+ def test_should_include_sequence_in_failure_message
+ test_result = run_test do
+ mock = mock()
+ sequence = sequence('one')
+
+ mock.expects(:first).in_sequence(sequence)
+ mock.expects(:second).in_sequence(sequence)
+
+ mock.second
+ end
+ assert_failed(test_result)
+ assert_match Regexp.new("in sequence 'one'"), test_result.failures.first.message
+ end
+
+ def test_should_allow_expectations_to_be_in_more_than_one_sequence
+ test_result = run_test do
+ mock = mock()
+ sequence_one = sequence('one')
+ sequence_two = sequence('two')
+
+ mock.expects(:first).in_sequence(sequence_one)
+ mock.expects(:second).in_sequence(sequence_two)
+ mock.expects(:three).in_sequence(sequence_one).in_sequence(sequence_two)
+
+ mock.first
+ mock.three
+ end
+ assert_failed(test_result)
+ assert_match Regexp.new("in sequence 'one'"), test_result.failures.first.message
+ assert_match Regexp.new("in sequence 'two'"), test_result.failures.first.message
+ end
+
+ def test_should_have_shortcut_for_expectations_to_be_in_more_than_one_sequence
+ test_result = run_test do
+ mock = mock()
+ sequence_one = sequence('one')
+ sequence_two = sequence('two')
+
+ mock.expects(:first).in_sequence(sequence_one)
+ mock.expects(:second).in_sequence(sequence_two)
+ mock.expects(:three).in_sequence(sequence_one, sequence_two)
+
+ mock.first
+ mock.three
+ end
+ assert_failed(test_result)
+ assert_match Regexp.new("in sequence 'one'"), test_result.failures.first.message
+ assert_match Regexp.new("in sequence 'two'"), test_result.failures.first.message
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/standalone_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/standalone_acceptance_test.rb
new file mode 100644
index 000000000..1e101d7ca
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/standalone_acceptance_test.rb
@@ -0,0 +1,131 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha_standalone'
+
+class NotATestUnitAssertionFailedError < StandardError
+end
+
+class NotATestUnitTestCase
+
+ include Mocha::Standalone
+
+ attr_reader :assertion_count
+
+ def initialize
+ @assertion_count = 0
+ end
+
+ def run(test_method)
+ mocha_setup
+ begin
+ prepare
+ begin
+ send(test_method)
+ mocha_verify { @assertion_count += 1 }
+ rescue Mocha::ExpectationError => e
+ new_error = NotATestUnitAssertionFailedError.new(e.message)
+ new_error.set_backtrace(e.backtrace)
+ raise new_error
+ ensure
+ cleanup
+ end
+ ensure
+ mocha_teardown
+ end
+ end
+
+ def prepare
+ end
+
+ def cleanup
+ end
+
+end
+
+class SampleTest < NotATestUnitTestCase
+
+ def mocha_with_fulfilled_expectation
+ mockee = mock()
+ mockee.expects(:blah)
+ mockee.blah
+ end
+
+ def mocha_with_unfulfilled_expectation
+ mockee = mock()
+ mockee.expects(:blah)
+ end
+
+ def mocha_with_unexpected_invocation
+ mockee = mock()
+ mockee.blah
+ end
+
+ def stubba_with_fulfilled_expectation
+ stubbee = Class.new { define_method(:blah) {} }.new
+ stubbee.expects(:blah)
+ stubbee.blah
+ end
+
+ def stubba_with_unfulfilled_expectation
+ stubbee = Class.new { define_method(:blah) {} }.new
+ stubbee.expects(:blah)
+ end
+
+ def mocha_with_matching_parameter
+ mockee = mock()
+ mockee.expects(:blah).with(has_key(:wibble))
+ mockee.blah(:wibble => 1)
+ end
+
+ def mocha_with_non_matching_parameter
+ mockee = mock()
+ mockee.expects(:blah).with(has_key(:wibble))
+ mockee.blah(:wobble => 2)
+ end
+
+end
+
+require 'test/unit'
+
+class StandaloneAcceptanceTest < Test::Unit::TestCase
+
+ attr_reader :sample_test
+
+ def setup
+ @sample_test = SampleTest.new
+ end
+
+ def test_should_pass_mocha_test
+ assert_nothing_raised { sample_test.run(:mocha_with_fulfilled_expectation) }
+ assert_equal 1, sample_test.assertion_count
+ end
+
+ def test_should_fail_mocha_test_due_to_unfulfilled_exception
+ assert_raises(NotATestUnitAssertionFailedError) { sample_test.run(:mocha_with_unfulfilled_expectation) }
+ assert_equal 1, sample_test.assertion_count
+ end
+
+ def test_should_fail_mocha_test_due_to_unexpected_invocation
+ assert_raises(NotATestUnitAssertionFailedError) { sample_test.run(:mocha_with_unexpected_invocation) }
+ assert_equal 0, sample_test.assertion_count
+ end
+
+ def test_should_pass_stubba_test
+ assert_nothing_raised { sample_test.run(:stubba_with_fulfilled_expectation) }
+ assert_equal 1, sample_test.assertion_count
+ end
+
+ def test_should_fail_stubba_test
+ assert_raises(NotATestUnitAssertionFailedError) { sample_test.run(:stubba_with_unfulfilled_expectation) }
+ assert_equal 1, sample_test.assertion_count
+ end
+
+ def test_should_pass_mocha_test_with_matching_parameter
+ assert_nothing_raised { sample_test.run(:mocha_with_matching_parameter) }
+ assert_equal 1, sample_test.assertion_count
+ end
+
+ def test_should_fail_mocha_test_with_non_matching_parameter
+ assert_raises(NotATestUnitAssertionFailedError) { sample_test.run(:mocha_with_non_matching_parameter) }
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/acceptance/stubba_acceptance_test.rb b/vendor/gems/mocha-0.5.6/test/acceptance/stubba_acceptance_test.rb
new file mode 100644
index 000000000..93d8d1259
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/acceptance/stubba_acceptance_test.rb
@@ -0,0 +1,102 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha'
+
+class Widget
+
+ def model
+ 'original_model'
+ end
+
+ class << self
+
+ def find(options)
+ []
+ end
+
+ def create(attributes)
+ Widget.new
+ end
+
+ end
+
+end
+
+module Thingy
+
+ def self.wotsit
+ :hoojamaflip
+ end
+
+end
+
+class StubbaAcceptanceTest < Test::Unit::TestCase
+
+ def test_should_stub_instance_method
+ widget = Widget.new
+ widget.expects(:model).returns('different_model')
+ assert_equal 'different_model', widget.model
+ end
+
+ def test_should_stub_module_method
+ should_stub_module_method
+ end
+
+ def test_should_stub_module_method_again
+ should_stub_module_method
+ end
+
+ def test_should_stub_class_method
+ should_stub_class_method
+ end
+
+ def test_should_stub_class_method_again
+ should_stub_class_method
+ end
+
+ def test_should_stub_instance_method_on_any_instance_of_a_class
+ should_stub_instance_method_on_any_instance_of_a_class
+ end
+
+ def test_should_stub_instance_method_on_any_instance_of_a_class_again
+ should_stub_instance_method_on_any_instance_of_a_class
+ end
+
+ def test_should_stub_two_different_class_methods
+ should_stub_two_different_class_methods
+ end
+
+ def test_should_stub_two_different_class_methods_again
+ should_stub_two_different_class_methods
+ end
+
+ private
+
+ def should_stub_module_method
+ Thingy.expects(:wotsit).returns(:dooda)
+ assert_equal :dooda, Thingy.wotsit
+ end
+
+ def should_stub_class_method
+ widgets = [Widget.new]
+ Widget.expects(:find).with(:all).returns(widgets)
+ assert_equal widgets, Widget.find(:all)
+ end
+
+ def should_stub_two_different_class_methods
+ found_widgets = [Widget.new]
+ created_widget = Widget.new
+ Widget.expects(:find).with(:all).returns(found_widgets)
+ Widget.expects(:create).with(:model => 'wombat').returns(created_widget)
+ assert_equal found_widgets, Widget.find(:all)
+ assert_equal created_widget, Widget.create(:model => 'wombat')
+ end
+
+ def should_stub_instance_method_on_any_instance_of_a_class
+ Widget.any_instance.expects(:model).at_least_once.returns('another_model')
+ widget_1 = Widget.new
+ widget_2 = Widget.new
+ assert_equal 'another_model', widget_1.model
+ assert_equal 'another_model', widget_2.model
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/active_record_test_case.rb b/vendor/gems/mocha-0.5.6/test/active_record_test_case.rb
new file mode 100644
index 000000000..ae6507380
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/active_record_test_case.rb
@@ -0,0 +1,36 @@
+module ActiveRecordTestCase
+
+ def setup_with_fixtures
+ methods_called << :setup_with_fixtures
+ end
+
+ alias_method :setup, :setup_with_fixtures
+
+ def teardown_with_fixtures
+ methods_called << :teardown_with_fixtures
+ end
+
+ alias_method :teardown, :teardown_with_fixtures
+
+ def self.method_added(method)
+ case method.to_s
+ when 'setup'
+ unless method_defined?(:setup_without_fixtures)
+ alias_method :setup_without_fixtures, :setup
+ define_method(:setup) do
+ setup_with_fixtures
+ setup_without_fixtures
+ end
+ end
+ when 'teardown'
+ unless method_defined?(:teardown_without_fixtures)
+ alias_method :teardown_without_fixtures, :teardown
+ define_method(:teardown) do
+ teardown_without_fixtures
+ teardown_with_fixtures
+ end
+ end
+ end
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/deprecation_disabler.rb b/vendor/gems/mocha-0.5.6/test/deprecation_disabler.rb
new file mode 100644
index 000000000..c57fb3c9a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/deprecation_disabler.rb
@@ -0,0 +1,15 @@
+require 'mocha/deprecation'
+
+module DeprecationDisabler
+
+ def disable_deprecations
+ original_mode = Mocha::Deprecation.mode
+ Mocha::Deprecation.mode = :disabled
+ begin
+ yield
+ ensure
+ Mocha::Deprecation.mode = original_mode
+ end
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/execution_point.rb b/vendor/gems/mocha-0.5.6/test/execution_point.rb
new file mode 100644
index 000000000..33c85699e
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/execution_point.rb
@@ -0,0 +1,34 @@
+class ExecutionPoint
+
+ attr_reader :backtrace
+
+ def self.current
+ new(caller)
+ end
+
+ def initialize(backtrace)
+ @backtrace = backtrace
+ end
+
+ def file_name
+ /\A(.*?):\d+/.match(@backtrace.first)[1]
+ end
+
+ def line_number
+ Integer(/\A.*?:(\d+)/.match(@backtrace.first)[1])
+ end
+
+ def ==(other)
+ return false unless other.is_a?(ExecutionPoint)
+ (file_name == other.file_name) and (line_number == other.line_number)
+ end
+
+ def to_s
+ "file: #{file_name} line: #{line_number}"
+ end
+
+ def inspect
+ to_s
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/integration/._mocha_test_result_integration_test.rb b/vendor/gems/mocha-0.5.6/test/integration/._mocha_test_result_integration_test.rb
new file mode 100644
index 000000000..78cbfbe92
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/integration/._mocha_test_result_integration_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/integration/._stubba_integration_test.rb b/vendor/gems/mocha-0.5.6/test/integration/._stubba_integration_test.rb
new file mode 100644
index 000000000..c88497c45
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/integration/._stubba_integration_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/integration/._stubba_test_result_integration_test.rb b/vendor/gems/mocha-0.5.6/test/integration/._stubba_test_result_integration_test.rb
new file mode 100644
index 000000000..931f6315d
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/integration/._stubba_test_result_integration_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/integration/mocha_test_result_integration_test.rb b/vendor/gems/mocha-0.5.6/test/integration/mocha_test_result_integration_test.rb
new file mode 100644
index 000000000..d5f29e845
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/integration/mocha_test_result_integration_test.rb
@@ -0,0 +1,105 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/standalone'
+require 'mocha/test_case_adapter'
+require 'execution_point'
+
+class MochaTestResultIntegrationTest < Test::Unit::TestCase
+
+ def test_should_include_expectation_verification_in_assertion_count
+ test_result = run_test do
+ object = mock()
+ object.expects(:message)
+ object.message
+ end
+ assert_equal 1, test_result.assertion_count
+ end
+
+ def test_should_include_assertions_in_assertion_count
+ test_result = run_test do
+ assert true
+ end
+ assert_equal 1, test_result.assertion_count
+ end
+
+ def test_should_not_include_stubbing_expectation_verification_in_assertion_count
+ test_result = run_test do
+ object = mock()
+ object.stubs(:message)
+ object.message
+ end
+ assert_equal 0, test_result.assertion_count
+ end
+
+ def test_should_include_expectation_verification_failure_in_failure_count
+ test_result = run_test do
+ object = mock()
+ object.expects(:message)
+ end
+ assert_equal 1, test_result.failure_count
+ end
+
+ def test_should_include_unexpected_verification_failure_in_failure_count
+ test_result = run_test do
+ object = mock()
+ object.message
+ end
+ assert_equal 1, test_result.failure_count
+ end
+
+ def test_should_include_assertion_failure_in_failure_count
+ test_result = run_test do
+ flunk
+ end
+ assert_equal 1, test_result.failure_count
+ end
+
+ def test_should_display_backtrace_indicating_line_number_where_expects_was_called
+ test_result = Test::Unit::TestResult.new
+ faults = []
+ test_result.add_listener(Test::Unit::TestResult::FAULT, &lambda { |fault| faults << fault })
+ execution_point = nil
+ run_test(test_result) do
+ object = mock()
+ execution_point = ExecutionPoint.current; object.expects(:message)
+ end
+ assert_equal 1, faults.length
+ assert_equal execution_point, ExecutionPoint.new(faults.first.location)
+ end
+
+ def test_should_display_backtrace_indicating_line_number_where_unexpected_method_was_called
+ test_result = Test::Unit::TestResult.new
+ faults = []
+ test_result.add_listener(Test::Unit::TestResult::FAULT, &lambda { |fault| faults << fault })
+ execution_point = nil
+ run_test(test_result) do
+ object = mock()
+ execution_point = ExecutionPoint.current; object.message
+ end
+ assert_equal 1, faults.length
+ assert_equal execution_point, ExecutionPoint.new(faults.first.location)
+ end
+
+ def test_should_display_backtrace_indicating_line_number_where_failing_assertion_was_called
+ test_result = Test::Unit::TestResult.new
+ faults = []
+ test_result.add_listener(Test::Unit::TestResult::FAULT, &lambda { |fault| faults << fault })
+ execution_point = nil
+ run_test(test_result) do
+ execution_point = ExecutionPoint.current; flunk
+ end
+ assert_equal 1, faults.length
+ assert_equal execution_point, ExecutionPoint.new(faults.first.location)
+ end
+
+ def run_test(test_result = Test::Unit::TestResult.new, &block)
+ test_class = Class.new(Test::Unit::TestCase) do
+ include Mocha::Standalone
+ include Mocha::TestCaseAdapter
+ define_method(:test_me, &block)
+ end
+ test = test_class.new(:test_me)
+ test.run(test_result) {}
+ test_result
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/integration/stubba_integration_test.rb b/vendor/gems/mocha-0.5.6/test/integration/stubba_integration_test.rb
new file mode 100644
index 000000000..4285c179a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/integration/stubba_integration_test.rb
@@ -0,0 +1,89 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+
+require 'mocha/object'
+require 'mocha/test_case_adapter'
+require 'mocha/standalone'
+
+class StubbaIntegrationTest < Test::Unit::TestCase
+
+ class DontMessWithMe
+ def self.my_class_method
+ :original_return_value
+ end
+ def my_instance_method
+ :original_return_value
+ end
+ end
+
+ def test_should_stub_class_method_within_test
+ test = build_test do
+ DontMessWithMe.expects(:my_class_method).returns(:new_return_value)
+ assert_equal :new_return_value, DontMessWithMe.my_class_method
+ end
+
+ test_result = Test::Unit::TestResult.new
+ test.run(test_result) {}
+ assert test_result.passed?
+ end
+
+ def test_should_leave_stubbed_class_method_unchanged_after_test
+ test = build_test do
+ DontMessWithMe.expects(:my_class_method).returns(:new_return_value)
+ end
+
+ test.run(Test::Unit::TestResult.new) {}
+ assert_equal :original_return_value, DontMessWithMe.my_class_method
+ end
+
+ def test_should_reset_class_expectations_after_test
+ test = build_test do
+ DontMessWithMe.expects(:my_class_method)
+ end
+
+ test.run(Test::Unit::TestResult.new) {}
+ assert_equal 0, DontMessWithMe.mocha.expectations.length
+ end
+
+ def test_should_stub_instance_method_within_test
+ instance = DontMessWithMe.new
+ test = build_test do
+ instance.expects(:my_instance_method).returns(:new_return_value)
+ assert_equal :new_return_value, instance.my_instance_method
+ end
+ test_result = Test::Unit::TestResult.new
+ test.run(test_result) {}
+ assert test_result.passed?
+ end
+
+ def test_should_leave_stubbed_instance_method_unchanged_after_test
+ instance = DontMessWithMe.new
+ test = build_test do
+ instance.expects(:my_instance_method).returns(:new_return_value)
+ end
+
+ test.run(Test::Unit::TestResult.new) {}
+ assert_equal :original_return_value, instance.my_instance_method
+ end
+
+ def test_should_reset_instance_expectations_after_test
+ instance = DontMessWithMe.new
+ test = build_test do
+ instance.expects(:my_instance_method).returns(:new_return_value)
+ end
+
+ test.run(Test::Unit::TestResult.new) {}
+ assert_equal 0, instance.mocha.expectations.length
+ end
+
+ private
+
+ def build_test(&block)
+ test_class = Class.new(Test::Unit::TestCase) do
+ include Mocha::Standalone
+ include Mocha::TestCaseAdapter
+ define_method(:test_me, &block)
+ end
+ test_class.new(:test_me)
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/integration/stubba_test_result_integration_test.rb b/vendor/gems/mocha-0.5.6/test/integration/stubba_test_result_integration_test.rb
new file mode 100644
index 000000000..34264e7c6
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/integration/stubba_test_result_integration_test.rb
@@ -0,0 +1,85 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/object'
+require 'mocha/standalone'
+require 'mocha/test_case_adapter'
+require 'execution_point'
+
+class StubbaTestResultIntegrationTest < Test::Unit::TestCase
+
+ def test_should_include_expectation_verification_in_assertion_count
+ test_result = run_test do
+ object = Class.new { def message; end }.new
+ object.expects(:message)
+ object.message
+ end
+ assert_equal 1, test_result.assertion_count
+ end
+
+ def test_should_include_assertions_in_assertion_count
+ test_result = run_test do
+ assert true
+ end
+ assert_equal 1, test_result.assertion_count
+ end
+
+ def test_should_not_include_stubbing_expectation_verification_in_assertion_count
+ test_result = run_test do
+ object = Class.new { def message; end }.new
+ object.stubs(:message)
+ object.message
+ end
+ assert_equal 0, test_result.assertion_count
+ end
+
+ def test_should_include_expectation_verification_failure_in_failure_count
+ test_result = run_test do
+ object = Class.new { def message; end }.new
+ object.expects(:message)
+ end
+ assert_equal 1, test_result.failure_count
+ end
+
+ def test_should_include_assertion_failure_in_failure_count
+ test_result = run_test do
+ flunk
+ end
+ assert_equal 1, test_result.failure_count
+ end
+
+ def test_should_display_backtrace_indicating_line_number_where_expects_was_called
+ test_result = Test::Unit::TestResult.new
+ faults = []
+ test_result.add_listener(Test::Unit::TestResult::FAULT, &lambda { |fault| faults << fault })
+ execution_point = nil
+ run_test(test_result) do
+ object = Class.new { def message; end }.new
+ execution_point = ExecutionPoint.current; object.expects(:message)
+ end
+ assert_equal 1, faults.length
+ assert_equal execution_point, ExecutionPoint.new(faults.first.location)
+ end
+
+ def test_should_display_backtrace_indicating_line_number_where_failing_assertion_was_called
+ test_result = Test::Unit::TestResult.new
+ faults = []
+ test_result.add_listener(Test::Unit::TestResult::FAULT, &lambda { |fault| faults << fault })
+ execution_point = nil
+ run_test(test_result) do
+ execution_point = ExecutionPoint.current; flunk
+ end
+ assert_equal 1, faults.length
+ assert_equal execution_point, ExecutionPoint.new(faults.first.location)
+ end
+
+ def run_test(test_result = Test::Unit::TestResult.new, &block)
+ test_class = Class.new(Test::Unit::TestCase) do
+ include Mocha::Standalone
+ include Mocha::TestCaseAdapter
+ define_method(:test_me, &block)
+ end
+ test = test_class.new(:test_me)
+ test.run(test_result) {}
+ test_result
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/method_definer.rb b/vendor/gems/mocha-0.5.6/test/method_definer.rb
new file mode 100644
index 000000000..1aef8868b
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/method_definer.rb
@@ -0,0 +1,18 @@
+require 'mocha/metaclass'
+
+class Object
+
+ def define_instance_method(method_symbol, &block)
+ __metaclass__.send(:define_method, method_symbol, block)
+ end
+
+ def replace_instance_method(method_symbol, &block)
+ raise "Cannot replace #{method_symbol} as #{self} does not respond to it." unless self.respond_to?(method_symbol)
+ define_instance_method(method_symbol, &block)
+ end
+
+ def define_instance_accessor(*symbols)
+ symbols.each { |symbol| __metaclass__.send(:attr_accessor, symbol) }
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/test_helper.rb b/vendor/gems/mocha-0.5.6/test/test_helper.rb
new file mode 100644
index 000000000..dc0494273
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/test_helper.rb
@@ -0,0 +1,12 @@
+unless defined?(STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS)
+ STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS = Object.public_instance_methods
+end
+
+$:.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
+$:.unshift File.expand_path(File.join(File.dirname(__FILE__)))
+$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'unit'))
+$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'unit', 'parameter_matchers'))
+$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'integration'))
+$:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'acceptance'))
+
+require 'test/unit' \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/test_runner.rb b/vendor/gems/mocha-0.5.6/test/test_runner.rb
new file mode 100644
index 000000000..fbadd9297
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/test_runner.rb
@@ -0,0 +1,31 @@
+require 'test/unit/testresult'
+require 'test/unit/testcase'
+require 'mocha/standalone'
+require 'mocha/test_case_adapter'
+
+module TestRunner
+
+ def run_test(test_result = Test::Unit::TestResult.new, &block)
+ test_class = Class.new(Test::Unit::TestCase) do
+ include Mocha::Standalone
+ include Mocha::TestCaseAdapter
+ define_method(:test_me, &block)
+ end
+ test = test_class.new(:test_me)
+ test.run(test_result) {}
+ class << test_result
+ attr_reader :failures, :errors
+ end
+ test_result
+ end
+
+ def assert_passed(test_result)
+ flunk "Test failed unexpectedly with message: #{test_result.failures}" if test_result.failure_count > 0
+ flunk "Test failed unexpectedly with message: #{test_result.errors}" if test_result.error_count > 0
+ end
+
+ def assert_failed(test_result)
+ flunk "Test passed unexpectedly" if test_result.passed?
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._any_instance_method_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._any_instance_method_test.rb
new file mode 100644
index 000000000..83d91fdf2
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._any_instance_method_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._auto_verify_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._auto_verify_test.rb
new file mode 100644
index 000000000..9052afc95
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._auto_verify_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._central_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._central_test.rb
new file mode 100644
index 000000000..a8cc77d1a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._central_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._class_method_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._class_method_test.rb
new file mode 100644
index 000000000..30c6ce8de
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._class_method_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._expectation_error_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._expectation_error_test.rb
new file mode 100644
index 000000000..6bd7f7152
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._expectation_error_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._expectation_list_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._expectation_list_test.rb
new file mode 100644
index 000000000..753636a0f
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._expectation_list_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._expectation_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._expectation_test.rb
new file mode 100644
index 000000000..b92a766c0
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._expectation_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._hash_inspect_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._hash_inspect_test.rb
new file mode 100644
index 000000000..2d092d906
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._hash_inspect_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._method_matcher_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._method_matcher_test.rb
new file mode 100644
index 000000000..5de837673
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._method_matcher_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._missing_expectation_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._missing_expectation_test.rb
new file mode 100644
index 000000000..166d7827f
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._missing_expectation_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._mock_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._mock_test.rb
new file mode 100644
index 000000000..e9005d167
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._mock_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._object_inspect_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._object_inspect_test.rb
new file mode 100644
index 000000000..e39ba3134
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._object_inspect_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._parameters_matcher_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._parameters_matcher_test.rb
new file mode 100644
index 000000000..ca04d98e7
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._parameters_matcher_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/._sequence_test.rb b/vendor/gems/mocha-0.5.6/test/unit/._sequence_test.rb
new file mode 100644
index 000000000..ec9e9d76e
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/._sequence_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/any_instance_method_test.rb b/vendor/gems/mocha-0.5.6/test/unit/any_instance_method_test.rb
new file mode 100644
index 000000000..804fcde2b
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/any_instance_method_test.rb
@@ -0,0 +1,126 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'method_definer'
+require 'mocha/mock'
+require 'mocha/any_instance_method'
+
+class AnyInstanceMethodTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_hide_original_method
+ klass = Class.new { def method_x; end }
+ method = AnyInstanceMethod.new(klass, :method_x)
+ hidden_method_x = method.hidden_method.to_sym
+
+ method.hide_original_method
+
+ assert klass.method_defined?(hidden_method_x)
+ end
+
+ def test_should_not_hide_original_method_if_it_is_not_defined
+ klass = Class.new
+ method = AnyInstanceMethod.new(klass, :method_x)
+ hidden_method_x = method.hidden_method.to_sym
+
+ method.hide_original_method
+
+ assert_equal false, klass.method_defined?(hidden_method_x)
+ end
+
+ def test_should_define_a_new_method
+ klass = Class.new { def method_x; end }
+ method = AnyInstanceMethod.new(klass, :method_x)
+ mocha = Mock.new
+ mocha.expects(:method_x).with(:param1, :param2).returns(:result)
+ any_instance = Object.new
+ any_instance.define_instance_method(:mocha) { mocha }
+ klass.define_instance_method(:any_instance) { any_instance }
+
+ method.hide_original_method
+ method.define_new_method
+
+ instance = klass.new
+ result = instance.method_x(:param1, :param2)
+
+ assert_equal :result, result
+ mocha.verify
+ end
+
+ def test_should_restore_original_method
+ klass = Class.new { def method_x; end }
+ method = AnyInstanceMethod.new(klass, :method_x)
+ hidden_method_x = method.hidden_method.to_sym
+ klass.send(:define_method, hidden_method_x, Proc.new { :original_result })
+
+ method.remove_new_method
+ method.restore_original_method
+
+ instance = klass.new
+ assert_equal :original_result, instance.method_x
+ assert !klass.method_defined?(hidden_method_x)
+ end
+
+ def test_should_not_restore_original_method_if_hidden_method_not_defined
+ klass = Class.new { def method_x; :new_result; end }
+ method = AnyInstanceMethod.new(klass, :method_x)
+
+ method.restore_original_method
+
+ instance = klass.new
+ assert_equal :new_result, instance.method_x
+ end
+
+ def test_should_call_remove_new_method
+ klass = Class.new { def method_x; end }
+ any_instance = Mock.new
+ any_instance.stubs(:reset_mocha)
+ klass.define_instance_method(:any_instance) { any_instance }
+ method = AnyInstanceMethod.new(klass, :method_x)
+ method.replace_instance_method(:restore_original_method) { }
+ method.define_instance_accessor(:remove_called)
+ method.replace_instance_method(:remove_new_method) { self.remove_called = true }
+
+ method.unstub
+
+ assert method.remove_called
+ end
+
+ def test_should_call_restore_original_method
+ klass = Class.new { def method_x; end }
+ any_instance = Mock.new
+ any_instance.stubs(:reset_mocha)
+ klass.define_instance_method(:any_instance) { any_instance }
+ method = AnyInstanceMethod.new(klass, :method_x)
+ method.replace_instance_method(:remove_new_method) { }
+ method.define_instance_accessor(:restore_called)
+ method.replace_instance_method(:restore_original_method) { self.restore_called = true }
+
+ method.unstub
+
+ assert method.restore_called
+ end
+
+ def test_should_call_reset_mocha
+ klass = Class.new { def method_x; end }
+ any_instance = Class.new { attr_accessor :mocha_was_reset; def reset_mocha; self.mocha_was_reset = true; end }.new
+ klass.define_instance_method(:any_instance) { any_instance }
+ method = AnyInstanceMethod.new(klass, :method_x)
+ method.replace_instance_method(:remove_new_method) { }
+ method.replace_instance_method(:restore_original_method) { }
+
+ method.unstub
+
+ assert any_instance.mocha_was_reset
+ end
+
+ def test_should_return_any_instance_mocha_for_stubbee
+ mocha = Object.new
+ any_instance = Object.new
+ any_instance.define_instance_method(:mocha) { mocha }
+ stubbee = Class.new
+ stubbee.define_instance_method(:any_instance) { any_instance }
+ method = AnyInstanceMethod.new(stubbee, :method_name)
+ assert_equal stubbee.any_instance.mocha, method.mock
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/array_inspect_test.rb b/vendor/gems/mocha-0.5.6/test/unit/array_inspect_test.rb
new file mode 100644
index 000000000..9cc06a456
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/array_inspect_test.rb
@@ -0,0 +1,16 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/inspect'
+
+class ArrayInstanceTest < Test::Unit::TestCase
+
+ def test_should_use_inspect
+ array = [1, 2]
+ assert_equal array.inspect, array.mocha_inspect
+ end
+
+ def test_should_use_mocha_inspect_on_each_item
+ array = [1, 2, "chris"]
+ assert_equal "[1, 2, 'chris']", array.mocha_inspect
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/auto_verify_test.rb b/vendor/gems/mocha-0.5.6/test/unit/auto_verify_test.rb
new file mode 100644
index 000000000..10a612457
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/auto_verify_test.rb
@@ -0,0 +1,129 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/auto_verify'
+require 'method_definer'
+
+class AutoVerifyTest < Test::Unit::TestCase
+
+ attr_reader :test_case
+
+ def setup
+ @test_case = Object.new
+ class << test_case
+ include Mocha::AutoVerify
+ end
+ end
+
+ def test_should_build_mock
+ mock = test_case.mock
+ assert mock.is_a?(Mocha::Mock)
+ end
+
+ def test_should_add_expectations_to_mock
+ mock = test_case.mock(:method_1 => 'result_1', :method_2 => 'result_2')
+ assert_equal 'result_1', mock.method_1
+ assert_equal 'result_2', mock.method_2
+ end
+
+ def test_should_build_stub
+ stub = test_case.stub
+ assert stub.is_a?(Mocha::Mock)
+ end
+
+ def test_should_add_expectation_to_stub
+ stub = test_case.stub(:method_1 => 'result_1', :method_2 => 'result_2')
+ assert_equal 'result_1', stub.method_1
+ assert_equal 'result_2', stub.method_2
+ end
+
+ def test_should_build_stub_that_stubs_all_methods
+ stub = test_case.stub_everything
+ assert stub.everything_stubbed
+ end
+
+ def test_should_add_expectations_to_stub_that_stubs_all_methods
+ stub = test_case.stub_everything(:method_1 => 'result_1', :method_2 => 'result_2')
+ assert_equal 'result_1', stub.method_1
+ assert_equal 'result_2', stub.method_2
+ end
+
+ def test_should_always_new_mock
+ assert_not_equal test_case.mock, test_case.mock
+ end
+
+ def test_should_always_build_new_stub
+ assert_not_equal test_case.stub, test_case.stub
+ end
+
+ def test_should_always_build_new_stub_that_stubs_all_methods
+ assert_not_equal test_case.stub, test_case.stub
+ end
+
+ def test_should_store_each_new_mock
+ expected = Array.new(3) { test_case.mock }
+ assert_equal expected, test_case.mocks
+ end
+
+ def test_should_store_each_new_stub
+ expected = Array.new(3) { test_case.stub }
+ assert_equal expected, test_case.mocks
+ end
+
+ def test_should_store_each_new_stub_that_stubs_all_methods
+ expected = Array.new(3) { test_case.stub_everything }
+ assert_equal expected, test_case.mocks
+ end
+
+ def test_should_verify_each_mock
+ mocks = Array.new(3) do
+ mock = Object.new
+ mock.define_instance_accessor(:verify_called)
+ class << mock
+ def verify(&block)
+ self.verify_called = true
+ end
+ end
+ mock
+ end
+ test_case.replace_instance_method(:mocks) { mocks }
+ test_case.verify_mocks
+ assert mocks.all? { |mock| mock.verify_called }
+ end
+
+ def test_should_yield_to_block_for_each_assertion
+ mock_class = Class.new do
+ def verify(&block); yield; end
+ end
+ mock = mock_class.new
+ test_case.replace_instance_method(:mocks) { [mock] }
+ yielded = false
+ test_case.verify_mocks { yielded = true }
+ assert yielded
+ end
+
+ def test_should_reset_mocks_on_teardown
+ mock = Class.new { define_method(:verify) {} }.new
+ test_case.mocks << mock
+ test_case.teardown_mocks
+ assert test_case.mocks.empty?
+ end
+
+ def test_should_create_named_mock
+ mock = test_case.mock('named_mock')
+ assert_equal '#<Mock:named_mock>', mock.mocha_inspect
+ end
+
+ def test_should_create_named_stub
+ stub = test_case.stub('named_stub')
+ assert_equal '#<Mock:named_stub>', stub.mocha_inspect
+ end
+
+ def test_should_create_named_stub_that_stubs_all_methods
+ stub = test_case.stub_everything('named_stub')
+ assert_equal '#<Mock:named_stub>', stub.mocha_inspect
+ end
+
+ def test_should_build_sequence
+ assert_not_nil test_case.sequence('name')
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/central_test.rb b/vendor/gems/mocha-0.5.6/test/unit/central_test.rb
new file mode 100644
index 000000000..2cc834591
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/central_test.rb
@@ -0,0 +1,124 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+
+require 'mocha/central'
+require 'mocha/mock'
+require 'method_definer'
+
+class CentralTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_start_with_empty_stubba_methods
+ stubba = Central.new
+
+ assert_equal [], stubba.stubba_methods
+ end
+
+ def test_should_stub_method_if_not_already_stubbed
+ method = Mock.new
+ method.expects(:stub)
+ stubba = Central.new
+
+ stubba.stub(method)
+
+ method.verify
+ end
+
+ def test_should_not_stub_method_if_already_stubbed
+ method = Mock.new
+ method.expects(:stub).times(0)
+ stubba = Central.new
+ stubba_methods = Mock.new
+ stubba_methods.stubs(:include?).with(method).returns(true)
+ stubba.stubba_methods = stubba_methods
+
+ stubba.stub(method)
+
+ method.verify
+ end
+
+ def test_should_record_method
+ method = Mock.new
+ method.expects(:stub)
+ stubba = Central.new
+
+ stubba.stub(method)
+
+ assert_equal [method], stubba.stubba_methods
+ end
+
+ def test_should_unstub_all_methods
+ stubba = Central.new
+ method_1 = Mock.new
+ method_1.expects(:unstub)
+ method_2 = Mock.new
+ method_2.expects(:unstub)
+ stubba.stubba_methods = [method_1, method_2]
+
+ stubba.unstub_all
+
+ assert_equal [], stubba.stubba_methods
+ method_1.verify
+ method_2.verify
+ end
+
+ def test_should_collect_mocks_from_all_methods
+ method_1 = Mock.new
+ method_1.stubs(:mock).returns(:mock_1)
+
+ method_2 = Mock.new
+ method_2.stubs(:mock).returns(:mock_2)
+
+ stubba = Central.new
+ stubba.stubba_methods = [method_1, method_2]
+
+ assert_equal 2, stubba.unique_mocks.length
+ assert stubba.unique_mocks.include?(:mock_1)
+ assert stubba.unique_mocks.include?(:mock_2)
+ end
+
+ def test_should_return_unique_mochas
+ method_1 = Mock.new
+ method_1.stubs(:mock).returns(:mock_1)
+
+ method_2 = Mock.new
+ method_2.stubs(:mock).returns(:mock_1)
+
+ stubba = Central.new
+ stubba.stubba_methods = [method_1, method_2]
+
+ assert_equal [:mock_1], stubba.unique_mocks
+ end
+
+ def test_should_call_verify_on_all_unique_mocks
+ mock_class = Class.new do
+ attr_accessor :verify_called
+ def verify
+ self.verify_called = true
+ end
+ end
+ mocks = [mock_class.new, mock_class.new]
+ stubba = Central.new
+ stubba.replace_instance_method(:unique_mocks) { mocks }
+
+ stubba.verify_all
+
+ assert mocks.all? { |mock| mock.verify_called }
+ end
+
+ def test_should_call_verify_on_all_unique_mochas
+ mock_class = Class.new do
+ def verify(&block)
+ yield if block_given?
+ end
+ end
+ stubba = Central.new
+ stubba.replace_instance_method(:unique_mocks) { [mock_class.new] }
+ yielded = false
+
+ stubba.verify_all { yielded = true }
+
+ assert yielded
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/class_method_test.rb b/vendor/gems/mocha-0.5.6/test/unit/class_method_test.rb
new file mode 100644
index 000000000..95d059908
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/class_method_test.rb
@@ -0,0 +1,200 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'method_definer'
+require 'mocha/mock'
+
+require 'mocha/class_method'
+
+class ClassMethodTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_provide_hidden_version_of_method_name_starting_with_prefix
+ method = ClassMethod.new(nil, :original_method_name)
+ assert_match(/^__stubba__/, method.hidden_method)
+ end
+
+ def test_should_provide_hidden_version_of_method_name_ending_with_suffix
+ method = ClassMethod.new(nil, :original_method_name)
+ assert_match(/__stubba__$/, method.hidden_method)
+ end
+
+ def test_should_provide_hidden_version_of_method_name_including_original_method_name
+ method = ClassMethod.new(nil, :original_method_name)
+ assert_match(/original_method_name/, method.hidden_method)
+ end
+
+ def test_should_provide_hidden_version_of_method_name_substituting_question_mark
+ method = ClassMethod.new(nil, :question_mark?)
+ assert_no_match(/\?/, method.hidden_method)
+ assert_match(/question_mark_substituted_character_63/, method.hidden_method)
+ end
+
+ def test_should_provide_hidden_version_of_method_name_substituting_exclamation_mark
+ method = ClassMethod.new(nil, :exclamation_mark!)
+ assert_no_match(/!/, method.hidden_method)
+ assert_match(/exclamation_mark_substituted_character_33/, method.hidden_method)
+ end
+
+ def test_should_provide_hidden_version_of_method_name_substituting_equals_sign
+ method = ClassMethod.new(nil, :equals_sign=)
+ assert_no_match(/\=/, method.hidden_method)
+ assert_match(/equals_sign_substituted_character_61/, method.hidden_method)
+ end
+
+ def test_should_provide_hidden_version_of_method_name_substituting_brackets
+ method = ClassMethod.new(nil, :[])
+ assert_no_match(/\[\]/, method.hidden_method)
+ assert_match(/substituted_character_91__substituted_character_93/, method.hidden_method)
+ end
+
+ def test_should_provide_hidden_version_of_method_name_substituting_plus_sign
+ method = ClassMethod.new(nil, :+)
+ assert_no_match(/\+/, method.hidden_method)
+ assert_match(/substituted_character_43/, method.hidden_method)
+ end
+
+ def test_should_hide_original_method
+ klass = Class.new { def self.method_x; end }
+ method = ClassMethod.new(klass, :method_x)
+ hidden_method_x = method.hidden_method
+
+ method.hide_original_method
+
+ assert klass.respond_to?(hidden_method_x)
+ end
+
+ def test_should_respond_to_original_method_name_after_original_method_has_been_hidden
+ klass = Class.new { def self.original_method_name; end }
+ method = ClassMethod.new(klass, :original_method_name)
+ hidden_method_x = method.hidden_method
+
+ method.hide_original_method
+
+ assert klass.respond_to?(:original_method_name)
+ end
+
+ def test_should_not_hide_original_method_if_method_not_defined
+ klass = Class.new
+ method = ClassMethod.new(klass, :method_x)
+ hidden_method_x = method.hidden_method
+
+ method.hide_original_method
+
+ assert_equal false, klass.respond_to?(hidden_method_x)
+ end
+
+ def test_should_define_a_new_method_which_should_call_mocha_method_missing
+ klass = Class.new { def self.method_x; end }
+ mocha = Mocha::Mock.new
+ klass.define_instance_method(:mocha) { mocha }
+ mocha.expects(:method_x).with(:param1, :param2).returns(:result)
+ method = ClassMethod.new(klass, :method_x)
+
+ method.hide_original_method
+ method.define_new_method
+ result = klass.method_x(:param1, :param2)
+
+ assert_equal :result, result
+ mocha.verify
+ end
+
+ def test_should_remove_new_method
+ klass = Class.new { def self.method_x; end }
+ method = ClassMethod.new(klass, :method_x)
+
+ method.remove_new_method
+
+ assert_equal false, klass.respond_to?(:method_x)
+ end
+
+ def test_should_restore_original_method
+ klass = Class.new { def self.method_x; end }
+ method = ClassMethod.new(klass, :method_x)
+ hidden_method_x = method.hidden_method.to_sym
+ klass.define_instance_method(hidden_method_x) { :original_result }
+
+ method.remove_new_method
+ method.restore_original_method
+
+ assert_equal :original_result, klass.method_x
+ assert_equal false, klass.respond_to?(hidden_method_x)
+ end
+
+ def test_should_not_restore_original_method_if_hidden_method_is_not_defined
+ klass = Class.new { def self.method_x; :new_result; end }
+ method = ClassMethod.new(klass, :method_x)
+
+ method.restore_original_method
+
+ assert_equal :new_result, klass.method_x
+ end
+
+ def test_should_call_hide_original_method
+ klass = Class.new { def self.method_x; end }
+ method = ClassMethod.new(klass, :method_x)
+ method.hide_original_method
+ method.define_instance_accessor(:hide_called)
+ method.replace_instance_method(:hide_original_method) { self.hide_called = true }
+
+ method.stub
+
+ assert method.hide_called
+ end
+
+ def test_should_call_define_new_method
+ klass = Class.new { def self.method_x; end }
+ method = ClassMethod.new(klass, :method_x)
+ method.define_instance_accessor(:define_called)
+ method.replace_instance_method(:define_new_method) { self.define_called = true }
+
+ method.stub
+
+ assert method.define_called
+ end
+
+ def test_should_call_remove_new_method
+ klass = Class.new { def self.method_x; end }
+ klass.define_instance_method(:reset_mocha) { }
+ method = ClassMethod.new(klass, :method_x)
+ method.define_instance_accessor(:remove_called)
+ method.replace_instance_method(:remove_new_method) { self.remove_called = true }
+
+ method.unstub
+
+ assert method.remove_called
+ end
+
+ def test_should_call_restore_original_method
+ klass = Class.new { def self.method_x; end }
+ klass.define_instance_method(:reset_mocha) { }
+ method = ClassMethod.new(klass, :method_x)
+ method.define_instance_accessor(:restore_called)
+ method.replace_instance_method(:restore_original_method) { self.restore_called = true }
+
+ method.unstub
+
+ assert method.restore_called
+ end
+
+ def test_should_call_reset_mocha
+ klass = Class.new { def self.method_x; end }
+ klass.define_instance_accessor(:reset_called)
+ klass.define_instance_method(:reset_mocha) { self.reset_called = true }
+ method = ClassMethod.new(klass, :method_x)
+ method.replace_instance_method(:restore_original_method) { }
+
+ method.unstub
+
+ assert klass.reset_called
+ end
+
+ def test_should_return_mock_for_stubbee
+ mocha = Object.new
+ stubbee = Object.new
+ stubbee.define_instance_accessor(:mocha) { mocha }
+ stubbee.mocha = nil
+ method = ClassMethod.new(stubbee, :method_name)
+ assert_equal stubbee.mocha, method.mock
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/date_time_inspect_test.rb b/vendor/gems/mocha-0.5.6/test/unit/date_time_inspect_test.rb
new file mode 100644
index 000000000..8a9b2ee02
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/date_time_inspect_test.rb
@@ -0,0 +1,21 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/inspect'
+
+class TimeDateInspectTest < Test::Unit::TestCase
+
+ def test_should_use_include_date_in_seconds
+ time = Time.now
+ assert_equal "#{time.inspect} (#{time.to_f} secs)", time.mocha_inspect
+ end
+
+ def test_should_use_to_s_for_date
+ date = Date.new(2006, 1, 1)
+ assert_equal date.to_s, date.mocha_inspect
+ end
+
+ def test_should_use_to_s_for_datetime
+ datetime = DateTime.new(2006, 1, 1)
+ assert_equal datetime.to_s, datetime.mocha_inspect
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/expectation_error_test.rb b/vendor/gems/mocha-0.5.6/test/unit/expectation_error_test.rb
new file mode 100644
index 000000000..6206acf64
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/expectation_error_test.rb
@@ -0,0 +1,24 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/expectation_error'
+
+class ExpectationErrorTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_exclude_mocha_locations_from_backtrace
+ mocha_lib = "/username/workspace/mocha_wibble/lib/"
+ backtrace = [ mocha_lib + 'exclude/me/1', mocha_lib + 'exclude/me/2', '/keep/me', mocha_lib + 'exclude/me/3']
+ expectation_error = ExpectationError.new(nil, backtrace, mocha_lib)
+ assert_equal ['/keep/me'], expectation_error.backtrace
+ end
+
+ def test_should_determine_path_for_mocha_lib_directory
+ assert_match Regexp.new("/lib/$"), ExpectationError::LIB_DIRECTORY
+ end
+
+ def test_should_set_error_message
+ expectation_error = ExpectationError.new('message')
+ assert_equal 'message', expectation_error.message
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/expectation_list_test.rb b/vendor/gems/mocha-0.5.6/test/unit/expectation_list_test.rb
new file mode 100644
index 000000000..59dd410a1
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/expectation_list_test.rb
@@ -0,0 +1,75 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/expectation_list'
+require 'mocha/expectation'
+require 'set'
+require 'method_definer'
+
+class ExpectationListTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_return_added_expectation
+ expectation_list = ExpectationList.new
+ expectation = Expectation.new(nil, :my_method)
+ assert_same expectation, expectation_list.add(expectation)
+ end
+
+ def test_should_find_matching_expectation
+ expectation_list = ExpectationList.new
+ expectation1 = Expectation.new(nil, :my_method).with(:argument1, :argument2)
+ expectation2 = Expectation.new(nil, :my_method).with(:argument3, :argument4)
+ expectation_list.add(expectation1)
+ expectation_list.add(expectation2)
+ assert_same expectation2, expectation_list.detect(:my_method, :argument3, :argument4)
+ end
+
+ def test_should_find_most_recent_matching_expectation
+ expectation_list = ExpectationList.new
+ expectation1 = Expectation.new(nil, :my_method).with(:argument1, :argument2)
+ expectation2 = Expectation.new(nil, :my_method).with(:argument1, :argument2)
+ expectation_list.add(expectation1)
+ expectation_list.add(expectation2)
+ assert_same expectation2, expectation_list.detect(:my_method, :argument1, :argument2)
+ end
+
+ def test_should_find_most_recent_matching_expectation_but_give_preference_to_those_allowing_invocations
+ expectation_list = ExpectationList.new
+ expectation1 = Expectation.new(nil, :my_method)
+ expectation2 = Expectation.new(nil, :my_method)
+ expectation1.define_instance_method(:invocations_allowed?) { true }
+ expectation2.define_instance_method(:invocations_allowed?) { false }
+ expectation_list.add(expectation1)
+ expectation_list.add(expectation2)
+ assert_same expectation1, expectation_list.detect(:my_method)
+ end
+
+ def test_should_find_most_recent_matching_expectation_if_no_matching_expectations_allow_invocations
+ expectation_list = ExpectationList.new
+ expectation1 = Expectation.new(nil, :my_method)
+ expectation2 = Expectation.new(nil, :my_method)
+ expectation1.define_instance_method(:invocations_allowed?) { false }
+ expectation2.define_instance_method(:invocations_allowed?) { false }
+ expectation_list.add(expectation1)
+ expectation_list.add(expectation2)
+ assert_same expectation2, expectation_list.detect(:my_method)
+ end
+
+ def test_should_find_expectations_for_the_same_method_no_matter_what_the_arguments
+ expectation_list = ExpectationList.new
+ expectation1 = Expectation.new(nil, :my_method).with(:argument1, :argument2)
+ expectation_list.add(expectation1)
+ expectation2 = Expectation.new(nil, :my_method).with(:argument3, :argument4)
+ expectation_list.add(expectation2)
+ assert_equal [expectation1, expectation2].to_set, expectation_list.similar(:my_method).to_set
+ end
+
+ def test_should_ignore_expectations_for_different_methods
+ expectation_list = ExpectationList.new
+ expectation1 = Expectation.new(nil, :method1).with(:argument1, :argument2)
+ expectation_list.add(expectation1)
+ expectation2 = Expectation.new(nil, :method2).with(:argument1, :argument2)
+ expectation_list.add(expectation2)
+ assert_equal [expectation2], expectation_list.similar(:method2)
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/expectation_raiser_test.rb b/vendor/gems/mocha-0.5.6/test/unit/expectation_raiser_test.rb
new file mode 100644
index 000000000..3b46d8fd8
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/expectation_raiser_test.rb
@@ -0,0 +1,28 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+
+require 'mocha/exception_raiser'
+
+class ExceptionRaiserTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_raise_exception_with_specified_class_and_default_message
+ exception_class = Class.new(StandardError)
+ raiser = ExceptionRaiser.new(exception_class, nil)
+ exception = assert_raises(exception_class) { raiser.evaluate }
+ assert_equal exception_class.to_s, exception.message
+ end
+
+ def test_should_raise_exception_with_specified_class_and_message
+ exception_class = Class.new(StandardError)
+ raiser = ExceptionRaiser.new(exception_class, 'message')
+ exception = assert_raises(exception_class) { raiser.evaluate }
+ assert_equal 'message', exception.message
+ end
+
+ def test_should_raise_interrupt_exception_with_default_message_so_it_works_in_ruby_1_8_6
+ raiser = ExceptionRaiser.new(Interrupt, nil)
+ assert_raises(Interrupt) { raiser.evaluate }
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/expectation_test.rb b/vendor/gems/mocha-0.5.6/test/unit/expectation_test.rb
new file mode 100644
index 000000000..cdb38eb9b
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/expectation_test.rb
@@ -0,0 +1,483 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'method_definer'
+require 'mocha/expectation'
+require 'mocha/sequence'
+require 'execution_point'
+require 'deprecation_disabler'
+
+class ExpectationTest < Test::Unit::TestCase
+
+ include Mocha
+ include DeprecationDisabler
+
+ def new_expectation
+ Expectation.new(nil, :expected_method)
+ end
+
+ def test_should_match_calls_to_same_method_with_any_parameters
+ assert new_expectation.match?(:expected_method, 1, 2, 3)
+ end
+
+ def test_should_match_calls_to_same_method_with_exactly_zero_parameters
+ expectation = new_expectation.with()
+ assert expectation.match?(:expected_method)
+ end
+
+ def test_should_not_match_calls_to_same_method_with_more_than_zero_parameters
+ expectation = new_expectation.with()
+ assert !expectation.match?(:expected_method, 1, 2, 3)
+ end
+
+ def test_should_match_calls_to_same_method_with_expected_parameter_values
+ expectation = new_expectation.with(1, 2, 3)
+ assert expectation.match?(:expected_method, 1, 2, 3)
+ end
+
+ def test_should_match_calls_to_same_method_with_parameters_constrained_as_expected
+ expectation = new_expectation.with() {|x, y, z| x + y == z}
+ assert expectation.match?(:expected_method, 1, 2, 3)
+ end
+
+ def test_should_not_match_calls_to_different_method_with_parameters_constrained_as_expected
+ expectation = new_expectation.with() {|x, y, z| x + y == z}
+ assert !expectation.match?(:different_method, 1, 2, 3)
+ end
+
+ def test_should_not_match_calls_to_different_methods_with_no_parameters
+ assert !new_expectation.match?(:unexpected_method)
+ end
+
+ def test_should_not_match_calls_to_same_method_with_too_few_parameters
+ expectation = new_expectation.with(1, 2, 3)
+ assert !expectation.match?(:unexpected_method, 1, 2)
+ end
+
+ def test_should_not_match_calls_to_same_method_with_too_many_parameters
+ expectation = new_expectation.with(1, 2)
+ assert !expectation.match?(:unexpected_method, 1, 2, 3)
+ end
+
+ def test_should_not_match_calls_to_same_method_with_unexpected_parameter_values
+ expectation = new_expectation.with(1, 2, 3)
+ assert !expectation.match?(:unexpected_method, 1, 0, 3)
+ end
+
+ def test_should_not_match_calls_to_same_method_with_parameters_not_constrained_as_expected
+ expectation = new_expectation.with() {|x, y, z| x + y == z}
+ assert !expectation.match?(:expected_method, 1, 0, 3)
+ end
+
+ def test_should_allow_invocations_until_expected_invocation_count_is_one_and_actual_invocation_count_would_be_two
+ expectation = new_expectation.times(1)
+ assert expectation.invocations_allowed?
+ expectation.invoke
+ assert !expectation.invocations_allowed?
+ end
+
+ def test_should_allow_invocations_until_expected_invocation_count_is_two_and_actual_invocation_count_would_be_three
+ expectation = new_expectation.times(2)
+ assert expectation.invocations_allowed?
+ expectation.invoke
+ assert expectation.invocations_allowed?
+ expectation.invoke
+ assert !expectation.invocations_allowed?
+ end
+
+ def test_should_allow_invocations_until_expected_invocation_count_is_a_range_from_two_to_three_and_actual_invocation_count_would_be_four
+ expectation = new_expectation.times(2..3)
+ assert expectation.invocations_allowed?
+ expectation.invoke
+ assert expectation.invocations_allowed?
+ expectation.invoke
+ assert expectation.invocations_allowed?
+ expectation.invoke
+ assert !expectation.invocations_allowed?
+ end
+
+ def test_should_store_provided_backtrace
+ backtrace = Object.new
+ expectation = Expectation.new(nil, :expected_method, backtrace)
+ assert_equal backtrace, expectation.backtrace
+ end
+
+ def test_should_default_backtrace_to_caller
+ execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
+ assert_equal execution_point, ExecutionPoint.new(expectation.backtrace)
+ end
+
+ def test_should_not_yield
+ yielded = false
+ new_expectation.invoke() { yielded = true }
+ assert_equal false, yielded
+ end
+
+ def test_should_yield_no_parameters
+ expectation = new_expectation().yields()
+ yielded_parameters = nil
+ expectation.invoke() { |*parameters| yielded_parameters = parameters }
+ assert_equal Array.new, yielded_parameters
+ end
+
+ def test_should_yield_with_specified_parameters
+ expectation = new_expectation().yields(1, 2, 3)
+ yielded_parameters = nil
+ expectation.invoke() { |*parameters| yielded_parameters = parameters }
+ assert_equal [1, 2, 3], yielded_parameters
+ end
+
+ def test_should_yield_different_parameters_on_consecutive_invocations
+ expectation = new_expectation().yields(1, 2, 3).yields(4, 5)
+ yielded_parameters = []
+ expectation.invoke() { |*parameters| yielded_parameters << parameters }
+ expectation.invoke() { |*parameters| yielded_parameters << parameters }
+ assert_equal [[1, 2, 3], [4, 5]], yielded_parameters
+ end
+
+ def test_should_yield_multiple_times_for_single_invocation
+ expectation = new_expectation().multiple_yields([1, 2, 3], [4, 5])
+ yielded_parameters = []
+ expectation.invoke() { |*parameters| yielded_parameters << parameters }
+ assert_equal [[1, 2, 3], [4, 5]], yielded_parameters
+ end
+
+ def test_should_yield_multiple_times_for_first_invocation_and_once_for_second_invocation
+ expectation = new_expectation().multiple_yields([1, 2, 3], [4, 5]).then.yields(6, 7)
+ yielded_parameters = []
+ expectation.invoke() { |*parameters| yielded_parameters << parameters }
+ expectation.invoke() { |*parameters| yielded_parameters << parameters }
+ assert_equal [[1, 2, 3], [4, 5], [6, 7]], yielded_parameters
+ end
+
+ def test_should_return_specified_value
+ expectation = new_expectation.returns(99)
+ assert_equal 99, expectation.invoke
+ end
+
+ def test_should_return_same_specified_value_multiple_times
+ expectation = new_expectation.returns(99)
+ assert_equal 99, expectation.invoke
+ assert_equal 99, expectation.invoke
+ end
+
+ def test_should_return_specified_values_on_consecutive_calls
+ expectation = new_expectation.returns(99, 100, 101)
+ assert_equal 99, expectation.invoke
+ assert_equal 100, expectation.invoke
+ assert_equal 101, expectation.invoke
+ end
+
+ def test_should_return_specified_values_on_consecutive_calls_even_if_values_are_modified
+ values = [99, 100, 101]
+ expectation = new_expectation.returns(*values)
+ values.shift
+ assert_equal 99, expectation.invoke
+ assert_equal 100, expectation.invoke
+ assert_equal 101, expectation.invoke
+ end
+
+ def test_should_return_nil_by_default
+ assert_nil new_expectation.invoke
+ end
+
+ def test_should_return_nil_if_no_value_specified
+ expectation = new_expectation.returns()
+ assert_nil expectation.invoke
+ end
+
+ def test_should_return_evaluated_proc
+ proc = lambda { 99 }
+ expectation = new_expectation.returns(proc)
+ result = nil
+ disable_deprecations { result = expectation.invoke }
+ assert_equal 99, result
+ end
+
+ def test_should_return_evaluated_proc_without_using_is_a_method
+ proc = lambda { 99 }
+ proc.define_instance_accessor(:called)
+ proc.called = false
+ proc.replace_instance_method(:is_a?) { self.called = true; true}
+ expectation = new_expectation.returns(proc)
+ disable_deprecations { expectation.invoke }
+ assert_equal false, proc.called
+ end
+
+ def test_should_raise_runtime_exception
+ expectation = new_expectation.raises
+ assert_raise(RuntimeError) { expectation.invoke }
+ end
+
+ def test_should_raise_custom_exception
+ exception = Class.new(Exception)
+ expectation = new_expectation.raises(exception)
+ assert_raise(exception) { expectation.invoke }
+ end
+
+ def test_should_raise_same_instance_of_custom_exception
+ exception_klass = Class.new(StandardError)
+ expected_exception = exception_klass.new
+ expectation = new_expectation.raises(expected_exception)
+ actual_exception = assert_raise(exception_klass) { expectation.invoke }
+ assert_same expected_exception, actual_exception
+ end
+
+ def test_should_use_the_default_exception_message
+ expectation = new_expectation.raises(Exception)
+ exception = assert_raise(Exception) { expectation.invoke }
+ assert_equal Exception.new.message, exception.message
+ end
+
+ def test_should_raise_custom_exception_with_message
+ exception_msg = "exception message"
+ expectation = new_expectation.raises(Exception, exception_msg)
+ exception = assert_raise(Exception) { expectation.invoke }
+ assert_equal exception_msg, exception.message
+ end
+
+ def test_should_return_values_then_raise_exception
+ expectation = new_expectation.returns(1, 2).then.raises()
+ assert_equal 1, expectation.invoke
+ assert_equal 2, expectation.invoke
+ assert_raise(RuntimeError) { expectation.invoke }
+ end
+
+ def test_should_raise_exception_then_return_values
+ expectation = new_expectation.raises().then.returns(1, 2)
+ assert_raise(RuntimeError) { expectation.invoke }
+ assert_equal 1, expectation.invoke
+ assert_equal 2, expectation.invoke
+ end
+
+ def test_should_not_raise_error_on_verify_if_expected_call_was_made
+ expectation = new_expectation
+ expectation.invoke
+ assert_nothing_raised(ExpectationError) {
+ expectation.verify
+ }
+ end
+
+ def test_should_raise_error_on_verify_if_call_expected_once_but_invoked_twice
+ expectation = new_expectation.once
+ expectation.invoke
+ expectation.invoke
+ assert_raises(ExpectationError) {
+ expectation.verify
+ }
+ end
+
+ def test_should_raise_error_on_verify_if_call_expected_once_but_not_invoked
+ expectation = new_expectation.once
+ assert_raises(ExpectationError) {
+ expectation.verify
+ }
+ end
+
+ def test_should_not_raise_error_on_verify_if_call_expected_once_and_invoked_once
+ expectation = new_expectation.once
+ expectation.invoke
+ assert_nothing_raised(ExpectationError) {
+ expectation.verify
+ }
+ end
+
+ def test_should_not_raise_error_on_verify_if_expected_call_was_made_at_least_once
+ expectation = new_expectation.at_least_once
+ 3.times {expectation.invoke}
+ assert_nothing_raised(ExpectationError) {
+ expectation.verify
+ }
+ end
+
+ def test_should_raise_error_on_verify_if_expected_call_was_not_made_at_least_once
+ expectation = new_expectation.with(1, 2, 3).at_least_once
+ e = assert_raise(ExpectationError) {
+ expectation.verify
+ }
+ assert_match(/expected calls: at least 1, actual calls: 0/i, e.message)
+ end
+
+ def test_should_not_raise_error_on_verify_if_expected_call_was_made_expected_number_of_times
+ expectation = new_expectation.times(2)
+ 2.times {expectation.invoke}
+ assert_nothing_raised(ExpectationError) {
+ expectation.verify
+ }
+ end
+
+ def test_should_expect_call_not_to_be_made
+ expectation = new_expectation
+ expectation.define_instance_accessor(:how_many_times)
+ expectation.replace_instance_method(:times) { |how_many_times| self.how_many_times = how_many_times }
+ expectation.never
+ assert_equal 0, expectation.how_many_times
+ end
+
+ def test_should_raise_error_on_verify_if_expected_call_was_made_too_few_times
+ expectation = new_expectation.times(2)
+ 1.times {expectation.invoke}
+ e = assert_raise(ExpectationError) {
+ expectation.verify
+ }
+ assert_match(/expected calls: 2, actual calls: 1/i, e.message)
+ end
+
+ def test_should_raise_error_on_verify_if_expected_call_was_made_too_many_times
+ expectation = new_expectation.times(2)
+ 3.times {expectation.invoke}
+ assert_raise(ExpectationError) {
+ expectation.verify
+ }
+ end
+
+ def test_should_yield_self_to_block
+ expectation = new_expectation
+ expectation.invoke
+ yielded_expectation = nil
+ expectation.verify { |x| yielded_expectation = x }
+ assert_equal expectation, yielded_expectation
+ end
+
+ def test_should_yield_to_block_before_raising_exception
+ yielded = false
+ assert_raise(ExpectationError) {
+ new_expectation.verify { |x| yielded = true }
+ }
+ assert yielded
+ end
+
+ def test_should_store_backtrace_from_point_where_expectation_was_created
+ execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
+ assert_equal execution_point, ExecutionPoint.new(expectation.backtrace)
+ end
+
+ def test_should_set_backtrace_on_assertion_failed_error_to_point_where_expectation_was_created
+ execution_point = ExecutionPoint.current; expectation = Expectation.new(nil, :expected_method)
+ error = assert_raise(ExpectationError) {
+ expectation.verify
+ }
+ assert_equal execution_point, ExecutionPoint.new(error.backtrace)
+ end
+
+ def test_should_display_expectation_in_exception_message
+ options = [:a, :b, {:c => 1, :d => 2}]
+ expectation = new_expectation.with(*options)
+ exception = assert_raise(ExpectationError) { expectation.verify }
+ assert exception.message.include?(expectation.method_signature)
+ end
+
+ class FakeMock
+
+ def initialize(name)
+ @name = name
+ end
+
+ def mocha_inspect
+ @name
+ end
+
+ end
+
+ def test_should_raise_error_with_message_indicating_which_method_was_expected_to_be_called_on_which_mock_object_with_which_parameters_and_in_what_sequences
+ mock = FakeMock.new('mock')
+ sequence_one = Sequence.new('one')
+ sequence_two = Sequence.new('two')
+ expectation = Expectation.new(mock, :expected_method).with(1, 2, {'a' => true, :b => false}, [1, 2, 3]).in_sequence(sequence_one, sequence_two)
+ e = assert_raise(ExpectationError) { expectation.verify }
+ assert_match "mock.expected_method(1, 2, {'a' => true, :b => false}, [1, 2, 3]); in sequence 'one'; in sequence 'two'", e.message
+ end
+
+ class FakeConstraint
+
+ def initialize(allows_invocation_now)
+ @allows_invocation_now = allows_invocation_now
+ end
+
+ def allows_invocation_now?
+ @allows_invocation_now
+ end
+
+ end
+
+ def test_should_be_in_correct_order_if_all_ordering_constraints_allow_invocation_now
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
+ constraint_two = FakeConstraint.new(allows_invocation_now = true)
+ expectation = Expectation.new(nil, :method_one)
+ expectation.add_ordering_constraint(constraint_one)
+ expectation.add_ordering_constraint(constraint_two)
+ assert expectation.in_correct_order?
+ end
+
+ def test_should_not_be_in_correct_order_if_one_ordering_constraint_does_not_allow_invocation_now
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
+ constraint_two = FakeConstraint.new(allows_invocation_now = false)
+ expectation = Expectation.new(nil, :method_one)
+ expectation.add_ordering_constraint(constraint_one)
+ expectation.add_ordering_constraint(constraint_two)
+ assert !expectation.in_correct_order?
+ end
+
+ def test_should_match_if_all_ordering_constraints_allow_invocation_now
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
+ constraint_two = FakeConstraint.new(allows_invocation_now = true)
+ expectation = Expectation.new(nil, :method_one)
+ expectation.add_ordering_constraint(constraint_one)
+ expectation.add_ordering_constraint(constraint_two)
+ assert expectation.match?(:method_one)
+ end
+
+ def test_should_not_match_if_one_ordering_constraints_does_not_allow_invocation_now
+ constraint_one = FakeConstraint.new(allows_invocation_now = true)
+ constraint_two = FakeConstraint.new(allows_invocation_now = false)
+ expectation = Expectation.new(nil, :method_one)
+ expectation.add_ordering_constraint(constraint_one)
+ expectation.add_ordering_constraint(constraint_two)
+ assert !expectation.match?(:method_one)
+ end
+
+ def test_should_not_be_satisfied_when_required_invocation_has_not_been_made
+ expectation = Expectation.new(nil, :method_one).times(1)
+ assert !expectation.satisfied?
+ end
+
+ def test_should_be_satisfied_when_required_invocation_has_been_made
+ expectation = Expectation.new(nil, :method_one).times(1)
+ expectation.invoke
+ assert expectation.satisfied?
+ end
+
+ def test_should_not_be_satisfied_when_minimum_number_of_invocations_has_not_been_made
+ expectation = Expectation.new(nil, :method_one).at_least(2)
+ expectation.invoke
+ assert !expectation.satisfied?
+ end
+
+ def test_should_be_satisfied_when_minimum_number_of_invocations_has_been_made
+ expectation = Expectation.new(nil, :method_one).at_least(2)
+ 2.times { expectation.invoke }
+ assert expectation.satisfied?
+ end
+
+ class FakeSequence
+
+ attr_reader :expectations
+
+ def initialize
+ @expectations = []
+ end
+
+ def constrain_as_next_in_sequence(expectation)
+ @expectations << expectation
+ end
+
+ end
+
+ def test_should_tell_sequences_to_constrain_expectation_as_next_in_sequence
+ sequence_one = FakeSequence.new
+ sequence_two = FakeSequence.new
+ expectation = Expectation.new(nil, :method_one)
+ assert_equal expectation, expectation.in_sequence(sequence_one, sequence_two)
+ assert_equal [expectation], sequence_one.expectations
+ assert_equal [expectation], sequence_two.expectations
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/hash_inspect_test.rb b/vendor/gems/mocha-0.5.6/test/unit/hash_inspect_test.rb
new file mode 100644
index 000000000..15ad41544
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/hash_inspect_test.rb
@@ -0,0 +1,16 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/inspect'
+
+class HashInspectTest < Test::Unit::TestCase
+
+ def test_should_keep_spacing_between_key_value
+ hash = {:a => true}
+ assert_equal '{:a => true}', hash.mocha_inspect
+ end
+
+ def test_should_use_mocha_inspect_on_each_item
+ hash = {:a => 'mocha'}
+ assert_equal "{:a => 'mocha'}", hash.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/infinite_range_test.rb b/vendor/gems/mocha-0.5.6/test/unit/infinite_range_test.rb
new file mode 100644
index 000000000..7b4c8a4cb
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/infinite_range_test.rb
@@ -0,0 +1,53 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/infinite_range'
+require 'date'
+
+class InfiniteRangeTest < Test::Unit::TestCase
+
+ def test_should_include_values_at_or_above_minimum
+ range = Range.at_least(10)
+ assert(range === 10)
+ assert(range === 11)
+ assert(range === 1000000)
+ end
+
+ def test_should_not_include_values_below_minimum
+ range = Range.at_least(10)
+ assert_false(range === 0)
+ assert_false(range === 9)
+ assert_false(range === -11)
+ end
+
+ def test_should_be_human_readable_description_for_at_least
+ assert_equal "at least 10", Range.at_least(10).mocha_inspect
+ end
+
+ def test_should_include_values_at_or_below_maximum
+ range = Range.at_most(10)
+ assert(range === 10)
+ assert(range === 0)
+ assert(range === -1000000)
+ end
+
+ def test_should_not_include_values_above_maximum
+ range = Range.at_most(10)
+ assert_false(range === 11)
+ assert_false(range === 1000000)
+ end
+
+ def test_should_be_human_readable_description_for_at_most
+ assert_equal "at most 10", Range.at_most(10).mocha_inspect
+ end
+
+ def test_should_be_same_as_standard_to_string
+ assert_equal((1..10).to_s, (1..10).mocha_inspect)
+ assert_equal((1...10).to_s, (1...10).mocha_inspect)
+ date_range = Range.new(Date.parse('2006-01-01'), Date.parse('2007-01-01'))
+ assert_equal date_range.to_s, date_range.mocha_inspect
+ end
+
+ def assert_false(condition)
+ assert(!condition)
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/metaclass_test.rb b/vendor/gems/mocha-0.5.6/test/unit/metaclass_test.rb
new file mode 100644
index 000000000..956bcb45b
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/metaclass_test.rb
@@ -0,0 +1,22 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/metaclass'
+
+class MetaclassTest < Test::Unit::TestCase
+
+ def test_should_return_objects_singleton_class
+ object = Object.new
+ assert_raises(NoMethodError) { object.success? }
+
+ object = Object.new
+ assert object.__metaclass__.ancestors.include?(Object)
+ assert object.__metaclass__.ancestors.include?(Kernel)
+ assert object.__metaclass__.is_a?(Class)
+
+ object.__metaclass__.class_eval { def success?; true; end }
+ assert object.success?
+
+ object = Object.new
+ assert_raises(NoMethodError) { object.success? }
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/method_matcher_test.rb b/vendor/gems/mocha-0.5.6/test/unit/method_matcher_test.rb
new file mode 100644
index 000000000..0167433e4
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/method_matcher_test.rb
@@ -0,0 +1,23 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/method_matcher'
+
+class MethodMatcherTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_match_if_actual_method_name_is_same_as_expected_method_name
+ method_matcher = MethodMatcher.new(:method_name)
+ assert method_matcher.match?(:method_name)
+ end
+
+ def test_should_not_match_if_actual_method_name_is_not_same_as_expected_method_name
+ method_matcher = MethodMatcher.new(:method_name)
+ assert !method_matcher.match?(:different_method_name)
+ end
+
+ def test_should_describe_what_method_is_expected
+ method_matcher = MethodMatcher.new(:method_name)
+ assert_equal "method_name", method_matcher.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/missing_expectation_test.rb b/vendor/gems/mocha-0.5.6/test/unit/missing_expectation_test.rb
new file mode 100644
index 000000000..9d3b45aa7
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/missing_expectation_test.rb
@@ -0,0 +1,42 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+
+require 'mocha/missing_expectation'
+require 'mocha/mock'
+
+class MissingExpectationTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_report_similar_expectations
+ mock = Mock.new
+ expectation_1 = mock.expects(:method_one).with(1)
+ expectation_2 = mock.expects(:method_one).with(1, 1)
+ expectation_3 = mock.expects(:method_two).with(2)
+
+ missing_expectation = MissingExpectation.new(mock, :method_one)
+ exception = assert_raise(ExpectationError) { missing_expectation.verify }
+
+ expected_message = [
+ "#{missing_expectation.error_message(0, 1)}",
+ "Similar expectations:",
+ "#{expectation_1.method_signature}",
+ "#{expectation_2.method_signature}"
+ ].join("\n")
+
+ assert_equal expected_message, exception.message
+ end
+
+ def test_should_not_report_similar_expectations_if_there_are_none
+ mock = Mock.new
+ mock.expects(:method_two).with(2)
+ mock.expects(:method_two).with(2, 2)
+
+ missing_expectation = MissingExpectation.new(mock, :method_one)
+ exception = assert_raise(ExpectationError) { missing_expectation.verify }
+
+ expected_message = "#{missing_expectation.error_message(0, 1)}"
+
+ assert_equal expected_message, exception.message
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/mock_test.rb b/vendor/gems/mocha-0.5.6/test/unit/mock_test.rb
new file mode 100644
index 000000000..f844bc81d
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/mock_test.rb
@@ -0,0 +1,323 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/mock'
+require 'mocha/expectation_error'
+require 'set'
+
+class MockTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_set_single_expectation
+ mock = Mock.new
+ mock.expects(:method1).returns(1)
+ assert_nothing_raised(ExpectationError) do
+ assert_equal 1, mock.method1
+ end
+ end
+
+ def test_should_build_and_store_expectations
+ mock = Mock.new
+ expectation = mock.expects(:method1)
+ assert_not_nil expectation
+ assert_equal [expectation], mock.expectations.to_a
+ end
+
+ def test_should_not_stub_everything_by_default
+ mock = Mock.new
+ assert_equal false, mock.everything_stubbed
+ end
+
+ def test_should_stub_everything
+ mock = Mock.new
+ mock.stub_everything
+ assert_equal true, mock.everything_stubbed
+ end
+
+ def test_should_display_object_id_for_mocha_inspect_if_mock_has_no_name
+ mock = Mock.new
+ assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,12}>$"), mock.mocha_inspect
+ end
+
+ def test_should_display_name_for_mocha_inspect_if_mock_has_name
+ mock = Mock.new('named_mock')
+ assert_equal "#<Mock:named_mock>", mock.mocha_inspect
+ end
+
+ def test_should_display_object_id_for_inspect_if_mock_has_no_name
+ mock = Mock.new
+ assert_match Regexp.new("^#<Mock:0x[0-9A-Fa-f]{1,12}>$"), mock.inspect
+ end
+
+ def test_should_display_name_for_inspect_if_mock_has_name
+ mock = Mock.new('named_mock')
+ assert_equal "#<Mock:named_mock>", mock.inspect
+ end
+
+ def test_should_be_able_to_extend_mock_object_with_module
+ mock = Mock.new
+ assert_nothing_raised(ExpectationError) { mock.extend(Module.new) }
+ end
+
+ def test_should_be_equal
+ mock = Mock.new
+ assert_equal true, mock.eql?(mock)
+ end
+
+ if RUBY_VERSION < '1.9'
+ OBJECT_METHODS = STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS.reject { |m| m =~ /^__.*__$/ }
+ else
+ OBJECT_METHODS = STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS.reject { |m| m =~ /^__.*__$/ || m == :object_id }
+ end
+
+ def test_should_be_able_to_mock_standard_object_methods
+ mock = Mock.new
+ OBJECT_METHODS.each { |method| mock.__expects__(method.to_sym).returns(method) }
+ OBJECT_METHODS.each { |method| assert_equal method, mock.__send__(method.to_sym) }
+ assert_nothing_raised(ExpectationError) { mock.verify }
+ end
+
+ def test_should_be_able_to_stub_standard_object_methods
+ mock = Mock.new
+ OBJECT_METHODS.each { |method| mock.__stubs__(method.to_sym).returns(method) }
+ OBJECT_METHODS.each { |method| assert_equal method, mock.__send__(method.to_sym) }
+ end
+
+ def test_should_create_and_add_expectations
+ mock = Mock.new
+ expectation1 = mock.expects(:method1)
+ expectation2 = mock.expects(:method2)
+ assert_equal [expectation1, expectation2].to_set, mock.expectations.to_set
+ end
+
+ def test_should_pass_backtrace_into_expectation
+ mock = Mock.new
+ backtrace = Object.new
+ expectation = mock.expects(:method1, backtrace)
+ assert_equal backtrace, expectation.backtrace
+ end
+
+ def test_should_pass_backtrace_into_stub
+ mock = Mock.new
+ backtrace = Object.new
+ stub = mock.stubs(:method1, backtrace)
+ assert_equal backtrace, stub.backtrace
+ end
+
+ def test_should_create_and_add_stubs
+ mock = Mock.new
+ stub1 = mock.stubs(:method1)
+ stub2 = mock.stubs(:method2)
+ assert_equal [stub1, stub2].to_set, mock.expectations.to_set
+ end
+
+ def test_should_invoke_expectation_and_return_result
+ mock = Mock.new
+ mock.expects(:my_method).returns(:result)
+ result = mock.my_method
+ assert_equal :result, result
+ end
+
+ def test_should_not_raise_error_if_stubbing_everything
+ mock = Mock.new
+ mock.stub_everything
+ result = nil
+ assert_nothing_raised(ExpectationError) do
+ result = mock.unexpected_method
+ end
+ assert_nil result
+ end
+
+ def test_should_raise_assertion_error_for_unexpected_method_call
+ mock = Mock.new
+ error = assert_raise(ExpectationError) do
+ mock.unexpected_method_called(:my_method, :argument1, :argument2)
+ end
+ assert_match(/my_method/, error.message)
+ assert_match(/argument1/, error.message)
+ assert_match(/argument2/, error.message)
+ end
+
+ def test_should_indicate_unexpected_method_called
+ mock = Mock.new
+ class << mock
+ attr_accessor :symbol, :arguments
+ def unexpected_method_called(symbol, *arguments)
+ self.symbol, self.arguments = symbol, arguments
+ end
+ end
+ mock.my_method(:argument1, :argument2)
+ assert_equal :my_method, mock.symbol
+ assert_equal [:argument1, :argument2], mock.arguments
+ end
+
+ def test_should_verify_that_all_expectations_have_been_fulfilled
+ mock = Mock.new
+ mock.expects(:method1)
+ mock.expects(:method2)
+ mock.method1
+ assert_raise(ExpectationError) do
+ mock.verify
+ end
+ end
+
+ def test_should_report_possible_expectations
+ mock = Mock.new
+ mock.expects(:expected_method).with(1)
+ exception = assert_raise(ExpectationError) { mock.expected_method(2) }
+ assert_equal "#{mock.mocha_inspect}.expected_method(2) - expected calls: 0, actual calls: 1\nSimilar expectations:\n#{mock.mocha_inspect}.expected_method(1)", exception.message
+ end
+
+ def test_should_pass_block_through_to_expectations_verify_method
+ mock = Mock.new
+ expected_expectation = mock.expects(:method1)
+ mock.method1
+ expectations = []
+ mock.verify() { |expectation| expectations << expectation }
+ assert_equal [expected_expectation], expectations
+ end
+
+ def test_should_yield_supplied_parameters_to_block
+ mock = Mock.new
+ parameters_for_yield = [1, 2, 3]
+ mock.expects(:method1).yields(*parameters_for_yield)
+ yielded_parameters = nil
+ mock.method1() { |*parameters| yielded_parameters = parameters }
+ assert_equal parameters_for_yield, yielded_parameters
+ end
+
+ def test_should_set_up_multiple_expectations_with_return_values
+ mock = Mock.new
+ mock.expects(:method1 => :result1, :method2 => :result2)
+ assert_equal :result1, mock.method1
+ assert_equal :result2, mock.method2
+ end
+
+ def test_should_set_up_multiple_stubs_with_return_values
+ mock = Mock.new
+ mock.stubs(:method1 => :result1, :method2 => :result2)
+ assert_equal :result1, mock.method1
+ assert_equal :result2, mock.method2
+ end
+
+ def test_should_keep_returning_specified_value_for_stubs
+ mock = Mock.new
+ mock.stubs(:method1).returns(1)
+ assert_equal 1, mock.method1
+ assert_equal 1, mock.method1
+ end
+
+ def test_should_keep_returning_specified_value_for_expects
+ mock = Mock.new
+ mock.expects(:method1).times(2).returns(1)
+ assert_equal 1, mock.method1
+ assert_equal 1, mock.method1
+ end
+
+ def test_should_match_most_recent_call_to_expects
+ mock = Mock.new
+ mock.expects(:method1).returns(0)
+ mock.expects(:method1).returns(1)
+ assert_equal 1, mock.method1
+ end
+
+ def test_should_match_most_recent_call_to_stubs
+ mock = Mock.new
+ mock.stubs(:method1).returns(0)
+ mock.stubs(:method1).returns(1)
+ assert_equal 1, mock.method1
+ end
+
+ def test_should_match_most_recent_call_to_stubs_or_expects
+ mock = Mock.new
+ mock.stubs(:method1).returns(0)
+ mock.expects(:method1).returns(1)
+ assert_equal 1, mock.method1
+ end
+
+ def test_should_match_most_recent_call_to_expects_or_stubs
+ mock = Mock.new
+ mock.expects(:method1).returns(0)
+ mock.stubs(:method1).returns(1)
+ assert_equal 1, mock.method1
+ end
+
+ def test_should_respond_to_expected_method
+ mock = Mock.new
+ mock.expects(:method1)
+ assert_equal true, mock.respond_to?(:method1)
+ end
+
+ def test_should_not_respond_to_unexpected_method
+ mock = Mock.new
+ assert_equal false, mock.respond_to?(:method1)
+ end
+
+ def test_should_respond_to_methods_which_the_responder_does_responds_to
+ instance = Class.new do
+ define_method(:respond_to?) { |symbol| true }
+ end.new
+ mock = Mock.new
+ mock.responds_like(instance)
+ assert_equal true, mock.respond_to?(:invoked_method)
+ end
+
+ def test_should_not_respond_to_methods_which_the_responder_does_not_responds_to
+ instance = Class.new do
+ define_method(:respond_to?) { |symbol| false }
+ end.new
+ mock = Mock.new
+ mock.responds_like(instance)
+ assert_equal false, mock.respond_to?(:invoked_method)
+ end
+
+ def test_should_return_itself_to_allow_method_chaining
+ mock = Mock.new
+ assert_same mock.responds_like(Object.new), mock
+ end
+
+ def test_should_not_raise_no_method_error_if_mock_is_not_restricted_to_respond_like_a_responder
+ instance = Class.new do
+ define_method(:respond_to?) { true }
+ end.new
+ mock = Mock.new
+ mock.stubs(:invoked_method)
+ assert_nothing_raised(NoMethodError) { mock.invoked_method }
+ end
+
+ def test_should_not_raise_no_method_error_if_responder_does_respond_to_invoked_method
+ instance = Class.new do
+ define_method(:respond_to?) { |symbol| true }
+ end.new
+ mock = Mock.new
+ mock.responds_like(instance)
+ mock.stubs(:invoked_method)
+ assert_nothing_raised(NoMethodError) { mock.invoked_method }
+ end
+
+ def test_should_raise_no_method_error_if_responder_does_not_respond_to_invoked_method
+ instance = Class.new do
+ define_method(:respond_to?) { |symbol| false }
+ define_method(:mocha_inspect) { 'mocha_inspect' }
+ end.new
+ mock = Mock.new
+ mock.responds_like(instance)
+ mock.stubs(:invoked_method)
+ assert_raises(NoMethodError) { mock.invoked_method }
+ end
+
+ def test_should_raise_no_method_error_with_message_indicating_that_mock_is_constrained_to_respond_like_responder
+ instance = Class.new do
+ define_method(:respond_to?) { |symbol| false }
+ define_method(:mocha_inspect) { 'mocha_inspect' }
+ end.new
+ mock = Mock.new
+ mock.responds_like(instance)
+ mock.stubs(:invoked_method)
+ begin
+ mock.invoked_method
+ rescue NoMethodError => e
+ assert_match(/which responds like mocha_inspect/, e.message)
+ end
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/multiple_yields_test.rb b/vendor/gems/mocha-0.5.6/test/unit/multiple_yields_test.rb
new file mode 100644
index 000000000..65724a8fb
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/multiple_yields_test.rb
@@ -0,0 +1,18 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+
+require 'mocha/multiple_yields'
+
+class MultipleYieldsTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_provide_parameters_for_multiple_yields_in_single_invocation
+ parameter_group = MultipleYields.new([1, 2, 3], [4, 5])
+ parameter_groups = []
+ parameter_group.each do |parameters|
+ parameter_groups << parameters
+ end
+ assert_equal [[1, 2, 3], [4, 5]], parameter_groups
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/no_yield_test.rb b/vendor/gems/mocha-0.5.6/test/unit/no_yield_test.rb
new file mode 100644
index 000000000..544d1ef25
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/no_yield_test.rb
@@ -0,0 +1,18 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+
+require 'mocha/no_yields'
+
+class NoYieldsTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_provide_parameters_for_no_yields_in_single_invocation
+ parameter_group = NoYields.new
+ parameter_groups = []
+ parameter_group.each do |parameters|
+ parameter_groups << parameters
+ end
+ assert_equal [], parameter_groups
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/object_inspect_test.rb b/vendor/gems/mocha-0.5.6/test/unit/object_inspect_test.rb
new file mode 100644
index 000000000..56d84a96d
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/object_inspect_test.rb
@@ -0,0 +1,37 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/inspect'
+require 'method_definer'
+
+class ObjectInspectTest < Test::Unit::TestCase
+
+ def test_should_return_default_string_representation_of_object_not_including_instance_variables
+ object = Object.new
+ class << object
+ attr_accessor :attribute
+ end
+ object.attribute = 'instance_variable'
+ assert_match Regexp.new("^#<Object:0x[0-9A-Fa-f]{1,8}.*>$"), object.mocha_inspect
+ assert_no_match(/instance_variable/, object.mocha_inspect)
+ end
+
+ def test_should_return_customized_string_representation_of_object
+ object = Object.new
+ class << object
+ define_method(:inspect) { 'custom_inspect' }
+ end
+ assert_equal 'custom_inspect', object.mocha_inspect
+ end
+
+ def test_should_use_underscored_id_instead_of_object_id_or_id_so_that_they_can_be_stubbed
+ object = Object.new
+ object.define_instance_accessor(:called)
+ object.called = false
+ object.replace_instance_method(:object_id) { self.called = true; 1 }
+ if RUBY_VERSION < '1.9'
+ object.replace_instance_method(:id) { self.called = true; 1 }
+ end
+ object.mocha_inspect
+ assert_equal false, object.called
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/object_test.rb b/vendor/gems/mocha-0.5.6/test/unit/object_test.rb
new file mode 100644
index 000000000..660b7d24f
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/object_test.rb
@@ -0,0 +1,165 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/mock'
+require 'method_definer'
+
+require 'mocha/object'
+
+class ObjectTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_build_mocha
+ instance = Object.new
+ mocha = instance.mocha
+ assert_not_nil mocha
+ assert mocha.is_a?(Mock)
+ end
+
+ def test_should_reuse_existing_mocha
+ instance = Object.new
+ mocha_1 = instance.mocha
+ mocha_2 = instance.mocha
+ assert_equal mocha_1, mocha_2
+ end
+
+ def test_should_reset_mocha
+ instance = Object.new
+ assert_nil instance.reset_mocha
+ end
+
+ def test_should_stub_instance_method
+ instance = Object.new
+ $stubba = Mock.new
+ $stubba.expects(:stub).with(Mocha::InstanceMethod.new(instance, :method1))
+ instance.expects(:method1)
+ $stubba.verify
+ end
+
+ def test_should_build_and_store_expectation
+ instance = Object.new
+ $stubba = Mock.new
+ $stubba.stubs(:stub)
+ expectation = instance.expects(:method1)
+ assert_equal [expectation], instance.mocha.expectations.to_a
+ end
+
+ def test_should_verify_expectations
+ instance = Object.new
+ $stubba = Mock.new
+ $stubba.stubs(:stub)
+ instance.expects(:method1).with(:value1, :value2)
+ assert_raise(ExpectationError) { instance.verify }
+ end
+
+ def test_should_pass_backtrace_into_expects
+ instance = Object.new
+ $stubba = Mock.new
+ $stubba.stubs(:stub)
+ mocha = Object.new
+ mocha.define_instance_accessor(:expects_parameters)
+ mocha.define_instance_method(:expects) { |*parameters| self.expects_parameters = parameters }
+ backtrace = Object.new
+ instance.define_instance_method(:mocha) { mocha }
+ instance.define_instance_method(:caller) { backtrace }
+ instance.expects(:method1)
+ assert_equal [:method1, backtrace], mocha.expects_parameters
+ end
+
+ def test_should_pass_backtrace_into_stubs
+ instance = Object.new
+ $stubba = Mock.new
+ $stubba.stubs(:stub)
+ mocha = Object.new
+ mocha.define_instance_accessor(:stubs_parameters)
+ mocha.define_instance_method(:stubs) { |*parameters| self.stubs_parameters = parameters }
+ backtrace = Object.new
+ instance.define_instance_method(:mocha) { mocha }
+ instance.define_instance_method(:caller) { backtrace }
+ instance.stubs(:method1)
+ assert_equal [:method1, backtrace], mocha.stubs_parameters
+ end
+
+ def test_should_build_any_instance_object
+ klass = Class.new
+ any_instance = klass.any_instance
+ assert_not_nil any_instance
+ assert any_instance.is_a?(Class::AnyInstance)
+ end
+
+ def test_should_return_same_any_instance_object
+ klass = Class.new
+ any_instance_1 = klass.any_instance
+ any_instance_2 = klass.any_instance
+ assert_equal any_instance_1, any_instance_2
+ end
+
+ def test_should_stub_class_method
+ klass = Class.new
+ $stubba = Mock.new
+ $stubba.expects(:stub).with(Mocha::ClassMethod.new(klass, :method1))
+ klass.expects(:method1)
+ $stubba.verify
+ end
+
+ def test_should_build_and_store_class_method_expectation
+ klass = Class.new
+ $stubba = Mock.new
+ $stubba.stubs(:stub)
+ expectation = klass.expects(:method1)
+ assert_equal [expectation], klass.mocha.expectations.to_a
+ end
+
+ def test_should_stub_module_method
+ mod = Module.new
+ $stubba = Mock.new
+ $stubba.expects(:stub).with(Mocha::ClassMethod.new(mod, :method1))
+ mod.expects(:method1)
+ $stubba.verify
+ end
+
+ def test_should_build_and_store_module_method_expectation
+ mod = Module.new
+ $stubba = Mock.new
+ $stubba.stubs(:stub)
+ expectation = mod.expects(:method1)
+ assert_equal [expectation], mod.mocha.expectations.to_a
+ end
+
+ def test_should_use_stubba_instance_method_for_object
+ assert_equal Mocha::InstanceMethod, Object.new.stubba_method
+ end
+
+ def test_should_use_stubba_class_method_for_module
+ assert_equal Mocha::ClassMethod, Module.new.stubba_method
+ end
+
+ def test_should_use_stubba_class_method_for_class
+ assert_equal Mocha::ClassMethod, Class.new.stubba_method
+ end
+
+ def test_should_use_stubba_class_method_for_any_instance
+ assert_equal Mocha::AnyInstanceMethod, Class::AnyInstance.new(nil).stubba_method
+ end
+
+ def test_should_stub_self_for_object
+ object = Object.new
+ assert_equal object, object.stubba_object
+ end
+
+ def test_should_stub_self_for_module
+ mod = Module.new
+ assert_equal mod, mod.stubba_object
+ end
+
+ def test_should_stub_self_for_class
+ klass = Class.new
+ assert_equal klass, klass.stubba_object
+ end
+
+ def test_should_stub_relevant_class_for_any_instance
+ klass = Class.new
+ any_instance = Class::AnyInstance.new(klass)
+ assert_equal klass, any_instance.stubba_object
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._all_of_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._all_of_test.rb
new file mode 100644
index 000000000..8494bfb37
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._all_of_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._any_of_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._any_of_test.rb
new file mode 100644
index 000000000..41d4c70da
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._any_of_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._anything_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._anything_test.rb
new file mode 100644
index 000000000..bbb511c34
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._anything_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_entries_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_entries_test.rb
new file mode 100644
index 000000000..d519eaa00
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_entries_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_entry_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_entry_test.rb
new file mode 100644
index 000000000..e38bb38b7
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_entry_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_key_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_key_test.rb
new file mode 100644
index 000000000..72858bd13
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_key_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_value_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_value_test.rb
new file mode 100644
index 000000000..85a2e1c06
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._has_value_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._includes_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._includes_test.rb
new file mode 100644
index 000000000..ca7d6d9ca
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._includes_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._instance_of_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._instance_of_test.rb
new file mode 100644
index 000000000..14618a7f4
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._instance_of_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._is_a_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._is_a_test.rb
new file mode 100644
index 000000000..51949f3fb
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._is_a_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._kind_of_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._kind_of_test.rb
new file mode 100644
index 000000000..773437881
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._kind_of_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._not_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._not_test.rb
new file mode 100644
index 000000000..d892eabbe
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._not_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._regexp_matches_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._regexp_matches_test.rb
new file mode 100644
index 000000000..2ceba479a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._regexp_matches_test.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._stub_matcher.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._stub_matcher.rb
new file mode 100644
index 000000000..bc56613bf
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/._stub_matcher.rb
Binary files differ
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/all_of_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/all_of_test.rb
new file mode 100644
index 000000000..14028f52e
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/all_of_test.rb
@@ -0,0 +1,26 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/all_of'
+require 'mocha/inspect'
+require 'stub_matcher'
+
+class AllOfTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_if_all_matchers_match
+ matcher = all_of(Stub::Matcher.new(true), Stub::Matcher.new(true), Stub::Matcher.new(true))
+ assert matcher.matches?(['any_old_value'])
+ end
+
+ def test_should_not_match_if_any_matcher_does_not_match
+ matcher = all_of(Stub::Matcher.new(true), Stub::Matcher.new(false), Stub::Matcher.new(true))
+ assert !matcher.matches?(['any_old_value'])
+ end
+
+ def test_should_describe_matcher
+ matcher = all_of(Stub::Matcher.new(true), Stub::Matcher.new(false), Stub::Matcher.new(true))
+ assert_equal 'all_of(matcher(true), matcher(false), matcher(true))', matcher.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/any_of_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/any_of_test.rb
new file mode 100644
index 000000000..503d6dc9d
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/any_of_test.rb
@@ -0,0 +1,26 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/any_of'
+require 'mocha/inspect'
+require 'stub_matcher'
+
+class AnyOfTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_if_any_matchers_match
+ matcher = any_of(Stub::Matcher.new(false), Stub::Matcher.new(true), Stub::Matcher.new(false))
+ assert matcher.matches?(['any_old_value'])
+ end
+
+ def test_should_not_match_if_no_matchers_match
+ matcher = any_of(Stub::Matcher.new(false), Stub::Matcher.new(false), Stub::Matcher.new(false))
+ assert !matcher.matches?(['any_old_value'])
+ end
+
+ def test_should_describe_matcher
+ matcher = any_of(Stub::Matcher.new(false), Stub::Matcher.new(true), Stub::Matcher.new(false))
+ assert_equal 'any_of(matcher(false), matcher(true), matcher(false))', matcher.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/anything_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/anything_test.rb
new file mode 100644
index 000000000..42a88a16a
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/anything_test.rb
@@ -0,0 +1,21 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/anything'
+require 'mocha/inspect'
+
+class AnythingTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_anything
+ matcher = anything
+ assert matcher.matches?([:something])
+ assert matcher.matches?([{'x' => 'y'}])
+ end
+
+ def test_should_describe_matcher
+ matcher = anything
+ assert_equal "anything", matcher.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_entries_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_entries_test.rb
new file mode 100644
index 000000000..cb85265f8
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_entries_test.rb
@@ -0,0 +1,30 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/has_entries'
+require 'mocha/inspect'
+
+class HasEntriesTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_hash_including_specified_entries
+ matcher = has_entries(:key_1 => 'value_1', :key_2 => 'value_2')
+ assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2', :key_3 => 'value_3' }])
+ end
+
+ def test_should_not_match_hash_not_including_specified_entries
+ matcher = has_entries(:key_1 => 'value_2', :key_2 => 'value_2', :key_3 => 'value_3')
+ assert !matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
+ end
+
+ def test_should_describe_matcher
+ matcher = has_entries(:key_1 => 'value_1', :key_2 => 'value_2')
+ description = matcher.mocha_inspect
+ matches = /has_entries\((.*)\)/.match(description)
+ assert_not_nil matches[0]
+ entries = eval(matches[1])
+ assert_equal 'value_1', entries[:key_1]
+ assert_equal 'value_2', entries[:key_2]
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_entry_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_entry_test.rb
new file mode 100644
index 000000000..3717b33b0
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_entry_test.rb
@@ -0,0 +1,40 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/has_entry'
+require 'mocha/inspect'
+
+class HasEntryTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_hash_including_specified_key_value_pair
+ matcher = has_entry(:key_1, 'value_1')
+ assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
+ end
+
+ def test_should_not_match_hash_not_including_specified_key_value_pair
+ matcher = has_entry(:key_1, 'value_2')
+ assert !matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
+ end
+
+ def test_should_match_hash_including_specified_entry
+ matcher = has_entry(:key_1 => 'value_1')
+ assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
+ end
+
+ def test_should_not_match_hash_not_including_specified_entry
+ matcher = has_entry(:key_1 => 'value_2')
+ assert !matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
+ end
+
+ def test_should_describe_matcher_with_key_value_pair
+ matcher = has_entry(:key_1, 'value_1')
+ assert_equal "has_entry(:key_1, 'value_1')", matcher.mocha_inspect
+ end
+
+ def test_should_describe_matcher_with_entry
+ matcher = has_entry(:key_1 => 'value_1')
+ assert_equal "has_entry(:key_1, 'value_1')", matcher.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_key_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_key_test.rb
new file mode 100644
index 000000000..bc9f5065d
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_key_test.rb
@@ -0,0 +1,25 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/has_key'
+require 'mocha/inspect'
+
+class HasKeyTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_hash_including_specified_key
+ matcher = has_key(:key_1)
+ assert matcher.matches?([{ :key_1 => 1, :key_2 => 2 }])
+ end
+
+ def test_should_not_match_hash_not_including_specified_key
+ matcher = has_key(:key_1)
+ assert !matcher.matches?([{ :key_2 => 2 }])
+ end
+
+ def test_should_describe_matcher
+ matcher = has_key(:key)
+ assert_equal 'has_key(:key)', matcher.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_value_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_value_test.rb
new file mode 100644
index 000000000..6c8957fd0
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/has_value_test.rb
@@ -0,0 +1,25 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/has_value'
+require 'mocha/inspect'
+
+class HasValueTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_hash_including_specified_value
+ matcher = has_value('value_1')
+ assert matcher.matches?([{ :key_1 => 'value_1', :key_2 => 'value_2' }])
+ end
+
+ def test_should_not_match_hash_not_including_specified_value
+ matcher = has_value('value_1')
+ assert !matcher.matches?([{ :key_2 => 'value_2' }])
+ end
+
+ def test_should_describe_matcher
+ matcher = has_value('value_1')
+ assert_equal "has_value('value_1')", matcher.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/includes_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/includes_test.rb
new file mode 100644
index 000000000..70fb649d2
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/includes_test.rb
@@ -0,0 +1,25 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/includes'
+require 'mocha/inspect'
+
+class IncludesTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_object_including_value
+ matcher = includes(:x)
+ assert matcher.matches?([[:x, :y, :z]])
+ end
+
+ def test_should_not_match_object_that_does_not_include_value
+ matcher = includes(:not_included)
+ assert !matcher.matches?([[:x, :y, :z]])
+ end
+
+ def test_should_describe_matcher
+ matcher = includes(:x)
+ assert_equal "includes(:x)", matcher.mocha_inspect
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/instance_of_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/instance_of_test.rb
new file mode 100644
index 000000000..415b79a48
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/instance_of_test.rb
@@ -0,0 +1,25 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/instance_of'
+require 'mocha/inspect'
+
+class InstanceOfTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_object_that_is_an_instance_of_specified_class
+ matcher = instance_of(String)
+ assert matcher.matches?(['string'])
+ end
+
+ def test_should_not_match_object_that_is_not_an_instance_of_specified_class
+ matcher = instance_of(String)
+ assert !matcher.matches?([99])
+ end
+
+ def test_should_describe_matcher
+ matcher = instance_of(String)
+ assert_equal "instance_of(String)", matcher.mocha_inspect
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/is_a_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/is_a_test.rb
new file mode 100644
index 000000000..c9ef91965
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/is_a_test.rb
@@ -0,0 +1,25 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/is_a'
+require 'mocha/inspect'
+
+class IsATest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_object_that_is_a_specified_class
+ matcher = is_a(Integer)
+ assert matcher.matches?([99])
+ end
+
+ def test_should_not_match_object_that_is_not_a_specified_class
+ matcher = is_a(Integer)
+ assert !matcher.matches?(['string'])
+ end
+
+ def test_should_describe_matcher
+ matcher = is_a(Integer)
+ assert_equal "is_a(Integer)", matcher.mocha_inspect
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/kind_of_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/kind_of_test.rb
new file mode 100644
index 000000000..1167e5c9e
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/kind_of_test.rb
@@ -0,0 +1,25 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/kind_of'
+require 'mocha/inspect'
+
+class KindOfTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_object_that_is_a_kind_of_specified_class
+ matcher = kind_of(Integer)
+ assert matcher.matches?([99])
+ end
+
+ def test_should_not_match_object_that_is_not_a_kind_of_specified_class
+ matcher = kind_of(Integer)
+ assert !matcher.matches?(['string'])
+ end
+
+ def test_should_describe_matcher
+ matcher = kind_of(Integer)
+ assert_equal "kind_of(Integer)", matcher.mocha_inspect
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/not_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/not_test.rb
new file mode 100644
index 000000000..4cb6790a9
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/not_test.rb
@@ -0,0 +1,26 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/not'
+require 'mocha/inspect'
+require 'stub_matcher'
+
+class NotTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_if_matcher_does_not_match
+ matcher = Not(Stub::Matcher.new(false))
+ assert matcher.matches?(['any_old_value'])
+ end
+
+ def test_should_not_match_if_matcher_does_match
+ matcher = Not(Stub::Matcher.new(true))
+ assert !matcher.matches?(['any_old_value'])
+ end
+
+ def test_should_describe_matcher
+ matcher = Not(Stub::Matcher.new(true))
+ assert_equal 'Not(matcher(true))', matcher.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/regexp_matches_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/regexp_matches_test.rb
new file mode 100644
index 000000000..a8294bfe0
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/regexp_matches_test.rb
@@ -0,0 +1,25 @@
+require File.join(File.dirname(__FILE__), "..", "..", "test_helper")
+
+require 'mocha/parameter_matchers/regexp_matches'
+require 'mocha/inspect'
+
+class MatchesTest < Test::Unit::TestCase
+
+ include Mocha::ParameterMatchers
+
+ def test_should_match_parameter_matching_regular_expression
+ matcher = regexp_matches(/oo/)
+ assert matcher.matches?(['foo'])
+ end
+
+ def test_should_not_match_parameter_not_matching_regular_expression
+ matcher = regexp_matches(/oo/)
+ assert !matcher.matches?(['bar'])
+ end
+
+ def test_should_describe_matcher
+ matcher = regexp_matches(/oo/)
+ assert_equal "regexp_matches(/oo/)", matcher.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/stub_matcher.rb b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/stub_matcher.rb
new file mode 100644
index 000000000..920ced23b
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameter_matchers/stub_matcher.rb
@@ -0,0 +1,23 @@
+module Stub
+
+ class Matcher
+
+ attr_accessor :value
+
+ def initialize(matches)
+ @matches = matches
+ end
+
+ def matches?(available_parameters)
+ value = available_parameters.shift
+ @value = value
+ @matches
+ end
+
+ def mocha_inspect
+ "matcher(#{@matches})"
+ end
+
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/parameters_matcher_test.rb b/vendor/gems/mocha-0.5.6/test/unit/parameters_matcher_test.rb
new file mode 100644
index 000000000..612805e45
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/parameters_matcher_test.rb
@@ -0,0 +1,121 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/parameters_matcher'
+
+class ParametersMatcherTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_match_any_actual_parameters_if_no_expected_parameters_specified
+ parameters_matcher = ParametersMatcher.new
+ assert parameters_matcher.match?(actual_parameters = [1, 2, 3])
+ end
+
+ def test_should_match_if_actual_parameters_are_same_as_expected_parameters
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, 6])
+ assert parameters_matcher.match?(actual_parameters = [4, 5, 6])
+ end
+
+ def test_should_not_match_if_actual_parameters_are_different_from_expected_parameters
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, 6])
+ assert !parameters_matcher.match?(actual_parameters = [1, 2, 3])
+ end
+
+ def test_should_not_match_if_there_are_less_actual_parameters_than_expected_parameters
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, 6])
+ assert !parameters_matcher.match?(actual_parameters = [4, 5])
+ end
+
+ def test_should_not_match_if_there_are_more_actual_parameters_than_expected_parameters
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5])
+ assert !parameters_matcher.match?(actual_parameters = [4, 5, 6])
+ end
+
+ def test_should_not_match_if_not_all_required_parameters_are_supplied
+ optionals = ParameterMatchers::Optionally.new(6, 7)
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, optionals])
+ assert !parameters_matcher.match?(actual_parameters = [4])
+ end
+
+ def test_should_match_if_all_required_parameters_match_and_no_optional_parameters_are_supplied
+ optionals = ParameterMatchers::Optionally.new(6, 7)
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, optionals])
+ assert parameters_matcher.match?(actual_parameters = [4, 5])
+ end
+
+ def test_should_match_if_all_required_and_optional_parameters_match_and_some_optional_parameters_are_supplied
+ optionals = ParameterMatchers::Optionally.new(6, 7)
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, optionals])
+ assert parameters_matcher.match?(actual_parameters = [4, 5, 6])
+ end
+
+ def test_should_match_if_all_required_and_optional_parameters_match_and_all_optional_parameters_are_supplied
+ optionals = ParameterMatchers::Optionally.new(6, 7)
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, optionals])
+ assert parameters_matcher.match?(actual_parameters = [4, 5, 6, 7])
+ end
+
+ def test_should_not_match_if_all_required_and_optional_parameters_match_but_too_many_optional_parameters_are_supplied
+ optionals = ParameterMatchers::Optionally.new(6, 7)
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, optionals])
+ assert !parameters_matcher.match?(actual_parameters = [4, 5, 6, 7, 8])
+ end
+
+ def test_should_not_match_if_all_required_parameters_match_but_some_optional_parameters_do_not_match
+ optionals = ParameterMatchers::Optionally.new(6, 7)
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, optionals])
+ assert !parameters_matcher.match?(actual_parameters = [4, 5, 6, 0])
+ end
+
+ def test_should_not_match_if_some_required_parameters_do_not_match_although_all_optional_parameters_do_match
+ optionals = ParameterMatchers::Optionally.new(6, 7)
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, optionals])
+ assert !parameters_matcher.match?(actual_parameters = [4, 0, 6])
+ end
+
+ def test_should_not_match_if_all_required_parameters_match_but_no_optional_parameters_match
+ optionals = ParameterMatchers::Optionally.new(6, 7)
+ parameters_matcher = ParametersMatcher.new(expected_parameters = [4, 5, optionals])
+ assert !parameters_matcher.match?(actual_parameters = [4, 5, 0, 0])
+ end
+
+ def test_should_match_if_actual_parameters_satisfy_matching_block
+ parameters_matcher = ParametersMatcher.new { |x, y| x + y == 3 }
+ assert parameters_matcher.match?(actual_parameters = [1, 2])
+ end
+
+ def test_should_not_match_if_actual_parameters_do_not_satisfy_matching_block
+ parameters_matcher = ParametersMatcher.new { |x, y| x + y == 3 }
+ assert !parameters_matcher.match?(actual_parameters = [2, 3])
+ end
+
+ def test_should_remove_outer_array_braces
+ params = [1, 2, [3, 4]]
+ parameters_matcher = ParametersMatcher.new(params)
+ assert_equal '(1, 2, [3, 4])', parameters_matcher.mocha_inspect
+ end
+
+ def test_should_display_numeric_arguments_as_is
+ params = [1, 2, 3]
+ parameters_matcher = ParametersMatcher.new(params)
+ assert_equal '(1, 2, 3)', parameters_matcher.mocha_inspect
+ end
+
+ def test_should_remove_curly_braces_if_hash_is_only_argument
+ params = [{:a => 1, :z => 2}]
+ parameters_matcher = ParametersMatcher.new(params)
+ assert_nil parameters_matcher.mocha_inspect.index('{')
+ assert_nil parameters_matcher.mocha_inspect.index('}')
+ end
+
+ def test_should_not_remove_curly_braces_if_hash_is_not_the_only_argument
+ params = [1, {:a => 1}]
+ parameters_matcher = ParametersMatcher.new(params)
+ assert_equal '(1, {:a => 1})', parameters_matcher.mocha_inspect
+ end
+
+ def test_should_indicate_that_matcher_will_match_any_actual_parameters
+ parameters_matcher = ParametersMatcher.new
+ assert_equal '(any_parameters)', parameters_matcher.mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/return_values_test.rb b/vendor/gems/mocha-0.5.6/test/unit/return_values_test.rb
new file mode 100644
index 000000000..01ddfbcd5
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/return_values_test.rb
@@ -0,0 +1,63 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+
+require 'mocha/return_values'
+
+class ReturnValuesTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_return_nil
+ values = ReturnValues.new
+ assert_nil values.next
+ end
+
+ def test_should_keep_returning_nil
+ values = ReturnValues.new
+ values.next
+ assert_nil values.next
+ assert_nil values.next
+ end
+
+ def test_should_return_evaluated_single_return_value
+ values = ReturnValues.new(SingleReturnValue.new('value'))
+ assert_equal 'value', values.next
+ end
+
+ def test_should_keep_returning_evaluated_single_return_value
+ values = ReturnValues.new(SingleReturnValue.new('value'))
+ values.next
+ assert_equal 'value', values.next
+ assert_equal 'value', values.next
+ end
+
+ def test_should_return_consecutive_evaluated_single_return_values
+ values = ReturnValues.new(SingleReturnValue.new('value_1'), SingleReturnValue.new('value_2'))
+ assert_equal 'value_1', values.next
+ assert_equal 'value_2', values.next
+ end
+
+ def test_should_keep_returning_last_of_consecutive_evaluated_single_return_values
+ values = ReturnValues.new(SingleReturnValue.new('value_1'), SingleReturnValue.new('value_2'))
+ values.next
+ values.next
+ assert_equal 'value_2', values.next
+ assert_equal 'value_2', values.next
+ end
+
+ def test_should_build_single_return_values_for_each_values
+ values = ReturnValues.build('value_1', 'value_2', 'value_3').values
+ assert_equal 'value_1', values[0].evaluate
+ assert_equal 'value_2', values[1].evaluate
+ assert_equal 'value_3', values[2].evaluate
+ end
+
+ def test_should_combine_two_sets_of_return_values
+ values_1 = ReturnValues.build('value_1')
+ values_2 = ReturnValues.build('value_2a', 'value_2b')
+ values = (values_1 + values_2).values
+ assert_equal 'value_1', values[0].evaluate
+ assert_equal 'value_2a', values[1].evaluate
+ assert_equal 'value_2b', values[2].evaluate
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/sequence_test.rb b/vendor/gems/mocha-0.5.6/test/unit/sequence_test.rb
new file mode 100644
index 000000000..544b3fe9c
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/sequence_test.rb
@@ -0,0 +1,104 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/sequence'
+require 'mocha/expectation'
+
+class SequenceTest < Test::Unit::TestCase
+
+ include Mocha
+
+ class FakeExpectation
+
+ attr_reader :ordering_constraints
+
+ def initialize(satisfied = false)
+ @satisfied = satisfied
+ @ordering_constraints = []
+ end
+
+ def add_ordering_constraint(ordering_constraint)
+ @ordering_constraints << ordering_constraint
+ end
+
+ def satisfied?
+ @satisfied
+ end
+
+ end
+
+ def test_should_be_satisfied_if_no_expectations_added
+ sequence = Sequence.new('name')
+ assert sequence.satisfied_to_index?(0)
+ end
+
+ def test_should_be_satisfied_if_one_unsatisfied_expectations_added_but_it_is_not_included_by_index
+ sequence = Sequence.new('name')
+ expectation = FakeExpectation.new(satisfied = false)
+ sequence.constrain_as_next_in_sequence(expectation)
+ assert sequence.satisfied_to_index?(0)
+ end
+
+ def test_should_not_be_satisfied_if_one_unsatisfied_expectations_added_and_it_is_included_by_index
+ sequence = Sequence.new('name')
+ expectation = FakeExpectation.new(satisfied = false)
+ sequence.constrain_as_next_in_sequence(expectation)
+ assert !sequence.satisfied_to_index?(1)
+ end
+
+ def test_should_be_satisfied_if_one_satisfied_expectations_added_and_it_is_included_by_index
+ sequence = Sequence.new('name')
+ expectation = FakeExpectation.new(satisfied = true)
+ sequence.constrain_as_next_in_sequence(expectation)
+ assert sequence.satisfied_to_index?(1)
+ end
+
+ def test_should_not_be_satisfied_if_one_satisfied_and_one_unsatisfied_expectation_added_and_both_are_included_by_index
+ sequence = Sequence.new('name')
+ expectation_one = FakeExpectation.new(satisfied = true)
+ expectation_two = FakeExpectation.new(satisfied = false)
+ sequence.constrain_as_next_in_sequence(expectation_one)
+ sequence.constrain_as_next_in_sequence(expectation_two)
+ assert !sequence.satisfied_to_index?(2)
+ end
+
+ def test_should_be_satisfied_if_two_satisfied_expectations_added_and_both_are_included_by_index
+ sequence = Sequence.new('name')
+ expectation_one = FakeExpectation.new(satisfied = true)
+ expectation_two = FakeExpectation.new(satisfied = true)
+ sequence.constrain_as_next_in_sequence(expectation_one)
+ sequence.constrain_as_next_in_sequence(expectation_two)
+ assert sequence.satisfied_to_index?(2)
+ end
+
+ def test_should_add_ordering_constraint_to_expectation
+ sequence = Sequence.new('name')
+ expectation = FakeExpectation.new
+ sequence.constrain_as_next_in_sequence(expectation)
+ assert_equal 1, expectation.ordering_constraints.length
+ end
+
+ def test_should_not_allow_invocation_of_second_method_when_first_n_sequence_has_not_been_invoked
+ sequence = Sequence.new('name')
+ expectation_one = FakeExpectation.new(satisfied = false)
+ expectation_two = FakeExpectation.new(satisfied = false)
+ sequence.constrain_as_next_in_sequence(expectation_one)
+ sequence.constrain_as_next_in_sequence(expectation_two)
+ assert !expectation_two.ordering_constraints[0].allows_invocation_now?
+ end
+
+ def test_should_allow_invocation_of_second_method_when_first_in_sequence_has_been_invoked
+ sequence = Sequence.new('name')
+ expectation_one = FakeExpectation.new(satisfied = true)
+ expectation_two = FakeExpectation.new(satisfied = false)
+ sequence.constrain_as_next_in_sequence(expectation_one)
+ sequence.constrain_as_next_in_sequence(expectation_two)
+ assert expectation_two.ordering_constraints[0].allows_invocation_now?
+ end
+
+ def test_should_describe_ordering_constraint_as_being_part_of_named_sequence
+ sequence = Sequence.new('wibble')
+ expectation = FakeExpectation.new
+ sequence.constrain_as_next_in_sequence(expectation)
+ assert_equal "in sequence 'wibble'", expectation.ordering_constraints[0].mocha_inspect
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/setup_and_teardown_test.rb b/vendor/gems/mocha-0.5.6/test/unit/setup_and_teardown_test.rb
new file mode 100644
index 000000000..83247888e
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/setup_and_teardown_test.rb
@@ -0,0 +1,76 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/mock'
+
+require 'mocha/setup_and_teardown'
+
+class SetupAndTeardownTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_instantiate_new_stubba
+ test_case = stubbed_test_case_class.new
+ test_case.setup_stubs
+
+ assert $stubba
+ assert $stubba.is_a?(Mocha::Central)
+ end
+
+ def test_should_verify_all_expectations
+ test_case = stubbed_test_case_class.new
+ stubba = Mock.new
+ stubba.expects(:verify_all)
+ $stubba = stubba
+
+ test_case.verify_stubs
+
+ stubba.verify
+ end
+
+ def test_should_yield_to_block_for_each_assertion
+ test_case = stubbed_test_case_class.new
+ $stubba = Mock.new
+ $stubba.stubs(:verify_all).yields
+ yielded = false
+
+ test_case.verify_stubs { yielded = true }
+
+ assert_equal true, yielded
+ end
+
+ def test_should_unstub_all_stubbed_methods
+ test_case = stubbed_test_case_class.new
+ stubba = Mock.new
+ stubba.expects(:unstub_all)
+ $stubba = stubba
+
+ test_case.teardown_stubs
+
+ stubba.verify
+ end
+
+ def test_should_set_stubba_to_nil
+ test_case = stubbed_test_case_class.new
+ $stubba = Mock.new
+ $stubba.stubs(:unstub_all)
+
+ test_case.teardown_stubs
+
+ assert_nil $stubba
+ end
+
+ def test_should_not_raise_exception_if_no_stubba_central_available
+ test_case = stubbed_test_case_class.new
+ $stubba = nil
+ assert_nothing_raised { test_case.teardown_stubs }
+ end
+
+ private
+
+ def stubbed_test_case_class
+ Class.new do
+ include Mocha::SetupAndTeardown
+ end
+ end
+
+end
+
diff --git a/vendor/gems/mocha-0.5.6/test/unit/single_return_value_test.rb b/vendor/gems/mocha-0.5.6/test/unit/single_return_value_test.rb
new file mode 100644
index 000000000..9d3d799b0
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/single_return_value_test.rb
@@ -0,0 +1,33 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+
+require 'mocha/single_return_value'
+require 'deprecation_disabler'
+
+class SingleReturnValueTest < Test::Unit::TestCase
+
+ include Mocha
+ include DeprecationDisabler
+
+ def test_should_return_value
+ value = SingleReturnValue.new('value')
+ assert_equal 'value', value.evaluate
+ end
+
+ def test_should_return_result_of_calling_proc
+ proc = lambda { 'value' }
+ value = SingleReturnValue.new(proc)
+ result = nil
+ disable_deprecations { result = value.evaluate }
+ assert_equal 'value', result
+ end
+
+ def test_should_indicate_deprecated_use_of_expectation_returns_method
+ proc = lambda {}
+ value = SingleReturnValue.new(proc)
+ Deprecation.messages = []
+ disable_deprecations { value.evaluate }
+ expected_message = "use of Expectation#returns with instance of Proc - see Expectation#returns RDoc for alternatives"
+ assert_equal [expected_message], Deprecation.messages
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/single_yield_test.rb b/vendor/gems/mocha-0.5.6/test/unit/single_yield_test.rb
new file mode 100644
index 000000000..12bd0a2fd
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/single_yield_test.rb
@@ -0,0 +1,18 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+
+require 'mocha/single_yield'
+
+class SingleYieldTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_provide_parameters_for_single_yield_in_single_invocation
+ parameter_group = SingleYield.new(1, 2, 3)
+ parameter_groups = []
+ parameter_group.each do |parameters|
+ parameter_groups << parameters
+ end
+ assert_equal [[1, 2, 3]], parameter_groups
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/string_inspect_test.rb b/vendor/gems/mocha-0.5.6/test/unit/string_inspect_test.rb
new file mode 100644
index 000000000..43b9c4e32
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/string_inspect_test.rb
@@ -0,0 +1,11 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/inspect'
+
+class StringInspectTest < Test::Unit::TestCase
+
+ def test_should_replace_escaped_quotes_with_single_quote
+ string = "my_string"
+ assert_equal "'my_string'", string.mocha_inspect
+ end
+
+end
diff --git a/vendor/gems/mocha-0.5.6/test/unit/stub_test.rb b/vendor/gems/mocha-0.5.6/test/unit/stub_test.rb
new file mode 100644
index 000000000..a225963b9
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/stub_test.rb
@@ -0,0 +1,24 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+require 'mocha/stub'
+
+class StubTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_always_verify_successfully
+ stub = Stub.new(nil, :expected_method)
+ assert stub.verify
+ stub.invoke
+ assert stub.verify
+ end
+
+ def test_should_match_successfully_for_any_number_of_invocations
+ stub = Stub.new(nil, :expected_method)
+ assert stub.match?(:expected_method)
+ stub.invoke
+ assert stub.match?(:expected_method)
+ stub.invoke
+ assert stub.match?(:expected_method)
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/mocha-0.5.6/test/unit/yield_parameters_test.rb b/vendor/gems/mocha-0.5.6/test/unit/yield_parameters_test.rb
new file mode 100644
index 000000000..4e93f1336
--- /dev/null
+++ b/vendor/gems/mocha-0.5.6/test/unit/yield_parameters_test.rb
@@ -0,0 +1,93 @@
+require File.join(File.dirname(__FILE__), "..", "test_helper")
+
+require 'mocha/yield_parameters'
+require 'mocha/no_yields'
+require 'mocha/single_yield'
+require 'mocha/multiple_yields'
+
+class YieldParametersTest < Test::Unit::TestCase
+
+ include Mocha
+
+ def test_should_return_null_yield_parameter_group_by_default
+ yield_parameters = YieldParameters.new
+ assert yield_parameters.next_invocation.is_a?(NoYields)
+ end
+
+ def test_should_return_single_yield_parameter_group
+ yield_parameters = YieldParameters.new
+ yield_parameters.add(1, 2, 3)
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(SingleYield)
+ assert_equal [1, 2, 3], parameter_group.parameters
+ end
+
+ def test_should_keep_returning_single_yield_parameter_group
+ yield_parameters = YieldParameters.new
+ yield_parameters.add(1, 2, 3)
+ yield_parameters.next_invocation
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(SingleYield)
+ assert_equal [1, 2, 3], parameter_group.parameters
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(SingleYield)
+ assert_equal [1, 2, 3], parameter_group.parameters
+ end
+
+ def test_should_return_consecutive_single_yield_parameter_groups
+ yield_parameters = YieldParameters.new
+ yield_parameters.add(1, 2, 3)
+ yield_parameters.add(4, 5)
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(SingleYield)
+ assert_equal [1, 2, 3], parameter_group.parameters
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(SingleYield)
+ assert_equal [4, 5], parameter_group.parameters
+ end
+
+ def test_should_return_multiple_yield_parameter_group
+ yield_parameters = YieldParameters.new
+ yield_parameters.multiple_add([1, 2, 3], [4, 5])
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(MultipleYields)
+ assert_equal [[1, 2, 3], [4, 5]], parameter_group.parameter_groups
+ end
+
+ def test_should_keep_returning_multiple_yield_parameter_group
+ yield_parameters = YieldParameters.new
+ yield_parameters.multiple_add([1, 2, 3], [4, 5])
+ yield_parameters.next_invocation
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(MultipleYields)
+ assert_equal [[1, 2, 3], [4, 5]], parameter_group.parameter_groups
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(MultipleYields)
+ assert_equal [[1, 2, 3], [4, 5]], parameter_group.parameter_groups
+ end
+
+ def test_should_return_consecutive_multiple_yield_parameter_groups
+ yield_parameters = YieldParameters.new
+ yield_parameters.multiple_add([1, 2, 3], [4, 5])
+ yield_parameters.multiple_add([6, 7], [8, 9, 0])
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(MultipleYields)
+ assert_equal [[1, 2, 3], [4, 5]], parameter_group.parameter_groups
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(MultipleYields)
+ assert_equal [[6, 7], [8, 9, 0]], parameter_group.parameter_groups
+ end
+
+ def test_should_return_consecutive_single_and_multiple_yield_parameter_groups
+ yield_parameters = YieldParameters.new
+ yield_parameters.add(1, 2, 3)
+ yield_parameters.multiple_add([4, 5, 6], [7, 8])
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(SingleYield)
+ assert_equal [1, 2, 3], parameter_group.parameters
+ parameter_group = yield_parameters.next_invocation
+ assert parameter_group.is_a?(MultipleYields)
+ assert_equal [[4, 5, 6], [7, 8]], parameter_group.parameter_groups
+ end
+
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/CHANGES b/vendor/gems/rspec/CHANGES
index e17793323..887c9d857 100644
--- a/vendor/gems/rspec/CHANGES
+++ b/vendor/gems/rspec/CHANGES
@@ -1,3 +1,163 @@
+== Version 1.1.3
+
+Maintenance release.
+
+* 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.
+
+* 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
@@ -31,7 +191,7 @@ able to use the passed Example instance as if it were a String.
* 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 Krmer)
+* 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
@@ -56,7 +216,7 @@ able to use the passed Example instance as if it were a String.
* 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 ViewExampleController (Patch from Eloy Duran)
+* 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
diff --git a/vendor/gems/rspec/EXAMPLES.rd b/vendor/gems/rspec/EXAMPLES.rd
deleted file mode 100644
index ac1d40b3e..000000000
--- a/vendor/gems/rspec/EXAMPLES.rd
+++ /dev/null
@@ -1,111 +0,0 @@
-# Examples with no descriptions
-# * should equal 5
-# * should be < 5
-# * should include "a"
-# * should respond to #size
-# State created in before(:all)
-# * should be accessible from example
-# * should not have sideffects
-# BehaveAsExample::BluesGuitarist
-# * should behave as guitarist
-# BehaveAsExample::RockGuitarist
-# * should behave as guitarist
-# BehaveAsExample::ClassicGuitarist
-# * should not behave as guitarist
-# Animals::Mouse
-# * should eat cheese
-# * should not eat cat
-# Some integers
-# * The root of 1 square should be 1
-# * The root of 2 square should be 2
-# * The root of 3 square should be 3
-# * The root of 4 square should be 4
-# * The root of 5 square should be 5
-# * The root of 6 square should be 6
-# * The root of 7 square should be 7
-# * The root of 8 square should be 8
-# * The root of 9 square should be 9
-# * The root of 10 square should be 10
-# A FileAccessor
-# * should open a file and pass it to the processor's process method
-# Greeter
-# * should say Hi to person
-# * should say Hi to nobody
-# a context with helper a method
-# * should make that method available to specs
-# An IoProcessor
-# * should raise nothing when the file is exactly 32 bytes
-# * should raise an exception when the file length is less than 32 bytes
-# A legacy spec
-# * should work fine
-# A consumer of a mock
-# * should be able to send messages to the mock
-# a mock
-# * should be able to mock the same message twice w/ different args
-# * should be able to mock the same message twice w/ different args in reverse order
-# A partial mock
-# * should work at the class level
-# * should revert to the original after each spec
-# * can be mocked w/ ordering
-# pending example (using pending method)
-# * pending example (using pending method) should be reported as "PENDING: for some reason" [PENDING: for some reason]
-# pending example (with no block)
-# * pending example (with no block) should be reported as "PENDING: Not Yet Implemented" [PENDING: Not Yet Implemented]
-# pending example (with block for pending)
-# * pending example (with block for pending) should have a failing block, passed to pending, reported as "PENDING: for some reason" [PENDING: for some reason]
-# BDD framework
-# * should be adopted quickly
-# * should be intuitive
-# SharedBehaviourExample::OneThing
-# * should do what things do
-# * should have access to helper methods defined in the shared behaviour
-# SharedBehaviourExample::AnotherThing
-# * should do what things do
-# Stack (empty)
-# * should be empty
-# * should not be full
-# * should add to the top when sent #push
-# * should complain when sent #peek
-# * should complain when sent #pop
-# Stack (with one item)
-# * should not be empty
-# * should return the top item when sent #peek
-# * should NOT remove the top item when sent #peek
-# * should return the top item when sent #pop
-# * should remove the top item when sent #pop
-# * should not be full
-# * should add to the top when sent #push
-# Stack (with one item less than capacity)
-# * should not be empty
-# * should return the top item when sent #peek
-# * should NOT remove the top item when sent #peek
-# * should return the top item when sent #pop
-# * should remove the top item when sent #pop
-# * should not be full
-# * should add to the top when sent #push
-# Stack (full)
-# * should be full
-# * should not be empty
-# * should return the top item when sent #peek
-# * should NOT remove the top item when sent #peek
-# * should return the top item when sent #pop
-# * should remove the top item when sent #pop
-# * should complain on #push
-# A consumer of a stub
-# * should be able to stub methods on any Object
-# A stubbed method on a class
-# * should return the stubbed value
-# * should revert to the original method after each spec
-# * can stub! and mock the same message
-# A mock
-# * can stub!
-# * can stub! and mock
-# * can stub! and mock the same message
-# RSpec should integrate with Test::Unit::TestCase
-# * TestCase#setup should be called.
-# * RSpec should be able to access TestCase methods
-# * RSpec should be able to accept included modules
-
-Finished in 0.030063 seconds
-
-78 examples, 0 failures, 3 pending
diff --git a/vendor/gems/rspec/README b/vendor/gems/rspec/README
index ee351245d..0683b0deb 100644
--- a/vendor/gems/rspec/README
+++ b/vendor/gems/rspec/README
@@ -1,11 +1,13 @@
== RSpec
-RSpec is a Behaviour Definition Framework intended for use in Behaviour
-Driven Development. RSpec plays the same role that a unit testing framework
-would play in a Test Driven Development environment, but does so using
-words and structures that better support BDD.
+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 four modules:
+RSpec ships with several modules:
+
+Spec::Story provides a framework for expressing User Stories
+
+Spec::Example provides a framework for expressing code Examples
Spec::Matchers provides Expression Matchers for use with Spec::Expectations
and Spec::Mocks.
@@ -18,9 +20,6 @@ can do things like:
Spec::Mocks supports creating Mock Objects, Stubs, and adding Mock/Stub
behaviour to your existing objects.
-Spec::Runner provides a very small but powerful DSL for writing executable
-examples of how your code should work.
-
== Installation
The simplest approach is to install the gem:
@@ -39,9 +38,8 @@ In order to run RSpec's full suite of specs (rake pre_commit) you must install t
* rake # Runs the build script
* rcov # Verifies that the code is 100% covered by specs
-* webgen # Generates the static HTML website
-* RedCloth # Required by webgen
-* syntax # Required by our own custom webgen extension to highlight ruby code
+* webby # Generates the static HTML website
+* syntax # Required to highlight ruby code
* diff-lcs # Required if you use the --diff switch
* win32console # Required by the --colour switch if you're on Windows
* meta_project # Required in order to make releases at RubyForge
@@ -60,7 +58,6 @@ Once those are all installed, you should be able to run the suite with the follo
* cd ..
* rake pre_commit
-
Note that RSpec itself - once built - doesn't have any dependencies outside the Ruby core
and stdlib - with a few exceptions:
@@ -69,3 +66,6 @@ and stdlib - with a few exceptions:
* The Spec::Rake::SpecTask needs RCov if RCov is enabled in the task.
See http://rspec.rubyforge.org for further documentation.
+
+== Contributing
+
diff --git a/vendor/gems/rspec/Rakefile b/vendor/gems/rspec/Rakefile
index 24ed57963..c60d5d466 100644
--- a/vendor/gems/rspec/Rakefile
+++ b/vendor/gems/rspec/Rakefile
@@ -4,14 +4,14 @@ require 'rake/gempackagetask'
require 'rake/contrib/rubyforgepublisher'
require 'rake/clean'
require 'rake/rdoctask'
+require 'rake/testtask'
require 'spec/version'
dir = File.dirname(__FILE__)
-$LOAD_PATH.unshift(File.expand_path("#{dir}/../pre_commit/lib"))
+$LOAD_PATH.unshift(File.expand_path("#{dir}/pre_commit/lib"))
require "pre_commit"
# 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_specdoc.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'
@@ -22,44 +22,41 @@ PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
PKG_FILES = FileList[
'[A-Z]*',
'lib/**/*.rb',
- 'spec/**/*.rb',
+ 'spec/**/*',
'examples/**/*',
- 'plugins/**/*'
+ 'failing_examples/**/*',
+ 'plugins/**/*',
+ 'stories/**/*',
+ 'pre_commit/**/*',
+ 'rake_tasks/**/*'
]
-FileUtils.touch(File.dirname(__FILE__) + '/previous_failures.txt')
task :default => [:verify_rcov]
+task :verify_rcov => [:spec, :stories]
desc "Run all specs"
Spec::Rake::SpecTask.new do |t|
- t.spec_files = FileList[
- 'spec/**/*_spec.rb',
- '../RSpec.tmbundle/Support/spec/*_spec.rb'
- # TODO: get these in too - need to fix coverage
- # '../spec_ui/spec/**/*_spec.rb'
- ]
- t.spec_opts = ['--options', 'spec.opts']
- t.rcov = true
- t.rcov_dir = '../doc/output/coverage'
- t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,examples']
+ 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
end
-desc "Run all translated specs"
-Spec::Rake::SpecTask.new('translated_specs') do |t|
- t.spec_files = FileList['translated_specs/**/*_spec.rb'].exclude( # These translate, but have other quirks
- 'translated_specs/spec/translator_spec.rb',
- 'translated_specs/spec/runner/formatter/html_formatter_spec.rb',
- 'translated_specs/spec/runner/option_parser_spec.rb'
- )
- t.spec_opts = ['--options', 'spec.opts']
- t.rcov = true
- t.rcov_dir = '../doc/output/coverage'
- t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,examples']
+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
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', 'vendor/RSpec.tmbundle/Support/spec/*_spec.rb']
+ t.spec_files = FileList['spec/**/*_spec.rb', '../../RSpec.tmbundle/Support/spec/*_spec.rb']
t.spec_opts = ['--format html:../doc/output/report.html','--backtrace']
end
@@ -68,21 +65,11 @@ Spec::Rake::SpecTask.new('failing_examples') do |t|
t.spec_files = FileList['failing_examples/**/*_spec.rb']
end
-desc 'Generate HTML documentation for website'
-task :webgen do
- core.webgen
-end
-
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', 'EXAMPLES.rd', 'UPGRADE', 'lib/**/*.rb')
-end
-
-desc "Generate EXAMPLES.rb"
-task :rdoc do
- core.rdoc
+ rdoc.rdoc_files.include('README', 'CHANGES', 'MIT-LICENSE', 'UPGRADE', 'lib/**/*.rb')
end
spec = Gem::Specification.new do |s|
@@ -103,13 +90,13 @@ spec = Gem::Specification.new do |s|
s.rdoc_options = rd.options
s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$|^EXAMPLES.rd$/ }.to_a
- s.autorequire = 'spec'
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"
end
@@ -141,7 +128,7 @@ task :clobber do
core.clobber
end
-task :release => [:clobber, :verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_website, :publish_news]
+task :release => [:clobber, :verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_news]
desc "Verifies that there is no uncommitted code"
task :verify_committed do
@@ -177,9 +164,7 @@ task(:pre_commit) {core.pre_commit}
desc "Build the website, but do not publish it"
task(:website) {core.website}
-task :rdoc_rails do
- core.rdoc_rails
-end
+task(:rdoc_rails) {core.rdoc_rails}
task :verify_user do
raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
@@ -231,24 +216,14 @@ task :package_tmbundle do
end
task :pkg => :package_tmbundle
-desc "Package the Spec::Ui gem"
-task :package_spec_ui do
- Dir.chdir '../spec_ui' do
- `rake clobber gem`
- end
-end
-task :pkg => :package_spec_ui
-
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
- require File.dirname(__FILE__) + '/../spec_ui/lib/spec/ui/version'
release_files = FileList[
"pkg/#{PKG_FILE_NAME}.gem",
"pkg/#{PKG_FILE_NAME}.tgz",
"pkg/rspec_on_rails-#{PKG_VERSION}.tgz",
"pkg/#{PKG_FILE_NAME}.zip",
- "pkg/RSpec-#{PKG_VERSION}.tmbundle.tgz",
- "../spec_ui/pkg/spec_ui-#{Spec::Ui::VERSION::STRING}.gem"
+ "pkg/RSpec-#{PKG_VERSION}.tmbundle.tgz"
]
unless Spec::VERSION::RELEASE_CANDIDATE
require 'meta_project'
diff --git a/vendor/gems/rspec/TODO b/vendor/gems/rspec/TODO
new file mode 100644
index 000000000..250bb66c2
--- /dev/null
+++ b/vendor/gems/rspec/TODO
@@ -0,0 +1,2 @@
+=== Before releasing 1.1.0:
+
diff --git a/vendor/gems/rspec/bin/spec b/vendor/gems/rspec/bin/spec
index a7e6ce0cb..283176d76 100755
--- a/vendor/gems/rspec/bin/spec
+++ b/vendor/gems/rspec/bin/spec
@@ -1,3 +1,4 @@
+#!/usr/bin/env ruby
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
require 'spec'
-::Spec::Runner::CommandLine.run(ARGV, STDERR, STDOUT, true, true)
+exit ::Spec::Runner::CommandLine.run(rspec_options)
diff --git a/vendor/gems/rspec/bin/spec_translator b/vendor/gems/rspec/bin/spec_translator
index 9df11dad2..abd50b743 100644..100755
--- a/vendor/gems/rspec/bin/spec_translator
+++ b/vendor/gems/rspec/bin/spec_translator
@@ -1,8 +1,8 @@
-#!/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)
+#!/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/gems/rspec/examples/helper_method_example.rb b/vendor/gems/rspec/examples/helper_method_example.rb
deleted file mode 100644
index 5f94cf151..000000000
--- a/vendor/gems/rspec/examples/helper_method_example.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-describe "a context 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
diff --git a/vendor/gems/rspec/examples/multi_threaded_behaviour_runner.rb b/vendor/gems/rspec/examples/multi_threaded_behaviour_runner.rb
deleted file mode 100644
index e2824a61e..000000000
--- a/vendor/gems/rspec/examples/multi_threaded_behaviour_runner.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-
-class MultiThreadedBehaviourRunner < Spec::Runner::BehaviourRunner
- def initialize(options)
- super
- # configure these
- @thread_count = 4
- @thread_wait = 0
- end
-
- def run_behaviours(behaviours)
- @threads = []
- q = Queue.new
- behaviours.each { |b| q << b}
- @thread_count.times do
- @threads << Thread.new(q) do |queue|
- while not queue.empty?
- behaviour = queue.pop
- behaviour.run(@options.reporter, @options.dry_run, @options.reverse)
- end
- end
- sleep @thread_wait
- end
- @threads.each {|t| t.join}
- end
-end
diff --git a/vendor/gems/rspec/examples/auto_spec_description_example.rb b/vendor/gems/rspec/examples/pure/autogenerated_docstrings_example.rb
index a4928ef4a..a4928ef4a 100644
--- a/vendor/gems/rspec/examples/auto_spec_description_example.rb
+++ b/vendor/gems/rspec/examples/pure/autogenerated_docstrings_example.rb
diff --git a/vendor/gems/rspec/examples/before_and_after_example.rb b/vendor/gems/rspec/examples/pure/before_and_after_example.rb
index 09e3805fb..7db6274ef 100644
--- a/vendor/gems/rspec/examples/before_and_after_example.rb
+++ b/vendor/gems/rspec/examples/pure/before_and_after_example.rb
@@ -1,3 +1,4 @@
+require File.dirname(__FILE__) + '/spec_helper'
$global = 0
describe "State created in before(:all)" do
diff --git a/vendor/gems/rspec/examples/behave_as_example.rb b/vendor/gems/rspec/examples/pure/behave_as_example.rb
index e95d1469a..e95d1469a 100644..100755
--- a/vendor/gems/rspec/examples/behave_as_example.rb
+++ b/vendor/gems/rspec/examples/pure/behave_as_example.rb
diff --git a/vendor/gems/rspec/examples/custom_expectation_matchers.rb b/vendor/gems/rspec/examples/pure/custom_expectation_matchers.rb
index 075bb542d..075bb542d 100644
--- a/vendor/gems/rspec/examples/custom_expectation_matchers.rb
+++ b/vendor/gems/rspec/examples/pure/custom_expectation_matchers.rb
diff --git a/vendor/gems/rspec/examples/custom_formatter.rb b/vendor/gems/rspec/examples/pure/custom_formatter.rb
index 851c9906f..c449fdc2e 100644
--- a/vendor/gems/rspec/examples/custom_formatter.rb
+++ b/vendor/gems/rspec/examples/pure/custom_formatter.rb
@@ -1,3 +1,4 @@
+require File.dirname(__FILE__) + '/spec_helper'
require 'spec/runner/formatter/progress_bar_formatter'
# Example of a formatter with custom bactrace printing. Run me with:
diff --git a/vendor/gems/rspec/examples/dynamic_spec.rb b/vendor/gems/rspec/examples/pure/dynamic_spec.rb
index 15d473d61..15d473d61 100644
--- a/vendor/gems/rspec/examples/dynamic_spec.rb
+++ b/vendor/gems/rspec/examples/pure/dynamic_spec.rb
diff --git a/vendor/gems/rspec/examples/file_accessor.rb b/vendor/gems/rspec/examples/pure/file_accessor.rb
index 16bc45dbb..ff6fb743c 100644
--- a/vendor/gems/rspec/examples/file_accessor.rb
+++ b/vendor/gems/rspec/examples/pure/file_accessor.rb
@@ -1,3 +1,4 @@
+require File.dirname(__FILE__) + '/spec_helper'
class FileAccessor
def open_and_handle_with(pathname, processor)
pathname.open do |io|
diff --git a/vendor/gems/rspec/examples/file_accessor_spec.rb b/vendor/gems/rspec/examples/pure/file_accessor_spec.rb
index 628d4c0b0..628d4c0b0 100644
--- a/vendor/gems/rspec/examples/file_accessor_spec.rb
+++ b/vendor/gems/rspec/examples/pure/file_accessor_spec.rb
diff --git a/vendor/gems/rspec/examples/greeter_spec.rb b/vendor/gems/rspec/examples/pure/greeter_spec.rb
index 7d67e3187..ec7669dcc 100644
--- a/vendor/gems/rspec/examples/greeter_spec.rb
+++ b/vendor/gems/rspec/examples/pure/greeter_spec.rb
@@ -1,3 +1,4 @@
+require File.dirname(__FILE__) + '/spec_helper'
# greeter.rb
#
# Based on http://glu.ttono.us/articles/2006/12/19/tormenting-your-tests-with-heckle
diff --git a/vendor/gems/rspec/examples/pure/helper_method_example.rb b/vendor/gems/rspec/examples/pure/helper_method_example.rb
new file mode 100644
index 000000000..d97f19e65
--- /dev/null
+++ b/vendor/gems/rspec/examples/pure/helper_method_example.rb
@@ -0,0 +1,14 @@
+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/gems/rspec/examples/io_processor.rb b/vendor/gems/rspec/examples/pure/io_processor.rb
index 6b15147b6..6b15147b6 100644
--- a/vendor/gems/rspec/examples/io_processor.rb
+++ b/vendor/gems/rspec/examples/pure/io_processor.rb
diff --git a/vendor/gems/rspec/examples/io_processor_spec.rb b/vendor/gems/rspec/examples/pure/io_processor_spec.rb
index 5cab7bf31..5cab7bf31 100644
--- a/vendor/gems/rspec/examples/io_processor_spec.rb
+++ b/vendor/gems/rspec/examples/pure/io_processor_spec.rb
diff --git a/vendor/gems/rspec/examples/legacy_spec.rb b/vendor/gems/rspec/examples/pure/legacy_spec.rb
index 61669e7e6..c86369515 100644
--- a/vendor/gems/rspec/examples/legacy_spec.rb
+++ b/vendor/gems/rspec/examples/pure/legacy_spec.rb
@@ -1,3 +1,4 @@
+require File.dirname(__FILE__) + '/spec_helper'
context "A legacy spec" do
setup do
end
diff --git a/vendor/gems/rspec/examples/mocking_example.rb b/vendor/gems/rspec/examples/pure/mocking_example.rb
index 6adbef59d..6adbef59d 100644
--- a/vendor/gems/rspec/examples/mocking_example.rb
+++ b/vendor/gems/rspec/examples/pure/mocking_example.rb
diff --git a/vendor/gems/rspec/examples/pure/multi_threaded_behaviour_runner.rb b/vendor/gems/rspec/examples/pure/multi_threaded_behaviour_runner.rb
new file mode 100644
index 000000000..36edcd497
--- /dev/null
+++ b/vendor/gems/rspec/examples/pure/multi_threaded_behaviour_runner.rb
@@ -0,0 +1,28 @@
+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/gems/rspec/examples/pure/nested_classes_example.rb b/vendor/gems/rspec/examples/pure/nested_classes_example.rb
new file mode 100644
index 000000000..abe43b0a6
--- /dev/null
+++ b/vendor/gems/rspec/examples/pure/nested_classes_example.rb
@@ -0,0 +1,36 @@
+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/gems/rspec/examples/partial_mock_example.rb b/vendor/gems/rspec/examples/pure/partial_mock_example.rb
index 841ec8847..841ec8847 100644
--- a/vendor/gems/rspec/examples/partial_mock_example.rb
+++ b/vendor/gems/rspec/examples/pure/partial_mock_example.rb
diff --git a/vendor/gems/rspec/examples/pending_example.rb b/vendor/gems/rspec/examples/pure/pending_example.rb
index 13f3d00c4..13f3d00c4 100644
--- a/vendor/gems/rspec/examples/pending_example.rb
+++ b/vendor/gems/rspec/examples/pure/pending_example.rb
diff --git a/vendor/gems/rspec/examples/predicate_example.rb b/vendor/gems/rspec/examples/pure/predicate_example.rb
index 1202bb670..1202bb670 100644
--- a/vendor/gems/rspec/examples/predicate_example.rb
+++ b/vendor/gems/rspec/examples/pure/predicate_example.rb
diff --git a/vendor/gems/rspec/examples/priority.txt b/vendor/gems/rspec/examples/pure/priority.txt
index 5b00064e2..5b00064e2 100644
--- a/vendor/gems/rspec/examples/priority.txt
+++ b/vendor/gems/rspec/examples/pure/priority.txt
diff --git a/vendor/gems/rspec/examples/pure/shared_example_group_example.rb b/vendor/gems/rspec/examples/pure/shared_example_group_example.rb
new file mode 100644
index 000000000..fb81af1ec
--- /dev/null
+++ b/vendor/gems/rspec/examples/pure/shared_example_group_example.rb
@@ -0,0 +1,81 @@
+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/gems/rspec/examples/pure/shared_stack_examples.rb b/vendor/gems/rspec/examples/pure/shared_stack_examples.rb
new file mode 100644
index 000000000..7a0816250
--- /dev/null
+++ b/vendor/gems/rspec/examples/pure/shared_stack_examples.rb
@@ -0,0 +1,38 @@
+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/gems/rspec/examples/pure/spec_helper.rb b/vendor/gems/rspec/examples/pure/spec_helper.rb
new file mode 100644
index 000000000..1e880796c
--- /dev/null
+++ b/vendor/gems/rspec/examples/pure/spec_helper.rb
@@ -0,0 +1,3 @@
+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/gems/rspec/examples/stack.rb b/vendor/gems/rspec/examples/pure/stack.rb
index 407173f7b..407173f7b 100644
--- a/vendor/gems/rspec/examples/stack.rb
+++ b/vendor/gems/rspec/examples/pure/stack.rb
diff --git a/vendor/gems/rspec/examples/stack_spec.rb b/vendor/gems/rspec/examples/pure/stack_spec.rb
index 22d8a652b..2a769da00 100644
--- a/vendor/gems/rspec/examples/stack_spec.rb
+++ b/vendor/gems/rspec/examples/pure/stack_spec.rb
@@ -1,40 +1,6 @@
require File.dirname(__FILE__) + '/spec_helper'
require File.dirname(__FILE__) + "/stack"
-
-describe "non-empty Stack", :shared => true do
- # NOTE that this one auto-generates the description "should not be empty"
- 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
-
-describe "non-full Stack", :shared => true do
- # NOTE that this one auto-generates the description "should not be full"
- 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
+require File.dirname(__FILE__) + '/shared_stack_examples'
describe Stack, " (empty)" do
before(:each) do
diff --git a/vendor/gems/rspec/examples/pure/stack_spec_with_nested_example_groups.rb b/vendor/gems/rspec/examples/pure/stack_spec_with_nested_example_groups.rb
new file mode 100644
index 000000000..05f6ad464
--- /dev/null
+++ b/vendor/gems/rspec/examples/pure/stack_spec_with_nested_example_groups.rb
@@ -0,0 +1,67 @@
+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/gems/rspec/examples/stubbing_example.rb b/vendor/gems/rspec/examples/pure/stubbing_example.rb
index 31354aec6..31354aec6 100644
--- a/vendor/gems/rspec/examples/stubbing_example.rb
+++ b/vendor/gems/rspec/examples/pure/stubbing_example.rb
diff --git a/vendor/gems/rspec/examples/shared_behaviours_example.rb b/vendor/gems/rspec/examples/shared_behaviours_example.rb
deleted file mode 100644
index 33c924643..000000000
--- a/vendor/gems/rspec/examples/shared_behaviours_example.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-
-module SharedBehaviourExample
- class OneThing
- def what_things_do
- "stuff"
- end
- end
-
- class AnotherThing
- def what_things_do
- "stuff"
- end
- end
-
- describe "All Things", :shared => true 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
- it_should_behave_like "All Things"
- before(:each) { @thing = OneThing.new }
-
- it "should have access to helper methods defined in the shared behaviour" do
- helper_method.should == "helper method"
- end
- end
-
- describe AnotherThing do
- it_should_behave_like "All Things"
- before(:each) { @thing = AnotherThing.new }
- end
-end
diff --git a/vendor/gems/rspec/examples/spec_helper.rb b/vendor/gems/rspec/examples/spec_helper.rb
deleted file mode 100644
index 61f51fbdb..000000000
--- a/vendor/gems/rspec/examples/spec_helper.rb
+++ /dev/null
@@ -1 +0,0 @@
-require File.dirname(__FILE__) + '/../lib/spec'
diff --git a/vendor/gems/rspec/examples/stories/adder.rb b/vendor/gems/rspec/examples/stories/adder.rb
new file mode 100644
index 000000000..0b027b0ff
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/adder.rb
@@ -0,0 +1,13 @@
+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/gems/rspec/examples/stories/addition b/vendor/gems/rspec/examples/stories/addition
new file mode 100644
index 000000000..58f092990
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/addition
@@ -0,0 +1,34 @@
+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/gems/rspec/examples/stories/addition.rb b/vendor/gems/rspec/examples/stories/addition.rb
new file mode 100644
index 000000000..e43f5cf39
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/addition.rb
@@ -0,0 +1,9 @@
+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/gems/rspec/examples/stories/calculator.rb b/vendor/gems/rspec/examples/stories/calculator.rb
new file mode 100644
index 000000000..390437c55
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/calculator.rb
@@ -0,0 +1,65 @@
+$:.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 => 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/gems/rspec/examples/stories/game-of-life/README.txt b/vendor/gems/rspec/examples/stories/game-of-life/README.txt
new file mode 100644
index 000000000..9624ad411
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/README.txt
@@ -0,0 +1,21 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/everything.rb b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/everything.rb
new file mode 100644
index 000000000..90a281da5
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/everything.rb
@@ -0,0 +1,6 @@
+$:.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/gems/rspec/examples/stories/game-of-life/behaviour/examples/examples.rb b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/examples/examples.rb
new file mode 100644
index 000000000..1cadfb3c1
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/examples/examples.rb
@@ -0,0 +1,3 @@
+require 'spec'
+require 'behaviour/examples/game_behaviour'
+require 'behaviour/examples/grid_behaviour'
diff --git a/vendor/gems/rspec/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb
new file mode 100644
index 000000000..ff5b357f0
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb
@@ -0,0 +1,35 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb
new file mode 100644
index 000000000..5be3af519
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb
@@ -0,0 +1,66 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story
new file mode 100644
index 000000000..8374e86c5
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story
@@ -0,0 +1,21 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story
new file mode 100644
index 000000000..0d30b59be
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story
@@ -0,0 +1,21 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story
new file mode 100644
index 000000000..cbc248e73
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story
@@ -0,0 +1,42 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story
new file mode 100644
index 000000000..88895cb69
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story
@@ -0,0 +1,42 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story
new file mode 100644
index 000000000..a9cf1ac64
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story
@@ -0,0 +1,17 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story
new file mode 100644
index 000000000..aeeede77d
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story
@@ -0,0 +1,53 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb
new file mode 100644
index 000000000..81f86baba
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb
@@ -0,0 +1,52 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/helper.rb b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/helper.rb
new file mode 100644
index 000000000..70ed21ec5
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/helper.rb
@@ -0,0 +1,6 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb
new file mode 100644
index 000000000..7ae2d912d
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb
@@ -0,0 +1,26 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/steps.rb b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/steps.rb
new file mode 100644
index 000000000..793590d70
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/steps.rb
@@ -0,0 +1,5 @@
+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/gems/rspec/examples/stories/game-of-life/behaviour/stories/stories.rb b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/stories.rb
new file mode 100644
index 000000000..e60fe01de
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/stories.rb
@@ -0,0 +1,3 @@
+require File.join(File.dirname(__FILE__), *%w[helper])
+require 'behaviour/stories/create_a_cell'
+require 'behaviour/stories/kill_a_cell'
diff --git a/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/stories.txt b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/stories.txt
new file mode 100644
index 000000000..d8f809be3
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/behaviour/stories/stories.txt
@@ -0,0 +1,22 @@
+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/gems/rspec/examples/stories/game-of-life/life.rb b/vendor/gems/rspec/examples/stories/game-of-life/life.rb
new file mode 100644
index 000000000..88263bd00
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/life.rb
@@ -0,0 +1,3 @@
+$: << File.dirname(__FILE__)
+require 'life/game'
+require 'life/grid'
diff --git a/vendor/gems/rspec/examples/stories/game-of-life/life/game.rb b/vendor/gems/rspec/examples/stories/game-of-life/life/game.rb
new file mode 100644
index 000000000..5411b01bf
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/life/game.rb
@@ -0,0 +1,23 @@
+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/gems/rspec/examples/stories/game-of-life/life/grid.rb b/vendor/gems/rspec/examples/stories/game-of-life/life/grid.rb
new file mode 100644
index 000000000..aca23087c
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/game-of-life/life/grid.rb
@@ -0,0 +1,43 @@
+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/gems/rspec/examples/stories/helper.rb b/vendor/gems/rspec/examples/stories/helper.rb
new file mode 100644
index 000000000..2e825b278
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/helper.rb
@@ -0,0 +1,9 @@
+$:.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/gems/rspec/examples/stories/steps/addition_steps.rb b/vendor/gems/rspec/examples/stories/steps/addition_steps.rb
new file mode 100644
index 000000000..3f27095a9
--- /dev/null
+++ b/vendor/gems/rspec/examples/stories/steps/addition_steps.rb
@@ -0,0 +1,18 @@
+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/gems/rspec/examples/test_case_adapter_example.rb b/vendor/gems/rspec/examples/test_case_adapter_example.rb
deleted file mode 100644
index 02ba3be17..000000000
--- a/vendor/gems/rspec/examples/test_case_adapter_example.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#This is an example of using RSpec's expectations in test/unit.
-$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "lib")
-
-require 'test/unit'
-require 'spec/test_case_adapter'
-
-class IntegratingRSpecExpectationsIntoTestCaseTest < Test::Unit::TestCase
-
- def test_should_support_rspecs_equality_expectations
- 5.should == 5
- end
-
- def test_should_support_rspecs_comparison_expectations
- 5.should be > 4
- end
-
- class Band
- def players
- ["John", "Paul", "George", "Ringo"]
- end
- end
-
- def test_should_support_rspecs_collection_expectations
- Band.new.should have(4).players
- end
-end
diff --git a/vendor/gems/rspec/examples/test_case_spec.rb b/vendor/gems/rspec/examples/test_case_spec.rb
deleted file mode 100644
index 4ffa2c598..000000000
--- a/vendor/gems/rspec/examples/test_case_spec.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-require File.dirname(__FILE__) + '/spec_helper'
-require 'test/unit'
-
-class RSpecIntegrationTest < Test::Unit::TestCase
- def self.fixtures(*args)
- @@fixtures = true
- end
-
- def self.verify_class_method
- @@fixtures.should == true
- end
-
- def setup
- @test_case_setup_called = true
- end
-
- def teardown
- @test_case_teardown_called = true
- end
-
- def run(result)
- end
-
- def helper_method
- @helper_method_called = true
- end
-end
-
-module RandomHelperModule
- def random_task
- @random_task_called = true
- end
-end
-
-describe "RSpec should integrate with Test::Unit::TestCase" do
- inherit RSpecIntegrationTest
- include RandomHelperModule
-
- fixtures :some_table
-
- prepend_before(:each) {setup}
-
- before(:each) do
- @rspec_setup_called = true
- end
-
- it "TestCase#setup should be called." do
- @test_case_setup_called.should be_true
- @rspec_setup_called.should be_true
- end
-
- it "RSpec should be able to access TestCase methods" do
- helper_method
- @helper_method_called.should be_true
- end
-
- it "RSpec should be able to accept included modules" do
- random_task
- @random_task_called.should be_true
- end
-
- after(:each) do
- RSpecIntegrationTest.verify_class_method
- end
-end
diff --git a/vendor/gems/rspec/failing_examples/README.txt b/vendor/gems/rspec/failing_examples/README.txt
new file mode 100644
index 000000000..38c667d92
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/README.txt
@@ -0,0 +1,7 @@
+"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/gems/rspec/failing_examples/diffing_spec.rb b/vendor/gems/rspec/failing_examples/diffing_spec.rb
new file mode 100644
index 000000000..85e13e8c0
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/diffing_spec.rb
@@ -0,0 +1,36 @@
+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/gems/rspec/failing_examples/failing_autogenerated_docstrings_example.rb b/vendor/gems/rspec/failing_examples/failing_autogenerated_docstrings_example.rb
new file mode 100644
index 000000000..8a7d2490e
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/failing_autogenerated_docstrings_example.rb
@@ -0,0 +1,19 @@
+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/gems/rspec/failing_examples/failure_in_setup.rb b/vendor/gems/rspec/failing_examples/failure_in_setup.rb
new file mode 100644
index 000000000..2a807a99a
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/failure_in_setup.rb
@@ -0,0 +1,10 @@
+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/gems/rspec/failing_examples/failure_in_teardown.rb b/vendor/gems/rspec/failing_examples/failure_in_teardown.rb
new file mode 100644
index 000000000..6458ea2b8
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/failure_in_teardown.rb
@@ -0,0 +1,10 @@
+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/gems/rspec/failing_examples/mocking_example.rb b/vendor/gems/rspec/failing_examples/mocking_example.rb
new file mode 100644
index 000000000..caf2db036
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/mocking_example.rb
@@ -0,0 +1,40 @@
+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/gems/rspec/failing_examples/mocking_with_flexmock.rb b/vendor/gems/rspec/failing_examples/mocking_with_flexmock.rb
new file mode 100644
index 000000000..6e79ece0e
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/mocking_with_flexmock.rb
@@ -0,0 +1,26 @@
+# 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/gems/rspec/failing_examples/mocking_with_mocha.rb b/vendor/gems/rspec/failing_examples/mocking_with_mocha.rb
new file mode 100644
index 000000000..f14a1a3e5
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/mocking_with_mocha.rb
@@ -0,0 +1,25 @@
+# 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/gems/rspec/failing_examples/mocking_with_rr.rb b/vendor/gems/rspec/failing_examples/mocking_with_rr.rb
new file mode 100644
index 000000000..0d2b4fe04
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/mocking_with_rr.rb
@@ -0,0 +1,27 @@
+# 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/gems/rspec/failing_examples/partial_mock_example.rb b/vendor/gems/rspec/failing_examples/partial_mock_example.rb
new file mode 100644
index 000000000..6d0554055
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/partial_mock_example.rb
@@ -0,0 +1,20 @@
+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/gems/rspec/failing_examples/predicate_example.rb b/vendor/gems/rspec/failing_examples/predicate_example.rb
new file mode 100644
index 000000000..53b6367e2
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/predicate_example.rb
@@ -0,0 +1,29 @@
+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/gems/rspec/failing_examples/raising_example.rb b/vendor/gems/rspec/failing_examples/raising_example.rb
new file mode 100644
index 000000000..e40b51ec8
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/raising_example.rb
@@ -0,0 +1,47 @@
+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/gems/rspec/failing_examples/spec_helper.rb b/vendor/gems/rspec/failing_examples/spec_helper.rb
new file mode 100644
index 000000000..f8d657554
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/spec_helper.rb
@@ -0,0 +1,3 @@
+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/gems/rspec/failing_examples/syntax_error_example.rb b/vendor/gems/rspec/failing_examples/syntax_error_example.rb
new file mode 100644
index 000000000..c9bb90774
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/syntax_error_example.rb
@@ -0,0 +1,7 @@
+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/gems/rspec/failing_examples/team_spec.rb b/vendor/gems/rspec/failing_examples/team_spec.rb
new file mode 100644
index 000000000..41a44e551
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/team_spec.rb
@@ -0,0 +1,44 @@
+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/gems/rspec/failing_examples/timeout_behaviour.rb b/vendor/gems/rspec/failing_examples/timeout_behaviour.rb
new file mode 100644
index 000000000..18221365f
--- /dev/null
+++ b/vendor/gems/rspec/failing_examples/timeout_behaviour.rb
@@ -0,0 +1,7 @@
+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/gems/rspec/lib/autotest/rspec.rb b/vendor/gems/rspec/lib/autotest/rspec.rb
index d4b77ea6b..9c97d2e0d 100644
--- a/vendor/gems/rspec/lib/autotest/rspec.rb
+++ b/vendor/gems/rspec/lib/autotest/rspec.rb
@@ -1,85 +1,65 @@
require 'autotest'
+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%^lib/(.*)\.rb$%) { |_, m|
+ ["spec/#{m[1]}_spec.rb"]
+ }
+ at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.rb$%) {
+ at.files_matching %r%^spec/.*_spec\.rb$%
+ }
+end
+
class RspecCommandError < StandardError; end
class Autotest::Rspec < Autotest
-
- def initialize(kernel=Kernel, separator=File::SEPARATOR, alt_separator=File::ALT_SEPARATOR) # :nodoc:
- super()
- @kernel, @separator, @alt_separator = kernel, separator, alt_separator
- @spec_command = spec_command
- # watch out: Ruby bug (1.8.6):
- # %r(/) != /\//
- # since Ruby compares the REGEXP source, not the resulting pattern
- @test_mappings = {
- %r%^spec/.*\.rb$% => kernel.proc { |filename, _|
- filename
- },
- %r%^lib/(.*)\.rb$% => kernel.proc { |_, m|
- ["spec/#{m[1]}_spec.rb"]
- },
- %r%^spec/(spec_helper|shared/.*)\.rb$% => kernel.proc {
- files_matching %r%^spec/.*_spec\.rb$%
- }
- }
- end
-
- def tests_for_file(filename)
- super.select { |f| @files.has_key? f }
- end
-
- alias :specs_for_file :tests_for_file
-
- def failed_results(results)
- results.scan(/^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m)
- end
+ def initialize
+ super
- def handle_results(results)
- @files_to_test = consolidate_failures failed_results(results)
- unless @files_to_test.empty? then
- hook :red
- else
- hook :green
- end unless $TESTING
- @tainted = true unless @files_to_test.empty?
+ self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?Error in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m
+ self.completed_re = /\Z/ # FIX: some sort of summary line at the end?
end
def consolidate_failures(failed)
filters = Hash.new { |h,k| h[k] = [] }
failed.each do |spec, failed_trace|
- @files.keys.select{|f| f =~ /spec\//}.each do |f|
- if failed_trace =~ Regexp.new(f)
- filters[f] << spec
- break
- end
+ if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) } then
+ filters[f] << spec
+ break
end
end
return filters
end
def make_test_cmd(files_to_test)
- return "#{ruby} -S #{@spec_command} #{add_options_if_present} #{files_to_test.keys.flatten.join(' ')}"
+ return "#{ruby} -S #{spec_command} #{add_options_if_present} #{files_to_test.keys.flatten.join(' ')}"
end
def add_options_if_present
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
- spec_commands.each do |command|
- if File.exists?(command)
- return @alt_separator ? (command.gsub @separator, @alt_separator) : command
- 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
-
- raise RspecCommandError, "No spec command could be found!"
+ @spec_command
end
-
+
# Autotest will look for spec commands in the following
# locations, in this order:
#
@@ -87,9 +67,8 @@ class Autotest::Rspec < Autotest
# * default spec bin/loader installed in Rubygems
def spec_commands
[
- File.join('bin', 'spec'),
+ File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec')),
File.join(Config::CONFIG['bindir'], 'spec')
]
end
-
end
diff --git a/vendor/gems/rspec/lib/spec.rb b/vendor/gems/rspec/lib/spec.rb
index 48c12595c..c143aa885 100644
--- a/vendor/gems/rspec/lib/spec.rb
+++ b/vendor/gems/rspec/lib/spec.rb
@@ -1,13 +1,30 @@
-require 'spec/extensions'
require 'spec/version'
require 'spec/matchers'
require 'spec/expectations'
-require 'spec/translator'
-require 'spec/dsl'
+require 'spec/example'
+require 'spec/extensions'
require 'spec/runner'
-class Object
- def metaclass
- class << self; self; end
- end
+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
diff --git a/vendor/gems/rspec/lib/spec/dsl.rb b/vendor/gems/rspec/lib/spec/dsl.rb
deleted file mode 100644
index f960eb907..000000000
--- a/vendor/gems/rspec/lib/spec/dsl.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require 'spec/dsl/description'
-require 'spec/dsl/errors'
-require 'spec/dsl/configuration'
-require 'spec/dsl/behaviour_callbacks'
-require 'spec/dsl/behaviour'
-require 'spec/dsl/behaviour_eval'
-require 'spec/dsl/composite_proc_builder'
-require 'spec/dsl/example'
-require 'spec/dsl/example_matcher'
-require 'spec/dsl/example_should_raise_handler'
-require 'spec/dsl/behaviour_factory'
diff --git a/vendor/gems/rspec/lib/spec/dsl/behaviour.rb b/vendor/gems/rspec/lib/spec/dsl/behaviour.rb
deleted file mode 100644
index 5158bb673..000000000
--- a/vendor/gems/rspec/lib/spec/dsl/behaviour.rb
+++ /dev/null
@@ -1,220 +0,0 @@
-module Spec
- module DSL
- class EvalModule < Module; end
- class Behaviour
- extend BehaviourCallbacks
-
- class << self
- def add_shared_behaviour(behaviour)
- return if behaviour.equal?(found_behaviour = find_shared_behaviour(behaviour.description))
- return if found_behaviour and File.expand_path(behaviour.description[:spec_path]) == File.expand_path(found_behaviour.description[:spec_path])
- raise ArgumentError.new("Shared Behaviour '#{behaviour.description}' already exists") if found_behaviour
- shared_behaviours << behaviour
- end
-
- def find_shared_behaviour(behaviour_description)
- shared_behaviours.find { |b| b.description == behaviour_description }
- end
-
- def shared_behaviours
- # TODO - this needs to be global, or at least accessible from
- # from subclasses of Behaviour in a centralized place. I'm not loving
- # this as a solution, but it works for now.
- $shared_behaviours ||= []
- end
- end
-
- def initialize(*args, &behaviour_block)
- init_description(*args)
- init_eval_module
- before_eval
- eval_behaviour(&behaviour_block)
- end
-
- private
-
- def init_description(*args)
- unless self.class == Behaviour
- args << {} unless Hash === args.last
- args.last[:behaviour_class] = self.class
- end
- @description = Description.new(*args)
- end
-
- def init_eval_module
- @eval_module = EvalModule.new
- @eval_module.extend BehaviourEval::ModuleMethods
- @eval_module.include BehaviourEval::InstanceMethods
- @eval_module.include described_type if described_type.class == Module
- @eval_module.behaviour = self
- @eval_module.description = @description
- end
-
- def eval_behaviour(&behaviour_block)
- @eval_module.class_eval(&behaviour_block)
- end
-
- protected
-
- def before_eval
- end
-
- public
-
- def run(reporter, dry_run=false, reverse=false, timeout=nil)
- raise "shared behaviours should never run" if shared?
- # TODO - change add_behaviour to add_description ??????
- reporter.add_behaviour(@description)
- prepare_execution_context_class
- before_all_errors = run_before_all(reporter, dry_run)
-
- exs = reverse ? examples.reverse : examples
- example_execution_context = nil
-
- if before_all_errors.empty?
- exs.each do |example|
- example_execution_context = execution_context(example)
- example_execution_context.copy_instance_variables_from(@before_and_after_all_context_instance) unless before_all_proc(behaviour_type).nil?
-
- befores = before_each_proc(behaviour_type) {|e| raise e}
- afters = after_each_proc(behaviour_type)
- example.run(reporter, befores, afters, dry_run, example_execution_context, timeout)
- end
- end
-
- @before_and_after_all_context_instance.copy_instance_variables_from(example_execution_context) unless after_all_proc(behaviour_type).nil?
- run_after_all(reporter, dry_run)
- end
-
- def number_of_examples
- examples.length
- end
-
- def matches?(specified_examples)
- matcher ||= ExampleMatcher.new(description)
-
- examples.each do |example|
- return true if example.matches?(matcher, specified_examples)
- end
- return false
- end
-
- def shared?
- @description[:shared]
- end
-
- def retain_examples_matching!(specified_examples)
- return if specified_examples.index(description)
- matcher = ExampleMatcher.new(description)
- examples.reject! do |example|
- !example.matches?(matcher, specified_examples)
- end
- end
-
- def methods
- my_methods = super
- my_methods |= @eval_module.methods
- my_methods
- end
-
- # Includes modules in the Behaviour (the <tt>describe</tt> block).
- def include(*args)
- @eval_module.include(*args)
- end
-
- def behaviour_type #:nodoc:
- @description[:behaviour_type]
- end
-
- # Sets the #number on each Example and returns the next number
- def set_sequence_numbers(number, reverse) #:nodoc:
- exs = reverse ? examples.reverse : examples
- exs.each do |example|
- example.number = number
- number += 1
- end
- number
- end
-
- protected
-
- # Messages that this class does not understand
- # are passed directly to the @eval_module.
- def method_missing(sym, *args, &block)
- @eval_module.send(sym, *args, &block)
- end
-
- def prepare_execution_context_class
- plugin_mock_framework
- weave_in_included_modules
- define_predicate_matchers #this is in behaviour_eval
- execution_context_class
- end
-
- def weave_in_included_modules
- mods = [@eval_module]
- mods << included_modules.dup
- mods << Spec::Runner.configuration.modules_for(behaviour_type)
- execution_context_class.class_eval do
- # WARNING - the following can be executed in the context of any
- # class, and should never pass more than one module to include
- # even though we redefine include in this class. This is NOT
- # tested anywhere, hence this comment.
- mods.flatten.each {|mod| include mod}
- end
- end
-
- def execution_context(example)
- execution_context_class.new(example)
- end
-
- def run_before_all(reporter, dry_run)
- errors = []
- unless dry_run
- begin
- @before_and_after_all_context_instance = execution_context(nil)
- @before_and_after_all_context_instance.instance_eval(&before_all_proc(behaviour_type))
- rescue Exception => e
- errors << e
- location = "before(:all)"
- # The easiest is to report this as an example failure. We don't have an Example
- # at this point, so we'll just create a placeholder.
- reporter.example_finished(Example.new(location), e, location) if reporter
- end
- end
- errors
- end
-
- def run_after_all(reporter, dry_run)
- unless dry_run
- begin
- @before_and_after_all_context_instance ||= execution_context(nil)
- @before_and_after_all_context_instance.instance_eval(&after_all_proc(behaviour_type))
- rescue Exception => e
- location = "after(:all)"
- reporter.example_finished(Example.new(location), e, location) if reporter
- end
- end
- end
-
- def plugin_mock_framework
- case mock_framework = Spec::Runner.configuration.mock_framework
- when Module
- include mock_framework
- else
- require Spec::Runner.configuration.mock_framework
- include Spec::Plugins::MockFramework
- end
- end
-
- def description
- @description.to_s
- end
-
- def described_type
- @description.described_type
- end
-
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/dsl/behaviour_callbacks.rb b/vendor/gems/rspec/lib/spec/dsl/behaviour_callbacks.rb
deleted file mode 100644
index 8b69ad9e5..000000000
--- a/vendor/gems/rspec/lib/spec/dsl/behaviour_callbacks.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-module Spec
- module DSL
- # See http://rspec.rubyforge.org/documentation/before_and_after.html
- module BehaviourCallbacks
- def prepend_before(*args, &block)
- scope, options = scope_and_options(*args)
- add(scope, options, :before, :unshift, &block)
- end
- def append_before(*args, &block)
- scope, options = scope_and_options(*args)
- add(scope, options, :before, :<<, &block)
- end
- alias_method :before, :append_before
-
- def prepend_after(*args, &block)
- scope, options = scope_and_options(*args)
- add(scope, options, :after, :unshift, &block)
- end
- alias_method :after, :prepend_after
- def append_after(*args, &block)
- scope, options = scope_and_options(*args)
- add(scope, options, :after, :<<, &block)
- end
-
- def scope_and_options(*args)
- args, options = args_and_options(*args)
- scope = (args[0] || :each), options
- end
-
- def add(scope, options, where, how, &block)
- scope ||= :each
- options ||= {}
- behaviour_type = options[:behaviour_type]
- case scope
- when :each; self.__send__("#{where}_each_parts", behaviour_type).__send__(how, block)
- when :all; self.__send__("#{where}_all_parts", behaviour_type).__send__(how, block)
- end
- end
-
- def remove_after(scope, &block)
- after_each_parts.delete(block)
- end
-
- # Deprecated. Use before(:each)
- def setup(&block)
- before(:each, &block)
- end
-
- # Deprecated. Use after(:each)
- def teardown(&block)
- after(:each, &block)
- end
-
- def before_all_parts(behaviour_type=nil) # :nodoc:
- @before_all_parts ||= {}
- @before_all_parts[behaviour_type] ||= []
- end
-
- def after_all_parts(behaviour_type=nil) # :nodoc:
- @after_all_parts ||= {}
- @after_all_parts[behaviour_type] ||= []
- end
-
- def before_each_parts(behaviour_type=nil) # :nodoc:
- @before_each_parts ||= {}
- @before_each_parts[behaviour_type] ||= []
- end
-
- def after_each_parts(behaviour_type=nil) # :nodoc:
- @after_each_parts ||= {}
- @after_each_parts[behaviour_type] ||= []
- end
-
- def clear_before_and_after! # :nodoc:
- @before_all_parts = nil
- @after_all_parts = nil
- @before_each_parts = nil
- @after_each_parts = nil
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/dsl/behaviour_eval.rb b/vendor/gems/rspec/lib/spec/dsl/behaviour_eval.rb
deleted file mode 100644
index 9f7b8281e..000000000
--- a/vendor/gems/rspec/lib/spec/dsl/behaviour_eval.rb
+++ /dev/null
@@ -1,231 +0,0 @@
-module Spec
- module DSL
- module BehaviourEval
- module ModuleMethods
- include BehaviourCallbacks
-
- attr_writer :behaviour
- attr_accessor :description
-
- # RSpec runs every example in a new instance of Object, mixing in
- # the behaviour necessary to run examples. Because this behaviour gets
- # mixed in, it can get mixed in to an instance of any class at all.
- #
- # This is something that you would hardly ever use, but there is one
- # common use case for it - inheriting from Test::Unit::TestCase. RSpec's
- # Rails plugin uses this feature to provide access to all of the features
- # that are available for Test::Unit within RSpec examples.
- def inherit(klass)
- raise ArgumentError.new("Shared behaviours cannot inherit from classes") if @behaviour.shared?
- @behaviour_superclass = klass
- derive_execution_context_class_from_behaviour_superclass
- end
-
- # You can pass this one or many modules. Each module will subsequently
- # be included in the each object in which an example is run. Use this
- # to provide global helper methods to your examples.
- #
- # == Example
- #
- # module HelperMethods
- # def helper_method
- # ...
- # end
- # end
- #
- # describe Thing do
- # include HelperMethods
- # it "should do stuff" do
- # helper_method
- # end
- # end
- def include(*mods)
- mods.each do |mod|
- included_modules << mod
- mod.send :included, self
- end
- end
-
- # Use this to pull in examples from shared behaviours.
- # See Spec::Runner for information about shared behaviours.
- def it_should_behave_like(behaviour_description)
- behaviour = @behaviour.class.find_shared_behaviour(behaviour_description)
- if behaviour.nil?
- raise RuntimeError.new("Shared Behaviour '#{behaviour_description}' can not be found")
- end
- behaviour.copy_to(self)
- end
-
- def copy_to(eval_module) # :nodoc:
- examples.each { |e| eval_module.examples << e; }
- before_each_parts.each { |p| eval_module.before_each_parts << p }
- after_each_parts.each { |p| eval_module.after_each_parts << p }
- before_all_parts.each { |p| eval_module.before_all_parts << p }
- after_all_parts.each { |p| eval_module.after_all_parts << p }
- included_modules.each { |m| eval_module.included_modules << m }
- eval_module.included_modules << self
- 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 ||= {:exist => :exist?, :an_instance_of => :is_a?}
- end
-
- def define_predicate_matchers(hash=nil) # :nodoc:
- if hash.nil?
- define_predicate_matchers(predicate_matchers)
- define_predicate_matchers(Spec::Runner.configuration.predicate_matchers)
- else
- hash.each_pair do |matcher_method, method_on_object|
- define_method matcher_method do |*args|
- eval("be_#{method_on_object.to_s.gsub('?','')}(*args)")
- end
- end
- end
- end
-
- # Creates an instance of Spec::DSL::Example and adds
- # it to a collection of examples of the current behaviour.
- def it(description=:__generate_description, opts={}, &block)
- examples << Example.new(description, opts, &block)
- end
-
- # Alias for it.
- def specify(description=:__generate_description, opts={}, &block)
- it(description, opts, &block)
- end
-
- def methods # :nodoc:
- my_methods = super
- my_methods |= behaviour_superclass.methods
- my_methods
- end
-
- protected
-
- def method_missing(method_name, *args)
- if behaviour_superclass.respond_to?(method_name)
- return execution_context_class.send(method_name, *args)
- end
- super
- end
-
- def before_each_proc(behaviour_type, &error_handler)
- parts = []
- parts.push(*Behaviour.before_each_parts(nil))
- parts.push(*Behaviour.before_each_parts(behaviour_type)) unless behaviour_type.nil?
- parts.push(*before_each_parts(nil))
- parts.push(*before_each_parts(behaviour_type)) unless behaviour_type.nil?
- CompositeProcBuilder.new(parts).proc(&error_handler)
- end
-
- def before_all_proc(behaviour_type, &error_handler)
- parts = []
- parts.push(*Behaviour.before_all_parts(nil))
- parts.push(*Behaviour.before_all_parts(behaviour_type)) unless behaviour_type.nil?
- parts.push(*before_all_parts(nil))
- parts.push(*before_all_parts(behaviour_type)) unless behaviour_type.nil?
- CompositeProcBuilder.new(parts).proc(&error_handler)
- end
-
- def after_all_proc(behaviour_type)
- parts = []
- parts.push(*after_all_parts(behaviour_type)) unless behaviour_type.nil?
- parts.push(*after_all_parts(nil))
- parts.push(*Behaviour.after_all_parts(behaviour_type)) unless behaviour_type.nil?
- parts.push(*Behaviour.after_all_parts(nil))
- CompositeProcBuilder.new(parts).proc
- end
-
- def after_each_proc(behaviour_type)
- parts = []
- parts.push(*after_each_parts(behaviour_type)) unless behaviour_type.nil?
- parts.push(*after_each_parts(nil))
- parts.push(*Behaviour.after_each_parts(behaviour_type)) unless behaviour_type.nil?
- parts.push(*Behaviour.after_each_parts(nil))
- CompositeProcBuilder.new(parts).proc
- end
-
- private
-
- def execution_context_class
- @execution_context_class ||= derive_execution_context_class_from_behaviour_superclass
- end
-
- def derive_execution_context_class_from_behaviour_superclass
- @execution_context_class = Class.new(behaviour_superclass)
- behaviour_superclass.spec_inherited(self) if behaviour_superclass.respond_to?(:spec_inherited)
- @execution_context_class
- end
-
- def behaviour_superclass
- @behaviour_superclass ||= Object
- end
-
- protected
- def included_modules
- @included_modules ||= [::Spec::Matchers]
- end
-
- def examples
- @examples ||= []
- end
- end
-
- module InstanceMethods
- def initialize(*args, &block) #:nodoc:
- # TODO - inheriting from TestUnit::TestCase fails without this
- # - let's figure out why and move this somewhere else
- end
-
- def violated(message="")
- raise Spec::Expectations::ExpectationNotMetError.new(message)
- end
-
- def inspect
- "[RSpec example]"
- end
-
- def pending(message)
- if block_given?
- begin
- yield
- rescue Exception => e
- raise Spec::DSL::ExamplePendingError.new(message)
- end
- raise Spec::DSL::PendingFixedError.new("Expected pending '#{message}' to fail. No Error was raised.")
- else
- raise Spec::DSL::ExamplePendingError.new(message)
- end
- end
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/dsl/behaviour_factory.rb b/vendor/gems/rspec/lib/spec/dsl/behaviour_factory.rb
deleted file mode 100644
index 44b60c641..000000000
--- a/vendor/gems/rspec/lib/spec/dsl/behaviour_factory.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-module Spec
- module DSL
- class BehaviourFactory
-
- class << self
-
- BEHAVIOUR_CLASSES = {:default => Spec::DSL::Behaviour}
-
- # Registers a behaviour class +klass+ with the symbol
- # +behaviour_type+. For example:
- #
- # Spec::DSL::BehaviourFactory.add_behaviour_class(:farm, Spec::Farm::DSL::FarmBehaviour)
- #
- # This will cause Kernel#describe from a file living in
- # <tt>spec/farm</tt> to create behaviour instances of type
- # Spec::Farm::DSL::FarmBehaviour.
- def add_behaviour_class(behaviour_type, klass)
- BEHAVIOUR_CLASSES[behaviour_type] = klass
- end
-
- def remove_behaviour_class(behaviour_type)
- BEHAVIOUR_CLASSES.delete(behaviour_type)
- end
-
- def create(*args, &block)
- opts = Hash === args.last ? args.last : {}
- if opts[:shared]
- behaviour_type = :default
- elsif opts[:behaviour_type]
- behaviour_type = opts[:behaviour_type]
- elsif opts[:spec_path] =~ /spec(\\|\/)(#{BEHAVIOUR_CLASSES.keys.join('|')})/
- behaviour_type = $2.to_sym
- else
- behaviour_type = :default
- end
- return BEHAVIOUR_CLASSES[behaviour_type].new(*args, &block)
- end
-
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/dsl/composite_proc_builder.rb b/vendor/gems/rspec/lib/spec/dsl/composite_proc_builder.rb
deleted file mode 100644
index 373f44953..000000000
--- a/vendor/gems/rspec/lib/spec/dsl/composite_proc_builder.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-module Spec
- module DSL
- class CompositeProcBuilder < Array
- def initialize(callbacks=[])
- push(*callbacks)
- end
-
- def proc(&error_handler)
- parts = self
- errors = []
- Proc.new do
- result = parts.collect do |part|
- begin
- if part.is_a?(UnboundMethod)
- part.bind(self).call
- else
- instance_eval(&part)
- end
- rescue Exception => e
- if error_handler
- error_handler.call(e)
- else
- errors << e
- end
- end
- end
- raise errors.first unless errors.empty?
- result
- end
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/dsl/description.rb b/vendor/gems/rspec/lib/spec/dsl/description.rb
deleted file mode 100644
index fe8c9b0c9..000000000
--- a/vendor/gems/rspec/lib/spec/dsl/description.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-module Spec
- module DSL
- class Description
- module ClassMethods
- def generate_description(*args)
- description = args.shift.to_s
- unless args.empty?
- suffix = args.shift.to_s
- description << " " unless suffix =~ /^\s|\.|#/
- description << suffix
- end
- description
- end
- end
- extend ClassMethods
-
- attr_reader :description, :described_type
-
- def initialize(*args)
- args, @options = args_and_options(*args)
- init_behaviour_type(@options)
- init_spec_path(@options)
- init_described_type(args)
- init_description(*args)
- end
-
- def [](key)
- @options[key]
- end
-
- def []=(key, value)
- @options[key] = value
- end
-
- def to_s; @description; end
-
- def ==(value)
- case value
- when Description
- @description == value.description
- else
- @description == value
- end
- end
-
- private
- def init_behaviour_type(options)
- # NOTE - BE CAREFUL IF CHANGING THIS NEXT LINE:
- # this line is as it is to satisfy JRuby - the original version
- # read, simply: "if options[:behaviour_class]", which passed against ruby, but failed against jruby
- if options[:behaviour_class] && options[:behaviour_class].ancestors.include?(Behaviour)
- options[:behaviour_type] = parse_behaviour_type(@options[:behaviour_class])
- end
- end
-
- def init_spec_path(options)
- if options.has_key?(:spec_path)
- options[:spec_path] = File.expand_path(@options[:spec_path])
- end
- end
-
- def init_description(*args)
- @description = self.class.generate_description(*args)
- end
-
- def init_described_type(args)
- @described_type = args.first unless args.first.is_a?(String)
- end
-
- def parse_behaviour_type(behaviour_class)
- behaviour_class.to_s.split("::").reverse[0].gsub!('Behaviour', '').downcase.to_sym
- end
-
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/dsl/example.rb b/vendor/gems/rspec/lib/spec/dsl/example.rb
deleted file mode 100644
index d04073f7e..000000000
--- a/vendor/gems/rspec/lib/spec/dsl/example.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-require 'timeout'
-
-module Spec
- module DSL
- class Example
- # The global sequence number of this example
- attr_accessor :number
-
- def initialize(description, options={}, &example_block)
- @from = caller(0)[3]
- @options = options
- @example_block = example_block
- @description = description
- @description_generated_proc = lambda { |desc| @generated_description = desc }
- end
-
- def run(reporter, before_each_block, after_each_block, dry_run, execution_context, timeout=nil)
- @dry_run = dry_run
- reporter.example_started(self)
- return reporter.example_finished(self) if dry_run
-
- errors = []
- location = nil
- Timeout.timeout(timeout) do
- before_each_ok = before_example(execution_context, errors, &before_each_block)
- example_ok = run_example(execution_context, errors) if before_each_ok
- after_each_ok = after_example(execution_context, errors, &after_each_block)
- location = failure_location(before_each_ok, example_ok, after_each_ok)
- end
-
- ExampleShouldRaiseHandler.new(@from, @options).handle(errors)
- reporter.example_finished(self, errors.first, location, @example_block.nil?) if reporter
- end
-
- def matches?(matcher, specified_examples)
- matcher.example_desc = description
- matcher.matches?(specified_examples)
- end
-
- def description
- @description == :__generate_description ? generated_description : @description
- end
-
- def to_s
- description
- end
-
- private
-
- def generated_description
- return @generated_description if @generated_description
- if @dry_run
- "NO NAME (Because of --dry-run)"
- else
- if @failed
- "NO NAME (Because of Error raised in matcher)"
- else
- "NO NAME (Because there were no expectations)"
- end
- end
- end
-
- def before_example(execution_context, errors, &behaviour_before_block)
- setup_mocks(execution_context)
- Spec::Matchers.description_generated(@description_generated_proc)
-
- builder = CompositeProcBuilder.new
- before_proc = builder.proc(&append_errors(errors))
- execution_context.instance_eval(&before_proc)
-
- execution_context.instance_eval(&behaviour_before_block) if behaviour_before_block
- return errors.empty?
- rescue Exception => e
- @failed = true
- errors << e
- return false
- end
-
- def run_example(execution_context, errors)
- begin
- execution_context.instance_eval(&@example_block) if @example_block
- return true
- rescue Exception => e
- @failed = true
- errors << e
- return false
- end
- end
-
- def after_example(execution_context, errors, &behaviour_after_each)
- execution_context.instance_eval(&behaviour_after_each) if behaviour_after_each
-
- begin
- verify_mocks(execution_context)
- ensure
- teardown_mocks(execution_context)
- end
-
- Spec::Matchers.unregister_description_generated(@description_generated_proc)
-
- builder = CompositeProcBuilder.new
- after_proc = builder.proc(&append_errors(errors))
- execution_context.instance_eval(&after_proc)
-
- return errors.empty?
- rescue Exception => e
- @failed = true
- errors << e
- return false
- end
-
- def setup_mocks(execution_context)
- execution_context.setup_mocks_for_rspec if execution_context.respond_to?(:setup_mocks_for_rspec)
- end
-
- def verify_mocks(execution_context)
- execution_context.verify_mocks_for_rspec if execution_context.respond_to?(:verify_mocks_for_rspec)
- end
-
- def teardown_mocks(execution_context)
- execution_context.teardown_mocks_for_rspec if execution_context.respond_to?(:teardown_mocks_for_rspec)
- end
-
- def append_errors(errors)
- proc {|error| errors << error}
- end
-
- def failure_location(before_each_ok, example_ok, after_each_ok)
- return 'before(:each)' unless before_each_ok
- return description unless example_ok
- return 'after(:each)' unless after_each_ok
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/dsl/example_matcher.rb b/vendor/gems/rspec/lib/spec/dsl/example_matcher.rb
deleted file mode 100644
index 18cc47409..000000000
--- a/vendor/gems/rspec/lib/spec/dsl/example_matcher.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-module Spec
- module DSL
- class ExampleMatcher
-
- attr_writer :example_desc
- def initialize(behaviour_desc, example_desc=nil)
- @behaviour_desc = behaviour_desc
- @example_desc = example_desc
- 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)
- end
- false
- end
-
- private
- def matches_literal_example?(specified_example)
- specified_example =~ /(^#{context_regexp} #{example_regexp}$|^#{context_regexp}$|^#{example_regexp}$)/
- end
-
- def matches_example_not_considering_modules?(specified_example)
- specified_example =~ /(^#{context_regexp_not_considering_modules} #{example_regexp}$|^#{context_regexp_not_considering_modules}$|^#{example_regexp}$)/
- end
-
- def context_regexp
- Regexp.escape(@behaviour_desc)
- end
-
- def context_regexp_not_considering_modules
- Regexp.escape(@behaviour_desc.split('::').last)
- end
-
- def example_regexp
- Regexp.escape(@example_desc)
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/dsl/example_should_raise_handler.rb b/vendor/gems/rspec/lib/spec/dsl/example_should_raise_handler.rb
deleted file mode 100644
index 942327317..000000000
--- a/vendor/gems/rspec/lib/spec/dsl/example_should_raise_handler.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-module Spec
- module DSL
- class ExampleShouldRaiseHandler
- def initialize(file_and_line_number, opts)
- @file_and_line_number = file_and_line_number
- @options = opts
- @expected_error_class = determine_error_class(opts)
- @expected_error_message = determine_error_message(opts)
- end
-
- def determine_error_class(opts)
- if candidate = opts[:should_raise]
- if candidate.is_a?(Class)
- return candidate
- elsif candidate.is_a?(Array)
- return candidate[0]
- else
- return Exception
- end
- end
- end
-
- def determine_error_message(opts)
- if candidate = opts[:should_raise]
- if candidate.is_a?(Array)
- return candidate[1]
- end
- end
- return nil
- end
-
- def build_message(exception=nil)
- if @expected_error_message.nil?
- message = "example block expected #{@expected_error_class.to_s}"
- else
- message = "example block expected #{@expected_error_class.new(@expected_error_message.to_s).inspect}"
- end
- message << " but raised #{exception.inspect}" if exception
- message << " but nothing was raised" unless exception
- message << "\n"
- message << @file_and_line_number
- end
-
- def error_matches?(error)
- return false unless error.kind_of?(@expected_error_class)
- unless @expected_error_message.nil?
- if @expected_error_message.is_a?(Regexp)
- return false unless error.message =~ @expected_error_message
- else
- return false unless error.message == @expected_error_message
- end
- end
- return true
- end
-
- def handle(errors)
- if @expected_error_class
- if errors.empty?
- errors << Spec::Expectations::ExpectationNotMetError.new(build_message)
- else
- error_to_remove = errors.detect do |error|
- error_matches?(error)
- end
- if error_to_remove.nil?
- errors.insert(0,Spec::Expectations::ExpectationNotMetError.new(build_message(errors[0])))
- else
- errors.delete(error_to_remove)
- end
- end
- end
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/example.rb b/vendor/gems/rspec/lib/spec/example.rb
new file mode 100644
index 000000000..39ff76b99
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/example.rb
@@ -0,0 +1,12 @@
+require 'timeout'
+require 'forwardable'
+require 'spec/example/pending'
+require 'spec/example/module_reopening_fix'
+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/gems/rspec/lib/spec/dsl/configuration.rb b/vendor/gems/rspec/lib/spec/example/configuration.rb
index 709574ded..674184727 100644..100755
--- a/vendor/gems/rspec/lib/spec/dsl/configuration.rb
+++ b/vendor/gems/rspec/lib/spec/example/configuration.rb
@@ -1,7 +1,6 @@
module Spec
- module DSL
+ module Example
class Configuration
-
# Chooses what mock framework to use. Example:
#
# Spec::Runner.configure do |config|
@@ -36,49 +35,35 @@ module Spec
@mock_framework ||= mock_framework_path("rspec")
end
- # Declares modules to be included in all behaviours (<tt>describe</tt> blocks).
+ # Declares modules to be included in all example groups (<tt>describe</tt> blocks).
#
# config.include(My::Bottle, My::Cup)
#
- # If you want to restrict the inclusion to a subset of all the behaviours then
+ # If you want to restrict the inclusion to a subset of all the example groups then
# specify this in a Hash as the last argument:
#
- # config.include(My::Pony, My::Horse, :behaviour_type => :farm)
+ # config.include(My::Pony, My::Horse, :type => :farm)
#
- # Only behaviours that have that type will get the modules included:
+ # Only example groups that have that type will get the modules included:
#
- # describe "Downtown", :behaviour_type => :city do
+ # describe "Downtown", :type => :city do
# # Will *not* get My::Pony and My::Horse included
# end
#
- # describe "Old Mac Donald", :behaviour_type => :farm do
+ # 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_behaviour_type = options[:behaviour_type]
- required_behaviour_type = required_behaviour_type.to_sym unless required_behaviour_type.nil?
- @modules ||= {}
- @modules[required_behaviour_type] ||= []
- @modules[required_behaviour_type] += modules
- end
-
- def modules_for(required_behaviour_type) #:nodoc:
- @modules ||= {}
- modules = @modules[nil] || [] # general ones
- modules << @modules[required_behaviour_type.to_sym] unless required_behaviour_type.nil?
- modules.uniq.compact
- end
-
- # This is just for cleanup in RSpec's own examples
- def exclude(*modules) #:nodoc:
- @modules.each do |behaviour_type, mods|
- modules.each{|m| mods.delete(m)}
+ 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?
@@ -91,45 +76,69 @@ module Spec
@predicate_matchers ||= {}
end
- # Prepends a global <tt>before</tt> block to all behaviours.
+ # Prepends a global <tt>before</tt> block to all example groups.
# See #append_before for filtering semantics.
def prepend_before(*args, &proc)
- Behaviour.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 behaviours.
+ # Appends a global <tt>before</tt> block to all example groups.
#
- # If you want to restrict the block to a subset of all the behaviours then
+ # 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, :behaviour_type => :farm)
+ # config.prepend_before(:all, :type => :farm)
#
# or
#
- # config.prepend_before(:behaviour_type => :farm)
+ # config.prepend_before(:type => :farm)
#
def append_before(*args, &proc)
- Behaviour.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 behaviours.
+ # Prepends a global <tt>after</tt> block to all example groups.
# See #append_before for filtering semantics.
def prepend_after(*args, &proc)
- Behaviour.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 behaviours.
+ # Appends a global <tt>after</tt> block to all example groups.
# See #append_before for filtering semantics.
def append_after(*args, &proc)
- Behaviour.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/gems/rspec/lib/spec/dsl/errors.rb b/vendor/gems/rspec/lib/spec/example/errors.rb
index ba7046a89..c6cb22453 100644
--- a/vendor/gems/rspec/lib/spec/dsl/errors.rb
+++ b/vendor/gems/rspec/lib/spec/example/errors.rb
@@ -1,9 +1,9 @@
module Spec
- module DSL
+ module Example
class ExamplePendingError < StandardError
end
- class PendingFixedError < StandardError
+ class PendingExampleFixedError < StandardError
end
end
end
diff --git a/vendor/gems/rspec/lib/spec/example/example_group.rb b/vendor/gems/rspec/lib/spec/example/example_group.rb
new file mode 100644
index 000000000..d6e156f93
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/example/example_group.rb
@@ -0,0 +1,16 @@
+module Spec
+ module Example
+ # The superclass for all regular RSpec examples.
+ 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/gems/rspec/lib/spec/example/example_group_factory.rb b/vendor/gems/rspec/lib/spec/example/example_group_factory.rb
new file mode 100755
index 000000000..0414a3b96
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/example/example_group_factory.rb
@@ -0,0 +1,62 @@
+module Spec
+ module Example
+ class ExampleGroupFactory
+ class << self
+ def reset
+ @example_group_types = nil
+ default(ExampleGroup)
+ end
+
+ # Registers an example group class +klass+ with the symbol
+ # +type+. For example:
+ #
+ # Spec::Example::ExampleGroupFactory.register(:farm, Spec::Farm::Example::FarmExampleGroup)
+ #
+ # This will cause Main#describe from a file living in
+ # <tt>spec/farm</tt> to create example group instances of type
+ # Spec::Farm::Example::FarmExampleGroup.
+ def register(id, example_group_class)
+ @example_group_types[id] = example_group_class
+ end
+
+ # Sets the default ExampleGroup class
+ def default(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(id=nil)
+ if @example_group_types.values.include?(id)
+ id
+ else
+ @example_group_types[id]
+ end
+ end
+
+ def create_example_group(*args, &block)
+ opts = Hash === args.last ? args.last : {}
+ if opts[:shared]
+ SharedExampleGroup.new(*args, &block)
+ else
+ superclass = determine_superclass(opts)
+ superclass.describe(*args, &block)
+ end
+ end
+
+ protected
+
+ def determine_superclass(opts)
+ id = if opts[:type]
+ opts[:type]
+ elsif opts[:spec_path] =~ /spec(\\|\/)(#{@example_group_types.keys.join('|')})/
+ $2 == '' ? nil : $2.to_sym
+ end
+ get(id)
+ end
+
+ end
+ self.reset
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/example/example_group_methods.rb b/vendor/gems/rspec/lib/spec/example/example_group_methods.rb
new file mode 100644
index 000000000..a348bc74b
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/example/example_group_methods.rb
@@ -0,0 +1,424 @@
+module Spec
+ module Example
+
+ module ExampleGroupMethods
+ class << self
+ def description_text(*args)
+ args.inject("") do |result, arg|
+ result << " " unless (result == "" || arg.to_s =~ /^(\s|\.|#)/)
+ result << arg.to_s
+ end
+ end
+ end
+
+ attr_reader :description_text, :description_args, :description_options, :spec_path, :registration_binding_block
+
+ def inherited(klass)
+ super
+ klass.register {}
+ Spec::Runner.register_at_exit_hook
+ end
+
+ # Makes the describe/it syntax available from a class. For example:
+ #
+ # class StackSpec < Spec::ExampleGroup
+ # describe Stack, "with no elements"
+ #
+ # before
+ # @stack = Stack.new
+ # end
+ #
+ # it "should raise on pop" do
+ # lambda{ @stack.pop }.should raise_error
+ # end
+ # end
+ #
+ def describe(*args, &example_group_block)
+ if example_group_block
+ self.subclass("Subclass") do
+ describe(*args)
+ module_eval(&example_group_block)
+ end
+ else
+ set_description(*args)
+ before_eval
+ self
+ end
+ end
+
+ # 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)
+ 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?}
+ 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
+ end
+
+ alias_method :specify, :it
+
+ # Use this to temporarily disable an example.
+ def xit(description=nil, opts={}, &block)
+ Kernel.warn("Example disabled: #{description}")
+ end
+
+ def run
+ examples = examples_to_run
+ return true if examples.empty?
+ reporter.add_example_group(self)
+ return dry_run(examples) if 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
+ 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
+ include described_type
+ end
+ self
+ end
+
+ 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
+ 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
+ end
+
+ def remove_after(scope, &block)
+ after_each_parts.delete(block)
+ end
+
+ # Deprecated. Use before(:each)
+ def setup(&block)
+ before(:each, &block)
+ end
+
+ # Deprecated. Use after(:each)
+ def teardown(&block)
+ after(:each, &block)
+ end
+
+ def before_all_parts # :nodoc:
+ @before_all_parts ||= []
+ end
+
+ def after_all_parts # :nodoc:
+ @after_all_parts ||= []
+ end
+
+ def before_each_parts # :nodoc:
+ @before_each_parts ||= []
+ end
+
+ def after_each_parts # :nodoc:
+ @after_each_parts ||= []
+ 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
+ end
+
+ def register(&registration_binding_block)
+ @registration_binding_block = registration_binding_block
+ rspec_options.add_example_group self
+ end
+
+ def unregister #:nodoc:
+ rspec_options.remove_example_group self
+ end
+
+ def registration_backtrace
+ eval("caller", registration_binding_block.binding)
+ end
+
+ def run_before_each(example)
+ execute_in_class_hierarchy do |example_group|
+ example.eval_each_fail_fast(example_group.before_each_parts)
+ 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
+ end
+
+ private
+ def dry_run(examples)
+ examples.each do |example|
+ rspec_options.reporter.example_started(example)
+ rspec_options.reporter.example_finished(example)
+ end
+ return true
+ end
+
+ def run_before_all
+ before_all = new("before(:all)")
+ begin
+ execute_in_class_hierarchy do |example_group|
+ before_all.eval_each_fail_fast(example_group.before_all_parts)
+ end
+ return [true, before_all.instance_variable_hash]
+ rescue Exception => e
+ reporter.failure(before_all, e)
+ return [false, before_all.instance_variable_hash]
+ end
+ end
+
+ def execute_examples(success, instance_variables, examples)
+ 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)
+ 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)")
+ 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
+ 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)
+ end
+
+ def plugin_mock_framework
+ case mock_framework = Spec::Runner.configuration.mock_framework
+ when Module
+ include mock_framework
+ 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)")
+ 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
+ end
+ end
+
+ def after_parts_from_scope(scope)
+ case scope
+ when :each; after_each_parts
+ when :all; after_all_parts
+ end
+ end
+
+ def before_eval
+ 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
+ end
+
+ def example_method?(method_name)
+ should_method?(method_name)
+ end
+
+ def should_method?(method_name)
+ !(method_name =~ /^should(_not)?$/) &&
+ method_name =~ /^should/ && (
+ instance_method(method_name).arity == 0 ||
+ instance_method(method_name).arity == -1
+ )
+ end
+ end
+
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/example/example_matcher.rb b/vendor/gems/rspec/lib/spec/example/example_matcher.rb
new file mode 100755
index 000000000..435eabf52
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/example/example_matcher.rb
@@ -0,0 +1,42 @@
+module Spec
+ module Example
+ class ExampleMatcher
+ def initialize(example_group_description, example_name)
+ @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)
+ 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}$)/
+ end
+
+ def matches_example_not_considering_modules?(specified_example)
+ specified_example =~ /(^#{example_group_regex_not_considering_modules} #{example_regexp}$|^#{example_group_regex_not_considering_modules}$|^#{example_regexp}$)/
+ end
+
+ def example_group_regex
+ Regexp.escape(@example_group_description)
+ end
+
+ def example_group_with_before_all_regexp
+ Regexp.escape("#{@example_group_description} before(:all)")
+ end
+
+ def example_group_regex_not_considering_modules
+ Regexp.escape(@example_group_description.split('::').last)
+ end
+
+ def example_regexp
+ Regexp.escape(@example_name)
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/example/example_methods.rb b/vendor/gems/rspec/lib/spec/example/example_methods.rb
new file mode 100644
index 000000000..babd31dfa
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/example/example_methods.rb
@@ -0,0 +1,106 @@
+module Spec
+ module Example
+ module ExampleMethods
+ extend ExampleGroupMethods
+ extend ModuleReopeningFix
+
+ PENDING_EXAMPLE_BLOCK = lambda {
+ raise Spec::Example::ExamplePendingError.new("Not Yet Implemented")
+ }
+
+ def execute(options, instance_variables)
+ options.reporter.example_started(self)
+ set_instance_variables_from_hash(instance_variables)
+
+ execution_error = nil
+ Timeout.timeout(options.timeout) do
+ begin
+ before_example
+ run_with_description_capturing
+ rescue Exception => e
+ execution_error ||= e
+ end
+ begin
+ after_example
+ rescue Exception => e
+ execution_error ||= e
+ end
+ end
+
+ options.reporter.example_finished(self, 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
+ end
+
+ def violated(message="")
+ raise Spec::Expectations::ExpectationNotMetError.new(message)
+ end
+
+ def eval_each_fail_fast(procs) #:nodoc:
+ procs.each do |proc|
+ instance_eval(&proc)
+ end
+ end
+
+ def eval_each_fail_slow(procs) #:nodoc:
+ first_exception = nil
+ procs.each do |proc|
+ begin
+ instance_eval(&proc)
+ rescue Exception => e
+ first_exception ||= e
+ end
+ end
+ raise first_exception if first_exception
+ end
+
+ def description
+ @_defined_description || @_matcher_description || "NO NAME"
+ end
+
+ def set_instance_variables_from_hash(ivars)
+ 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)
+ 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
+ end
+
+ def implementation_backtrace
+ eval("caller", @_implementation)
+ end
+
+ protected
+ include Matchers
+ include Pending
+
+ def before_example
+ setup_mocks_for_rspec
+ self.class.run_before_each(self)
+ end
+
+ def after_example
+ self.class.run_after_each(self)
+ verify_mocks_for_rspec
+ ensure
+ teardown_mocks_for_rspec
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/example/module_reopening_fix.rb b/vendor/gems/rspec/lib/spec/example/module_reopening_fix.rb
new file mode 100644
index 000000000..dc01dd666
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/example/module_reopening_fix.rb
@@ -0,0 +1,21 @@
+module Spec
+ module Example
+ # This is a fix for ...Something in Ruby 1.8.6??... (Someone fill in here please - Aslak)
+ module ModuleReopeningFix
+ def child_modules
+ @child_modules ||= []
+ end
+
+ def included(mod)
+ child_modules << mod
+ end
+
+ def include(mod)
+ super
+ child_modules.each do |child_module|
+ child_module.__send__(:include, mod)
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/lib/spec/example/pending.rb b/vendor/gems/rspec/lib/spec/example/pending.rb
new file mode 100644
index 000000000..b1f27c866
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/example/pending.rb
@@ -0,0 +1,18 @@
+module Spec
+ module Example
+ module Pending
+ def pending(message = "TODO")
+ if block_given?
+ begin
+ yield
+ rescue Exception => e
+ raise Spec::Example::ExamplePendingError.new(message)
+ end
+ raise Spec::Example::PendingExampleFixedError.new("Expected pending '#{message}' to fail. No Error was raised.")
+ else
+ raise Spec::Example::ExamplePendingError.new(message)
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/example/shared_example_group.rb b/vendor/gems/rspec/lib/spec/example/shared_example_group.rb
new file mode 100644
index 000000000..a6fd6211c
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/example/shared_example_group.rb
@@ -0,0 +1,58 @@
+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
+ end
+
+ def find_shared_example_group(example_group_description)
+ shared_example_groups.find do |b|
+ b.description == example_group_description
+ end
+ end
+
+ 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)
+ raise ArgumentError.new("Shared Example '#{existing_example_group.description}' already exists")
+ end
+
+ def spec_path(example_group)
+ File.expand_path(example_group.spec_path)
+ end
+ end
+ include ExampleGroupMethods
+ public :include
+
+ def initialize(*args, &example_group_block)
+ describe(*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/gems/rspec/lib/spec/expectations/differs/default.rb b/vendor/gems/rspec/lib/spec/expectations/differs/default.rb
index 87e59b3a6..a5eb1bb89 100644
--- a/vendor/gems/rspec/lib/spec/expectations/differs/default.rb
+++ b/vendor/gems/rspec/lib/spec/expectations/differs/default.rb
@@ -12,12 +12,8 @@ module Spec
# TODO add some rdoc
class Default
- def initialize(format=:unified,context_lines=nil,colour=nil)
-
- context_lines ||= 3
- colour ||= false
-
- @format,@context_lines,@colour = format,context_lines,colour
+ def initialize(options)
+ @options = options
end
# This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)
@@ -31,17 +27,17 @@ module Spec
file_length_difference = 0
diffs.each do |piece|
begin
- hunk = Diff::LCS::Hunk.new(data_old, data_new, piece, @context_lines,
+ 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)
+ if (context_lines > 0) and hunk.overlaps?(oldhunk)
hunk.unshift(oldhunk)
else
- output << oldhunk.diff(@format)
+ output << oldhunk.diff(format)
end
ensure
oldhunk = hunk
@@ -49,12 +45,21 @@ module Spec
end
end
#Handle the last remaining hunk
- output << oldhunk.diff(@format) << "\n"
+ 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
diff --git a/vendor/gems/rspec/lib/spec/expectations/errors.rb b/vendor/gems/rspec/lib/spec/expectations/errors.rb
index 03e81a064..1fabd105d 100644
--- a/vendor/gems/rspec/lib/spec/expectations/errors.rb
+++ b/vendor/gems/rspec/lib/spec/expectations/errors.rb
@@ -1,6 +1,12 @@
module Spec
module Expectations
- class ExpectationNotMetError < StandardError
+ # If Test::Unit is loaed, we'll use its error as baseclass, so that Test::Unit
+ # will report unmet RSpec expectations as failures rather than errors.
+ superclass = ['Test::Unit::AssertionFailedError', '::StandardError'].map do |c|
+ eval(c) rescue nil
+ end.compact.first
+
+ class ExpectationNotMetError < superclass
end
end
end
diff --git a/vendor/gems/rspec/lib/spec/expectations/extensions/object.rb b/vendor/gems/rspec/lib/spec/expectations/extensions/object.rb
index f59af722e..a3925bbee 100644
--- a/vendor/gems/rspec/lib/spec/expectations/extensions/object.rb
+++ b/vendor/gems/rspec/lib/spec/expectations/extensions/object.rb
@@ -3,7 +3,6 @@ module Spec
# rspec adds #should and #should_not to every Object (and,
# implicitly, every Class).
module ObjectExpectations
-
# :call-seq:
# should(matcher)
# should == expected
@@ -28,9 +27,12 @@ module Spec
#
# NOTE that this does NOT support receiver.should != expected.
# Instead, use receiver.should_not == expected
- def should(matcher=nil, &block)
- return ExpectationMatcherHandler.handle_matcher(self, matcher, &block) if matcher
- Spec::Matchers::PositiveOperatorMatcher.new(self)
+ def should(matcher = :default_parameter, &block)
+ if :default_parameter == matcher
+ Spec::Matchers::PositiveOperatorMatcher.new(self)
+ else
+ ExpectationMatcherHandler.handle_matcher(self, matcher, &block)
+ end
end
# :call-seq:
@@ -52,9 +54,12 @@ module Spec
# => Passes unless (receiver =~ regexp)
#
# See Spec::Matchers for more information about matchers
- def should_not(matcher=nil, &block)
- return NegativeExpectationMatcherHandler.handle_matcher(self, matcher, &block) if matcher
- Spec::Matchers::NegativeOperatorMatcher.new(self)
+ def should_not(matcher = :default_parameter, &block)
+ if :default_parameter == matcher
+ Spec::Matchers::NegativeOperatorMatcher.new(self)
+ else
+ NegativeExpectationMatcherHandler.handle_matcher(self, matcher, &block)
+ end
end
end
diff --git a/vendor/gems/rspec/lib/spec/expectations/handler.rb b/vendor/gems/rspec/lib/spec/expectations/handler.rb
index 4caa321e4..e6dce0846 100644
--- a/vendor/gems/rspec/lib/spec/expectations/handler.rb
+++ b/vendor/gems/rspec/lib/spec/expectations/handler.rb
@@ -1,18 +1,23 @@
module Spec
module Expectations
+ class InvalidMatcherError < ArgumentError; end
module MatcherHandlerHelper
- def describe(matcher)
+ def describe_matcher(matcher)
matcher.respond_to?(:description) ? matcher.description : "[#{matcher.class.name} does not provide a description]"
end
end
- class ExpectationMatcherHandler
+ class ExpectationMatcherHandler
class << self
include MatcherHandlerHelper
def handle_matcher(actual, matcher, &block)
+ 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)}"
+ ::Spec::Matchers.generated_description = "should #{describe_matcher(matcher)}"
Spec::Expectations.fail_with(matcher.failure_message) unless match
end
end
@@ -22,6 +27,10 @@ module Spec
class << self
include MatcherHandlerHelper
def handle_matcher(actual, matcher, &block)
+ unless matcher.respond_to?(:matches?)
+ raise InvalidMatcherError, "Expected a matcher, got #{matcher.inspect}."
+ end
+
unless matcher.respond_to?(:negative_failure_message)
Spec::Expectations.fail_with(
<<-EOF
@@ -32,7 +41,7 @@ EOF
)
end
match = matcher.matches?(actual, &block)
- ::Spec::Matchers.generated_description = "should not #{describe(matcher)}"
+ ::Spec::Matchers.generated_description = "should not #{describe_matcher(matcher)}"
Spec::Expectations.fail_with(matcher.negative_failure_message) if match
end
end
diff --git a/vendor/gems/rspec/lib/spec/extensions.rb b/vendor/gems/rspec/lib/spec/extensions.rb
index 824f03bfb..9a313d0e7 100644..100755
--- a/vendor/gems/rspec/lib/spec/extensions.rb
+++ b/vendor/gems/rspec/lib/spec/extensions.rb
@@ -1 +1,3 @@
require 'spec/extensions/object'
+require 'spec/extensions/class'
+require 'spec/extensions/main'
diff --git a/vendor/gems/rspec/lib/spec/extensions/class.rb b/vendor/gems/rspec/lib/spec/extensions/class.rb
new file mode 100644
index 000000000..30730f87e
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/extensions/class.rb
@@ -0,0 +1,24 @@
+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/gems/rspec/lib/spec/extensions/main.rb b/vendor/gems/rspec/lib/spec/extensions/main.rb
new file mode 100644
index 000000000..281cbf879
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/extensions/main.rb
@@ -0,0 +1,102 @@
+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/gems/rspec/lib/spec/extensions/object.rb b/vendor/gems/rspec/lib/spec/extensions/object.rb
index 6218aa770..e9f6364e2 100644..100755
--- a/vendor/gems/rspec/lib/spec/extensions/object.rb
+++ b/vendor/gems/rspec/lib/spec/extensions/object.rb
@@ -3,4 +3,8 @@ class Object
options = Hash === args.last ? args.pop : {}
return args, options
end
-end
+
+ def metaclass
+ class << self; self; end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/interop/test.rb b/vendor/gems/rspec/lib/spec/interop/test.rb
new file mode 100644
index 000000000..afa16137b
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/interop/test.rb
@@ -0,0 +1,12 @@
+require 'test/unit'
+require 'test/unit/testresult'
+
+require 'spec/interop/test/unit/testcase'
+require 'spec/interop/test/unit/testsuite_adapter'
+require 'spec/interop/test/unit/autorunner'
+require 'spec/interop/test/unit/testresult'
+require 'spec/interop/test/unit/ui/console/testrunner'
+
+Spec::Example::ExampleGroupFactory.default(Test::Unit::TestCase)
+
+Test::Unit.run = true
diff --git a/vendor/gems/rspec/lib/spec/interop/test/unit/autorunner.rb b/vendor/gems/rspec/lib/spec/interop/test/unit/autorunner.rb
new file mode 100644
index 000000000..3944e6995
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/interop/test/unit/autorunner.rb
@@ -0,0 +1,6 @@
+class Test::Unit::AutoRunner
+ remove_method :process_args
+ def process_args(argv)
+ true
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/interop/test/unit/testcase.rb b/vendor/gems/rspec/lib/spec/interop/test/unit/testcase.rb
new file mode 100644
index 000000000..b32a820c1
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/interop/test/unit/testcase.rb
@@ -0,0 +1,61 @@
+require 'test/unit/testcase'
+
+module Test
+ module Unit
+ # 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'
+ #
+ # class MyTest < Test::Unit::TestCase
+ # it "should work with Test::Unit assertions" do
+ # assert_equal 4, 2+1
+ # end
+ #
+ # def test_should_work_with_rspec_expectations
+ # (3+1).should == 5
+ # end
+ # end
+ #
+ # See also Spec::Example::ExampleGroup
+ class TestCase
+ extend Spec::Example::ExampleGroupMethods
+ include Spec::Example::ExampleMethods
+
+ before(:each) {setup}
+ after(:each) {teardown}
+
+ 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
+ end
+
+ def initialize(defined_description, &implementation)
+ @_defined_description = defined_description
+ @_implementation = implementation
+
+ @_result = ::Test::Unit::TestResult.new
+ # @method_name is important to set here because it "complies" with Test::Unit's interface.
+ # Some Test::Unit extensions depend on @method_name being present.
+ @method_name = @_defined_description
+ end
+
+ def run(ignore_this_argument=nil)
+ super()
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/interop/test/unit/testresult.rb b/vendor/gems/rspec/lib/spec/interop/test/unit/testresult.rb
new file mode 100644
index 000000000..1386dc728
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/interop/test/unit/testresult.rb
@@ -0,0 +1,6 @@
+class Test::Unit::TestResult
+ alias_method :tu_passed?, :passed?
+ def passed?
+ return tu_passed? & ::Spec.run
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/lib/spec/interop/test/unit/testsuite_adapter.rb b/vendor/gems/rspec/lib/spec/interop/test/unit/testsuite_adapter.rb
new file mode 100644
index 000000000..7c0ed092d
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/interop/test/unit/testsuite_adapter.rb
@@ -0,0 +1,34 @@
+module Test
+ module Unit
+ class TestSuiteAdapter < TestSuite
+ attr_reader :example_group, :examples
+ alias_method :tests, :examples
+ def initialize(example_group)
+ @example_group = example_group
+ @examples = example_group.examples
+ end
+
+ def name
+ example_group.description
+ end
+
+ def run(*args)
+ return true unless args.empty?
+ example_group.run
+ end
+
+ def size
+ example_group.number_of_examples
+ end
+
+ def delete(example)
+ examples.delete example
+ end
+
+ def empty?
+ examples.empty?
+ end
+ end
+ end
+end
+
diff --git a/vendor/gems/rspec/lib/spec/interop/test/unit/ui/console/testrunner.rb b/vendor/gems/rspec/lib/spec/interop/test/unit/ui/console/testrunner.rb
new file mode 100644
index 000000000..8e9995e02
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/interop/test/unit/ui/console/testrunner.rb
@@ -0,0 +1,61 @@
+require 'test/unit/ui/console/testrunner'
+
+module Test
+ module Unit
+ module UI
+ module Console
+ class TestRunner
+
+ alias_method :started_without_rspec, :started
+ def started_with_rspec(result)
+ @result = result
+ @need_to_output_started = true
+ end
+ alias_method :started, :started_with_rspec
+
+ alias_method :test_started_without_rspec, :test_started
+ def test_started_with_rspec(name)
+ if @need_to_output_started
+ if @rspec_io
+ @rspec_io.rewind
+ output(@rspec_io.read)
+ end
+ output("Started")
+ @need_to_output_started = false
+ end
+ test_started_without_rspec(name)
+ end
+ alias_method :test_started, :test_started_with_rspec
+
+ alias_method :test_finished_without_rspec, :test_finished
+ def test_finished_with_rspec(name)
+ test_finished_without_rspec(name)
+ @ran_test = true
+ end
+ alias_method :test_finished, :test_finished_with_rspec
+
+ alias_method :finished_without_rspec, :finished
+ def finished_with_rspec(elapsed_time)
+ @ran_test ||= false
+ if @ran_test
+ finished_without_rspec(elapsed_time)
+ end
+ end
+ alias_method :finished, :finished_with_rspec
+
+ alias_method :setup_mediator_without_rspec, :setup_mediator
+ def setup_mediator_with_rspec
+ orig_io = @io
+ @io = StringIO.new
+ setup_mediator_without_rspec
+ ensure
+ @rspec_io = @io
+ @io = orig_io
+ end
+ alias_method :setup_mediator, :setup_mediator_with_rspec
+
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/matchers.rb b/vendor/gems/rspec/lib/spec/matchers.rb
index fd208d628..afae5ae5f 100644
--- a/vendor/gems/rspec/lib/spec/matchers.rb
+++ b/vendor/gems/rspec/lib/spec/matchers.rb
@@ -1,8 +1,10 @@
+require 'spec/matchers/simple_matcher'
require 'spec/matchers/be'
require 'spec/matchers/be_close'
require 'spec/matchers/change'
require 'spec/matchers/eql'
require 'spec/matchers/equal'
+require 'spec/matchers/exist'
require 'spec/matchers/has'
require 'spec/matchers/have'
require 'spec/matchers/include'
@@ -132,27 +134,15 @@ module Spec
#
module Matchers
module ModuleMethods
- def description_generated(callback)
- description_generated_callbacks << callback
- end
-
- def unregister_description_generated(callback)
- description_generated_callbacks.delete(callback)
- end
-
- def generated_description=(name)
- description_generated_callbacks.each do |callback|
- callback.call(name)
- end
- end
+ attr_accessor :generated_description
- private
- def description_generated_callbacks
- @description_generated_callbacks ||= []
+ 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_")
diff --git a/vendor/gems/rspec/lib/spec/matchers/be.rb b/vendor/gems/rspec/lib/spec/matchers/be.rb
index 0eb1629a6..2b25b11f4 100644
--- a/vendor/gems/rspec/lib/spec/matchers/be.rb
+++ b/vendor/gems/rspec/lib/spec/matchers/be.rb
@@ -3,14 +3,17 @@ module Spec
class Be #:nodoc:
def initialize(*args)
- @expected = parse_expected(args.shift)
+ if args.empty?
+ @expected = :satisfy_if
+ else
+ @expected = parse_expected(args.shift)
+ end
@args = args
@comparison = ""
end
def matches?(actual)
@actual = actual
- return true if match_or_compare unless handling_predicate?
if handling_predicate?
begin
return @result = actual.__send__(predicate, *@args)
@@ -28,8 +31,9 @@ module Spec
rescue
raise predicate_error
end
+ else
+ return match_or_compare
end
- return false
end
def failure_message
@@ -43,6 +47,7 @@ module Spec
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
@@ -50,6 +55,7 @@ module Spec
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
@@ -63,6 +69,7 @@ module Spec
end
def ==(expected)
+ @prefix = "be "
@double_equal = true
@comparison = "== "
@expected = expected
@@ -70,6 +77,7 @@ module Spec
end
def ===(expected)
+ @prefix = "be "
@triple_equal = true
@comparison = "=== "
@expected = expected
@@ -77,6 +85,7 @@ module Spec
end
def <(expected)
+ @prefix = "be "
@less_than = true
@comparison = "< "
@expected = expected
@@ -84,6 +93,7 @@ module Spec
end
def <=(expected)
+ @prefix = "be "
@less_than_or_equal = true
@comparison = "<= "
@expected = expected
@@ -91,6 +101,7 @@ module Spec
end
def >=(expected)
+ @prefix = "be "
@greater_than_or_equal = true
@comparison = ">= "
@expected = expected
@@ -98,6 +109,7 @@ module Spec
end
def >(expected)
+ @prefix = "be "
@greater_than = true
@comparison = "> "
@expected = expected
@@ -112,11 +124,14 @@ module Spec
def parse_expected(expected)
if Symbol === expected
@handling_predicate = true
- ["be_an_","be_a_","be_"].each do |@prefix|
- return "#{expected.to_s.sub(@prefix,"")}".to_sym if expected.starts_with?(@prefix)
+ ["be_an_","be_a_","be_"].each do |prefix|
+ if expected.starts_with?(prefix)
+ @prefix = prefix
+ return "#{expected.to_s.sub(@prefix,"")}".to_sym
+ end
end
end
- @prefix = "be "
+ @prefix = ""
return expected
end
@@ -169,6 +184,7 @@ module Spec
end
# :call-seq:
+ # should be
# should be_true
# should be_false
# should be_nil
@@ -177,7 +193,8 @@ module Spec
# should_not be_arbitrary_predicate(*args)
#
# Given true, false, or nil, will pass if actual is
- # true, false or nil (respectively).
+ # true, false or nil (respectively). Given no args means
+ # the caller should satisfy an if condition (to be or not to be).
#
# Predicates are any Ruby method that ends in a "?" and returns true or false.
# Given be_ followed by arbitrary_predicate (without the "?"), RSpec will match
@@ -189,6 +206,7 @@ module Spec
#
# == Examples
#
+ # target.should be
# target.should be_true
# target.should be_false
# target.should be_nil
diff --git a/vendor/gems/rspec/lib/spec/matchers/change.rb b/vendor/gems/rspec/lib/spec/matchers/change.rb
index 41a718aca..784e516ed 100644
--- a/vendor/gems/rspec/lib/spec/matchers/change.rb
+++ b/vendor/gems/rspec/lib/spec/matchers/change.rb
@@ -21,6 +21,8 @@ EOF
return false if @from && (@from != @before)
return false if @to && (@to != @after)
return (@before + @amount == @after) if @amount
+ return ((@after - @before) >= @minimum) if @minimum
+ return ((@after - @before) <= @maximum) if @maximum
return @before != @after
end
@@ -37,6 +39,10 @@ EOF
"#{result} 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}"
+ elsif @minimum
+ "#{result} 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}"
else
"#{result} should have changed, but is still #{@before.inspect}"
end
@@ -59,6 +65,16 @@ EOF
self
end
+ def by_at_least(minimum)
+ @minimum = minimum
+ self
+ end
+
+ def by_at_most(maximum)
+ @maximum = maximum
+ self
+ end
+
def to(to)
@to = to
self
@@ -88,6 +104,14 @@ EOF
# team.add_player(player)
# }.should change(roster, :count).by(1)
#
+ # lambda {
+ # team.add_player(player)
+ # }.should change(roster, :count).by_at_least(1)
+ #
+ # lambda {
+ # team.add_player(player)
+ # }.should change(roster, :count).by_at_most(1)
+ #
# string = "string"
# lambda {
# string.reverse
@@ -109,7 +133,7 @@ EOF
#
# == Warning
# +should_not+ +change+ only supports the form with no subsequent calls to
- # +be+, +to+ or +from+.
+ # +by+, +by_at_least+, +by_at_most+, +to+ or +from+.
#
# blocks passed to +should+ +change+ and +should_not+ +change+
# must use the <tt>{}</tt> form (<tt>do/end</tt> is not supported)
diff --git a/vendor/gems/rspec/lib/spec/matchers/exist.rb b/vendor/gems/rspec/lib/spec/matchers/exist.rb
new file mode 100644
index 000000000..a5a911132
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/matchers/exist.rb
@@ -0,0 +1,17 @@
+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."
+ end
+ end
+ def exist; Exist.new; end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/matchers/have.rb b/vendor/gems/rspec/lib/spec/matchers/have.rb
index f28b86ad3..47454e3be 100644
--- a/vendor/gems/rspec/lib/spec/matchers/have.rb
+++ b/vendor/gems/rspec/lib/spec/matchers/have.rb
@@ -17,6 +17,7 @@ module Spec
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
@@ -25,6 +26,8 @@ module Spec
def matches?(collection_owner)
if collection_owner.respond_to?(@collection_name)
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)
elsif (collection_owner.respond_to?(:length) || collection_owner.respond_to?(:size))
collection = collection_owner
else
diff --git a/vendor/gems/rspec/lib/spec/matchers/operator_matcher.rb b/vendor/gems/rspec/lib/spec/matchers/operator_matcher.rb
index 2d47ea85a..dd23a0994 100644..100755
--- a/vendor/gems/rspec/lib/spec/matchers/operator_matcher.rb
+++ b/vendor/gems/rspec/lib/spec/matchers/operator_matcher.rb
@@ -1,6 +1,7 @@
module Spec
module Matchers
class BaseOperatorMatcher
+ attr_reader :generated_description
def initialize(target)
@target = target
diff --git a/vendor/gems/rspec/lib/spec/matchers/raise_error.rb b/vendor/gems/rspec/lib/spec/matchers/raise_error.rb
index b45dcf65c..65eb4ddda 100644
--- a/vendor/gems/rspec/lib/spec/matchers/raise_error.rb
+++ b/vendor/gems/rspec/lib/spec/matchers/raise_error.rb
@@ -21,27 +21,31 @@ module Spec
if @expected_message.nil?
@raised_expected_error = true
else
- case @expected_message
- when Regexp
- if @expected_message =~ @actual_error.message
- @raised_expected_error = true
- else
- @raised_other = true
- end
- else
- if @expected_message == @actual_error.message
- @raised_expected_error = true
- else
- @raised_other = true
- end
- end
+ verify_message
end
- rescue => @actual_error
+ rescue Exception => @actual_error
@raised_other = true
ensure
return @raised_expected_error
end
end
+
+ def verify_message
+ case @expected_message
+ when Regexp
+ if @expected_message =~ @actual_error.message
+ @raised_expected_error = true
+ else
+ @raised_other = true
+ end
+ else
+ if @expected_message == @actual_error.message
+ @raised_expected_error = true
+ else
+ @raised_other = true
+ end
+ end
+ end
def failure_message
return "expected #{expected_error}#{actual_error}" if @raised_other || !@raised_expected_error
diff --git a/vendor/gems/rspec/lib/spec/matchers/simple_matcher.rb b/vendor/gems/rspec/lib/spec/matchers/simple_matcher.rb
new file mode 100644
index 000000000..ac547d06a
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/matchers/simple_matcher.rb
@@ -0,0 +1,29 @@
+module Spec
+ module Matchers
+ class SimpleMatcher
+ attr_reader :description
+
+ def initialize(description, &match_block)
+ @description = description
+ @match_block = match_block
+ end
+
+ def matches?(actual)
+ @actual = actual
+ return @match_block.call(@actual)
+ end
+
+ def failure_message()
+ return %[expected #{@description.inspect} but got #{@actual.inspect}]
+ end
+
+ def negative_failure_message()
+ return %[expected not to get #{@description.inspect}, but got #{@actual.inspect}]
+ end
+ end
+
+ def simple_matcher(message, &match_block)
+ SimpleMatcher.new(message, &match_block)
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/lib/spec/matchers/throw_symbol.rb b/vendor/gems/rspec/lib/spec/matchers/throw_symbol.rb
index 6d047bc39..c74d84436 100644
--- a/vendor/gems/rspec/lib/spec/matchers/throw_symbol.rb
+++ b/vendor/gems/rspec/lib/spec/matchers/throw_symbol.rb
@@ -4,12 +4,14 @@ module Spec
class ThrowSymbol #:nodoc:
def initialize(expected=nil)
@expected = expected
+ @actual = nil
end
def matches?(proc)
begin
proc.call
rescue NameError => e
+ raise e unless e.message =~ /uncaught throw/
@actual = e.name.to_sym
ensure
if @expected.nil?
diff --git a/vendor/gems/rspec/lib/spec/mocks.rb b/vendor/gems/rspec/lib/spec/mocks.rb
index 66cbafb3c..9f9cd215b 100644
--- a/vendor/gems/rspec/lib/spec/mocks.rb
+++ b/vendor/gems/rspec/lib/spec/mocks.rb
@@ -170,7 +170,9 @@ module Spec
# #error can be an instantiated object or a class
# #if it is a class, it must be instantiable with no args
# my_mock.should_receive(:sym).and_throw(:sym)
- # my_mock.should_receive(:sym).and_yield([array,of,values,to,yield])
+ # my_mock.should_receive(:sym).and_yield(values,to,yield)
+ # my_mock.should_receive(:sym).and_yield(values,to,yield).and_yield(some,other,values,this,time)
+ # # for methods that yield to a block multiple times
#
# Any of these responses can be applied to a stub as well, but stubs do
# not support any qualifiers about the message received (i.e. you can't specify arguments
@@ -180,7 +182,8 @@ module Spec
# my_mock.stub!(:sym).and_return(value1, value2, value3)
# my_mock.stub!(:sym).and_raise(error)
# my_mock.stub!(:sym).and_throw(:sym)
- # my_mock.stub!(:sym).and_yield([array,of,values,to,yield])
+ # my_mock.stub!(:sym).and_yield(values,to,yield)
+ # my_mock.stub!(:sym).and_yield(values,to,yield).and_yield(some,other,values,this,time)
#
# == Arbitrary Handling
#
diff --git a/vendor/gems/rspec/lib/spec/mocks/argument_expectation.rb b/vendor/gems/rspec/lib/spec/mocks/argument_expectation.rb
index 5da069b87..34a1d4d03 100644
--- a/vendor/gems/rspec/lib/spec/mocks/argument_expectation.rb
+++ b/vendor/gems/rspec/lib/spec/mocks/argument_expectation.rb
@@ -138,7 +138,7 @@ module Spec
end
def warn_deprecated(deprecated_method, instead)
- STDERR.puts "The #{deprecated_method} constraint is deprecated. Use #{instead} instead."
+ Kernel.warn "The #{deprecated_method} constraint is deprecated. Use #{instead} instead."
end
def convert_constraint(constraint)
diff --git a/vendor/gems/rspec/lib/spec/mocks/message_expectation.rb b/vendor/gems/rspec/lib/spec/mocks/message_expectation.rb
index 74ade3c58..6bd2f1c32 100644
--- a/vendor/gems/rspec/lib/spec/mocks/message_expectation.rb
+++ b/vendor/gems/rspec/lib/spec/mocks/message_expectation.rb
@@ -10,8 +10,8 @@ module Spec
@expected_from = expected_from
@sym = sym
@method_block = method_block
- @return_block = lambda {}
- @received_count = 0
+ @return_block = nil
+ @actual_received_count = 0
@expected_received_count = expected_received_count
@args_expectation = ArgumentExpectation.new([AnyArgsConstraint.new])
@consecutive = false
@@ -20,7 +20,7 @@ module Spec
@order_group = expectation_ordering
@at_least = nil
@at_most = nil
- @args_to_yield = nil
+ @args_to_yield = []
end
def expected_args
@@ -29,17 +29,18 @@ module Spec
def and_return(*values, &return_block)
Kernel::raise AmbiguousReturnError unless @method_block.nil?
- if values.size == 0
- value = nil
- elsif values.size == 1
- value = values[0]
+ case values.size
+ when 0 then value = nil
+ when 1 then value = values[0]
else
value = values
@consecutive = true
- @expected_received_count = values.size if @expected_received_count != :any &&
+ @expected_received_count = values.size if !ignoring_args? &&
@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:
@@ -62,7 +63,8 @@ module Spec
end
def and_yield(*args)
- @args_to_yield = args
+ @args_to_yield << args
+ self
end
def matches(sym, args)
@@ -73,25 +75,26 @@ module Spec
@order_group.handle_order_constraint self
begin
- if @exception_to_raise.class == Class
- @exception_instance_to_raise = @exception_to_raise.new
- else
- @exception_instance_to_raise = @exception_to_raise
- end
Kernel::raise @exception_to_raise unless @exception_to_raise.nil?
Kernel::throw @symbol_to_throw unless @symbol_to_throw.nil?
-
+
if !@method_block.nil?
- return invoke_method_block(args)
- elsif !@args_to_yield.nil?
- return invoke_with_yield(block)
- elsif @consecutive
- return invoke_consecutive_return_block(args, block)
+ default_return_val = invoke_method_block(args)
+ elsif @args_to_yield.size > 0
+ default_return_val = invoke_with_yield(block)
else
+ default_return_val = nil
+ end
+
+ if @consecutive
+ return invoke_consecutive_return_block(args, block)
+ elsif @return_block
return invoke_return_block(args, block)
+ else
+ return default_return_val
end
ensure
- @received_count += 1
+ @actual_received_count += 1
end
end
@@ -109,25 +112,32 @@ module Spec
if block.nil?
@error_generator.raise_missing_block_error @args_to_yield
end
- if block.arity > -1 && @args_to_yield.length != block.arity
- @error_generator.raise_wrong_arity_error @args_to_yield, block.arity
+ @args_to_yield.each do |args_to_yield_this_time|
+ if block.arity > -1 && args_to_yield_this_time.length != block.arity
+ @error_generator.raise_wrong_arity_error args_to_yield_this_time, block.arity
+ end
+ block.call(*args_to_yield_this_time)
end
- block.call(*@args_to_yield)
end
def invoke_consecutive_return_block(args, block)
args << block unless block.nil?
value = @return_block.call(*args)
- index = [@received_count, value.size-1].min
+ index = [@actual_received_count, value.size-1].min
value[index]
end
def invoke_return_block(args, block)
args << block unless block.nil?
- value = @return_block.call(*args)
-
- value
+ # 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
end
end
@@ -138,17 +148,33 @@ module Spec
end
def verify_messages_received
- return if @expected_received_count == :any
- return if (@at_least) && (@received_count >= @expected_received_count)
- return if (@at_most) && (@received_count <= @expected_received_count)
- return if @expected_received_count == @received_count
+ return if ignoring_args? || matches_exact_count? ||
+ matches_at_least_count? || matches_at_most_count?
- begin
- @error_generator.raise_expectation_error(@sym, @expected_received_count, @received_count, *@args_expectation.args)
- rescue => error
- error.backtrace.insert(0, @expected_from)
- Kernel::raise error
- end
+ generate_error
+ rescue Spec::Mocks::MockExpectationError => error
+ error.backtrace.insert(0, @expected_from)
+ Kernel::raise error
+ end
+
+ def ignoring_args?
+ @expected_received_count == :any
+ end
+
+ def matches_at_least_count?
+ @at_least && @actual_received_count >= @expected_received_count
+ end
+
+ def matches_at_most_count?
+ @at_most && @actual_received_count <= @expected_received_count
+ end
+
+ def matches_exact_count?
+ @expected_received_count == @actual_received_count
+ end
+
+ def generate_error
+ @error_generator.raise_expectation_error(@sym, @expected_received_count, @actual_received_count, *@args_expectation.args)
end
def with(*args, &block)
@@ -215,9 +241,14 @@ module Spec
def set_expected_received_count(relativity, n)
@at_least = (relativity == :at_least)
@at_most = (relativity == :at_most)
- @expected_received_count = 1 if n == :once
- @expected_received_count = 2 if n == :twice
- @expected_received_count = n if n.kind_of? Numeric
+ @expected_received_count = case n
+ when Numeric
+ n
+ when :once
+ 1
+ when :twice
+ 2
+ end
end
end
@@ -232,11 +263,5 @@ module Spec
end
end
- class MethodStub < BaseExpectation
- def initialize(message, expectation_ordering, expected_from, sym, method_block)
- super(message, expectation_ordering, expected_from, sym, method_block, 0)
- @expected_received_count = :any
- end
- end
end
end
diff --git a/vendor/gems/rspec/lib/spec/mocks/methods.rb b/vendor/gems/rspec/lib/spec/mocks/methods.rb
index 3d898cf31..d9fa324d3 100644
--- a/vendor/gems/rspec/lib/spec/mocks/methods.rb
+++ b/vendor/gems/rspec/lib/spec/mocks/methods.rb
@@ -9,8 +9,8 @@ module Spec
__mock_proxy.add_negative_message_expectation(caller(1)[0], sym.to_sym, &block)
end
- def stub!(sym)
- __mock_proxy.add_stub(caller(1)[0], sym.to_sym)
+ def stub!(sym, opts={})
+ __mock_proxy.add_stub(caller(1)[0], sym.to_sym, opts)
end
def received_message?(sym, *args, &block) #:nodoc:
diff --git a/vendor/gems/rspec/lib/spec/mocks/mock.rb b/vendor/gems/rspec/lib/spec/mocks/mock.rb
index aa380e0af..f029b1b8f 100644
--- a/vendor/gems/rspec/lib/spec/mocks/mock.rb
+++ b/vendor/gems/rspec/lib/spec/mocks/mock.rb
@@ -6,9 +6,18 @@ module Spec
# Creates a new mock with a +name+ (that will be used in error messages 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, options={})
+ def initialize(name, stubs_and_options={})
@name = name
- @options = options
+ @options = parse_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
+ def ==(other)
+ other == __mock_proxy
end
def method_missing(sym, *args, &block)
@@ -16,7 +25,7 @@ module Spec
begin
return self if __mock_proxy.null_object?
super(sym, *args, &block)
- rescue NoMethodError
+ rescue NameError
__mock_proxy.raise_unexpected_message_error sym, *args
end
end
@@ -24,6 +33,18 @@ module Spec
def inspect
"#<#{self.class}:#{sprintf '0x%x', self.object_id} @name=#{@name.inspect}>"
end
+
+ private
+
+ def parse_options(options)
+ options.has_key?(:null_object) ? {:null_object => options.delete(:null_object)} : {}
+ 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/gems/rspec/lib/spec/mocks/proxy.rb b/vendor/gems/rspec/lib/spec/mocks/proxy.rb
index 6c79d1068..03db3b113 100644
--- a/vendor/gems/rspec/lib/spec/mocks/proxy.rb
+++ b/vendor/gems/rspec/lib/spec/mocks/proxy.rb
@@ -22,29 +22,27 @@ module Spec
end
def add_message_expectation(expected_from, sym, opts={}, &block)
- __add sym, block
+ __add sym
@expectations << MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil, 1, opts)
@expectations.last
end
def add_negative_message_expectation(expected_from, sym, &block)
- __add sym, block
+ __add sym
@expectations << NegativeMessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, block_given? ? block : nil)
@expectations.last
end
- def add_stub(expected_from, sym)
- __add sym, nil
- @stubs.unshift MethodStub.new(@error_generator, @expectation_ordering, expected_from, sym, nil)
+ def add_stub(expected_from, sym, opts={})
+ __add sym
+ @stubs.unshift MessageExpectation.new(@error_generator, @expectation_ordering, expected_from, sym, nil, :any, opts)
@stubs.first
end
def verify #:nodoc:
- begin
- verify_expectations
- ensure
- reset
- end
+ verify_expectations
+ ensure
+ reset
end
def reset
@@ -55,8 +53,7 @@ module Spec
end
def received_message?(sym, *args, &block)
- return true if @messages_received.find {|array| array == [sym, args, block]}
- return false
+ @messages_received.any? {|array| array == [sym, args, block]}
end
def has_negative_expectation?(sym)
@@ -66,7 +63,7 @@ module Spec
def message_received(sym, *args, &block)
if expectation = find_matching_expectation(sym, *args)
expectation.invoke(args, block)
- elsif stub = find_matching_method_stub(sym)
+ elsif stub = find_matching_method_stub(sym, *args)
stub.invoke([], block)
elsif expectation = find_almost_matching_expectation(sym, *args)
raise_unexpected_message_args_error(expectation, *args) unless has_negative_expectation?(sym) unless null_object?
@@ -85,14 +82,17 @@ module Spec
private
- def __add(sym, block)
+ def __add(sym)
$rspec_mocks.add(@target) unless $rspec_mocks.nil?
define_expected_method(sym)
end
def define_expected_method(sym)
- if target_responds_to?(sym) && !@proxied_methods.include?(sym)
- metaclass.__send__(:alias_method, munge(sym), sym) if metaclass.instance_methods.include?(sym.to_s)
+ if target_responds_to?(sym) && !metaclass.method_defined?(munge(sym))
+ munged_sym = munge(sym)
+ metaclass.instance_eval do
+ alias_method munged_sym, sym if method_defined?(sym.to_s)
+ end
@proxied_methods << sym
end
@@ -141,11 +141,14 @@ module Spec
def reset_proxied_methods
@proxied_methods.each do |sym|
- if metaclass.instance_methods.include?(munge(sym).to_s)
- metaclass.__send__(:alias_method, sym, munge(sym))
- metaclass.__send__(:undef_method, munge(sym))
- else
- metaclass.__send__(:undef_method, sym)
+ munged_sym = munge(sym)
+ 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
end
end
end
@@ -158,8 +161,8 @@ module Spec
@expectations.find {|expectation| expectation.matches_name_but_not_args(sym, args)}
end
- def find_matching_method_stub(sym)
- @stubs.find {|stub| stub.matches(sym, [])}
+ def find_matching_method_stub(sym, *args)
+ @stubs.find {|stub| stub.matches(sym, args)}
end
end
diff --git a/vendor/gems/rspec/lib/spec/mocks/space.rb b/vendor/gems/rspec/lib/spec/mocks/space.rb
index e04bc5ccb..3e13224c7 100644
--- a/vendor/gems/rspec/lib/spec/mocks/space.rb
+++ b/vendor/gems/rspec/lib/spec/mocks/space.rb
@@ -2,7 +2,7 @@ module Spec
module Mocks
class Space
def add(obj)
- mocks << obj unless mocks.include?(obj)
+ mocks << obj unless mocks.detect {|m| m.equal? obj}
end
def verify_all
diff --git a/vendor/gems/rspec/lib/spec/mocks/spec_methods.rb b/vendor/gems/rspec/lib/spec/mocks/spec_methods.rb
index fd67fd210..d92a4cedd 100644
--- a/vendor/gems/rspec/lib/spec/mocks/spec_methods.rb
+++ b/vendor/gems/rspec/lib/spec/mocks/spec_methods.rb
@@ -1,30 +1,38 @@
module Spec
module Mocks
- module SpecMethods
+ module ExampleMethods
include Spec::Mocks::ArgumentConstraintMatchers
# Shortcut for creating an instance of Spec::Mocks::Mock.
- def mock(name, options={})
- Spec::Mocks::Mock.new(name, options)
- end
-
- # Shortcut for creating an instance of Spec::Mocks::Mock with
- # predefined method stubs.
+ #
+ # +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 = stub("thing", :a => "A")
+ # 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 stub(name, stubs={})
- object_stub = mock(name)
- stubs.each { |key, value| object_stub.stub!(key).and_return(value) }
- object_stub
+ 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/gems/rspec/lib/spec/rake/spectask.rb b/vendor/gems/rspec/lib/spec/rake/spectask.rb
index f8c6809a9..781c151a4 100644
--- a/vendor/gems/rspec/lib/spec/rake/spectask.rb
+++ b/vendor/gems/rspec/lib/spec/rake/spectask.rb
@@ -8,7 +8,7 @@ require 'rake/tasklib'
module Spec
module Rake
- # A Rake task that runs a set of RSpec contexts.
+ # A Rake task that runs a set of specs.
#
# Example:
#
@@ -44,6 +44,17 @@ module Spec
# Each attribute of this task may be a proc. This allows for lazy evaluation,
# which is sometimes handy if you want to defer the evaluation of an attribute value
# until the task is run (as opposed to when it is defined).
+ #
+ # 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']
+ # t.spec_files = FileList['test/**/*_test.rb']
+ # end
+ #
class SpecTask < ::Rake::TaskLib
class << self
def attr_accessor(*names)
@@ -106,6 +117,10 @@ module Spec
# used, then the list of spec files is the union of the two.
# Setting the SPEC environment variable overrides this.
attr_accessor :spec_files
+
+ # Use verbose output. If this is set to true, the task will print
+ # the executed spec command to stdout. Defaults to false.
+ attr_accessor :verbose
# Defines a new task, using the name +name+.
def initialize(name=:spec)
@@ -150,7 +165,7 @@ module Spec
cmd << " "
cmd << rcov_option_list
cmd << %[ -o "#{rcov_dir}" ] if rcov
- cmd << %Q|"#{spec_script}"|
+ #cmd << %Q|"#{spec_script}"|
cmd << " "
cmd << "-- " if rcov
cmd << spec_file_list.collect { |fn| %["#{fn}"] }.join(' ')
@@ -161,6 +176,9 @@ module Spec
cmd << %Q| > "#{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
unless system(cmd)
STDERR.puts failure_message if failure_message
raise("Command #{cmd} failed") if fail_on_error
diff --git a/vendor/gems/rspec/lib/spec/rake/verify_rcov.rb b/vendor/gems/rspec/lib/spec/rake/verify_rcov.rb
index 9715744e9..3328f9e9a 100644
--- a/vendor/gems/rspec/lib/spec/rake/verify_rcov.rb
+++ b/vendor/gems/rspec/lib/spec/rake/verify_rcov.rb
@@ -38,7 +38,7 @@ module RCov
total_coverage = nil
File.open(index_html).each_line do |line|
- if line =~ /<tt.*>(\d+\.\d+)%<\/tt>&nbsp;<\/td>/
+ if line =~ /<tt class='coverage_total'>(\d+\.\d+)%<\/tt>/
total_coverage = eval($1)
break
end
diff --git a/vendor/gems/rspec/lib/spec/runner.rb b/vendor/gems/rspec/lib/spec/runner.rb
index 9d801adc3..97ef95bd2 100644
--- a/vendor/gems/rspec/lib/spec/runner.rb
+++ b/vendor/gems/rspec/lib/spec/runner.rb
@@ -1,22 +1,20 @@
-require 'spec/runner/formatter'
-require 'spec/runner/behaviour_runner'
require 'spec/runner/options'
require 'spec/runner/option_parser'
+require 'spec/runner/example_group_runner'
require 'spec/runner/command_line'
require 'spec/runner/drb_command_line'
require 'spec/runner/backtrace_tweaker'
require 'spec/runner/reporter'
-require 'spec/runner/extensions/object'
-require 'spec/runner/extensions/kernel'
require 'spec/runner/spec_parser'
+require 'spec/runner/class_and_arguments_parser'
module Spec
- # == Behaviours and Examples
+ # == ExampleGroups and Examples
#
- # Rather than expressing examples in classes, RSpec uses a custom domain specific language to
- # describe Behaviours and Examples of those behaviours.
+ # Rather than expressing examples in classes, RSpec uses a custom DSLL (DSL light) to
+ # describe groups of examples.
#
- # A Behaviour is the equivalent of a fixture in xUnit-speak. It is a metaphor for the context
+ # 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
#
@@ -32,7 +30,7 @@ module Spec
#
# end
#
- # We use the before block to set up the Behaviour (given), and then the #it method to
+ # 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
@@ -47,7 +45,7 @@ module Spec
#
# == Setup and Teardown
#
- # You can use before and after within a Behaviour. Both methods take an optional
+ # 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
@@ -125,11 +123,11 @@ module Spec
# end
# end
#
- # == Shared behaviour
+ # == Shared Example Groups
#
- # You can define a shared behaviour, that may be used on other behaviours
+ # You can define a shared Example Group, that may be used on other groups
#
- # describe "All Editions", :shared => true do
+ # share_examples_for "All Editions" do
# it "all editions behaviour" ...
# end
#
@@ -140,10 +138,35 @@ module Spec
# ...
# 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 << self
def configuration # :nodoc:
- @configuration ||= Spec::DSL::Configuration.new
+ @configuration ||= Spec::Example::Configuration.new
end
# Use this to configure various configurable aspects of
@@ -154,12 +177,26 @@ module Spec
# end
#
# The yielded <tt>configuration</tt> object is a
- # Spec::DSL::Configuration instance. See its RDoc
+ # Spec::Example::Configuration instance. See its RDoc
# for details about what you can do with it.
#
def configure
- yield configuration if @configuration.nil?
+ 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
+ end
+ end
+
end
end
end
diff --git a/vendor/gems/rspec/lib/spec/runner/backtrace_tweaker.rb b/vendor/gems/rspec/lib/spec/runner/backtrace_tweaker.rb
index aacc2c8b8..5fd2fb99f 100644
--- a/vendor/gems/rspec/lib/spec/runner/backtrace_tweaker.rb
+++ b/vendor/gems/rspec/lib/spec/runner/backtrace_tweaker.rb
@@ -7,7 +7,7 @@ module Spec
end
class NoisyBacktraceTweaker < BacktraceTweaker
- def tweak_backtrace(error, spec_name)
+ def tweak_backtrace(error)
return if error.backtrace.nil?
error.backtrace.each do |line|
clean_up_double_slashes(line)
@@ -19,7 +19,7 @@ module Spec
class QuietBacktraceTweaker < BacktraceTweaker
unless defined?(IGNORE_PATTERNS)
root_dir = File.expand_path(File.join(__FILE__, '..', '..', '..', '..'))
- spec_files = Dir["#{root_dir}/lib/spec/*"].map do |path|
+ spec_files = Dir["#{root_dir}/lib/*"].map do |path|
subpath = path[root_dir.length..-1]
/#{subpath}/
end
@@ -38,7 +38,7 @@ module Spec
]
end
- def tweak_backtrace(error, spec_name)
+ def tweak_backtrace(error)
return if error.backtrace.nil?
error.backtrace.collect! do |line|
clean_up_double_slashes(line)
diff --git a/vendor/gems/rspec/lib/spec/runner/behaviour_runner.rb b/vendor/gems/rspec/lib/spec/runner/behaviour_runner.rb
deleted file mode 100644
index 1ac891f3c..000000000
--- a/vendor/gems/rspec/lib/spec/runner/behaviour_runner.rb
+++ /dev/null
@@ -1,123 +0,0 @@
-module Spec
- module Runner
- class BehaviourRunner
-
- def initialize(options, arg=nil)
- @behaviours = []
- @options = options
- end
-
- def add_behaviour(behaviour)
- if !specified_examples.nil? && !specified_examples.empty?
- behaviour.retain_examples_matching!(specified_examples)
- end
- @behaviours << behaviour if behaviour.number_of_examples != 0 && !behaviour.shared?
- end
-
- # Runs all behaviours and returns the number of failures.
- def run(paths, exit_when_done)
- prepare!(paths)
- begin
- run_behaviours
- rescue Interrupt
- ensure
- report_end
- end
- failure_count = report_dump
-
- heckle if(failure_count == 0 && !@options.heckle_runner.nil?)
-
- if(exit_when_done)
- exit_code = (failure_count == 0) ? 0 : 1
- exit(exit_code)
- end
- failure_count
- end
-
- def report_end
- @options.reporter.end
- end
-
- def report_dump
- @options.reporter.dump
- end
-
- def prepare!(paths)
- unless paths.nil? # It's nil when running single specs with ruby
- paths = find_paths(paths)
- sorted_paths = sort_paths(paths)
- load_specs(sorted_paths) # This will populate @behaviours via callbacks to add_behaviour
- end
- @options.reporter.start(number_of_examples)
- @behaviours.reverse! if @options.reverse
- set_sequence_numbers
- end
-
- def run_behaviours
- @behaviours.each do |behaviour|
- behaviour.run(@options.reporter, @options.dry_run, @options.reverse, @options.timeout)
- end
- end
-
- def number_of_examples
- @behaviours.inject(0) {|sum, behaviour| sum + behaviour.number_of_examples}
- end
-
- FILE_SORTERS = {
- 'mtime' => lambda {|file_a, file_b| File.mtime(file_b) <=> File.mtime(file_a)}
- }
-
- def sorter(paths)
- FILE_SORTERS[@options.loadby]
- end
-
- def sort_paths(paths)
- sorter = sorter(paths)
- paths = paths.sort(&sorter) unless sorter.nil?
- paths
- end
-
- private
-
- # Sets the #number on each Example
- def set_sequence_numbers
- number = 0
- @behaviours.each do |behaviour|
- number = behaviour.set_sequence_numbers(number, @options.reverse)
- end
- end
-
- def find_paths(paths)
- result = []
- paths.each do |path|
- if File.directory?(path)
- result += Dir["#{path}/**/*.rb"]
- elsif File.file?(path)
- result << path
- else
- raise "File or directory not found: #{path}"
- end
- end
- result
- end
-
- def load_specs(paths)
- paths.each do |path|
- load path
- end
- end
-
- def specified_examples
- @options.examples
- end
-
- def heckle
- heckle_runner = @options.heckle_runner
- @options.heckle_runner = nil
- behaviour_runner = self.class.new(@options)
- behaviour_runner.instance_variable_set(:@behaviours, @behaviours)
- heckle_runner.heckle_with(behaviour_runner)
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/runner/class_and_arguments_parser.rb b/vendor/gems/rspec/lib/spec/runner/class_and_arguments_parser.rb
new file mode 100644
index 000000000..65dc4519c
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/runner/class_and_arguments_parser.rb
@@ -0,0 +1,16 @@
+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
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/lib/spec/runner/command_line.rb b/vendor/gems/rspec/lib/spec/runner/command_line.rb
index 0d70337e1..9849c4853 100644
--- a/vendor/gems/rspec/lib/spec/runner/command_line.rb
+++ b/vendor/gems/rspec/lib/spec/runner/command_line.rb
@@ -4,18 +4,24 @@ module Spec
module Runner
# Facade to run specs without having to fork a new ruby process (using `spec ...`)
class CommandLine
- # Runs specs. +argv+ is the commandline args as per the spec commandline API, +err+
- # and +out+ are the streams output will be written to. +exit+ tells whether or
- # not a system exit should be called after the specs are run and
- # +warn_if_no_files+ tells whether or not a warning (the help message)
- # should be printed to +err+ in case no files are specified.
- def self.run(argv, err, out, exit=true, warn_if_no_files=true)
- old_behaviour_runner = defined?($behaviour_runner) ? $behaviour_runner : nil
- $behaviour_runner = OptionParser.new.create_behaviour_runner(argv, err, out, warn_if_no_files)
- return if $behaviour_runner.nil? # This is the case if we use --drb
-
- $behaviour_runner.run(argv, exit)
- $behaviour_runner = old_behaviour_runner
+ 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
end
end
end
diff --git a/vendor/gems/rspec/lib/spec/runner/drb_command_line.rb b/vendor/gems/rspec/lib/spec/runner/drb_command_line.rb
index 7e745fb71..6c340cfea 100644
--- a/vendor/gems/rspec/lib/spec/runner/drb_command_line.rb
+++ b/vendor/gems/rspec/lib/spec/runner/drb_command_line.rb
@@ -6,14 +6,13 @@ module Spec
class DrbCommandLine
# Runs specs on a DRB server. Note that this API is similar to that of
# CommandLine - making it possible for clients to use both interchangeably.
- def self.run(argv, stderr, stdout, exit=true, warn_if_no_files=true)
+ def self.run(options)
begin
DRb.start_service
spec_server = DRbObject.new_with_uri("druby://localhost:8989")
- spec_server.run(argv, stderr, stdout)
- rescue DRb::DRbConnError
- stderr.puts "No server is running"
- exit 1 if exit
+ spec_server.run(options.argv, options.error_stream, options.output_stream)
+ rescue DRb::DRbConnError => e
+ options.error_stream.puts "No server is running"
end
end
end
diff --git a/vendor/gems/rspec/lib/spec/runner/example_group_runner.rb b/vendor/gems/rspec/lib/spec/runner/example_group_runner.rb
new file mode 100644
index 000000000..7275c6a88
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/runner/example_group_runner.rb
@@ -0,0 +1,59 @@
+module Spec
+ module Runner
+ class ExampleGroupRunner
+ def initialize(options)
+ @options = options
+ end
+
+ def load_files(files)
+ # 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
+ # someone else to do it over the wire.
+ files.each do |file|
+ load file
+ end
+ end
+
+ def run
+ prepare
+ success = true
+ example_groups.each do |example_group|
+ success = success & example_group.run
+ end
+ return success
+ ensure
+ finish
+ end
+
+ protected
+ def prepare
+ reporter.start(number_of_examples)
+ example_groups.reverse! if reverse
+ end
+
+ def finish
+ reporter.end
+ reporter.dump
+ end
+
+ def reporter
+ @options.reporter
+ end
+
+ def reverse
+ @options.reverse
+ end
+
+ def example_groups
+ @options.example_groups
+ end
+
+ def number_of_examples
+ @options.number_of_examples
+ end
+ end
+ # TODO: BT - Deprecate BehaviourRunner?
+ BehaviourRunner = ExampleGroupRunner
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/lib/spec/runner/extensions/kernel.rb b/vendor/gems/rspec/lib/spec/runner/extensions/kernel.rb
deleted file mode 100644
index 75f2c335e..000000000
--- a/vendor/gems/rspec/lib/spec/runner/extensions/kernel.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-module Kernel
- # Creates and registers an instance of a Spec::DSL::Behaviour (or a subclass).
- # The instantiated behaviour class 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 behaviour class
- # with an options Hash as the last argument:
- #
- # describe "name", :behaviour_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::DSL::BehaviourFactory#add_behaviour_class for details about
- # how to register special Spec::DSL::Behaviour implementations.
- #
- def describe(*args, &block)
- raise ArgumentError if args.empty?
- args << {} unless Hash === args.last
- args.last[:spec_path] = caller(0)[1]
- register_behaviour(Spec::DSL::BehaviourFactory.create(*args, &block))
- end
- alias :context :describe
-
- def respond_to(*names)
- Spec::Matchers::RespondTo.new(*names)
- end
-
-private
-
- def register_behaviour(behaviour)
- if behaviour.shared?
- Spec::DSL::Behaviour.add_shared_behaviour(behaviour)
- else
- behaviour_runner.add_behaviour(behaviour)
- end
- end
-
- def behaviour_runner
- # TODO: Figure out a better way to get this considered "covered" and keep this statement on multiple lines
- unless $behaviour_runner; \
- $behaviour_runner = ::Spec::Runner::OptionParser.new.create_behaviour_runner(ARGV.dup, STDERR, STDOUT, false); \
- at_exit { $behaviour_runner.run(nil, false) }; \
- end
- $behaviour_runner
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/runner/extensions/object.rb b/vendor/gems/rspec/lib/spec/runner/extensions/object.rb
deleted file mode 100644
index 49745352f..000000000
--- a/vendor/gems/rspec/lib/spec/runner/extensions/object.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# The following copyright applies to Object#copy_instance_variables_from,
-# which we borrowed from active_support.
-#
-# Copyright (c) 2004 David Heinemeier Hansson
-#
-# 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.
-class Object
- # From active_support
- def copy_instance_variables_from(object, exclude = []) # :nodoc:
- exclude += object.protected_instance_variables if object.respond_to? :protected_instance_variables
-
- instance_variables = object.instance_variables - exclude.map { |name| name.to_s }
- instance_variables.each { |name| instance_variable_set(name, object.instance_variable_get(name)) }
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter.rb
deleted file mode 100644
index 17512d958..000000000
--- a/vendor/gems/rspec/lib/spec/runner/formatter.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-require 'spec/runner/formatter/base_formatter'
-require 'spec/runner/formatter/base_text_formatter'
-require 'spec/runner/formatter/progress_bar_formatter'
-require 'spec/runner/formatter/rdoc_formatter'
-require 'spec/runner/formatter/specdoc_formatter'
-require 'spec/runner/formatter/html_formatter'
-require 'spec/runner/formatter/failing_examples_formatter'
-require 'spec/runner/formatter/failing_behaviours_formatter'
-require 'spec/runner/formatter/snippet_extractor'
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/base_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/base_formatter.rb
index 7cc43ef0e..c8647cf50 100644
--- a/vendor/gems/rspec/lib/spec/runner/formatter/base_formatter.rb
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/base_formatter.rb
@@ -3,7 +3,9 @@ module Spec
module Formatter
# Baseclass for formatters that implements all required methods as no-ops.
class BaseFormatter
- def initialize(where)
+ attr_accessor :example_group, :options, :where
+ def initialize(options, where)
+ @options = options
@where = where
end
@@ -12,16 +14,17 @@ 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_behaviour
+ # is #add_example_group
def start(example_count)
end
- # This method is invoked at the beginning of the execution of each behaviour.
- # +name+ is the name of the behaviour and +first+ is true if it is the
- # first behaviour - otherwise it's false.
+ # This method is invoked at the beginning of the execution of each example_group.
+ # +name+ is the name of the example_group and +first+ is true if it is the
+ # first example_group - otherwise it's false.
#
# The next method to be invoked after this is #example_failed or #example_finished
- def add_behaviour(name)
+ def add_example_group(example_group)
+ @example_group = example_group
end
# This method is invoked when an +example+ starts.
@@ -41,10 +44,9 @@ module Spec
# 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.
- # +name+ is the name of the example.
# +message+ is the message from the ExamplePendingError, if it exists, or the
# default value of "Not Yet Implemented"
- def example_pending(behaviour_name, example_name, message)
+ def example_pending(example_group_description, example, message)
end
# This method is invoked after all of the examples have executed. The next method
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/base_text_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/base_text_formatter.rb
index c3cf01b76..859b2641d 100644
--- a/vendor/gems/rspec/lib/spec/runner/formatter/base_text_formatter.rb
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/base_text_formatter.rb
@@ -1,3 +1,5 @@
+require 'spec/runner/formatter/base_formatter'
+
module Spec
module Runner
module Formatter
@@ -5,13 +7,12 @@ module Spec
# non-text based ones too - just ignore the +output+ constructor
# argument.
class BaseTextFormatter < BaseFormatter
- attr_writer :dry_run
-
+ attr_reader :output, :pending_examples
# Creates a new instance that will write to +where+. If +where+ 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(where)
- super(where)
+ def initialize(options, where)
+ super
if where.is_a?(String)
@output = File.open(where, 'w')
elsif where == STDOUT
@@ -22,21 +23,13 @@ module Spec
else
@output = where
end
- @colour = false
- @dry_run = false
- @snippet_extractor = SnippetExtractor.new
@pending_examples = []
end
- def example_pending(behaviour_name, example_name, message)
- @pending_examples << ["#{behaviour_name} #{example_name}", message]
+ def example_pending(example_group_description, example, message)
+ @pending_examples << ["#{example_group_description} #{example.description}", message]
end
- def colour=(colour)
- @colour = colour
- begin ; require 'Win32/Console/ANSI' if @colour && PLATFORM =~ /win32/ ; rescue LoadError ; raise "You must gem install win32console to use colour on Windows" ; end
- end
-
def dump_failure(counter, failure)
@output.puts
@output.puts "#{counter.to_s})"
@@ -56,7 +49,7 @@ module Spec
end
def dump_summary(duration, example_count, failure_count, pending_count)
- return if @dry_run
+ return if dry_run?
@output.puts
@output.puts "Finished in #{duration} seconds"
@output.puts
@@ -74,7 +67,6 @@ module Spec
@output.puts red(summary)
end
@output.flush
- dump_pending
end
def dump_pending
@@ -100,13 +92,21 @@ module Spec
end
protected
-
+
+ def colour?
+ @options.colour ? true : false
+ end
+
+ def dry_run?
+ @options.dry_run ? true : false
+ end
+
def backtrace_line(line)
line.sub(/\A([^:]+:\d+)$/, '\\1:')
end
def colour(text, colour_code)
- return text unless @colour && output_to_tty?
+ return text unless colour? && output_to_tty?
"#{colour_code}#{text}\e[0m"
end
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/failing_behaviours_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/failing_behaviours_formatter.rb
deleted file mode 100644
index 2b3940fd3..000000000
--- a/vendor/gems/rspec/lib/spec/runner/formatter/failing_behaviours_formatter.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-module Spec
- module Runner
- module Formatter
- class FailingBehavioursFormatter < BaseTextFormatter
- def add_behaviour(behaviour_name)
- if behaviour_name =~ /(.*) \(druby.*\)$/
- @behaviour_name = $1
- else
- @behaviour_name = behaviour_name
- end
- end
-
- def example_failed(example, counter, failure)
- unless @behaviour_name.nil?
- @output.puts @behaviour_name
- @behaviour_name = nil
- @output.flush
- end
- end
-
- def dump_failure(counter, failure)
- end
-
- def dump_summary(duration, example_count, failure_count, pending_count)
- end
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/failing_example_groups_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/failing_example_groups_formatter.rb
new file mode 100644
index 000000000..5a4607983
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/failing_example_groups_formatter.rb
@@ -0,0 +1,31 @@
+require 'spec/runner/formatter/base_text_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ class FailingExampleGroupsFormatter < BaseTextFormatter
+ def add_example_group(example_group)
+ super
+ @example_group_description_parts = example_group.description_parts
+ end
+
+ def example_failed(example, counter, failure)
+ if @example_group_description_parts
+ description_parts = @example_group_description_parts.collect do |description|
+ description =~ /(.*) \(druby.*\)$/ ? $1 : description
+ end
+ @output.puts ::Spec::Example::ExampleGroupMethods.description_text(*description_parts)
+ @output.flush
+ @example_group_description_parts = nil
+ end
+ end
+
+ def dump_failure(counter, failure)
+ end
+
+ def dump_summary(duration, example_count, failure_count, pending_count)
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/failing_examples_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/failing_examples_formatter.rb
index 9728deaf0..e3a271c8b 100644
--- a/vendor/gems/rspec/lib/spec/runner/formatter/failing_examples_formatter.rb
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/failing_examples_formatter.rb
@@ -1,13 +1,11 @@
+require 'spec/runner/formatter/base_text_formatter'
+
module Spec
module Runner
module Formatter
class FailingExamplesFormatter < BaseTextFormatter
- def add_behaviour(behaviour_name)
- @behaviour_name = behaviour_name
- end
-
def example_failed(example, counter, failure)
- @output.puts "#{@behaviour_name} #{example.description}"
+ @output.puts "#{example_group.description} #{example.description}"
@output.flush
end
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/html_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/html_formatter.rb
index d9c422e55..ad153c8dc 100644
--- a/vendor/gems/rspec/lib/spec/runner/formatter/html_formatter.rb
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/html_formatter.rb
@@ -1,4 +1,5 @@
require 'erb'
+require 'spec/runner/formatter/base_text_formatter'
module Spec
module Runner
@@ -6,15 +7,15 @@ module Spec
class HtmlFormatter < BaseTextFormatter
include ERB::Util # for the #h method
- def initialize(output)
+ def initialize(options, output)
super
- @current_behaviour_number = 0
+ @current_example_group_number = 0
@current_example_number = 0
end
- # The number of the currently running behaviour
- def current_behaviour_number
- @current_behaviour_number
+ # The number of the currently running example_group
+ def current_example_group_number
+ @current_example_group_number
end
# The number of the currently running example (a global counter)
@@ -30,17 +31,18 @@ module Spec
@output.flush
end
- def add_behaviour(name)
- @behaviour_red = false
- @behaviour_red = false
- @current_behaviour_number += 1
- unless current_behaviour_number == 1
+ def add_example_group(example_group)
+ super
+ @example_group_red = false
+ @example_group_red = false
+ @current_example_group_number += 1
+ unless current_example_group_number == 1
@output.puts " </dl>"
@output.puts "</div>"
end
- @output.puts "<div class=\"behaviour\">"
+ @output.puts "<div class=\"example_group\">"
@output.puts " <dl>"
- @output.puts " <dt id=\"behaviour_#{current_behaviour_number}\">#{h(name)}</dt>"
+ @output.puts " <dt id=\"example_group_#{current_example_group_number}\">#{h(example_group.description)}</dt>"
@output.flush
end
@@ -51,7 +53,7 @@ module Spec
end
def example_started(example)
- @current_example_number = example.number
+ @current_example_number += 1
end
def example_passed(example)
@@ -65,8 +67,8 @@ module Spec
failure_style = failure.pending_fixed? ? 'pending_fixed' : 'failed'
@output.puts " <script type=\"text/javascript\">makeRed('rspec-header');</script>" unless @header_red
@header_red = true
- @output.puts " <script type=\"text/javascript\">makeRed('behaviour_#{current_behaviour_number}');</script>" unless @behaviour_red
- @behaviour_red = true
+ @output.puts " <script type=\"text/javascript\">makeRed('example_group_#{current_example_group_number}');</script>" unless @example_group_red
+ @example_group_red = true
move_progress
@output.puts " <dd class=\"spec #{failure_style}\">"
@output.puts " <span class=\"failed_spec_name\">#{h(example.description)}</span>"
@@ -79,11 +81,11 @@ module Spec
@output.flush
end
- def example_pending(behaviour_name, example_name, message)
+ def example_pending(example_group_description, example, message)
@output.puts " <script type=\"text/javascript\">makeYellow('rspec-header');</script>" unless @header_red
- @output.puts " <script type=\"text/javascript\">makeYellow('behaviour_#{current_behaviour_number}');</script>" unless @behaviour_red
+ @output.puts " <script type=\"text/javascript\">makeYellow('example_group_#{current_example_group_number}');</script>" unless @example_group_red
move_progress
- @output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{h(example_name)}</span></dd>"
+ @output.puts " <dd class=\"spec not_implemented\"><span class=\"not_implemented_spec_name\">#{h(example.description)} (PENDING: #{h(message)})</span></dd>"
@output.flush
end
@@ -91,20 +93,29 @@ module Spec
# could output links to images or other files produced during the specs.
#
def extra_failure_content(failure)
+ require 'spec/runner/formatter/snippet_extractor'
+ @snippet_extractor ||= SnippetExtractor.new
" <pre class=\"ruby\"><code>#{@snippet_extractor.snippet(failure.exception)}</code></pre>"
end
def move_progress
- percent_done = @example_count == 0 ? 100.0 : ((current_example_number + 1).to_f / @example_count.to_f * 1000).to_i / 10.0
@output.puts " <script type=\"text/javascript\">moveProgressBar('#{percent_done}');</script>"
@output.flush
end
+ def percent_done
+ result = 100.0
+ if @example_count != 0
+ result = ((current_example_number).to_f / @example_count.to_f * 1000).to_i / 10.0
+ end
+ result
+ end
+
def dump_failure(counter, failure)
end
def dump_summary(duration, example_count, failure_count, pending_count)
- if @dry_run
+ if dry_run?
totals = "This was a dry-run"
else
totals = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}"
@@ -121,15 +132,14 @@ module Spec
def html_header
<<-EOF
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
+<?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=iso-8859-1" />
+ <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">
@@ -225,7 +235,7 @@ EOF
font-size: 1.2em;
}
-.behaviour {
+.example_group {
margin: 0 10px 5px;
background: #fff;
}
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/profile_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/profile_formatter.rb
new file mode 100644
index 000000000..3784f3ac7
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/profile_formatter.rb
@@ -0,0 +1,47 @@
+require 'spec/runner/formatter/progress_bar_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ class ProfileFormatter < ProgressBarFormatter
+
+ def initialize(options, where)
+ super
+ @example_times = []
+ end
+
+ def start(count)
+ @output.puts "Profiling enabled."
+ end
+
+ def example_started(example)
+ @time = Time.now
+ end
+
+ def example_passed(example)
+ super
+ @example_times << [
+ example_group.description,
+ example.description,
+ Time.now - @time
+ ]
+ end
+
+ def start_dump
+ super
+ @output.puts "\n\nTop 10 slowest examples:\n"
+
+ @example_times = @example_times.sort_by do |description, example, time|
+ time
+ end.reverse
+
+ @example_times[0..9].each do |description, example, time|
+ @output.print red(sprintf("%.7f", time))
+ @output.puts " #{description} #{example}"
+ end
+ @output.flush
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb
index 624f06e7c..8d0e50432 100644
--- a/vendor/gems/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/progress_bar_formatter.rb
@@ -1,10 +1,9 @@
+require 'spec/runner/formatter/base_text_formatter'
+
module Spec
module Runner
module Formatter
class ProgressBarFormatter < BaseTextFormatter
- def add_behaviour(name)
- end
-
def example_failed(example, counter, failure)
@output.print colourise('F', failure)
@output.flush
@@ -15,7 +14,7 @@ module Spec
@output.flush
end
- def example_pending(behaviour_name, example_name, message)
+ def example_pending(example_group_description, example, message)
super
@output.print yellow('P')
@output.flush
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/rdoc_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/rdoc_formatter.rb
deleted file mode 100644
index 0fd22ba6c..000000000
--- a/vendor/gems/rspec/lib/spec/runner/formatter/rdoc_formatter.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-module Spec
- module Runner
- module Formatter
- class RdocFormatter < BaseTextFormatter
- def add_behaviour(name)
- @output.puts "# #{name}"
- end
-
- def example_passed(example)
- @output.puts "# * #{example.description}"
- @output.flush
- end
-
- def example_failed(example, counter, failure)
- @output.puts "# * #{example.description} [#{counter} - FAILED]"
- end
-
- def example_pending(behaviour_name, example_name, message)
- @output.puts "# * #{behaviour_name} #{example_name} [PENDING: #{message}]"
- end
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/specdoc_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/specdoc_formatter.rb
index ad794b238..f426dc948 100644
--- a/vendor/gems/rspec/lib/spec/runner/formatter/specdoc_formatter.rb
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/specdoc_formatter.rb
@@ -1,27 +1,37 @@
+require 'spec/runner/formatter/base_text_formatter'
+
module Spec
module Runner
module Formatter
- class SpecdocFormatter < BaseTextFormatter
- def add_behaviour(name)
- @output.puts
- @output.puts name
- @output.flush
+ class SpecdocFormatter < BaseTextFormatter
+ def add_example_group(example_group)
+ super
+ output.puts
+ output.puts example_group.description
+ output.flush
end
def example_failed(example, counter, failure)
- @output.puts failure.expectation_not_met? ? red("- #{example.description} (FAILED - #{counter})") : magenta("- #{example.description} (ERROR - #{counter})")
- @output.flush
+ 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.flush
end
-
+
def example_passed(example)
- @output.puts green("- #{example.description}")
- @output.flush
+ message = "- #{example.description}"
+ output.puts green(message)
+ output.flush
end
- def example_pending(behaviour_name, example_name, message)
+ def example_pending(example_group_description, example, message)
super
- @output.puts yellow("- #{example_name} (PENDING: #{message})")
- @output.flush
+ output.puts yellow("- #{example.description} (PENDING: #{message})")
+ output.flush
end
end
end
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/story/html_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/story/html_formatter.rb
new file mode 100644
index 000000000..5a8134683
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/story/html_formatter.rb
@@ -0,0 +1,128 @@
+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/gems/rspec/lib/spec/runner/formatter/story/plain_text_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/story/plain_text_formatter.rb
new file mode 100644
index 000000000..ad7a2fa73
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/story/plain_text_formatter.rb
@@ -0,0 +1,131 @@
+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
+ 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_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, *args)
+ end
+
+ def step_pending(type, description, *args)
+ found_step(type, description, false, *args)
+ @pending_steps << [@current_story_title, @current_scenario_name, description]
+ @output.print " (PENDING)"
+ @scenario_ok = false
+ end
+
+ def step_failed(type, description, *args)
+ found_step(type, description, true, *args)
+ @output.print red(@scenario_ok ? " (FAILED)" : " (SKIPPED)")
+ @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, *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] }
+ @output.print(failed ? red(text) : green(text))
+
+ if type == :'given scenario'
+ @previous_type = :given
+ else
+ @previous_type = type
+ end
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/runner/formatter/text_mate_formatter.rb b/vendor/gems/rspec/lib/spec/runner/formatter/text_mate_formatter.rb
new file mode 100644
index 000000000..4c0a9c7de
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/runner/formatter/text_mate_formatter.rb
@@ -0,0 +1,16 @@
+require 'spec/runner/formatter/html_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ # Formats backtraces so they're clickable by TextMate
+ class TextMateFormatter < HtmlFormatter
+ def backtrace_line(line)
+ line.gsub(/([^:]*\.rb):(\d*)/) do
+ "<a href=\"txmt://open?url=file://#{File.expand_path($1)}&line=#{$2}\">#{$1}:#{$2}</a> "
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/runner/heckle_runner.rb b/vendor/gems/rspec/lib/spec/runner/heckle_runner.rb
index b6de4ef73..7695fe794 100644
--- a/vendor/gems/rspec/lib/spec/runner/heckle_runner.rb
+++ b/vendor/gems/rspec/lib/spec/runner/heckle_runner.rb
@@ -13,9 +13,9 @@ module Spec
@heckle_class = heckle_class
end
- # Runs all the contexts held by +behaviour_runner+ once for each of the
+ # Runs all the example groups held by +rspec_options+ once for each of the
# methods in the matched classes.
- def heckle_with(behaviour_runner)
+ def heckle_with
if @filter =~ /(.*)[#\.](.*)/
heckle_method($1, $2)
else
@@ -25,7 +25,7 @@ module Spec
def heckle_method(class_name, method_name)
verify_constant(class_name)
- heckle = @heckle_class.new(class_name, method_name, behaviour_runner)
+ heckle = @heckle_class.new(class_name, method_name, rspec_options)
heckle.validate
end
@@ -39,7 +39,7 @@ module Spec
classes.each do |klass|
klass.instance_methods(false).each do |method_name|
- heckle = @heckle_class.new(klass.name, method_name, behaviour_runner)
+ heckle = @heckle_class.new(klass.name, method_name, rspec_options)
heckle.validate
end
end
@@ -57,16 +57,16 @@ module Spec
#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, behaviour_runner)
+ def initialize(klass_name, method_name, rspec_options)
super(klass_name, method_name)
- @behaviour_runner = behaviour_runner
+ @rspec_options = rspec_options
end
def tests_pass?
- paths = [] # We can pass an empty array of paths - our specs are already loaded.
- failure_count = @behaviour_runner.run(paths, false)
- failure_count == 0
+ success = @rspec_options.run_examples
+ success
end
+
end
end
end
diff --git a/vendor/gems/rspec/lib/spec/runner/option_parser.rb b/vendor/gems/rspec/lib/spec/runner/option_parser.rb
index 1facb85a8..4bc84c812 100644
--- a/vendor/gems/rspec/lib/spec/runner/option_parser.rb
+++ b/vendor/gems/rspec/lib/spec/runner/option_parser.rb
@@ -3,23 +3,22 @@ require 'stringio'
module Spec
module Runner
- class OptionParser
- BUILT_IN_FORMATTERS = {
- 'specdoc' => Formatter::SpecdocFormatter,
- 's' => Formatter::SpecdocFormatter,
- 'html' => Formatter::HtmlFormatter,
- 'h' => Formatter::HtmlFormatter,
- 'rdoc' => Formatter::RdocFormatter,
- 'r' => Formatter::RdocFormatter,
- 'progress' => Formatter::ProgressBarFormatter,
- 'p' => Formatter::ProgressBarFormatter,
- 'failing_examples' => Formatter::FailingExamplesFormatter,
- 'e' => Formatter::FailingExamplesFormatter,
- 'failing_behaviours' => Formatter::FailingBehavioursFormatter,
- 'b' => Formatter::FailingBehavioursFormatter
- }
+ class OptionParser < ::OptionParser
+ class << self
+ def parse(args, err, out)
+ parser = new(err, out)
+ parser.parse(args)
+ parser.options
+ end
+ end
+
+ attr_reader :options
- COMMAND_LINE = {
+ OPTIONS = {
+ :pattern => ["-p", "--pattern [PATTERN]","Limit files loaded to those matching this pattern. Defaults to '**/*_spec.rb'",
+ "Separate multiple patterns with commas.",
+ "Applies only to directories named on the command line (files",
+ "named explicitly on the command line will be loaded regardless)."],
:diff => ["-D", "--diff [FORMAT]", "Show diff of objects that are expected to be equal when they are not",
"Builtin formats: unified|u|context|c",
"You can also specify a custom differ class",
@@ -43,13 +42,17 @@ module Spec
"not specified. The --format option may be specified several times",
"if you want several outputs",
" ",
- "Builtin formats: ",
- "progress|p : Text progress",
- "specdoc|s : Behaviour doc as text",
- "rdoc|r : Behaviour doc as RDoc",
+ "Builtin formats for examples: ",
+ "progress|p : Text progress",
+ "profile|o : Text progress with profiling of 10 slowest examples",
+ "specdoc|s : Example doc as text",
+ "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",
- "failing_examples|e : Write all failing examples - input for --example",
- "failing_behaviours|b : Write all failing behaviours - input for --example",
" ",
"FORMAT can also be the name of a custom formatter class",
"(in which case you should also specify --require to load it)"],
@@ -73,154 +76,125 @@ module Spec
:dry_run => ["-d", "--dry-run", "Invokes formatters without executing the examples."],
: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 BehaviourRunner."],
+ :runner => ["-U", "--runner RUNNER", "Use a custom Runner."],
: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"]
}
- def initialize
- @spec_parser = SpecParser.new
+ def initialize(err, out)
+ super()
+ @error_stream = err
+ @out_stream = out
+ @options = Options.new(@error_stream, @out_stream)
+
@file_factory = File
- end
- def create_behaviour_runner(args, err, out, warn_if_no_files)
- options = parse(args, err, out, warn_if_no_files)
- # Some exit points in parse (--generate-options, --drb) don't return the options,
- # but hand over control. In that case we don't want to continue.
- return nil unless options.is_a?(Options)
- options.configure
- options.behaviour_runner
+ self.banner = "Usage: spec (FILE|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[:generate_options]) do |options_file|
+ end
+ on(*OPTIONS[:runner]) do |runner|
+ @options.user_input_for_runner = runner
+ end
+ on(*OPTIONS[:drb]) {}
+ on(*OPTIONS[:version]) {parse_version}
+ on_tail(*OPTIONS[:help]) {parse_help}
end
- def parse(args, err, out, warn_if_no_files)
- options_file = nil
- args_copy = args.dup
- options = Options.new(err, out)
-
- opts = ::OptionParser.new do |opts|
- opts.banner = "Usage: spec (FILE|DIRECTORY|GLOB)+ [options]"
- opts.separator ""
-
- def opts.rspec_on(name, &block)
- on(*COMMAND_LINE[name], &block)
- end
-
- opts.rspec_on(:diff) {|diff| options.parse_diff(diff)}
-
- opts.rspec_on(:colour) {options.colour = true}
-
- opts.rspec_on(:example) {|example| options.parse_example(example)}
-
- opts.rspec_on(:specification) {|example| options.parse_example(example)}
-
- opts.rspec_on(:line) {|line_number| options.line_number = line_number.to_i}
-
- opts.rspec_on(:format) {|format| options.parse_format(format)}
-
- opts.rspec_on(:require) {|req| options.parse_require(req)}
-
- opts.rspec_on(:backtrace) {options.backtrace_tweaker = NoisyBacktraceTweaker.new}
-
- opts.rspec_on(:loadby) {|loadby| options.loadby = loadby}
-
- opts.rspec_on(:reverse) {options.reverse = true}
-
- opts.rspec_on(:timeout) {|timeout| options.timeout = timeout.to_f}
-
- opts.rspec_on(:heckle) {|heckle| options.parse_heckle(heckle)}
-
- opts.rspec_on(:dry_run) {options.dry_run = true}
-
- opts.rspec_on(:options_file) do |options_file|
- return parse_options_file(options_file, out, err, args_copy, warn_if_no_files)
- end
-
- opts.rspec_on(:generate_options) do |options_file|
- options.parse_generate_options(options_file, args_copy, out)
- end
-
- opts.rspec_on(:runner) do |runner|
- options.runner_arg = runner
- end
-
- opts.rspec_on(:drb) do
- return parse_drb(args_copy, out, err, warn_if_no_files)
- end
-
- opts.rspec_on(:version) {parse_version(out)}
-
- opts.on_tail(*COMMAND_LINE[:help]) {parse_help(opts, out)}
+ def order!(argv, &blk)
+ @argv = argv
+ @options.argv = @argv.dup
+ return if parse_generate_options
+ return if parse_drb
+
+ super(@argv) do |file|
+ @options.files << file
+ blk.call(file) if blk
end
- opts.parse!(args)
- if args.empty? && warn_if_no_files
- err.puts "No files specified."
- err.puts opts
- exit(6) if err == $stderr
- end
+ @options
+ end
- if options.line_number
- set_spec_from_line_number(options, args, err)
+ 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)
+ end
- if options.formatters.empty?
- options.formatters << Formatter::ProgressBarFormatter.new(out)
+ def parse_generate_options
+ # Remove the --generate-options option and the argument before writing to file
+ options_file = nil
+ ['-G', '--generate-options'].each do |option|
+ if index = @argv.index(option)
+ @argv.delete_at(index)
+ options_file = @argv.delete_at(index)
+ end
+ end
+
+ if options_file
+ write_generated_options(options_file)
+ return true
+ else
+ return false
end
-
- options
end
-
- def parse_options_file(options_file, out_stream, error_stream, args_copy, warn_if_no_files)
- # Remove the --options option and the argument before writing to file
- index = args_copy.index("-O") || args_copy.index("--options")
- args_copy.delete_at(index)
- args_copy.delete_at(index)
-
- new_args = args_copy + IO.readlines(options_file).map {|l| l.chomp.split " "}.flatten
- return CommandLine.run(new_args, error_stream, out_stream, true, warn_if_no_files)
+
+ def write_generated_options(options_file)
+ File.open(options_file, 'w') do |io|
+ io.puts @argv.join("\n")
+ end
+ @out_stream.puts "\nOptions written to #{options_file}. You can now use these options with:"
+ @out_stream.puts "spec --options #{options_file}"
+ @options.examples_should_not_be_run
end
- def parse_drb(args_copy, out_stream, error_stream, warn_if_no_files)
- # Remove the --drb option
- index = args_copy.index("-X") || args_copy.index("--drb")
- args_copy.delete_at(index)
-
- return DrbCommandLine.run(args_copy, error_stream, out_stream, true, warn_if_no_files)
+ def parse_drb
+ is_drb = false
+ argv = @options.argv
+ is_drb ||= argv.delete(OPTIONS[:drb][0])
+ is_drb ||= argv.delete(OPTIONS[:drb][1])
+ return nil unless is_drb
+ @options.examples_should_not_be_run
+ DrbCommandLine.run(
+ self.class.parse(argv, @error_stream, @out_stream)
+ )
+ true
end
- def parse_version(out_stream)
- out_stream.puts ::Spec::VERSION::DESCRIPTION
- exit if out_stream == $stdout
+ def parse_version
+ @out_stream.puts ::Spec::VERSION::DESCRIPTION
+ exit if stdout?
end
- def parse_help(opts, out_stream)
- out_stream.puts opts
- exit if out_stream == $stdout
+ def parse_help
+ @out_stream.puts self
+ exit if stdout?
end
- def set_spec_from_line_number(options, args, err)
- if options.examples.empty?
- if args.length == 1
- if @file_factory.file?(args[0])
- source = @file_factory.open(args[0])
- example = @spec_parser.spec_name_for(source, options.line_number)
- options.parse_example(example)
- elsif @file_factory.directory?(args[0])
- err.puts "You must specify one file, not a directory when using the --line option"
- exit(1) if err == $stderr
- else
- err.puts "#{args[0]} does not exist"
- exit(2) if err == $stderr
- end
- else
- err.puts "Only one file can be specified when using the --line option: #{args.inspect}"
- exit(3) if err == $stderr
- end
- else
- err.puts "You cannot use both --line and --example"
- exit(4) if err == $stderr
- end
+ def stdout?
+ @out_stream == $stdout
end
end
end
diff --git a/vendor/gems/rspec/lib/spec/runner/options.rb b/vendor/gems/rspec/lib/spec/runner/options.rb
index a940133eb..108749c42 100644
--- a/vendor/gems/rspec/lib/spec/runner/options.rb
+++ b/vendor/gems/rspec/lib/spec/runner/options.rb
@@ -1,32 +1,41 @@
module Spec
module Runner
class Options
- BUILT_IN_FORMATTERS = {
- 'specdoc' => Formatter::SpecdocFormatter,
- 's' => Formatter::SpecdocFormatter,
- 'html' => Formatter::HtmlFormatter,
- 'h' => Formatter::HtmlFormatter,
- 'rdoc' => Formatter::RdocFormatter,
- 'r' => Formatter::RdocFormatter,
- 'progress' => Formatter::ProgressBarFormatter,
- 'p' => Formatter::ProgressBarFormatter,
- 'failing_examples' => Formatter::FailingExamplesFormatter,
- 'e' => Formatter::FailingExamplesFormatter,
- 'failing_behaviours' => Formatter::FailingBehavioursFormatter,
- 'b' => Formatter::FailingBehavioursFormatter
+ FILE_SORTERS = {
+ 'mtime' => lambda {|file_a, file_b| File.mtime(file_b) <=> File.mtime(file_a)}
}
-
+
+ EXAMPLE_FORMATTERS = { # Load these lazily for better speed
+ 'specdoc' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'],
+ 's' => ['spec/runner/formatter/specdoc_formatter', 'Formatter::SpecdocFormatter'],
+ 'html' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'],
+ 'h' => ['spec/runner/formatter/html_formatter', 'Formatter::HtmlFormatter'],
+ 'progress' => ['spec/runner/formatter/progress_bar_formatter', 'Formatter::ProgressBarFormatter'],
+ 'p' => ['spec/runner/formatter/progress_bar_formatter', 'Formatter::ProgressBarFormatter'],
+ 'failing_examples' => ['spec/runner/formatter/failing_examples_formatter', 'Formatter::FailingExamplesFormatter'],
+ 'e' => ['spec/runner/formatter/failing_examples_formatter', 'Formatter::FailingExamplesFormatter'],
+'failing_example_groups' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'],
+ 'g' => ['spec/runner/formatter/failing_example_groups_formatter', 'Formatter::FailingExampleGroupsFormatter'],
+ 'profile' => ['spec/runner/formatter/profile_formatter', 'Formatter::ProfileFormatter'],
+ 'o' => ['spec/runner/formatter/profile_formatter', 'Formatter::ProfileFormatter'],
+ '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(
+ :filename_pattern,
:backtrace_tweaker,
- :colour,
:context_lines,
:diff_format,
- :differ_class,
:dry_run,
+ :profile,
:examples,
- :failure_file,
- :formatters,
- :generate,
:heckle_runner,
:line_number,
:loadby,
@@ -34,69 +43,89 @@ module Spec
:reverse,
:timeout,
:verbose,
- :runner_arg,
- :behaviour_runner
+ :user_input_for_runner,
+ :error_stream,
+ :output_stream,
+ # TODO: BT - Figure out a better name
+ :argv
)
+ attr_reader :colour, :differ_class, :files, :example_groups
- def initialize(err, out)
- @err, @out = err, out
+ def initialize(error_stream, output_stream)
+ @error_stream = error_stream
+ @output_stream = output_stream
+ @filename_pattern = "**/*_spec.rb"
@backtrace_tweaker = QuietBacktraceTweaker.new
@examples = []
- @formatters = []
@colour = false
+ @profile = false
@dry_run = false
+ @reporter = Reporter.new(self)
+ @context_lines = 3
+ @diff_format = :unified
+ @files = []
+ @example_groups = []
+ @examples_run = false
+ @examples_should_be_run = nil
+ @user_input_for_runner = nil
end
- def configure
- configure_formatters
- create_reporter
- configure_differ
- create_behaviour_runner
+ def add_example_group(example_group)
+ @example_groups << example_group
end
- def create_behaviour_runner
- return nil if @generate
- @behaviour_runner = if @runner_arg
- klass_name, arg = split_at_colon(@runner_arg)
- runner_type = load_class(klass_name, 'behaviour runner', '--runner')
- runner_type.new(self, arg)
- else
- BehaviourRunner.new(self)
- end
+ def remove_example_group(example_group)
+ @example_groups.delete(example_group)
end
- def configure_formatters
- @formatters.each do |formatter|
- formatter.colour = @colour if formatter.respond_to?(:colour=)
- formatter.dry_run = @dry_run if formatter.respond_to?(:dry_run=)
+ def run_examples
+ return true unless examples_should_be_run?
+ runner = custom_runner || ExampleGroupRunner.new(self)
+
+ runner.load_files(files_to_load)
+ if example_groups.empty?
+ true
+ else
+ set_spec_from_line_number if line_number
+ success = runner.run
+ @examples_run = true
+ heckle if heckle_runner
+ success
end
end
- def create_reporter
- @reporter = Reporter.new(@formatters, @backtrace_tweaker)
+ def examples_run?
+ @examples_run
end
- def configure_differ
- if @differ_class
- Spec::Expectations.differ = @differ_class.new(@diff_format, @context_lines, @colour)
+ def examples_should_not_be_run
+ @examples_should_be_run = false
+ end
+
+ def colour=(colour)
+ @colour = colour
+ if @colour && RUBY_PLATFORM =~ /win32/ ;\
+ begin ;\
+ require 'rubygems' ;\
+ require 'Win32/Console/ANSI' ;\
+ rescue LoadError ;\
+ warn "You must 'gem install win32console' to use colour on Windows" ;\
+ @colour = false ;\
+ end
end
end
def parse_diff(format)
- @context_lines = 3
case format
- when :context, 'context', 'c'
- @diff_format = :context
- when :unified, 'unified', 'u', '', nil
- @diff_format = :unified
- end
-
- if [:context,:unified].include? @diff_format
- require 'spec/expectations/differs/default'
- @differ_class = Spec::Expectations::Differs::Default
+ when :context, 'context', 'c'
+ @diff_format = :context
+ default_differ
+ when :unified, 'unified', 'u', '', nil
+ @diff_format = :unified
+ default_differ
else
@diff_format = :custom
- @differ_class = load_class(format, 'differ', '--diff')
+ self.differ_class = load_class(format, 'differ', '--diff')
end
end
@@ -109,67 +138,149 @@ module Spec
end
def parse_format(format_arg)
- format, where = split_at_colon(format_arg)
- # This funky regexp checks whether we have a FILE_NAME or not
- if where.nil?
+ format, where = ClassAndArgumentsParser.parse(format_arg)
+ unless where
raise "When using several --format options only one of them can be without a file" if @out_used
- where = @out
+ where = @output_stream
@out_used = true
end
-
- formatter_type = BUILT_IN_FORMATTERS[format] || load_class(format, 'formatter', '--format')
- @formatters << formatter_type.new(where)
+ @format_options ||= []
+ @format_options << [format, where]
+ end
+
+ def formatters
+ @format_options ||= [['progress', @output_stream]]
+ @formatters ||= load_formatters(@format_options, EXAMPLE_FORMATTERS)
end
- def parse_require(req)
- req.split(",").each{|file| require file}
+ 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]
+ require formatters[format][0]
+ eval(formatters[format][1], binding, __FILE__, __LINE__)
+ else
+ load_class(format, 'formatter', '--format')
+ end
+ formatter_type.new(self, where)
+ end
end
- def parse_heckle(heckle)
- heckle_require = [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} ? 'spec/runner/heckle_runner_unsupported' : 'spec/runner/heckle_runner'
- require heckle_require
+ 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)
end
- def parse_generate_options(options_file, args_copy, out_stream)
- # Remove the --generate-options option and the argument before writing to file
- index = args_copy.index("-G") || args_copy.index("--generate-options")
- args_copy.delete_at(index)
- args_copy.delete_at(index)
- File.open(options_file, 'w') do |io|
- io.puts args_copy.join("\n")
+ def number_of_examples
+ @example_groups.inject(0) do |sum, example_group|
+ sum + example_group.number_of_examples
end
- out_stream.puts "\nOptions written to #{options_file}. You can now use these options with:"
- out_stream.puts "spec --options #{options_file}"
- @generate = true
end
- def split_at_colon(s)
- if s =~ /([a-zA-Z_]+(?:::[a-zA-Z_]+)*):?(.*)/
- arg = $2 == "" ? nil : $2
- [$1, arg]
- else
- raise "Couldn't parse #{s.inspect}"
+ def files_to_load
+ result = []
+ sorted_files.each do |file|
+ if File.directory?(file)
+ filename_pattern.split(",").each do |pattern|
+ result += Dir[File.expand_path("#{file}/#{pattern.strip}")]
+ end
+ elsif File.file?(file)
+ result << file
+ else
+ raise "File or directory not found: #{file}"
+ end
end
+ result
+ end
+
+ protected
+ 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
+ Spec::Expectations.differ = self.differ_class.new(self)
+ end
+
def load_class(name, kind, option)
if name =~ /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/
arg = $2 == "" ? nil : $2
[$1, arg]
else
m = "#{name.inspect} is not a valid class name"
- @err.puts m
+ @error_stream.puts m
raise m
end
begin
eval(name, binding, __FILE__, __LINE__)
rescue NameError => e
- @err.puts "Couldn't find #{kind} class #{name}"
- @err.puts "Make sure the --require option is specified *before* #{option}"
+ @error_stream.puts "Couldn't find #{kind} class #{name}"
+ @error_stream.puts "Make sure the --require option is specified *before* #{option}"
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')
+ return runner_type.new(self, arg)
+ end
+
+ def custom_runner?
+ return user_input_for_runner ? true : false
+ end
+
+ def heckle
+ returns = self.heckle_runner.heckle_with
+ self.heckle_runner = nil
+ returns
+ end
+
+ def sorted_files
+ return sorter ? files.sort(&sorter) : files
+ end
+
+ def sorter
+ FILE_SORTERS[loadby]
+ end
+
+ def default_differ
+ require 'spec/expectations/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"
+ exit(1) if stderr?
+ else
+ example = SpecParser.new.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}"
+ exit(3) if stderr?
+ end
+ else
+ error_stream.puts "You cannot use both --line and --example"
+ exit(4) if stderr?
+ end
+ end
+
+ def stderr?
+ @error_stream == $stderr
+ end
end
end
end
diff --git a/vendor/gems/rspec/lib/spec/runner/reporter.rb b/vendor/gems/rspec/lib/spec/runner/reporter.rb
index b1dc2a27a..cfc511baf 100644
--- a/vendor/gems/rspec/lib/spec/runner/reporter.rb
+++ b/vendor/gems/rspec/lib/spec/runner/reporter.rb
@@ -1,40 +1,52 @@
module Spec
module Runner
class Reporter
+ attr_reader :options, :example_groups
- def initialize(formatters, backtrace_tweaker)
- @formatters = formatters
- @backtrace_tweaker = backtrace_tweaker
- clear!
+ def initialize(options)
+ @options = options
+ @options.reporter = self
+ clear
end
- def add_behaviour(name)
- @formatters.each{|f| f.add_behaviour(name)}
- @behaviour_names << name
+ def add_example_group(example_group)
+ formatters.each do |f|
+ f.add_example_group(example_group)
+ end
+ example_groups << example_group
end
- def example_started(name)
- @formatters.each{|f| f.example_started(name)}
+ def example_started(example)
+ formatters.each{|f| f.example_started(example)}
end
- def example_finished(name, error=nil, failure_location=nil, not_implemented = false)
- @example_names << name
+ def example_finished(example, error=nil)
+ @examples << example
- if not_implemented
- example_pending(@behaviour_names.last, name)
- elsif error.nil?
- example_passed(name)
- elsif Spec::DSL::ExamplePendingError === error
- example_pending(@behaviour_names.last, name, error.message)
+ if error.nil?
+ example_passed(example)
+ elsif Spec::Example::ExamplePendingError === error
+ example_pending(example_groups.last, example, error.message)
else
- example_failed(name, error, failure_location)
+ example_failed(example, error)
+ end
+ end
+
+ def failure(example, error)
+ backtrace_tweaker.tweak_backtrace(error)
+ example_name = "#{example_groups.last.description} #{example.description}"
+ failure = Failure.new(example_name, 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!
+ clear
@start_time = Time.new
- @formatters.each{|f| f.start(number_of_examples)}
+ formatters.each{|f| f.start(number_of_examples)}
end
def end
@@ -43,22 +55,31 @@ module Spec
# Dumps the summary and returns the total number of failures
def dump
- @formatters.each{|f| f.start_dump}
+ formatters.each{|f| f.start_dump}
+ dump_pending
dump_failures
- @formatters.each do |f|
- f.dump_summary(duration, @example_names.length, @failures.length, @pending_count)
+ formatters.each do |f|
+ f.dump_summary(duration, @examples.length, @failures.length, @pending_count)
f.close
end
@failures.length
end
private
+
+ def formatters
+ @options.formatters
+ end
+
+ def backtrace_tweaker
+ @options.backtrace_tweaker
+ end
- def clear!
- @behaviour_names = []
+ def clear
+ @example_groups = []
@failures = []
@pending_count = 0
- @example_names = []
+ @examples = []
@start_time = nil
@end_time = nil
end
@@ -66,31 +87,28 @@ module Spec
def dump_failures
return if @failures.empty?
@failures.inject(1) do |index, failure|
- @formatters.each{|f| f.dump_failure(index, failure)}
+ formatters.each{|f| f.dump_failure(index, failure)}
index + 1
end
end
+ def dump_pending
+ formatters.each{|f| f.dump_pending}
+ end
def duration
return @end_time - @start_time unless (@end_time.nil? or @start_time.nil?)
return "0.0"
end
- def example_passed(name)
- @formatters.each{|f| f.example_passed(name)}
- end
-
- def example_failed(name, error, failure_location)
- @backtrace_tweaker.tweak_backtrace(error, failure_location)
- example_name = "#{@behaviour_names.last} #{name}"
- failure = Failure.new(example_name, error)
- @failures << failure
- @formatters.each{|f| f.example_failed(name, @failures.length, failure)}
+ def example_passed(example)
+ formatters.each{|f| f.example_passed(example)}
end
- def example_pending(behaviour_name, example_name, message="Not Yet Implemented")
+ def example_pending(example_group, example, message="Not Yet Implemented")
@pending_count += 1
- @formatters.each{|f| f.example_pending(behaviour_name, example_name, message)}
+ formatters.each do |f|
+ f.example_pending(example_group.description, example, message)
+ end
end
class Failure
@@ -112,7 +130,7 @@ module Spec
end
def pending_fixed?
- @exception.is_a?(Spec::DSL::PendingFixedError)
+ @exception.is_a?(Spec::Example::PendingExampleFixedError)
end
def expectation_not_met?
diff --git a/vendor/gems/rspec/lib/spec/runner/spec_parser.rb b/vendor/gems/rspec/lib/spec/runner/spec_parser.rb
index bc9170065..8beb384e9 100644
--- a/vendor/gems/rspec/lib/spec/runner/spec_parser.rb
+++ b/vendor/gems/rspec/lib/spec/runner/spec_parser.rb
@@ -2,14 +2,28 @@ module Spec
module Runner
# Parses a spec file and finds the nearest example for a given line number.
class SpecParser
- def spec_name_for(io, line_number)
- source = io.read
- behaviour, behaviour_line = behaviour_at_line(source, line_number)
- example, example_line = example_at_line(source, line_number)
- if behaviour && example && (behaviour_line < example_line)
- "#{behaviour} #{example}"
- elsif behaviour
- behaviour
+ 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
@@ -17,33 +31,40 @@ module Spec
protected
- def behaviour_at_line(source, line_number)
- find_above(source, line_number, /^\s*(context|describe)\s+(.*)\s+do/)
- end
-
- def example_at_line(source, line_number)
- find_above(source, line_number, /^\s*(specify|it)\s+(.*)\s+do/)
+ 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
- # Returns the context/describe or specify/it name and the line number
- def find_above(source, line_number, pattern)
- lines_above_reversed(source, line_number).each_with_index do |line, n|
- return [parse_description($2), line_number-n] if line =~ pattern
+ 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
- nil
end
- def lines_above_reversed(source, line_number)
- lines = source.split("\n")
- lines[0...line_number].reverse
+ 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_description(str)
- return str[1..-2] if str =~ /^['"].*['"]$/
- if matches = /^(.*)\s*,\s*['"](.*)['"]$/.match(str)
- return ::Spec::DSL::Description.generate_description(matches[1], matches[2])
+
+ def parse_backtrace(backtrace)
+ backtrace.collect do |trace_line|
+ split_line = trace_line.split(':')
+ [split_line[0], Integer(split_line[1])]
end
- return str
end
end
end
diff --git a/vendor/gems/rspec/lib/spec/story.rb b/vendor/gems/rspec/lib/spec/story.rb
new file mode 100644
index 000000000..bc6960a28
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story.rb
@@ -0,0 +1,10 @@
+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/gems/rspec/lib/spec/story/extensions.rb b/vendor/gems/rspec/lib/spec/story/extensions.rb
new file mode 100644
index 000000000..dc7dd1140
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/extensions.rb
@@ -0,0 +1,3 @@
+require 'spec/story/extensions/main'
+require 'spec/story/extensions/string'
+require 'spec/story/extensions/regexp'
diff --git a/vendor/gems/rspec/lib/spec/story/extensions/main.rb b/vendor/gems/rspec/lib/spec/story/extensions/main.rb
new file mode 100644
index 000000000..6336b630c
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/extensions/main.rb
@@ -0,0 +1,86 @@
+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/gems/rspec/lib/spec/story/extensions/regexp.rb b/vendor/gems/rspec/lib/spec/story/extensions/regexp.rb
new file mode 100644
index 000000000..7955b4c33
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/extensions/regexp.rb
@@ -0,0 +1,9 @@
+class Regexp
+ def step_name
+ self.source
+ end
+
+ def arg_regexp
+ ::Spec::Story::Step::PARAM_OR_GROUP_PATTERN
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/lib/spec/story/extensions/string.rb b/vendor/gems/rspec/lib/spec/story/extensions/string.rb
new file mode 100644
index 000000000..896578def
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/extensions/string.rb
@@ -0,0 +1,9 @@
+class String
+ def step_name
+ self
+ end
+
+ def arg_regexp
+ ::Spec::Story::Step::PARAM_PATTERN
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/lib/spec/story/given_scenario.rb b/vendor/gems/rspec/lib/spec/story/given_scenario.rb
new file mode 100644
index 000000000..88c51f981
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/given_scenario.rb
@@ -0,0 +1,14 @@
+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/gems/rspec/lib/spec/story/runner.rb b/vendor/gems/rspec/lib/spec/story/runner.rb
new file mode 100644
index 000000000..1f6dd9e7a
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/runner.rb
@@ -0,0 +1,56 @@
+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:
+ @run_options ||= ::Spec::Runner::OptionParser.parse(ARGV, $stderr, $stdout)
+ end
+
+ def story_runner # :nodoc:
+ unless @story_runner
+ @story_runner = StoryRunner.new(scenario_runner, world_creator)
+ run_options.story_formatters.each do |formatter|
+ register_listener(formatter)
+ end
+ Runner.register_exit_hook
+ end
+ @story_runner
+ end
+
+ def scenario_runner # :nodoc:
+ @scenario_runner ||= ScenarioRunner.new
+ end
+
+ def world_creator # :nodoc:
+ @world_creator ||= World
+ 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
+ Runner.story_runner.run_stories unless $!
+ end
+ # TODO exit with non-zero status if run fails
+ end
+
+ def dry_run
+ run_options.dry_run
+ end
+
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/story/runner/plain_text_story_runner.rb b/vendor/gems/rspec/lib/spec/story/runner/plain_text_story_runner.rb
new file mode 100644
index 000000000..8d34ea2d2
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/runner/plain_text_story_runner.rb
@@ -0,0 +1,48 @@
+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
+ 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, Spec::Story::Runner.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/gems/rspec/lib/spec/story/runner/scenario_collector.rb b/vendor/gems/rspec/lib/spec/story/runner/scenario_collector.rb
new file mode 100644
index 000000000..78339fd22
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/runner/scenario_collector.rb
@@ -0,0 +1,18 @@
+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/gems/rspec/lib/spec/story/runner/scenario_runner.rb b/vendor/gems/rspec/lib/spec/story/runner/scenario_runner.rb
new file mode 100644
index 000000000..aee52e412
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/runner/scenario_runner.rb
@@ -0,0 +1,46 @@
+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
+ 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) }
+ end
+ end
+ 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/gems/rspec/lib/spec/story/runner/story_mediator.rb b/vendor/gems/rspec/lib/spec/story/runner/story_mediator.rb
new file mode 100644
index 000000000..1f4744b9f
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/runner/story_mediator.rb
@@ -0,0 +1,123 @@
+ 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 => @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/gems/rspec/lib/spec/story/runner/story_parser.rb b/vendor/gems/rspec/lib/spec/story/runner/story_parser.rb
new file mode 100644
index 000000000..d454df8cb
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/runner/story_parser.rb
@@ -0,0 +1,227 @@
+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/gems/rspec/lib/spec/story/runner/story_runner.rb b/vendor/gems/rspec/lib/spec/story/runner/story_runner.rb
new file mode 100644
index 000000000..f9eeb9ac1
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/runner/story_runner.rb
@@ -0,0 +1,68 @@
+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) }
+ @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)
+ @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 }
+ 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/gems/rspec/lib/spec/story/scenario.rb b/vendor/gems/rspec/lib/spec/story/scenario.rb
new file mode 100644
index 000000000..d83b3eeb8
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/scenario.rb
@@ -0,0 +1,14 @@
+
+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/gems/rspec/lib/spec/story/step.rb b/vendor/gems/rspec/lib/spec/story/step.rb
new file mode 100644
index 000000000..ee9ede057
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/step.rb
@@ -0,0 +1,58 @@
+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!($1, "(.*?)")
+ end
+ @expression = Regexp.new("^#{expression}$")
+ end
+
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/lib/spec/story/step_group.rb b/vendor/gems/rspec/lib/spec/story/step_group.rb
new file mode 100644
index 000000000..cae558c40
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/step_group.rb
@@ -0,0 +1,89 @@
+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/gems/rspec/lib/spec/story/step_mother.rb b/vendor/gems/rspec/lib/spec/story/step_mother.rb
new file mode 100644
index 000000000..a2e84e310
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/step_mother.rb
@@ -0,0 +1,37 @@
+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/gems/rspec/lib/spec/story/story.rb b/vendor/gems/rspec/lib/spec/story/story.rb
new file mode 100644
index 000000000..112e9414b
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/story.rb
@@ -0,0 +1,42 @@
+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 @params[:steps]
+ assignee.use(@params[:steps])
+ else
+ case keys = @params[:steps_for]
+ when Symbol
+ keys = [keys]
+ when nil
+ keys = []
+ end
+ keys.each do |key|
+ assignee.use(steps_for(key))
+ end
+ end
+ end
+
+ def steps_for(key)
+ $rspec_story_steps[key]
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/lib/spec/story/world.rb b/vendor/gems/rspec/lib/spec/story/world.rb
new file mode 100644
index 000000000..93b6e1d15
--- /dev/null
+++ b/vendor/gems/rspec/lib/spec/story/world.rb
@@ -0,0 +1,125 @@
+require 'rubygems'
+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/gems/rspec/lib/spec/test_case_adapter.rb b/vendor/gems/rspec/lib/spec/test_case_adapter.rb
deleted file mode 100644
index 992e098fd..000000000
--- a/vendor/gems/rspec/lib/spec/test_case_adapter.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require 'spec/expectations'
-require 'spec/matchers'
-
-module Test
- module Unit
- class TestCase
- include Spec::Matchers
- end
- end
-end
diff --git a/vendor/gems/rspec/lib/spec/version.rb b/vendor/gems/rspec/lib/spec/version.rb
index 5b1db9b37..26c15e919 100644
--- a/vendor/gems/rspec/lib/spec/version.rb
+++ b/vendor/gems/rspec/lib/spec/version.rb
@@ -1,23 +1,22 @@
-module Spec
- module VERSION
- unless defined? MAJOR
- MAJOR = 1
- MINOR = 0
- TINY = 8
- RELEASE_CANDIDATE = nil
-
- # RANDOM_TOKEN: 0.510454315029681
- REV = "$LastChangedRevision: 2338 $".match(/LastChangedRevision: (\d+)/)[1]
-
- 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('.')} (r#{REV})"
-
- NAME = "RSpec"
- URL = "http://rspec.rubyforge.org/"
-
- DESCRIPTION = "#{NAME}-#{FULL_VERSION} - BDD for Ruby\n#{URL}"
- end
- end
-end
-
+module Spec
+ module VERSION
+ unless defined? MAJOR
+ MAJOR = 1
+ MINOR = 1
+ TINY = 3
+ RELEASE_CANDIDATE = nil
+
+ BUILD_TIME_UTC = 20080131122909
+
+ 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
+
diff --git a/vendor/gems/rspec/plugins/mock_frameworks/rspec.rb b/vendor/gems/rspec/plugins/mock_frameworks/rspec.rb
index e606c3089..ce215ace2 100644
--- a/vendor/gems/rspec/plugins/mock_frameworks/rspec.rb
+++ b/vendor/gems/rspec/plugins/mock_frameworks/rspec.rb
@@ -3,7 +3,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "lib", "s
module Spec
module Plugins
module MockFramework
- include Spec::Mocks::SpecMethods
+ include Spec::Mocks::ExampleMethods
def setup_mocks_for_rspec
$rspec_mocks ||= Spec::Mocks::Space.new
end
diff --git a/vendor/gems/rspec/pre_commit/lib/pre_commit.rb b/vendor/gems/rspec/pre_commit/lib/pre_commit.rb
new file mode 100644
index 000000000..2f3480834
--- /dev/null
+++ b/vendor/gems/rspec/pre_commit/lib/pre_commit.rb
@@ -0,0 +1,4 @@
+require "pre_commit/pre_commit"
+require "pre_commit/rspec"
+require "pre_commit/core"
+require "pre_commit/rspec_on_rails"
diff --git a/vendor/gems/rspec/pre_commit/lib/pre_commit/core.rb b/vendor/gems/rspec/pre_commit/lib/pre_commit/core.rb
new file mode 100644
index 000000000..420cc0c75
--- /dev/null
+++ b/vendor/gems/rspec/pre_commit/lib/pre_commit/core.rb
@@ -0,0 +1,50 @@
+class PreCommit::Core < PreCommit
+ def pre_commit
+ rake_invoke :examples
+ website
+ end
+
+ def website(run_webby=true)
+ clobber
+ rake_invoke :verify_rcov
+ rake_invoke :spec_html
+ webby
+ rake_invoke :failing_examples_with_html
+ rdoc
+ rdoc_rails
+ end
+
+ def clobber
+ rm_rf '../doc/output'
+ rm_rf 'translated_specs'
+ end
+
+ def webby
+ Dir.chdir '../doc' do
+ output = silent_sh('rake rebuild 2>&1')
+ if shell_error?(output)
+ raise "ERROR while generating web site: #{output}"
+ end
+
+ spec_page = File.expand_path('output/documentation/tools/spec.html')
+ spec_page_content = File.open(spec_page).read
+ unless spec_page_content =~/\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\./m
+ raise "#{'!'*400}\nIt seems like the output in the generated documentation is broken (no dots: ......)\n. Look in #{spec_page}"
+ end
+ end
+ end
+
+ def rdoc
+ Dir.chdir '../rspec' do
+ rake = (PLATFORM == "i386-mswin32") ? "rake.cmd" : "rake"
+ `#{rake} rdoc`
+ end
+ end
+
+ def rdoc_rails
+ Dir.chdir '../rspec_on_rails' do
+ rake = (PLATFORM == "i386-mswin32") ? "rake.cmd" : "rake"
+ `#{rake} rdoc`
+ end
+ end
+end
diff --git a/vendor/gems/rspec/pre_commit/lib/pre_commit/pre_commit.rb b/vendor/gems/rspec/pre_commit/lib/pre_commit/pre_commit.rb
new file mode 100644
index 000000000..80f958b91
--- /dev/null
+++ b/vendor/gems/rspec/pre_commit/lib/pre_commit/pre_commit.rb
@@ -0,0 +1,54 @@
+class PreCommit
+ attr_reader :actor
+ def initialize(actor)
+ @actor = actor
+ end
+
+ protected
+ def rake_invoke(task_name)
+ Rake::Task[task_name].invoke
+ end
+
+ def rake_sh(task_name, env_hash={})
+ env = env_hash.collect{|key, value| "#{key}=#{value}"}.join(' ')
+ rake = (PLATFORM == "i386-mswin32") ? "rake.bat" : "rake"
+ cmd = "#{rake} #{task_name} #{env} --trace"
+ output = silent_sh(cmd)
+ puts output
+ if shell_error?(output)
+ raise "ERROR while running rake: #{cmd}"
+ end
+ end
+
+ def silent_sh(cmd, &block)
+ output = nil
+ IO.popen(cmd) do |io|
+ output = io.read
+ output.each_line do |line|
+ block.call(line) if block
+ end
+ end
+ output
+ end
+
+ def shell_error?(output)
+ output =~ /ERROR/n || error_code?
+ end
+
+ def error_code?
+ $?.exitstatus != 0
+ end
+
+ def root_dir
+ dir = File.dirname(__FILE__)
+ File.expand_path("#{dir}/../../../..")
+ end
+
+ def method_missing(method_name, *args, &block)
+ if actor.respond_to?(method_name)
+ actor.send(method_name, *args, &block)
+ else
+ super
+ end
+ end
+end
diff --git a/vendor/gems/rspec/pre_commit/lib/pre_commit/rspec.rb b/vendor/gems/rspec/pre_commit/lib/pre_commit/rspec.rb
new file mode 100644
index 000000000..5078c72d0
--- /dev/null
+++ b/vendor/gems/rspec/pre_commit/lib/pre_commit/rspec.rb
@@ -0,0 +1,111 @@
+class PreCommit::Rspec < PreCommit
+ def pre_commit
+ check_for_gem_dependencies
+ fix_cr_lf
+ touch_revision_storing_files
+ pre_commit_core
+ pre_commit_textmate_bundle
+ pre_commit_rails
+ ok_to_commit
+ end
+
+ def check_for_gem_dependencies
+ require "rubygems"
+ gem 'rake'
+ gem 'webby'
+ gem 'coderay'
+ gem 'RedCloth'
+ gem 'syntax'
+ gem 'diff-lcs'
+ gem 'heckle' unless PLATFORM == "i386-mswin32"
+ gem 'hpricot'
+ end
+
+ def fix_cr_lf
+ files = FileList['**/*.rb'].
+ exclude('example_rails_app/vendor/**').
+ exclude('rspec/translated_specs/**')
+ $\="\n"
+ files.each do |f|
+ raw_content = File.read(f)
+ fixed_content = ""
+ raw_content.each_line do |line|
+ fixed_content << line
+ end
+ unless raw_content == fixed_content
+ File.open(f, "w") do |io|
+ io.print fixed_content
+ end
+ end
+ end
+ end
+
+ # TODO - move me up to the project root
+ def touch_revision_storing_files
+ files = [
+ 'rspec/lib/spec/version.rb',
+ 'rspec_on_rails/lib/spec/rails/version.rb'
+ ]
+ build_time_utc = Time.now.utc.strftime('%Y%m%d%H%M%S')
+ files.each do |path|
+ abs_path = File.join(root_dir, path)
+ content = File.open(abs_path).read
+ touched_content = content.gsub(/BUILD_TIME_UTC = (\d*)/, "BUILD_TIME_UTC = #{build_time_utc}")
+ File.open(abs_path, 'w') do |io|
+ io.write touched_content
+ end
+ end
+ end
+
+ def pre_commit_core
+ Dir.chdir 'rspec' do
+ rake = (PLATFORM == "i386-mswin32") ? "rake.bat" : "rake"
+ system("#{rake} pre_commit --verbose --trace")
+ raise "RSpec Core pre_commit failed" if error_code?
+ end
+ end
+
+ def pre_commit_textmate_bundle
+ Dir.chdir 'RSpec.tmbundle/Support' do
+ rake = (PLATFORM == "i386-mswin32") ? "rake.bat" : "rake"
+ system("#{rake} spec --verbose --trace")
+ raise "RSpec Textmate Bundle specs failed" if error_code?
+ end
+ end
+
+ def install_dependencies
+ Dir.chdir 'example_rails_app' do
+ rake_sh("-f Multirails.rake install_dependencies")
+ end
+ end
+
+ def update_dependencies
+ Dir.chdir 'example_rails_app' do
+ rake_sh("-f Multirails.rake update_dependencies")
+ end
+ end
+
+ def pre_commit_rails
+ Dir.chdir 'example_rails_app' do
+ rake = (PLATFORM == "i386-mswin32") ? "rake.cmd" : "rake"
+ cmd = "#{rake} -f Multirails.rake pre_commit --trace"
+ system(cmd)
+ if error_code?
+ message = <<-EOF
+ ############################################################
+ RSpec on Rails Plugin pre_commit failed. For more info:
+
+ cd example_rails_app
+ #{cmd}
+
+ ############################################################
+ EOF
+ raise message.gsub(/^ /, '')
+ end
+ end
+ end
+
+ def ok_to_commit
+ puts "OK TO COMMIT"
+ end
+end
diff --git a/vendor/gems/rspec/pre_commit/lib/pre_commit/rspec_on_rails.rb b/vendor/gems/rspec/pre_commit/lib/pre_commit/rspec_on_rails.rb
new file mode 100644
index 000000000..787953763
--- /dev/null
+++ b/vendor/gems/rspec/pre_commit/lib/pre_commit/rspec_on_rails.rb
@@ -0,0 +1,313 @@
+class PreCommit::RspecOnRails < PreCommit
+ def pre_commit
+ install_plugins
+ check_dependencies
+ used_railses = []
+ VENDOR_DEPS.each do |dependency|
+ rails_dir = File.expand_path(dependency[:checkout_path])
+ rails_version = rails_version_from_dir(rails_dir)
+ begin
+ rspec_pre_commit(rails_version, false)
+ used_railses << rails_version
+ rescue Exception => e
+ unless rails_version == 'edge'
+ raise e
+ end
+ end
+ end
+ uninstall_plugins
+ puts "All specs passed against the following released versions of Rails: #{used_railses.join(", ")}"
+ unless used_railses.include?('edge')
+ puts "There were errors running pre_commit against edge"
+ end
+ end
+
+ def rails_version_from_dir(rails_dir)
+ File.basename(rails_dir)
+ end
+
+ def rspec_pre_commit(rails_version=ENV['RSPEC_RAILS_VERSION'],uninstall=true)
+ puts "#####################################################"
+ puts "running pre_commit against rails #{rails_version}"
+ puts "#####################################################"
+ ENV['RSPEC_RAILS_VERSION'] = rails_version
+ cleanup(uninstall)
+ ensure_db_config
+ clobber_sqlite_data
+ install_plugins
+ generate_rspec
+
+ generate_login_controller
+ create_purchase
+
+ rake_sh "spec"
+ rake_sh "spec:plugins:rspec_on_rails"
+
+ # TODO - why is this necessary? Shouldn't the specs leave
+ # a clean DB?
+ rake_sh "db:test:prepare"
+ sh "ruby vendor/plugins/rspec_on_rails/stories/all.rb"
+ cleanup(uninstall)
+ end
+
+ def cleanup(uninstall=true)
+ revert_routes
+ rm_generated_login_controller_files
+ destroy_purchase
+ uninstall_plugins if uninstall
+ end
+
+ def revert_routes
+ output = silent_sh("cp config/routes.rb.bak config/routes.rb")
+ raise "Error reverting routes.rb" if shell_error?(output)
+ end
+
+ def create_purchase
+ generate_purchase
+ migrate_up
+ end
+
+ def install_plugins
+ install_rspec_on_rails_plugin
+ install_rspec_plugin
+ end
+
+ def install_rspec_on_rails_plugin
+ rm_rf 'vendor/plugins/rspec_on_rails'
+ copy '../rspec_on_rails', 'vendor/plugins/'
+ end
+
+ def install_rspec_plugin
+ rm_rf 'vendor/plugins/rspec'
+ copy '../rspec', 'vendor/plugins/'
+ end
+
+ def uninstall_plugins
+ rm_rf 'vendor/plugins/rspec_on_rails'
+ rm_rf 'vendor/plugins/rspec'
+ rm_rf 'script/spec'
+ rm_rf 'script/spec_server'
+ rm_rf 'spec/spec_helper.rb'
+ rm_rf 'spec/spec.opts'
+ rm_rf 'spec/rcov.opts'
+ end
+
+ def copy(source, target)
+ output = silent_sh("cp -R #{File.expand_path(source)} #{File.expand_path(target)}")
+ raise "Error installing rspec" if shell_error?(output)
+ end
+
+ def generate_rspec
+ result = silent_sh("ruby script/generate rspec --force")
+ if error_code? || result =~ /^Missing/
+ raise "Failed to generate rspec environment:\n#{result}"
+ end
+ end
+
+ def ensure_db_config
+ config_path = 'config/database.yml'
+ unless File.exists?(config_path)
+ message = <<-EOF
+ #####################################################
+ Could not find #{config_path}
+
+ You can get rake to generate this file for you using either of:
+ rake rspec:generate_mysql_config
+ rake rspec:generate_sqlite3_config
+
+ If you use mysql, you'll need to create dev and test
+ databases and users for each. To do this, standing
+ in rspec_on_rails, log into mysql as root and then...
+ mysql> source db/mysql_setup.sql;
+
+ There is also a teardown script that will remove
+ the databases and users:
+ mysql> source db/mysql_teardown.sql;
+ #####################################################
+ EOF
+ raise message.gsub(/^ /, '')
+ end
+ end
+
+ def generate_mysql_config
+ copy 'config/database.mysql.yml', 'config/database.yml'
+ end
+
+ def generate_sqlite3_config
+ copy 'config/database.sqlite3.yml', 'config/database.yml'
+ end
+
+ def clobber_db_config
+ rm 'config/database.yml'
+ end
+
+ def clobber_sqlite_data
+ rm_rf 'db/*.db'
+ end
+
+ def generate_purchase
+ generator = "ruby script/generate rspec_scaffold purchase order_id:integer created_at:datetime amount:decimal keyword:string description:text --force"
+ notice = <<-EOF
+ #####################################################
+ #{generator}
+ #####################################################
+ EOF
+ puts notice.gsub(/^ /, '')
+ result = silent_sh(generator)
+ if error_code? || result =~ /not/
+ raise "rspec_scaffold failed. #{result}"
+ end
+ end
+
+ def purchase_migration_version
+ "005"
+ end
+
+ def migrate_up
+ rake_sh "db:migrate"
+ end
+
+ def destroy_purchase
+ migrate_down
+ rm_generated_purchase_files
+ end
+
+ def migrate_down
+ notice = <<-EOF
+ #####################################################
+ Migrating down and reverting config/routes.rb
+ #####################################################
+ EOF
+ puts notice.gsub(/^ /, '')
+ rake_sh "db:migrate", 'VERSION' => (purchase_migration_version.to_i - 1)
+ output = silent_sh("cp config/routes.rb.bak config/routes.rb")
+ raise "revert failed: #{output}" if error_code?
+ end
+
+ def rm_generated_purchase_files
+ puts "#####################################################"
+ puts "Removing generated files:"
+ generated_files = %W{
+ app/helpers/purchases_helper.rb
+ app/models/purchase.rb
+ app/controllers/purchases_controller.rb
+ app/views/purchases
+ db/migrate/#{purchase_migration_version}_create_purchases.rb
+ spec/models/purchase_spec.rb
+ spec/helpers/purchases_helper_spec.rb
+ spec/controllers/purchases_controller_spec.rb
+ spec/controllers/purchases_routing_spec.rb
+ spec/fixtures/purchases.yml
+ spec/views/purchases
+ }
+ generated_files.each do |file|
+ rm_rf file
+ end
+ puts "#####################################################"
+ end
+
+ def generate_login_controller
+ generator = "ruby script/generate rspec_controller login signup login logout --force"
+ notice = <<-EOF
+ #####################################################
+ #{generator}
+ #####################################################
+ EOF
+ puts notice.gsub(/^ /, '')
+ result = silent_sh(generator)
+ if error_code? || result =~ /not/
+ raise "rspec_scaffold failed. #{result}"
+ end
+ end
+
+ def rm_generated_login_controller_files
+ puts "#####################################################"
+ puts "Removing generated files:"
+ generated_files = %W{
+ app/helpers/login_helper.rb
+ app/controllers/login_controller.rb
+ app/views/login
+ spec/helpers/login_helper_spec.rb
+ spec/controllers/login_controller_spec.rb
+ spec/views/login
+ }
+ generated_files.each do |file|
+ rm_rf file
+ end
+ puts "#####################################################"
+ end
+
+ def install_dependencies
+ VENDOR_DEPS.each do |dep|
+ puts "\nChecking for #{dep[:name]} ..."
+ dest = dep[:checkout_path]
+ if File.exists?(dest)
+ puts "#{dep[:name]} already installed"
+ else
+ cmd = "svn co #{dep[:url]} #{dest}"
+ puts "Installing #{dep[:name]}"
+ puts "This may take a while."
+ puts cmd
+ system(cmd)
+ puts "Done!"
+ end
+ end
+ puts
+ end
+
+ def check_dependencies
+ VENDOR_DEPS.each do |dep|
+ unless File.exist?(dep[:checkout_path])
+ raise "There is no checkout of #{dep[:checkout_path]}. Please run rake install_dependencies"
+ end
+ # Verify that the current working copy is right
+ if `svn info #{dep[:checkout_path]}` =~ /^URL: (.*)/
+ actual_url = $1
+ if actual_url != dep[:url]
+ raise "Your working copy in #{dep[:checkout_path]} points to \n#{actual_url}\nIt has moved to\n#{dep[:url]}\nPlease delete the working copy and run rake install_dependencies"
+ end
+ end
+ end
+ end
+
+ def update_dependencies
+ check_dependencies
+ VENDOR_DEPS.each do |dep|
+ next if dep[:tagged?] #
+ puts "\nUpdating #{dep[:name]} ..."
+ dest = dep[:checkout_path]
+ system("svn cleanup #{dest}")
+ cmd = "svn up #{dest}"
+ puts cmd
+ system(cmd)
+ puts "Done!"
+ end
+ end
+
+ VENDOR_DEPS = [
+ {
+ :checkout_path => "vendor/rails/2.0.2",
+ :name => "rails 2.0.2",
+ :url => "http://dev.rubyonrails.org/svn/rails/tags/rel_2-0-2",
+ :tagged? => true
+ },
+ {
+ :checkout_path => "vendor/rails/1.2.6",
+ :name => "rails 1.2.6",
+ :url => "http://dev.rubyonrails.org/svn/rails/tags/rel_1-2-6",
+ :tagged? => true
+ },
+ {
+ :checkout_path => "vendor/rails/1.2.3",
+ :name => "rails 1.2.3",
+ :url => "http://dev.rubyonrails.org/svn/rails/tags/rel_1-2-3",
+ :tagged? => true
+ },
+ {
+ :checkout_path => "vendor/rails/edge",
+ :name => "edge rails",
+ :url => "http://svn.rubyonrails.org/rails/trunk",
+ :tagged? => false
+ }
+ ]
+end
diff --git a/vendor/gems/rspec/pre_commit/spec/pre_commit/pre_commit_spec.rb b/vendor/gems/rspec/pre_commit/spec/pre_commit/pre_commit_spec.rb
new file mode 100644
index 000000000..5d1c8f9b9
--- /dev/null
+++ b/vendor/gems/rspec/pre_commit/spec/pre_commit/pre_commit_spec.rb
@@ -0,0 +1,15 @@
+require File.dirname(__FILE__) + '/../spec_helper.rb'
+
+##
+# This is not a complete specification of PreCommit, but
+# just a collection of bug fix regression tests.
+describe "The helper method PreCommit#silent_sh" do
+ before do
+ @pre_commit = PreCommit.new(nil)
+ end
+
+ # bug in r1802
+ it "should return the command output" do
+ @pre_commit.send(:silent_sh, "echo foo").should ==("foo\n")
+ end
+end
diff --git a/vendor/gems/rspec/pre_commit/spec/pre_commit/rspec_on_rails_spec.rb b/vendor/gems/rspec/pre_commit/spec/pre_commit/rspec_on_rails_spec.rb
new file mode 100644
index 000000000..1932fff86
--- /dev/null
+++ b/vendor/gems/rspec/pre_commit/spec/pre_commit/rspec_on_rails_spec.rb
@@ -0,0 +1,36 @@
+require File.dirname(__FILE__) + '/../spec_helper.rb'
+require 'fileutils'
+
+include FileUtils
+
+##
+# This is not a complete specification of PreCommit.RSpecOnRails, but
+# just a collection of bug fix regression tests.
+describe "RSpecOnRails pre_commit" do
+ before do
+ @original_dir = File.expand_path(FileUtils.pwd)
+ @rails_app_dir = File.expand_path(File.dirname(__FILE__) + "/../../../example_rails_app/")
+
+ Dir.chdir(@rails_app_dir)
+ rm_rf('vendor/plugins/rspec_on_rails')
+ system("svn export ../rspec_on_rails vendor/plugins/rspec_on_rails")
+
+ @pre_commit = PreCommit::RspecOnRails.new(nil)
+ end
+
+ after do
+ rm('db/migrate/888_create_purchases.rb', :force => true)
+ @pre_commit.destroy_purchase
+ Dir.chdir(@original_dir)
+ end
+
+ # bug in r1802
+ it "should fail noisily if there is a migration name conflict" do
+ touch('db/migrate/888_create_purchases.rb')
+ lambda { @pre_commit.generate_purchase }.should raise_error
+ end
+
+ it "should not fail if tests run ok" do
+ lambda { @pre_commit.generate_purchase }.should_not raise_error
+ end
+end
diff --git a/vendor/gems/rspec/pre_commit/spec/spec_helper.rb b/vendor/gems/rspec/pre_commit/spec/spec_helper.rb
new file mode 100644
index 000000000..b7e5f3d44
--- /dev/null
+++ b/vendor/gems/rspec/pre_commit/spec/spec_helper.rb
@@ -0,0 +1,3 @@
+$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
+require 'pre_commit'
+
diff --git a/vendor/gems/rspec/pre_commit/spec/spec_suite.rb b/vendor/gems/rspec/pre_commit/spec/spec_suite.rb
new file mode 100644
index 000000000..a8c7c07ac
--- /dev/null
+++ b/vendor/gems/rspec/pre_commit/spec/spec_suite.rb
@@ -0,0 +1,11 @@
+class SpecSuite
+ def run
+ system("ruby rspec/spec/rspec_suite.rb") || raise("Rspec Suite FAILED")
+ system("ruby rspec_on_rails/spec/rails_suite.rb") || raise("Rails Suite FAILED")
+ system("ruby cached_example_rails_app/spec/rails_app_suite.rb") || raise("Rails App Suite FAILED")
+ end
+end
+
+if $0 == __FILE__
+ SpecSuite.new.run
+end
diff --git a/vendor/gems/rspec/rake_tasks/examples.rake b/vendor/gems/rspec/rake_tasks/examples.rake
new file mode 100644
index 000000000..32d0ad0e6
--- /dev/null
+++ b/vendor/gems/rspec/rake_tasks/examples.rake
@@ -0,0 +1,7 @@
+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/gems/rspec/rake_tasks/examples_with_rcov.rake b/vendor/gems/rspec/rake_tasks/examples_with_rcov.rake
new file mode 100644
index 000000000..4bf35c6b8
--- /dev/null
+++ b/vendor/gems/rspec/rake_tasks/examples_with_rcov.rake
@@ -0,0 +1,9 @@
+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/gems/rspec/rake_tasks/failing_examples_with_html.rake b/vendor/gems/rspec/rake_tasks/failing_examples_with_html.rake
new file mode 100644
index 000000000..34549583d
--- /dev/null
+++ b/vendor/gems/rspec/rake_tasks/failing_examples_with_html.rake
@@ -0,0 +1,9 @@
+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/gems/rspec/rake_tasks/verify_rcov.rake b/vendor/gems/rspec/rake_tasks/verify_rcov.rake
new file mode 100644
index 000000000..a90a266df
--- /dev/null
+++ b/vendor/gems/rspec/rake_tasks/verify_rcov.rake
@@ -0,0 +1,7 @@
+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/gems/rspec/spec/README.jruby b/vendor/gems/rspec/spec/README.jruby
new file mode 100644
index 000000000..7eddb5671
--- /dev/null
+++ b/vendor/gems/rspec/spec/README.jruby
@@ -0,0 +1,15 @@
+= Running specs on JRuby =
+
+svn co http://svn.codehaus.org/jruby/trunk jruby
+cd jruby/jruby
+ant clean
+ant
+# put JRuby's bin dir on your PATH
+jruby -S gem install rake --no-ri --no-rdoc
+jruby -S gem install diff-lcs
+jruby -S gem install syntax
+cd ../testsuites/rspec
+mkdir target
+jruby -S rake checkout_code
+cd target/rspec
+jruby bin/spec spec -c
diff --git a/vendor/gems/rspec/spec/autotest/rspec_spec.rb b/vendor/gems/rspec/spec/autotest/rspec_spec.rb
index 52b5b4885..67ee7fbef 100644
--- a/vendor/gems/rspec/spec/autotest/rspec_spec.rb
+++ b/vendor/gems/rspec/spec/autotest/rspec_spec.rb
@@ -39,7 +39,10 @@ HERE
describe Rspec, "rspec_commands" do
it "should contain the various commands, ordered by preference" do
- Rspec.new.spec_commands.should == ["bin/spec", "#{Config::CONFIG['bindir']}/spec"]
+ Rspec.new.spec_commands.should == [
+ File.expand_path("#{File.dirname(__FILE__)}/../../bin/spec"),
+ "#{Config::CONFIG['bindir']}/spec"
+ ]
end
end
@@ -48,14 +51,15 @@ HERE
before :each do
common_setup
- @rspec_autotest = Rspec.new(@kernel)
+ @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
- File.should_receive(:exists?).with("bin/spec").and_return true
- @rspec_autotest.spec_command.should == "bin/spec"
+ 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
@@ -84,16 +88,18 @@ HERE
end
it "should use the ALT_SEPARATOR if it is non-nil" do
- @rspec_autotest = Rspec.new(@kernel, @posix_separator, @windows_alt_separator)
- @rspec_autotest.stub!(:spec_commands).and_return [File.join('bin', 'spec')]
- @rspec_autotest.spec_command.should == "bin\\spec"
+ @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(@kernel, @posix_separator, @windows_alt_separator)
- @rspec_autotest.stub!(:spec_commands).and_return [File.join('bin', 'spec')]
- @rspec_autotest.spec_command.should == "bin/spec"
+ @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
@@ -136,94 +142,25 @@ HERE
end
end
- describe Rspec, "test mappings" do
- before :each do
- @proc = mock Proc
- @kernel = mock Kernel
- @kernel.stub!(:proc).and_return @proc
- @rspec_autotest = Rspec.new(@kernel)
- end
-
- it "should map all filenames in spec/ which end in .rb" do
- @rspec_autotest.test_mappings[%r%^spec/.*\.rb$%].should == @proc
- end
-
- it "should map all names in lib which end in .rb to the corresponding ones in spec/" do
- @rspec_autotest.test_mappings[%r%^lib/(.*)\.rb$%].should == @proc
- end
-
- it "should find all files in spec/shares/* and the spec helper in spec/spec_helper" do
- @rspec_autotest.test_mappings[%r%^spec/(spec_helper|shared/.*)\.rb$%].should == @proc
- end
- end
-
- describe Rspec, "handling results" do
- include AutotestHelper
-
- before :each do
- common_setup
- @rspec_autotest = Rspec.new(@kernel, @posix_separator, @windows_alt_separator)
- @rspec_autotest.stub!(:hook)
-
- @results = mock String
- @results.stub!(:scan).and_return ""
- end
-
- it "should call hook(:red) if there are failures" do
- @rspec_autotest.stub!(:consolidate_failures).and_return ["spec/some_spec.rb"]
-
- @rspec_autotest.should_receive(:hook).with(:red)
- @rspec_autotest.handle_results(@results)
- end
-
- it "should call hook(:green) if there are no failures" do
- @rspec_autotest.stub!(:consolidate_failures).and_return []
- @rspec_autotest.should_receive(:hook).with(:green)
- @rspec_autotest.handle_results(@results)
- end
- end
-
- describe Rspec, "handling failed results" do
- include AutotestHelper
-
- before :each do
- common_setup
- end
+ describe Rspec, "mappings" do
- it %(should scan the output into a multi-dimensional array,
- consisting of the failing spec's name as the first element,
- and the failure as the second) do
- @rspec_autotest = Rspec.new
- @rspec_autotest.failed_results(@rspec_output).should == [
- [
- "false should be false",
- "expected: true,\n got: false (using ==)\n./spec/autotest/rspec_spec.rb:203:"
- ]
- ]
- end
- end
-
- describe Rspec, "specs for a given file" do
- before :each do
+ before(:each) do
@lib_file = "lib/something.rb"
@spec_file = "spec/something_spec.rb"
@rspec_autotest = Rspec.new
-
- @rspec_autotest.instance_variable_set("@files", {@lib_file => Time.now, @spec_file => Time.now})
- @rspec_autotest.stub!(:find_files_to_test).and_return true
+ @rspec_autotest.hook :initialize
end
it "should find the spec file for a given lib file" do
- @rspec_autotest.specs_for_file(@lib_file).should == [@spec_file]
+ @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.specs_for_file(@spec_file).should == [@spec_file]
+ @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
- @other_file = "lib/some_non_tracked_file"
- @rspec_autotest.specs_for_file(@other_file).should == []
+ @rspec_autotest.should map_specs([]).to("lib/untracked_file")
end
end
@@ -240,18 +177,18 @@ HERE
end
it "should return no failures if no failures were given in the output" do
- @rspec_autotest.stub!(:failed_results).and_return [[]]
- @rspec_autotest.consolidate_failures(@rspec_autotest.failed_results).should == {}
+ @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!(:failed_results).and_return([
+ @rspec_autotest.stub!(:test_files_for).and_return "./spec/autotest/rspec_spec.rb"
+ foo = [
[
"false should be false",
"expected: true,\n got: false (using ==)\n./spec/autotest/rspec_spec.rb:203:"
]
- ])
- @rspec_autotest.consolidate_failures(@rspec_autotest.failed_results).should == {@spec_file => ["false should be false"]}
+ ]
+ @rspec_autotest.consolidate_failures(foo).should == {@spec_file => ["false should be false"]}
end
end
diff --git a/vendor/gems/rspec/spec/autotest_helper.rb b/vendor/gems/rspec/spec/autotest_helper.rb
index 172bb3a4a..1b6c6002b 100644
--- a/vendor/gems/rspec/spec/autotest_helper.rb
+++ b/vendor/gems/rspec/spec/autotest_helper.rb
@@ -1,4 +1,6 @@
+require "rubygems"
require 'autotest'
-require File.dirname(__FILE__) + "/../lib/autotest/rspec"
-
-
+dir = File.dirname(__FILE__)
+require "#{dir}/spec_helper"
+require File.expand_path("#{dir}/../lib/autotest/rspec")
+require "#{dir}/autotest_matchers"
diff --git a/vendor/gems/rspec/spec/autotest_matchers.rb b/vendor/gems/rspec/spec/autotest_matchers.rb
new file mode 100644
index 000000000..5e23452e2
--- /dev/null
+++ b/vendor/gems/rspec/spec/autotest_matchers.rb
@@ -0,0 +1,47 @@
+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/gems/rspec/spec/rspec_suite.rb b/vendor/gems/rspec/spec/rspec_suite.rb
new file mode 100644
index 000000000..abd016a6d
--- /dev/null
+++ b/vendor/gems/rspec/spec/rspec_suite.rb
@@ -0,0 +1,7 @@
+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/gems/rspec/spec/ruby_forker.rb b/vendor/gems/rspec/spec/ruby_forker.rb
new file mode 100644
index 000000000..6ab038750
--- /dev/null
+++ b/vendor/gems/rspec/spec/ruby_forker.rb
@@ -0,0 +1,13 @@
+require 'rbconfig'
+
+module RubyForker
+ # Forks a ruby interpreter with same type as ourself.
+ # juby will fork jruby, ruby will fork ruby etc.
+ def ruby(args, stderr=nil)
+ config = ::Config::CONFIG
+ interpreter = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
+ cmd = "#{interpreter} #{args}"
+ cmd << " 2> #{stderr}" unless stderr.nil?
+ `#{cmd}`
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec.opts b/vendor/gems/rspec/spec/spec.opts
new file mode 100644
index 000000000..48e51f93b
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec.opts
@@ -0,0 +1,6 @@
+--colour
+--format
+profile
+--timeout
+20
+--diff \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/dsl/behaviour_eval_spec.rb b/vendor/gems/rspec/spec/spec/dsl/behaviour_eval_spec.rb
deleted file mode 100644
index c3ed4e282..000000000
--- a/vendor/gems/rspec/spec/spec/dsl/behaviour_eval_spec.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
- module DSL
- describe BehaviourEval do
- def count
- @count ||= 0
- @count = @count + 1
- @count
- end
-
- before(:all) do
- count.should == 1
- end
-
- before(:all) do
- count.should == 2
- end
-
- before(:each) do
- count.should == 3
- end
-
- before(:each) do
- count.should == 4
- end
-
- it "should run before(:all), before(:each), example, after(:each), after(:all) in order" do
- count.should == 5
- end
-
- after(:each) do
- count.should == 7
- end
-
- after(:each) do
- count.should == 6
- end
-
- after(:all) do
- count.should == 9
- end
-
- after(:all) do
- count.should == 8
- end
- end
-
- describe BehaviourEval, "instance methods" do
- it "should support pending" do
- lambda {
- pending("something")
- }.should raise_error(Spec::DSL::ExamplePendingError, "something")
- end
-
- it "should have #pending raise a Pending error when its block fails" do
- block_ran = false
- lambda {
- pending("something") do
- block_ran = true
- raise "something wrong with my example"
- end
- }.should raise_error(Spec::DSL::ExamplePendingError, "something")
- block_ran.should == true
- end
-
- it "should have #pending raise Spec::DSL::PendingFixedError when its block does not fail" do
- block_ran = false
- lambda {
- pending("something") do
- block_ran = true
- end
- }.should raise_error(Spec::DSL::PendingFixedError, "Expected pending 'something' to fail. No Error was raised.")
- block_ran.should == true
- end
-
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/dsl/behaviour_factory_spec.rb b/vendor/gems/rspec/spec/spec/dsl/behaviour_factory_spec.rb
deleted file mode 100644
index 91008a660..000000000
--- a/vendor/gems/rspec/spec/spec/dsl/behaviour_factory_spec.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
- module DSL
- describe BehaviourFactory do
- it "should create a Spec::DSL::Behaviour by default" do
- Spec::DSL::BehaviourFactory.create("behaviour") {
- }.should be_an_instance_of(Spec::DSL::Behaviour)
- end
-
- it "should create a Spec::DSL::Behaviour when :behaviour_type => :default" do
- Spec::DSL::BehaviourFactory.create("behaviour", :behaviour_type => :default) {
- }.should be_an_instance_of(Spec::DSL::Behaviour)
- end
-
- it "should create specified type when :behaviour_type => :something_other_than_default" do
- behaviour_class = Class.new do
- def initialize(*args, &block); end
- end
- Spec::DSL::BehaviourFactory.add_behaviour_class(:something_other_than_default, behaviour_class)
- Spec::DSL::BehaviourFactory.create("behaviour", :behaviour_type => :something_other_than_default) {
- }.should be_an_instance_of(behaviour_class)
- end
-
- it "should type indicated by spec_path" do
- behaviour_class = Class.new do
- def initialize(*args, &block); end
- end
- Spec::DSL::BehaviourFactory.add_behaviour_class(:something_other_than_default, behaviour_class)
- Spec::DSL::BehaviourFactory.create("behaviour", :spec_path => "./spec/something_other_than_default/some_spec.rb") {
- }.should be_an_instance_of(behaviour_class)
- end
-
- it "should type indicated by spec_path (with spec_path generated by caller on windows)" do
- behaviour_class = Class.new do
- def initialize(*args, &block); end
- end
- Spec::DSL::BehaviourFactory.add_behaviour_class(:something_other_than_default, behaviour_class)
- Spec::DSL::BehaviourFactory.create("behaviour", :spec_path => "./spec\\something_other_than_default\\some_spec.rb") {
- }.should be_an_instance_of(behaviour_class)
- end
-
- after(:each) do
- Spec::DSL::BehaviourFactory.remove_behaviour_class(:something_other_than_default)
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/dsl/behaviour_spec.rb b/vendor/gems/rspec/spec/spec/dsl/behaviour_spec.rb
deleted file mode 100644
index fa6774c65..000000000
--- a/vendor/gems/rspec/spec/spec/dsl/behaviour_spec.rb
+++ /dev/null
@@ -1,661 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
- module DSL
- class FakeReporter < Spec::Runner::Reporter
- attr_reader :added_behaviour
- def add_behaviour(description)
- @added_behaviour = description
- end
- end
-
- describe Behaviour, "class methods" do
- before :each do
- @reporter = FakeReporter.new(mock("formatter", :null_object => true), mock("backtrace_tweaker", :null_object => true))
- @behaviour = Behaviour.new("example") {}
- end
-
- after :each do
- Behaviour.clear_before_and_after!
- end
-
- it "should not run before(:all) or after(:all) on dry run" do
- before_all_ran = false
- after_all_ran = false
- Behaviour.before(:all) { before_all_ran = true }
- Behaviour.after(:all) { after_all_ran = true }
- @behaviour.it("should") {}
- @behaviour.run(@reporter, true)
- before_all_ran.should be_false
- after_all_ran.should be_false
- end
-
- it "should not run any example if before(:all) fails" do
- spec_ran = false
- Behaviour.before(:all) { raise NonStandardError }
- @behaviour.it("test") {spec_ran = true}
- @behaviour.run(@reporter)
- spec_ran.should be_false
- end
-
- it "should run after(:all) if before(:all) fails" do
- after_all_ran = false
- Behaviour.before(:all) { raise NonStandardError }
- Behaviour.after(:all) { after_all_ran = true }
- @behaviour.run(@reporter)
- after_all_ran.should be_true
- end
-
- it "should run after(:all) if before(:each) fails" do
- after_all_ran = false
- Behaviour.before(:each) { raise NonStandardError }
- Behaviour.after(:all) { after_all_ran = true }
- @behaviour.run(@reporter)
- after_all_ran.should be_true
- end
-
- it "should run after(:all) if any example fails" do
- after_all_ran = false
- @behaviour.it("should") { raise NonStandardError }
- Behaviour.after(:all) { after_all_ran = true }
- @behaviour.run(@reporter)
- after_all_ran.should be_true
- end
-
-
- it "should unregister a given after(:each) block" do
- after_all_ran = false
- @behaviour.it("example") {}
- proc = Proc.new { after_all_ran = true }
- Behaviour.after(:each, &proc)
- @behaviour.run(@reporter)
- after_all_ran.should be_true
-
- after_all_ran = false
- Behaviour.remove_after(:each, &proc)
- @behaviour.run(@reporter)
- after_all_ran.should be_false
- end
-
- it "should run second after(:each) block even if the first one fails" do
- example = @behaviour.it("example") {}
- second_after_ran = false
- @behaviour.after(:each) do
- second_after_ran = true
- raise "second"
- end
- first_after_ran = false
- @behaviour.after(:each) do
- first_after_ran = true
- raise "first"
- end
-
- @reporter.should_receive(:example_finished) do |example, error, location, example_not_implemented|
- example.should equal(example)
- error.message.should eql("first")
- location.should eql("after(:each)")
- example_not_implemented.should be_false
- end
- @behaviour.run(@reporter)
- first_after_ran.should be_true
- second_after_ran.should be_true
- end
-
- it "should not run second before(:each) if the first one fails" do
- @behaviour.it("example") {}
- first_before_ran = false
- @behaviour.before(:each) do
- first_before_ran = true
- raise "first"
- end
- second_before_ran = false
- @behaviour.before(:each) do
- second_before_ran = true
- raise "second"
- end
-
- @reporter.should_receive(:example_finished) do |name, error, location, example_not_implemented|
- name.should eql("example")
- error.message.should eql("first")
- location.should eql("before(:each)")
- example_not_implemented.should be_false
- end
- @behaviour.run(@reporter)
- first_before_ran.should be_true
- second_before_ran.should be_false
- end
-
- it "should supply before(:all) as description if failure in before(:all)" do
- @reporter.should_receive(:example_finished) do |example, error, location|
- example.description.should eql("before(:all)")
- error.message.should == "in before(:all)"
- location.should eql("before(:all)")
- end
-
- Behaviour.before(:all) { raise NonStandardError.new("in before(:all)") }
- @behaviour.it("test") {true}
- @behaviour.run(@reporter)
- end
-
- it "should provide after(:all) as description if failure in after(:all)" do
- @reporter.should_receive(:example_finished) do |example, error, location|
- example.description.should eql("after(:all)")
- error.message.should eql("in after(:all)")
- location.should eql("after(:all)")
- end
-
- Behaviour.after(:all) { raise NonStandardError.new("in after(:all)") }
- @behaviour.run(@reporter)
- end
- end
-
- describe Behaviour do
- before :each do
- @reporter = FakeReporter.new(mock("formatter", :null_object => true), mock("backtrace_tweaker", :null_object => true))
- @behaviour = Behaviour.new("example") {}
- end
-
- after :each do
- Behaviour.clear_before_and_after!
- end
-
- it "should send reporter add_behaviour" do
- @behaviour.run(@reporter)
- @reporter.added_behaviour.should == "example"
- end
-
- it "should run example on run" do
- example_ran = false
- @behaviour.it("should") {example_ran = true}
- @behaviour.run(@reporter)
- example_ran.should be_true
- end
-
- it "should not run example on dry run" do
- example_ran = false
- @behaviour.it("should") {example_ran = true}
- @behaviour.run(@reporter, true)
- example_ran.should be_false
- end
-
- it "should not run before(:all) or after(:all) on dry run" do
- before_all_ran = false
- after_all_ran = false
- @behaviour.before(:all) { before_all_ran = true }
- @behaviour.after(:all) { after_all_ran = true }
- @behaviour.it("should") {}
- @behaviour.run(@reporter, true)
- before_all_ran.should be_false
- after_all_ran.should be_false
- end
-
- it "should not run any example if before(:all) fails" do
- spec_ran = false
- @behaviour.before(:all) { raise "help" }
- @behaviour.it("test") {spec_ran = true}
- @behaviour.run(@reporter)
- spec_ran.should be_false
- end
-
- it "should run after(:all) if before(:all) fails" do
- after_all_ran = false
- @behaviour.before(:all) { raise }
- @behaviour.after(:all) { after_all_ran = true }
- @behaviour.run(@reporter)
- after_all_ran.should be_true
- end
-
- it "should run after(:all) if before(:each) fails" do
- after_all_ran = false
- @behaviour.before(:each) { raise }
- @behaviour.after(:all) { after_all_ran = true }
- @behaviour.run(@reporter)
- after_all_ran.should be_true
- end
-
- it "should run after(:all) if any example fails" do
- after_all_ran = false
- @behaviour.it("should") { raise "before all error" }
- @behaviour.after(:all) { after_all_ran = true }
- @behaviour.run(@reporter)
- after_all_ran.should be_true
- end
-
- it "should supply before(:all) as description if failure in before(:all)" do
- @reporter.should_receive(:example_finished) do |example, error, location|
- example.description.should eql("before(:all)")
- error.message.should eql("in before(:all)")
- location.should eql("before(:all)")
- end
-
- @behaviour.before(:all) { raise "in before(:all)" }
- @behaviour.it("test") {true}
- @behaviour.run(@reporter)
- end
-
- it "should provide after(:all) as description if failure in after(:all)" do
- @reporter.should_receive(:example_finished) do |example, error, location|
- example.description.should eql("after(:all)")
- error.message.should eql("in after(:all)")
- location.should eql("after(:all)")
- end
-
- @behaviour.after(:all) { raise "in after(:all)" }
- @behaviour.run(@reporter)
- end
-
- it "should run before(:all) block only once" do
- before_all_run_count_run_count = 0
- @behaviour.before(:all) {before_all_run_count_run_count += 1}
- @behaviour.it("test") {true}
- @behaviour.it("test2") {true}
- @behaviour.run(@reporter)
- before_all_run_count_run_count.should == 1
- end
-
- it "calls spec_inherited class method" do
- super_class_before_ran = false
- super_class = Class.new do
- def self.spec_inherited(mod)
- mod.before {setup}
- end
-
- define_method :setup do
- super_class_before_ran = true
- end
- end
- @behaviour.inherit super_class
-
- before_ran = false
- @behaviour.before {before_ran = true}
- @behaviour.it("test") {true}
- @behaviour.run(@reporter)
- super_class_before_ran.should be_true
- before_ran.should be_true
- end
-
- it "should run after(:all) block only once" do
- after_all_run_count = 0
- @behaviour.after(:all) {after_all_run_count += 1}
- @behaviour.it("test") {true}
- @behaviour.it("test2") {true}
- @behaviour.run(@reporter)
- after_all_run_count.should == 1
- @reporter.rspec_verify
- 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 = ""
- @behaviour.before(:all) { @instance_var = context_instance_value_in }
- @behaviour.after(:all) { context_instance_value_out = @instance_var }
- @behaviour.it("test") {true}
- @behaviour.run(@reporter)
- context_instance_value_in.should == context_instance_value_out
- 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 = ""
- @behaviour.before(:all) { @instance_var = context_instance_value_in }
- @behaviour.it("test") {context_instance_value_out = @instance_var}
- @behaviour.run(@reporter)
- context_instance_value_in.should == context_instance_value_out
- end
-
- it "should not add global before callbacks for untargetted behaviours" do
- fiddle = []
-
- Behaviour.before(:all) { fiddle << "Behaviour.before(:all)" }
- Behaviour.prepend_before(:all) { fiddle << "Behaviour.prepend_before(:all)" }
- Behaviour.before(:each, :behaviour_type => :special) { fiddle << "Behaviour.before(:each, :behaviour_type => :special)" }
- Behaviour.prepend_before(:each, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:each, :behaviour_type => :special)" }
- Behaviour.before(:all, :behaviour_type => :special) { fiddle << "Behaviour.before(:all, :behaviour_type => :special)" }
- Behaviour.prepend_before(:all, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:all, :behaviour_type => :special)" }
-
- behaviour = Behaviour.new("I'm not special", :behaviour_type => :not_special) {}
- behaviour.run(@reporter)
- fiddle.should == [
- 'Behaviour.prepend_before(:all)',
- 'Behaviour.before(:all)',
- ]
- end
-
- it "should add global before callbacks for targetted behaviours" do
- fiddle = []
-
- Behaviour.before(:all) { fiddle << "Behaviour.before(:all)" }
- Behaviour.prepend_before(:all) { fiddle << "Behaviour.prepend_before(:all)" }
- Behaviour.before(:each, :behaviour_type => :special) { fiddle << "Behaviour.before(:each, :behaviour_type => :special)" }
- Behaviour.prepend_before(:each, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:each, :behaviour_type => :special)" }
- Behaviour.before(:all, :behaviour_type => :special) { fiddle << "Behaviour.before(:all, :behaviour_type => :special)" }
- Behaviour.prepend_before(:all, :behaviour_type => :special) { fiddle << "Behaviour.prepend_before(:all, :behaviour_type => :special)" }
-
- Behaviour.append_before(:behaviour_type => :special) { fiddle << "Behaviour.append_before(:each, :behaviour_type => :special)" }
-
- behaviour = Behaviour.new("I'm not special", :behaviour_type => :special) {}
- behaviour.it("test") {true}
- behaviour.run(@reporter)
- fiddle.should == [
- 'Behaviour.prepend_before(:all)',
- 'Behaviour.before(:all)',
- 'Behaviour.prepend_before(:all, :behaviour_type => :special)',
- 'Behaviour.before(:all, :behaviour_type => :special)',
- 'Behaviour.prepend_before(:each, :behaviour_type => :special)',
- 'Behaviour.before(:each, :behaviour_type => :special)',
- 'Behaviour.append_before(:each, :behaviour_type => :special)',
- ]
- end
-
- it "before callbacks are ordered from global to local" do
- fiddle = []
- super_class = Class.new do
- define_method :setup do
- fiddle << "superclass setup"
- end
- end
- @behaviour.inherit super_class
-
- Behaviour.prepend_before(:all) { fiddle << "Behaviour.prepend_before(:all)" }
- Behaviour.before(:all) { fiddle << "Behaviour.before(:all)" }
- @behaviour.prepend_before(:all) { fiddle << "prepend_before(:all)" }
- @behaviour.before(:all) { fiddle << "before(:all)" }
- @behaviour.prepend_before(:each) { fiddle << "prepend_before(:each)" }
- @behaviour.before(:each) { fiddle << "before(:each)" }
- @behaviour.it("test") {true}
- @behaviour.run(@reporter)
- fiddle.should == [
- 'Behaviour.prepend_before(:all)',
- 'Behaviour.before(:all)',
- 'prepend_before(:all)',
- 'before(:all)',
- 'prepend_before(:each)',
- 'before(:each)'
- ]
- end
-
- it "after callbacks are ordered from local to global" do
- @reporter.should_receive(:add_behaviour).with any_args()
- @reporter.should_receive(:example_finished).with any_args()
-
- fiddle = []
- super_class = Class.new do
- define_method :teardown do
- fiddle << "superclass teardown"
- end
- end
- @behaviour.inherit super_class
-
- @behaviour.after(:each) { fiddle << "after(:each)" }
- @behaviour.append_after(:each) { fiddle << "append_after(:each)" }
- @behaviour.after(:all) { fiddle << "after(:all)" }
- @behaviour.append_after(:all) { fiddle << "append_after(:all)" }
- Behaviour.after(:all) { fiddle << "Behaviour.after(:all)" }
- Behaviour.append_after(:all) { fiddle << "Behaviour.append_after(:all)" }
- @behaviour.it("test") {true}
- @behaviour.run(@reporter)
- fiddle.should == [
- 'after(:each)',
- 'append_after(:each)',
- 'after(:all)',
- 'append_after(:all)',
- 'Behaviour.after(:all)',
- 'Behaviour.append_after(:all)'
- ]
- end
-
- it "should run superclass teardown method and after block" do
- super_class_teardown_ran = false
- super_class = Class.new do
- define_method :teardown do
- super_class_teardown_ran = true
- end
- end
- @behaviour.inherit super_class
-
- teardown_ran = false
- @behaviour.after {teardown_ran = true}
- @behaviour.it("test") {true}
- @behaviour.run(@reporter)
- super_class_teardown_ran.should be_false
- teardown_ran.should be_true
- @reporter.rspec_verify
- end
-
- it "should have accessible methods from inherited superclass" do
- helper_method_ran = false
- super_class = Class.new do
- define_method :helper_method do
- helper_method_ran = true
- end
- end
- @behaviour.inherit super_class
-
- @behaviour.it("test") {helper_method}
- @behaviour.run(@reporter)
- helper_method_ran.should be_true
- end
-
- it "should have accessible class methods from inherited superclass" do
- class_method_ran = false
- super_class = Class.new
- (class << super_class; self; end).class_eval do
- define_method :class_method do
- class_method_ran = true
- end
- end
- @behaviour.inherit super_class
- @behaviour.class_method
- class_method_ran.should be_true
-
- lambda {@behaviour.foobar}.should raise_error(NoMethodError)
- end
-
- it "should include inherited class methods" do
- class_method_ran = false
- super_class = Class.new
- class << super_class
- def super_class_class_method; end
- end
- @behaviour.inherit super_class
-
- @behaviour.methods.should include("super_class_class_method")
- end
-
- it "should have accessible instance methods from included module" do
- @reporter.should_receive(:add_behaviour).with any_args()
- @reporter.should_receive(:example_finished).with any_args()
-
- 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
-
- @behaviour.include mod1, mod2
-
- @behaviour.it("test") do
- mod1_method
- mod2_method
- end
- @behaviour.run(@reporter)
- mod1_method_called.should be_true
- mod2_method_called.should be_true
- end
-
- it "should have accessible class methods from included module" do
- mod1_method_called = false
- mod1 = Module.new do
- 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
- end
- end
- end
-
- mod2_method_called = false
- mod2 = Module.new do
- class_methods = Module.new do
- define_method :mod2_method do
- mod2_method_called = true
- end
- end
-
- metaclass.class_eval do
- define_method(:included) do |receiver|
- receiver.extend class_methods
- end
- end
- end
-
- @behaviour.include mod1, mod2
-
- @behaviour.mod1_method
- @behaviour.mod2_method
- mod1_method_called.should be_true
- mod2_method_called.should be_true
- end
-
- it "should count number of specs" do
- @behaviour.it("one") {}
- @behaviour.it("two") {}
- @behaviour.it("three") {}
- @behaviour.it("four") {}
- @behaviour.number_of_examples.should == 4
- end
-
- it "should not match anything when there are no examples" do
- @behaviour.should_not be_matches(['context'])
- end
-
- it "should match when one of the examples match" do
- example = mock('my example')
- example.should_receive(:matches?).and_return(true)
- @behaviour.stub!(:examples).and_return([example])
- @behaviour.should be_matches(['jalla'])
- end
-
- it "should include targetted modules included using configuration" do
- $included_modules = []
-
- mod1 = Module.new do
- class << self
- def included(mod)
- $included_modules << self
- end
- end
- end
-
- mod2 = Module.new do
- class << self
- def included(mod)
- $included_modules << self
- end
- end
- end
-
- mod3 = Module.new do
- class << self
- def included(mod)
- $included_modules << self
- end
- end
- end
-
- begin
- Spec::Runner.configuration.include(mod1, mod2)
- Spec::Runner.configuration.include(mod3, :behaviour_type => :cat)
-
- behaviour = Behaviour.new("I'm special", :behaviour_type => :dog) do
- end.run(@reporter)
-
- $included_modules.should include(mod1)
- $included_modules.should include(mod2)
- $included_modules.should_not include(mod3)
- ensure
- Spec::Runner.configuration.exclude(mod1, mod2, mod3)
- end
- end
-
- it "should include any predicate_matchers included using configuration" do
- $included_predicate_matcher_found = false
- Spec::Runner.configuration.predicate_matchers[:do_something] = :does_something?
- Behaviour.new('example') do
- it "should respond to do_something" do
- $included_predicate_matcher_found = respond_to?(:do_something)
- end
- end.run(@reporter)
- $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
- end
- end
- end
-
- begin
- $included_module = nil
- Spec::Runner.configuration.mock_with mod
-
- behaviour = Behaviour.new('example') do
- end.run(@reporter)
-
- $included_module.should_not be_nil
- ensure
- Spec::Runner.configuration.mock_with :rspec
- end
- end
-
- end
-
- class BehaviourSubclass < Behaviour
- public :described_type
- end
-
- describe Behaviour, " subclass" do
- it "should have access to the described_type" do
- BehaviourSubclass.new(Example){}.described_type.should == Example
- end
-
- it "should figure out its behaviour_type based on its name ()" do
- BehaviourSubclass.new(Object){}.behaviour_type.should == :subclass
- end
-
- # TODO - add an example about shared behaviours
- end
-
- describe Enumerable do
- 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 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/)
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/dsl/composite_proc_builder_spec.rb b/vendor/gems/rspec/spec/spec/dsl/composite_proc_builder_spec.rb
deleted file mode 100644
index 487677828..000000000
--- a/vendor/gems/rspec/spec/spec/dsl/composite_proc_builder_spec.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
- module DSL
- describe CompositeProcBuilder do
- before(:each) do
- @klass = Class.new do
- attr_reader :an_attribute
-
- def an_attribute_setter
- @an_attribute = :the_value
- end
- end
-
- @parent = @klass.new
- @builder = CompositeProcBuilder.new {}
- end
-
- it "calls all of its child procs" do
- @builder << proc {:proc1}
- @builder << proc {:proc2}
- @builder.proc.call.should == [:proc1, :proc2]
- end
-
- it "evals procs in the caller's instance" do
- the_proc = proc do
- @an_attribute = :the_value
- end
- the_proc.class.should == Proc
- @builder << the_proc
- @parent.instance_eval &@builder.proc
- @parent.an_attribute.should == :the_value
- end
-
- it "binds unbound methods to the parent" do
- unbound_method = @klass.instance_method(:an_attribute_setter)
- unbound_method.class.should == UnboundMethod
- @builder << unbound_method
- @parent.instance_eval &@builder.proc
- @parent.an_attribute.should == :the_value
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/dsl/configuration_spec.rb b/vendor/gems/rspec/spec/spec/dsl/configuration_spec.rb
deleted file mode 100644
index d0377d068..000000000
--- a/vendor/gems/rspec/spec/spec/dsl/configuration_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module DSL
- describe Configuration do
- before(:each) do
- @config = Configuration.new
- @behaviour = mock("behaviour")
- end
-
- 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
-
- it "should let you define modules to be included" do
- mod = Module.new
- @config.include mod
- @config.modules_for(nil).should include(mod)
- end
-
- [:prepend_before, :append_before, :prepend_after, :append_after].each do |m|
- it "should delegate ##{m} to Behaviour class" do
- Behaviour.should_receive(m).with(:whatever)
- @config.__send__(m, :whatever)
- end
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/dsl/description_spec.rb b/vendor/gems/rspec/spec/spec/dsl/description_spec.rb
deleted file mode 100644
index d9fe4100f..000000000
--- a/vendor/gems/rspec/spec/spec/dsl/description_spec.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
- module DSL
- describe Description, " constructed with a single String" do
- before(:each) {@description = Description.new("abc")}
-
- it "should provide that string as its name" do
- @description.description.should == "abc"
- end
- it "should provide nil as its type" do
- @description.described_type.should be_nil
- end
- it "should respond to []" do
- @description[:key].should be_nil
- end
- it "should respond to []=" do
- @description[:key] = :value
- @description[:key].should == :value
- end
- it "should return for == when value matches description" do
- @description.should == "abc"
- end
- it "should return for == when value is other description that matches description" do
- @description.should == Description.new("abc")
- end
- end
-
- describe Description, " constructed with a Type" do
- before(:each) {@description = Description.new(Behaviour)}
-
- it "should provide a String representation of that type (fully qualified) as its name" do
- @description.description.should == "Spec::DSL::Behaviour"
- end
- it "should provide that type (fully qualified) as its type" do
- @description.described_type.should == Spec::DSL::Behaviour
- end
- end
-
- describe Description, " constructed with a Type and a String" do
- before(:each) {@description = Description.new(Behaviour, " behaving")}
-
- it "should include the type and second String in its name" do
- @description.description.should == "Spec::DSL::Behaviour behaving"
- end
- it "should provide that type (fully qualified) as its type" do
- @description.described_type.should == Spec::DSL::Behaviour
- end
- end
-
- describe Description, "constructed with a Type and a String not starting with a space" do
- before(:each) {@description = Description.new(Behaviour, "behaving")}
-
- it "should include the type and second String with a space in its name" do
- @description.description.should == "Spec::DSL::Behaviour behaving"
- end
- end
-
- describe Description, "constructed with a Type and a String starting with a ." do
- before(:each) {@description = Description.new(Behaviour, ".behaving")}
-
- it "should include the type and second String with a space in its name" do
- @description.description.should == "Spec::DSL::Behaviour.behaving"
- end
- end
-
- describe Description, "constructed with a Type and a String starting with a #" do
- before(:each) {@description = Description.new(Behaviour, "#behaving")}
-
- it "should include the type and second String with a space in its name" do
- @description.description.should == "Spec::DSL::Behaviour#behaving"
- end
- end
-
- describe Description, " constructed with options" do
- before(:each) do
- @description = Description.new(Behaviour, :a => "b", :spec_path => "blah")
- end
-
- it "should provide its options" do
- @description[:a].should == "b"
- end
-
- it "should wrap spec path using File.expand_path" do
- @description[:spec_path].should == File.expand_path("blah")
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/dsl/example_class_spec.rb b/vendor/gems/rspec/spec/spec/dsl/example_class_spec.rb
deleted file mode 100644
index 474d24e44..000000000
--- a/vendor/gems/rspec/spec/spec/dsl/example_class_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module DSL
- describe Example, " class" do
-
- def run(example)
- example.run(@reporter, nil, nil, nil, Object.new)
- end
-
- before do
- @reporter = stub("reporter", :example_started => nil, :example_finished => nil)
- @example_class = Example.dup
- end
-
- it "should report errors in example" do
- error = Exception.new
- example = @example_class.new("example") {raise(error)}
- @reporter.should_receive(:example_finished).with(equal(example), error, "example", false)
- run(example)
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/dsl/example_instance_spec.rb b/vendor/gems/rspec/spec/spec/dsl/example_instance_spec.rb
deleted file mode 100644
index 67b19604c..000000000
--- a/vendor/gems/rspec/spec/spec/dsl/example_instance_spec.rb
+++ /dev/null
@@ -1,160 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module DSL
- describe Example, " instance" do
- predicate_matchers[:is_a] = [:is_a?]
-
- before(:each) do
- @reporter = stub("reporter", :example_started => nil, :example_finished => nil)
- end
-
- it "should send reporter example_started" do
- example=Example.new("example") {}
- @reporter.should_receive(:example_started).with(equal(example))
- example.run(@reporter, nil, nil, false, nil)
- end
-
- it "should report its name for dry run" do
- example=Example.new("example") {}
- @reporter.should_receive(:example_finished).with(equal(example))
- example.run(@reporter, nil, nil, true, nil) #4th arg indicates dry run
- end
-
- it "should report success" do
- example=Example.new("example") {}
- @reporter.should_receive(:example_finished).with(equal(example), nil, nil, false)
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "should report failure due to failure" do
- example=Example.new("example") do
- (2+2).should == 5
- end
- @reporter.should_receive(:example_finished).with(equal(example), is_a(Spec::Expectations::ExpectationNotMetError), "example", false)
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "should report failure due to error" do
- error=NonStandardError.new
- example=Example.new("example") do
- raise(error)
- end
- @reporter.should_receive(:example_finished).with(equal(example), error, "example", false)
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "should run example in scope of supplied object" do
- scope_class = Class.new
- example=Example.new("should pass") do
- self.instance_of?(Example).should == false
- self.instance_of?(scope_class).should == true
- end
- @reporter.should_receive(:example_finished).with(equal(example), nil, nil, false)
- example.run(@reporter, nil, nil, nil, scope_class.new)
- end
-
- it "should not run example block if before_each fails" do
- example_ran = false
- example=Example.new("should pass") {example_ran = true}
- before_each = lambda {raise NonStandardError}
- example.run(@reporter, before_each, nil, nil, Object.new)
- example_ran.should == false
- end
-
- it "should run after_each block if before_each fails" do
- after_each_ran = false
- example=Example.new("should pass") {}
- before_each = lambda {raise NonStandardError}
- after_each = lambda {after_each_ran = true}
- example.run(@reporter, before_each, after_each, nil, Object.new)
- after_each_ran.should == true
- end
-
- it "should run after_each block when example fails" do
- example=Example.new("example") do
- raise(NonStandardError.new("in body"))
- end
- after_each=lambda do
- raise("in after_each")
- end
- @reporter.should_receive(:example_finished) do |example, error, location|
- example.should equal(example)
- location.should eql("example")
- error.message.should eql("in body")
- end
- example.run(@reporter, nil, after_each, nil, nil)
- end
-
- it "should report failure location when in before_each" do
- example=Example.new("example") {}
- before_each=lambda { raise(NonStandardError.new("in before_each")) }
- @reporter.should_receive(:example_finished) do |name, error, location|
- name.should equal(example)
- error.message.should eql("in before_each")
- location.should eql("before(:each)")
- end
- example.run(@reporter, before_each, nil, nil, nil)
- end
-
- it "should report failure location when in after_each" do
- example = Example.new("example") {}
- after_each = lambda { raise(NonStandardError.new("in after_each")) }
- @reporter.should_receive(:example_finished) do |name, error, location|
- name.should equal(example)
- error.message.should eql("in after_each")
- location.should eql("after(:each)")
- end
- example.run(@reporter, nil, after_each, nil, nil)
- end
-
- it "should accept an options hash following the example name" do
- example = Example.new("name", :key => 'value')
- end
-
- it "should report NO NAME when told to use generated description with --dry-run" do
- example = Example.new(:__generate_description) {
- 5.should == 5
- }
- @reporter.should_receive(:example_finished) do |example, error, location|
- example.description.should == "NO NAME (Because of --dry-run)"
- end
- example.run(@reporter, lambda{}, lambda{}, true, Object.new)
- end
-
- it "should report NO NAME when told to use generated description with no expectations" do
- example = Example.new(:__generate_description) {}
- @reporter.should_receive(:example_finished) do |example, error, location|
- example.description.should == "NO NAME (Because there were no expectations)"
- end
- example.run(@reporter, lambda{}, lambda{}, false, Object.new)
- end
-
- it "should report NO NAME when told to use generated description and matcher fails" do
- example = Example.new(:__generate_description) do
- 5.should "" # Has no matches? method..
- end
- @reporter.should_receive(:example_finished) do |example, error, location|
- example.description.should == "NO NAME (Because of Error raised in matcher)"
- end
- example.run(@reporter, nil, nil, nil, Object.new)
- end
-
- it "should report generated description when told to and it is available" do
- example = Example.new(:__generate_description) {
- 5.should == 5
- }
- @reporter.should_receive(:example_finished) do |example, error, location|
- example.description.should == "should == 5"
- end
- example.run(@reporter, nil, nil, nil, Object.new)
- end
-
- it "should unregister description_generated callback (lest a memory leak should build up)" do
- example = Example.new("something")
- Spec::Matchers.should_receive(:unregister_description_generated).with(is_a(Proc))
- example.run(@reporter, nil, nil, nil, Object.new)
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/dsl/example_should_raise_spec.rb b/vendor/gems/rspec/spec/spec/dsl/example_should_raise_spec.rb
deleted file mode 100644
index a6d582068..000000000
--- a/vendor/gems/rspec/spec/spec/dsl/example_should_raise_spec.rb
+++ /dev/null
@@ -1,137 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module DSL
- describe Example, " declared with {:should_raise => ...}" do
- before(:each) do
- @reporter = mock("reporter")
- @reporter.stub!(:example_started)
- end
-
- def verify_error(error, message=nil)
- error.should be_an_instance_of(Spec::Expectations::ExpectationNotMetError)
- unless message.nil?
- return error.message.should =~ message if Regexp === message
- return error.message.should == message
- end
- end
-
- it "true} should pass when there is an ExpectationNotMetError" do
- example = Spec::DSL:: Example.new("example", :should_raise => true) do
- raise Spec::Expectations::ExpectationNotMetError
- end
- @reporter.should_receive(:example_finished) do |description, error|
- error.should be_nil
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "true} should fail if nothing is raised" do
- example = Spec::DSL:: Example.new("example", :should_raise => true) {}
- @reporter.should_receive(:example_finished) do |example_name, error|
- verify_error(error, /example block expected Exception but nothing was raised/)
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "NameError} should pass when there is a NameError" do
- example = Spec::DSL:: Example.new("example", :should_raise => NameError) do
- raise NameError
- end
- @reporter.should_receive(:example_finished) do |example_name, error|
- error.should be_nil
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "NameError} should fail when there is no error" do
- example = Spec::DSL:: Example.new("example", :should_raise => NameError) do
- #do nothing
- end
- @reporter.should_receive(:example_finished) do |example_name, error|
- verify_error(error,/example block expected NameError but nothing was raised/)
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "NameError} should fail when there is the wrong error" do
- example = Spec::DSL:: Example.new("example", :should_raise => NameError) do
- raise RuntimeError
- end
- @reporter.should_receive(:example_finished) do |example_name, error|
- verify_error(error, /example block expected NameError but raised.+RuntimeError/)
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "[NameError]} should pass when there is a NameError" do
- example = Spec::DSL:: Example.new("spec", :should_raise => [NameError]) do
- raise NameError
- end
- @reporter.should_receive(:example_finished) do |description, error|
- error.should be_nil
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "[NameError]} should fail when there is no error" do
- example = Spec::DSL:: Example.new("spec", :should_raise => [NameError]) do
- end
- @reporter.should_receive(:example_finished) do |description, error|
- verify_error(error, /example block expected NameError but nothing was raised/)
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "[NameError]} should fail when there is the wrong error" do
- example = Spec::DSL:: Example.new("spec", :should_raise => [NameError]) do
- raise RuntimeError
- end
- @reporter.should_receive(:example_finished) do |description, error|
- verify_error(error, /example block expected NameError but raised.+RuntimeError/)
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "[NameError, 'message'} should pass when there is a NameError with the right message" do
- example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, 'expected']) do
- raise NameError, 'expected'
- end
- @reporter.should_receive(:example_finished) do |description, error|
- error.should be_nil
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "[NameError, 'message'} should pass when there is a NameError with a message matching a regex" do
- example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, /xpec/]) do
- raise NameError, 'expected'
- end
- @reporter.should_receive(:example_finished) do |description, error|
- error.should be_nil
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "[NameError, 'message'} should fail when there is a NameError with the wrong message" do
- example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, 'expected']) do
- raise NameError, 'wrong message'
- end
- @reporter.should_receive(:example_finished) do |description, error|
- verify_error(error, /example block expected #<NameError: expected> but raised #<NameError: wrong message>/)
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
-
- it "[NameError, 'message'} should fail when there is a NameError with a message not matching regexp" do
- example = Spec::DSL:: Example.new("spec", :should_raise => [NameError, /exp/]) do
- raise NameError, 'wrong message'
- end
- @reporter.should_receive(:example_finished) do |description, error|
- verify_error(error, /example block expected #<NameError: \(\?-mix:exp\)> but raised #<NameError: wrong message>/)
- end
- example.run(@reporter, nil, nil, nil, nil)
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/dsl/shared_behaviour_spec.rb b/vendor/gems/rspec/spec/spec/dsl/shared_behaviour_spec.rb
deleted file mode 100644
index a4288360c..000000000
--- a/vendor/gems/rspec/spec/spec/dsl/shared_behaviour_spec.rb
+++ /dev/null
@@ -1,252 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper'
-
-module Spec
- module DSL
- describe Behaviour, ", with :shared => true" do
-
- before(:each) do
- @formatter = Spec::Mocks::Mock.new("formatter", :null_object => true)
- @behaviour = behaviour_class.new("behaviour") {}
- end
-
- after(:each) do
- @formatter.rspec_verify
- @behaviour_class = nil
- $shared_behaviours.clear unless $shared_behaviours.nil?
- end
-
- def behaviour_class
- unless @behaviour_class
- @behaviour_class = Behaviour.dup
- # dup copies the class instance vars
- @behaviour_class.instance_variable_set(:@shared_behaviours, nil)
- end
- @behaviour_class
- end
-
- def make_shared_behaviour(name, opts=nil, &block)
- behaviour = behaviour_class.new(name, :shared => true, &block)
- behaviour_class.add_shared_behaviour(behaviour)
- behaviour
- end
-
- def non_shared_behaviour()
- @non_shared_behaviour ||= behaviour_class.new("behaviour") {}
- end
-
- it "should accept an optional options hash" do
- lambda { behaviour_class.new("context") {} }.should_not raise_error(Exception)
- lambda { behaviour_class.new("context", :shared => true) {} }.should_not raise_error(Exception)
- end
-
- it "should return all shared behaviours" do
- b1 = make_shared_behaviour("b1", :shared => true) {}
- b2 = make_shared_behaviour("b2", :shared => true) {}
-
- b1.should_not be(nil)
- b2.should_not be(nil)
-
- behaviour_class.find_shared_behaviour("b1").should equal(b1)
- behaviour_class.find_shared_behaviour("b2").should equal(b2)
- end
-
- it "should be shared when configured as shared" do
- behaviour = make_shared_behaviour("behaviour") {}
- behaviour.should be_shared
- end
-
- it "should not be shared when not configured as shared" do
- non_shared_behaviour.should_not be_shared
- end
-
- it "should raise if run when shared" do
- behaviour = make_shared_behaviour("context") {}
- $example_ran = false
- behaviour.it("test") {$example_ran = true}
- lambda { behaviour.run(@formatter) }.should raise_error
- $example_ran.should be_false
- end
-
- it "should contain examples when shared" do
- shared_behaviour = make_shared_behaviour("shared behaviour") {}
- shared_behaviour.it("shared example") {}
- shared_behaviour.number_of_examples.should == 1
- end
-
- it "should complain when adding a second shared behaviour with the same description" do
- describe "shared behaviour", :shared => true do
- end
- lambda do
- describe "shared behaviour", :shared => true do
- end
- end.should raise_error(ArgumentError)
- end
-
- it "should NOT complain when adding the same shared behaviour instance again" do
- shared_behaviour = behaviour_class.new("shared behaviour", :shared => true) {}
- behaviour_class.add_shared_behaviour(shared_behaviour)
- behaviour_class.add_shared_behaviour(shared_behaviour)
- end
-
- it "should NOT complain when adding the same shared behaviour again (i.e. file gets reloaded)" do
- lambda do
- 2.times do
- describe "shared behaviour which gets loaded twice", :shared => true do
- end
- end
- end.should_not raise_error(ArgumentError)
- end
-
- it "should NOT complain when adding the same shared behaviour in same file with different absolute path" do
- shared_behaviour_1 = behaviour_class.new("shared behaviour", :shared => true) {}
- shared_behaviour_2 = behaviour_class.new("shared behaviour", :shared => true) {}
-
- shared_behaviour_1.description[:spec_path] = "/my/spec/a/../shared.rb"
- shared_behaviour_2.description[:spec_path] = "/my/spec/b/../shared.rb"
-
- behaviour_class.add_shared_behaviour(shared_behaviour_1)
- behaviour_class.add_shared_behaviour(shared_behaviour_2)
- end
-
- it "should complain when adding a different shared behaviour with the same name in a different file with the same basename" do
- shared_behaviour_1 = behaviour_class.new("shared behaviour", :shared => true) {}
- shared_behaviour_2 = behaviour_class.new("shared behaviour", :shared => true) {}
-
- shared_behaviour_1.description[:spec_path] = "/my/spec/a/shared.rb"
- shared_behaviour_2.description[:spec_path] = "/my/spec/b/shared.rb"
-
- behaviour_class.add_shared_behaviour(shared_behaviour_1)
- lambda do
- behaviour_class.add_shared_behaviour(shared_behaviour_2)
- end.should raise_error(ArgumentError, /already exists/)
- end
-
- it "should add examples to current behaviour when calling it_should_behave_like" do
- shared_behaviour = make_shared_behaviour("shared behaviour") {}
- shared_behaviour.it("shared example") {}
- shared_behaviour.it("shared example 2") {}
-
- @behaviour.it("example") {}
- @behaviour.number_of_examples.should == 1
- @behaviour.it_should_behave_like("shared behaviour")
- @behaviour.number_of_examples.should == 3
- end
-
- it "should run shared examples" do
- shared_example_ran = false
- shared_behaviour = make_shared_behaviour("shared behaviour") {}
- shared_behaviour.it("shared example") { shared_example_ran = true }
-
- example_ran = false
-
- @behaviour.it_should_behave_like("shared behaviour")
- @behaviour.it("example") {example_ran = true}
- @behaviour.run(@formatter)
- example_ran.should be_true
- shared_example_ran.should be_true
- end
-
- it "should run setup and teardown from shared behaviour" do
- shared_setup_ran = false
- shared_teardown_ran = false
- shared_behaviour = make_shared_behaviour("shared behaviour") {}
- shared_behaviour.before { shared_setup_ran = true }
- shared_behaviour.after { shared_teardown_ran = true }
- shared_behaviour.it("shared example") { shared_example_ran = true }
-
- example_ran = false
-
- @behaviour.it_should_behave_like("shared behaviour")
- @behaviour.it("example") {example_ran = true}
- @behaviour.run(@formatter)
- example_ran.should be_true
- shared_setup_ran.should be_true
- shared_teardown_ran.should be_true
- end
-
- it "should run before(:all) and after(:all) only once from shared behaviour" do
- shared_before_all_run_count = 0
- shared_after_all_run_count = 0
- shared_behaviour = make_shared_behaviour("shared behaviour") {}
- shared_behaviour.before(:all) { shared_before_all_run_count += 1}
- shared_behaviour.after(:all) { shared_after_all_run_count += 1}
- shared_behaviour.it("shared example") { shared_example_ran = true }
-
- example_ran = false
-
- @behaviour.it_should_behave_like("shared behaviour")
- @behaviour.it("example") {example_ran = true}
- @behaviour.run(@formatter)
- example_ran.should be_true
- shared_before_all_run_count.should == 1
- shared_after_all_run_count.should == 1
- end
-
- it "should include modules, included into shared behaviour, into current behaviour" do
- @formatter.should_receive(:add_behaviour).with(any_args)
- @formatter.should_receive(:example_finished).twice.with(any_args)
-
- shared_behaviour = make_shared_behaviour("shared behaviour") {}
- shared_behaviour.it("shared example") { shared_example_ran = 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
-
- shared_behaviour.include mod2
-
- @behaviour.it_should_behave_like("shared behaviour")
- @behaviour.include mod1
-
- @behaviour.it("test") do
- mod1_method
- mod2_method
- end
- @behaviour.run(@formatter)
- mod1_method_called.should be_true
- mod2_method_called.should be_true
- end
-
- it "should make methods defined in the shared behaviour available in consuming behaviour" do
- shared_behaviour = make_shared_behaviour("shared behaviour xyz") do
- def a_shared_helper_method
- "this got defined in a shared behaviour"
- end
- end
- @behaviour.it_should_behave_like("shared behaviour xyz")
- success = false
- @behaviour.it("should access a_shared_helper_method") do
- a_shared_helper_method
- success = true
- end
- @behaviour.run(@formatter)
- success.should be_true
- end
-
- it "should error if told to inherit from a class" do
- shared_behaviour = make_shared_behaviour("shared behaviour") {}
- shared_behaviour.it("shared example") { shared_example_ran = true }
- lambda { shared_behaviour.inherit Object }.should raise_error(ArgumentError)
- end
-
- it "should raise when named shared behaviour can not be found" do
- begin
- @behaviour.it_should_behave_like("non-existent shared behaviour")
- violated
- rescue => e
- e.message.should == "Shared Behaviour 'non-existent shared behaviour' can not be found"
- end
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/example/configuration_spec.rb b/vendor/gems/rspec/spec/spec/example/configuration_spec.rb
new file mode 100755
index 000000000..5b4a6049e
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/configuration_spec.rb
@@ -0,0 +1,282 @@
+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/gems/rspec/spec/spec/example/example_group_class_definition_spec.rb b/vendor/gems/rspec/spec/spec/example/example_group_class_definition_spec.rb
new file mode 100644
index 000000000..0b00e1397
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/example_group_class_definition_spec.rb
@@ -0,0 +1,48 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+ module Example
+ class ExampleGroupSubclass < ExampleGroup
+ class << self
+ attr_accessor :examples_ran
+ end
+
+ @@klass_variable_set = true
+ CONSTANT = :foobar
+
+ before do
+ @instance_variable = :hello
+ end
+
+ it "should run" do
+ self.class.examples_ran = true
+ end
+
+ it "should have access to instance variables" do
+ @instance_variable.should == :hello
+ end
+
+ it "should have access to class variables" do
+ @@klass_variable_set.should == true
+ end
+
+ it "should have access to constants" do
+ CONSTANT.should == :foobar
+ end
+
+ it "should have access to methods defined in the Example Group" do
+ a_method.should == 22
+ end
+
+ def a_method
+ 22
+ end
+ end
+
+ describe ExampleGroupSubclass do
+ it "should run" do
+ ExampleGroupSubclass.examples_ran.should be_true
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/example/example_group_factory_spec.rb b/vendor/gems/rspec/spec/spec/example/example_group_factory_spec.rb
new file mode 100644
index 000000000..3b50011f7
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/example_group_factory_spec.rb
@@ -0,0 +1,129 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+ module Example
+ describe ExampleGroupFactory, "with :foobar registered as custom type" do
+
+ before do
+ @example_group = Class.new(ExampleGroup)
+ ExampleGroupFactory.register(:foobar, @example_group)
+ end
+
+ after 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
+ end
+
+ it "should #get custom type for :foobar" do
+ ExampleGroupFactory.get(:foobar).should == @example_group
+ end
+
+ it "should #get the actual type when that is passed in" do
+ ExampleGroupFactory.get(@example_group).should == @example_group
+ end
+
+ end
+
+ describe ExampleGroupFactory, "#create_example_group" do
+ it "should create a uniquely named class" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {}
+ example_group.name.should =~ /Spec::Example::ExampleGroup::Subclass_\d+/
+ end
+
+ it "should create a Spec::Example::Example subclass by default" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {}
+ example_group.superclass.should == Spec::Example::ExampleGroup
+ end
+
+ it "should create a Spec::Example::Example when :type => :default" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :type => :default
+ ) {}
+ example_group.superclass.should == Spec::Example::ExampleGroup
+ end
+
+ it "should create a Spec::Example::Example when :type => :default" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :type => :default
+ ) {}
+ example_group.superclass.should == Spec::Example::ExampleGroup
+ end
+
+ it "should create specified type when :type => :something_other_than_default" do
+ klass = Class.new(ExampleGroup) do
+ def initialize(*args, &block); end
+ end
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :type => :something_other_than_default
+ ) {}
+ example_group.superclass.should == klass
+ end
+
+ it "should create a type indicated by :spec_path" do
+ klass = Class.new(ExampleGroup) do
+ def initialize(*args, &block); end
+ end
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :spec_path => "./spec/something_other_than_default/some_spec.rb"
+ ) {}
+ example_group.superclass.should == klass
+ end
+
+ it "should create a type indicated by :spec_path (with spec_path generated by caller on windows)" do
+ klass = Class.new(ExampleGroup) do
+ def initialize(*args, &block); end
+ end
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "example_group", :spec_path => "./spec\\something_other_than_default\\some_spec.rb"
+ ) {}
+ example_group.superclass.should == klass
+ end
+
+ it "should create and register a Spec::Example::Example if :shared => true" do
+ shared_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller, :shared => true
+ ) {}
+ shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
+ SharedExampleGroup.shared_example_groups.should include(shared_example_group)
+ end
+
+ it "should favor the :type over the :spec_path" do
+ klass = Class.new(ExampleGroup) do
+ def initialize(*args, &block); end
+ end
+ Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
+ "name", :spec_path => '/blah/spec/models/blah.rb', :type => :something_other_than_default
+ ) {}
+ example_group.superclass.should == klass
+ end
+
+ 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)
+ end
+
+ it "should enable unregistering of ExampleGroups" do
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
+ unregister
+ end
+ rspec_options.example_groups.should_not include(example_group)
+ end
+
+ after(:each) do
+ Spec::Example::ExampleGroupFactory.reset
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/spec/spec/example/example_group_methods_spec.rb b/vendor/gems/rspec/spec/spec/example/example_group_methods_spec.rb
new file mode 100644
index 000000000..2b6d660fe
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/example_group_methods_spec.rb
@@ -0,0 +1,489 @@
+require File.dirname(__FILE__) + '/../../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"
+ end
+ class << example_group
+ public :include
+ end
+ @result = nil
+ end
+
+ after(:each) do
+ ExampleGroup.reset
+ end
+
+ describe "#describe" do
+ attr_reader :child_example_group
+ before do
+ @child_example_group = @example_group.describe("Another ExampleGroup") do
+ it "should pass" do
+ true.should be_true
+ 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)
+ end
+
+ it "should not inherit examples" do
+ child_example_group.examples.length.should == 1
+ 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
+
+ describe "#xit" do
+ before(:each) do
+ Kernel.stub!(:warn)
+ end
+
+ it "should NOT should create an example instance" do
+ lambda {
+ @example_group.xit("")
+ }.should_not change(@example_group.examples, :length)
+ end
+
+ it "should warn that it is disabled" do
+ Kernel.should_receive(:warn).with("Example disabled: foo")
+ @example_group.xit("foo")
+ end
+ end
+
+ describe "#examples" do
+ it "should have Examples" do
+ example_group = Class.new(ExampleGroup) do
+ describe('example')
+ it "should pass" do
+ 1.should == 1
+ end
+ 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
+ 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
+ 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
+ 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 = 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
+ end
+ def testInvalidCamelCase(foo)
+ 1.should == 1
+ 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
+ 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.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
+ 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
+ end
+ end
+
+ describe "#set_description(String)" do
+ before(:each) do
+ example_group.set_description("abc")
+ end
+
+ specify ".description should return the String passed into .set_description" do
+ example_group.description.should == "abc"
+ end
+
+ specify ".described_type should provide nil as its type" do
+ example_group.described_type.should be_nil
+ end
+ end
+
+ describe "#set_description(Type)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup)
+ 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
+
+ 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)
+ end
+
+ specify ".description should return String then space then Type" do
+ example_group.description.should == "behaving Spec::Example::ExampleGroup"
+ end
+
+ specify ".described_type should return the passed in type" do
+ example_group.described_type.should == Spec::Example::ExampleGroup
+ end
+ end
+
+ describe "#set_description(Type, String not starting with a space)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, "behaving")
+ end
+
+ specify ".description should return the Type then space then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup behaving"
+ end
+ end
+
+ describe "#set_description(Type, String starting with .)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, ".behaving")
+ end
+
+ specify ".description should return the Type then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup.behaving"
+ end
+ end
+
+ describe "#set_description(Type, String containing .)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, "calling a.b")
+ end
+
+ specify ".description should return the Type then space then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup calling a.b"
+ end
+ end
+
+ describe "#set_description(Type, String starting with .)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, ".behaving")
+ end
+
+ specify "should return the Type then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup.behaving"
+ end
+ end
+
+ describe "#set_description(Type, String containing .)" do
+ before(:each) do
+ example_group.set_description(ExampleGroup, "is #1")
+ end
+
+ specify ".description should return the Type then space then String" do
+ example_group.description.should == "Spec::Example::ExampleGroup is #1"
+ end
+ end
+
+ describe "#set_description(String, Type, String)" do
+ before(:each) do
+ example_group.set_description("A", Hash, "with one entry")
+ 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"
+ end
+ end
+
+ describe "#set_description(Hash representing options)" do
+ before(:each) do
+ example_group.set_description(:a => "b", :spec_path => "blah")
+ 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")
+ end
+
+ it ".description_options should return all the options passed in" do
+ example_group.description_options.should == {:a => "b", :spec_path => "blah"}
+ end
+
+ end
+ end
+
+ describe "#description" do
+ it "should return the same description instance for each call" do
+ example_group.description.should eql(example_group.description)
+ 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")
+ 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")
+ 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
+
+ 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
+
+ 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
+
+ it "should return #described_type of superclass when no passed in type" do
+ parent_example_group = Class.new(ExampleGroup) 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
+ 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
+ end
+ end
+
+ describe "#include" do
+ it "should have accessible class methods from included module" do
+ mod1_method_called = false
+ mod1 = Module.new do
+ 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
+ end
+ end
+ end
+
+ mod2_method_called = false
+ mod2 = Module.new do
+ class_methods = Module.new do
+ define_method :mod2_method do
+ mod2_method_called = true
+ end
+ end
+
+ metaclass.class_eval do
+ define_method(:included) do |receiver|
+ receiver.extend class_methods
+ end
+ end
+ 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
+
+ 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
+
+ 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
+ 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)
+
+ 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}")
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/example/example_group_spec.rb b/vendor/gems/rspec/spec/spec/example/example_group_spec.rb
new file mode 100644
index 000000000..93e558a97
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/example_group_spec.rb
@@ -0,0 +1,711 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+ module Example
+ class ExampleModuleScopingSpec < ExampleGroup
+ describe ExampleGroup, "via a class definition"
+
+ module Foo
+ module Bar
+ def self.loaded?
+ true
+ end
+ end
+ end
+ include Foo
+
+ it "should understand module scoping" do
+ Bar.should be_loaded
+ end
+
+ @@foo = 1
+
+ it "should allow class variables to be defined" do
+ @@foo.should == 1
+ end
+ end
+
+ class ExampleClassVariablePollutionSpec < ExampleGroup
+ describe ExampleGroup, "via a class definition without a class variable"
+
+ it "should not retain class variables from other Example classes" do
+ proc do
+ @@foo
+ end.should raise_error
+ end
+ end
+
+ describe ExampleGroup, "#pending" do
+ it "should raise a Pending error when its block fails" do
+ block_ran = false
+ lambda {
+ pending("something") do
+ block_ran = true
+ raise "something wrong with my example"
+ end
+ }.should raise_error(Spec::Example::ExamplePendingError, "something")
+ block_ran.should == true
+ end
+
+ it "should raise Spec::Example::PendingExampleFixedError when its block does not fail" do
+ block_ran = false
+ lambda {
+ pending("something") do
+ block_ran = true
+ end
+ }.should raise_error(Spec::Example::PendingExampleFixedError, "Expected pending 'something' to fail. No Error was raised.")
+ block_ran.should == true
+ end
+ end
+
+ 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
+ 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
+ end
+ 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
+ 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
+ example_group.run
+ end
+ end
+
+ describe ExampleGroup, "#run on dry run" do
+ before do
+ @options.dry_run = true
+ end
+
+ 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
+ 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
+ end
+ end
+
+ describe ExampleGroup, "#run with specified examples" do
+ attr_reader :examples_that_were_run
+ before do
+ @examples_that_were_run = []
+ 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'
+ end
+
+ it("should also be run") do
+ examples_that_were_run << 'should also be run'
+ 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']
+ 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"]
+ 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
+ end
+ options.examples = ["does not match anything"]
+ end
+
+ it "should not run the example" do
+ example_group.run
+ examples_that_were_run.should == []
+ end
+ 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(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"]
+ end
+
+ it "should run only the example, when there in only one" do
+ example_group.run
+ examples_that_were_run.should == ["should be run"]
+ end
+
+ it "should run only the one example" do
+ example_group.run
+ examples_that_were_run.should == ["should be run"] 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
+
+ after do
+ ExampleGroupFactory.reset
+ end
+
+ it "should send reporter add_example_group" do
+ example_group.run
+ reporter.example_groups.should == [example_group]
+ 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 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
+
+ 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 "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
+
+ 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 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
+
+ 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)',
+ ]
+ 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
+
+ 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
+
+ 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
+
+ mod2_method_called = false
+ mod2 = Module.new do
+ define_method :mod2_method do
+ mod2_method_called = true
+ end
+ end
+
+ example_group.include mod1, mod2
+
+ example_group.it("test") do
+ mod1_method
+ mod2_method
+ 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)
+
+ example_group = Class.new(@special_example_group).describe("I'm special", :type => :special) do
+ it "does nothing"
+ 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 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)
+ 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
+ end
+ end
+
+ def teardown_mocks_for_rspec
+ $torn_down = true
+ end
+ end
+
+ begin
+ $included_module = nil
+ $torn_down = true
+ Spec::Runner.configuration.mock_with mod
+
+ example_group = Class.new(ExampleGroup) do
+ describe('example')
+ it "does nothing"
+ end
+ example_group.run
+
+ $included_module.should_not be_nil
+ $torn_down.should == true
+ ensure
+ Spec::Runner.configuration.mock_with :rspec
+ 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}
+ 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
+ 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"
+
+ before do
+ example_group.it("should be pending") do
+ pending("Example passes") {true.should be_true}
+ 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
+ end
+ end
+
+ 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
+
+ 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 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 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")
+ end
+
+ example_group.it("test") {true}
+ example_group.run
+ end
+ end
+
+ 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
+
+ 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
+ end
+ end
+
+ 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
+
+ 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
+ end
+ end
+
+ 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
+
+ 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
+
+ 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
+ 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"
+
+ 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
+ end
+ end
+
+ 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
+ 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"
+
+ before do
+ ExampleGroup.after(:all) { raise NonStandardError, "in after(:all)" }
+ end
+
+ it "should return false" do
+ example_group.run.should be_false
+ 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
+ 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
+ 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
+ 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
+ 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/)
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/spec/spec/dsl/example_matcher_spec.rb b/vendor/gems/rspec/spec/spec/example/example_matcher_spec.rb
index ea2f2a787..ea0dfe019 100644
--- a/vendor/gems/rspec/spec/spec/dsl/example_matcher_spec.rb
+++ b/vendor/gems/rspec/spec/spec/example/example_matcher_spec.rb
@@ -1,7 +1,7 @@
require File.dirname(__FILE__) + '/../../spec_helper.rb'
module Spec
- module DSL
+ module Example
module ExampleMatcherSpecHelper
class MatchDescription
def initialize(description)
@@ -25,32 +25,37 @@ module Spec
end
end
- describe ExampleMatcher do
+ describe ExampleMatcher, "#matches?" do
include ExampleMatcherSpecHelper
- it "should match correct behaviour and example" do
- matcher = ExampleMatcher.new("behaviour", "example")
- matcher.should match_description("behaviour example")
+ it "should match correct example_group and example" do
+ matcher = ExampleMatcher.new("example_group", "example")
+ matcher.should match_description("example_group example")
end
it "should not match wrong example" do
- matcher = ExampleMatcher.new("behaviour", "other example")
- matcher.should_not match_description("behaviour example")
+ matcher = ExampleMatcher.new("example_group", "other example")
+ matcher.should_not match_description("example_group example")
end
- it "should not match wrong behaviour" do
- matcher = ExampleMatcher.new("other behaviour", "example")
- matcher.should_not match_description("behaviour example")
+ it "should not match wrong example_group" do
+ matcher = ExampleMatcher.new("other example_group", "example")
+ matcher.should_not match_description("example_group example")
end
it "should match example only" do
- matcher = ExampleMatcher.new("behaviour", "example")
+ matcher = ExampleMatcher.new("example_group", "example")
matcher.should match_description("example")
end
-
- it "should match behaviour only" do
- matcher = ExampleMatcher.new("behaviour", "example")
- matcher.should match_description("behaviour")
+
+ it "should match example_group only" do
+ matcher = ExampleMatcher.new("example_group", "example")
+ matcher.should match_description("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)")
end
it "should escape regexp chars" do
@@ -58,13 +63,13 @@ module Spec
matcher.should_not match_description("con p")
end
- it "should match when behaviour is modularized" do
+ it "should match when example_group is modularized" do
matcher = ExampleMatcher.new("MyModule::MyClass", "example")
matcher.should match_description("MyClass example")
end
end
- describe ExampleMatcher, "normal case" do
+ describe ExampleMatcher, "#matches? normal case" do
it "matches when passed in example matches" do
matcher = ExampleMatcher.new("Foo", "bar")
matcher.matches?(["no match", "Foo bar"]).should == true
@@ -76,7 +81,7 @@ module Spec
end
end
- describe ExampleMatcher, "where description has '::' in it" do
+ describe ExampleMatcher, "#matches? where description has '::' in it" do
it "matches when passed in example matches" do
matcher = ExampleMatcher.new("Foo::Bar", "baz")
matcher.matches?(["no match", "Foo::Bar baz"]).should == true
diff --git a/vendor/gems/rspec/spec/spec/example/example_methods_spec.rb b/vendor/gems/rspec/spec/spec/example/example_methods_spec.rb
new file mode 100644
index 000000000..c18522808
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/example_methods_spec.rb
@@ -0,0 +1,104 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+ module Example
+ module ModuleThatIsReopened
+ end
+
+ module ExampleMethods
+ include ModuleThatIsReopened
+ end
+
+ module ModuleThatIsReopened
+ def module_that_is_reopened_method
+ end
+ end
+
+ describe ExampleMethods do
+ describe "with an included module that is reopened" do
+ it "should have repoened methods" do
+ method(:module_that_is_reopened_method).should_not be_nil
+ end
+ end
+
+ describe "lifecycle" do
+ before do
+ @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
+ @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
+ 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(:all) do
+ ExampleMethods.count.should == 1
+ end
+
+ ExampleMethods.before(:each) do
+ ExampleMethods.count.should == 2
+ end
+
+ ExampleMethods.after(:each) do
+ ExampleMethods.count.should == 3
+ end
+
+ ExampleMethods.after(:all) do
+ ExampleMethods.count.should == 4
+ end
+
+ @example_group = Class.new(ExampleGroup) do
+ it "should use ExampleMethods callbacks" do
+ end
+ end
+ @example_group.run
+ ExampleMethods.count.should == 5
+ 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
+
+ it "should provide the generated description" do
+ @example.instance_eval { @_matcher_description }.should == "should == 2"
+ end
+
+ it "should clear the global generated_description" do
+ Spec::Matchers.generated_description.should == nil
+ 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
+ end
+ end
+ example = example_group.examples.first
+ example.implementation_backtrace.join("\n").should include("#{__FILE__}:#{__LINE__-4}")
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/example/example_runner_spec.rb b/vendor/gems/rspec/spec/spec/example/example_runner_spec.rb
new file mode 100644
index 000000000..1b5abdf0f
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/example_runner_spec.rb
@@ -0,0 +1,194 @@
+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/gems/rspec/spec/spec/example/example_spec.rb b/vendor/gems/rspec/spec/spec/example/example_spec.rb
new file mode 100644
index 000000000..c8125b447
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/example_spec.rb
@@ -0,0 +1,53 @@
+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/gems/rspec/spec/spec/example/nested_example_group_spec.rb b/vendor/gems/rspec/spec/spec/example/nested_example_group_spec.rb
new file mode 100644
index 000000000..35e8a9890
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/nested_example_group_spec.rb
@@ -0,0 +1,59 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+ module Example
+ describe 'Nested Example Groups' do
+ parent = self
+
+ def count
+ @count ||= 0
+ @count = @count + 1
+ @count
+ end
+
+ before(:all) do
+ count.should == 1
+ end
+
+ before(:all) do
+ count.should == 2
+ end
+
+ before(:each) do
+ count.should == 3
+ end
+
+ before(:each) do
+ count.should == 4
+ end
+
+ it "should run before(:all), before(:each), example, after(:each), after(:all) in order" do
+ count.should == 5
+ end
+
+ after(:each) do
+ count.should == 7
+ end
+
+ after(:each) do
+ count.should == 6
+ end
+
+ after(:all) do
+ count.should == 9
+ end
+
+ after(:all) do
+ count.should == 8
+ end
+
+ describe 'nested example group' do
+ self.superclass.should == parent
+
+ it "should run all before and after callbacks" do
+ count.should == 5
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/spec/spec/example/pending_module_spec.rb b/vendor/gems/rspec/spec/spec/example/pending_module_spec.rb
new file mode 100644
index 000000000..c3ab0126b
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/pending_module_spec.rb
@@ -0,0 +1,31 @@
+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/)
+ 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/)
+ 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/)
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/spec/spec/dsl/predicate_matcher_spec.rb b/vendor/gems/rspec/spec/spec/example/predicate_matcher_spec.rb
index 02cd89399..7c4638b4b 100644..100755
--- a/vendor/gems/rspec/spec/spec/dsl/predicate_matcher_spec.rb
+++ b/vendor/gems/rspec/spec/spec/example/predicate_matcher_spec.rb
@@ -1,7 +1,7 @@
require File.dirname(__FILE__) + '/../../spec_helper'
module Spec
- module DSL
+ module Example
class Fish
def can_swim?(distance_in_yards)
distance_in_yards < 1000
diff --git a/vendor/gems/rspec/spec/spec/example/shared_example_group_spec.rb b/vendor/gems/rspec/spec/spec/example/shared_example_group_spec.rb
new file mode 100644
index 000000000..803536ab5
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/shared_example_group_spec.rb
@@ -0,0 +1,265 @@
+require File.dirname(__FILE__) + '/../../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
+ 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) {}
+
+ b1.should_not be(nil)
+ b2.should_not be(nil)
+
+ SharedExampleGroup.find_shared_example_group("b1").should equal(b1)
+ SharedExampleGroup.find_shared_example_group("b2").should equal(b2)
+ 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 "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 "should complain 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 "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
+
+ 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
+ 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
+
+ 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") {}
+ 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
+
+ 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
+ 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 }
+ 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_example_ran.should be_true
+ end
+
+ 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 }
+ 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_setup_ran.should be_true
+ shared_teardown_ran.should be_true
+ 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 = 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 }
+ 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 include modules, included into shared example_group, into current example_group" do
+ @formatter.should_receive(:add_example_group).with(any_args)
+
+ shared_example_group = make_shared_example_group("shared example_group") do
+ it("shared example") { shared_example_ran = true }
+ end
+
+ 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
+
+ shared_example_group.include mod2
+
+ example_group.it_should_behave_like("shared example_group")
+ example_group.include mod1
+
+ example_group.it("test") do
+ mod1_method
+ mod2_method
+ 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"
+ 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
+ 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")
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/spec/spec/example/subclassing_example_group_spec.rb b/vendor/gems/rspec/spec/spec/example/subclassing_example_group_spec.rb
new file mode 100644
index 000000000..888f2ceb3
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/example/subclassing_example_group_spec.rb
@@ -0,0 +1,25 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+ module Example
+ class GrandParentExampleGroup < Spec::Example::ExampleGroup
+ describe "Grandparent ExampleGroup"
+ end
+
+ class ParentExampleGroup < GrandParentExampleGroup
+ describe "Parent ExampleGroup"
+ it "should bar" do
+ end
+ end
+
+ class ChildExampleGroup < ParentExampleGroup
+ describe "Child ExampleGroup"
+ it "should bam" do
+ end
+ end
+
+ describe ChildExampleGroup do
+
+ end
+ end
+end
diff --git a/vendor/gems/rspec/spec/spec/expectations/differs/default_spec.rb b/vendor/gems/rspec/spec/spec/expectations/differs/default_spec.rb
index ae5551aaf..ea720846b 100644
--- a/vendor/gems/rspec/spec/spec/expectations/differs/default_spec.rb
+++ b/vendor/gems/rspec/spec/spec/expectations/differs/default_spec.rb
@@ -1,5 +1,4 @@
require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-require File.dirname(__FILE__) + '/../../../../lib/spec/expectations/differs/default'
module Spec
module Fixtures
@@ -22,7 +21,8 @@ end
describe "Diff" do
before(:each) do
- @differ = Spec::Expectations::Differs::Default.new
+ @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
+ @differ = Spec::Expectations::Differs::Default.new(@options)
end
it "should output unified diff of two strings" do
@@ -79,7 +79,9 @@ end
describe "Diff in context format" do
before(:each) do
- @differ = Spec::Expectations::Differs::Default.new(:context)
+ @options = Spec::Runner::Options.new(StringIO.new, StringIO.new)
+ @options.diff_format = :context
+ @differ = Spec::Expectations::Differs::Default.new(@options)
end
it "should output unified diff message of two objects" do
diff --git a/vendor/gems/rspec/spec/spec/expectations/extensions/object_spec.rb b/vendor/gems/rspec/spec/spec/expectations/extensions/object_spec.rb
index 587053293..0d9335bdb 100644
--- a/vendor/gems/rspec/spec/spec/expectations/extensions/object_spec.rb
+++ b/vendor/gems/rspec/spec/spec/expectations/extensions/object_spec.rb
@@ -9,8 +9,7 @@ describe Object, "#should" do
end
it "should accept and interact with a matcher" do
- @matcher.should_receive(:matches?).with(@target).and_return(true)
-
+ @matcher.should_receive(:matches?).with(@target).and_return(true)
@target.should @matcher
end
@@ -21,6 +20,37 @@ describe Object, "#should" do
@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
@@ -43,4 +73,35 @@ describe Object, "#should_not" do
@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/gems/rspec/spec/spec/extensions/main_spec.rb b/vendor/gems/rspec/spec/spec/extensions/main_spec.rb
new file mode 100644
index 000000000..aabb616e9
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/extensions/main_spec.rb
@@ -0,0 +1,76 @@
+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/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb
new file mode 100644
index 000000000..d6f5564bf
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_fails.rb
@@ -0,0 +1,10 @@
+rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
+$:.unshift rspec_lib unless $:.include?(rspec_lib)
+require 'test/unit'
+require 'spec'
+
+describe "example group with failures" do
+ it "should fail" do
+ false.should be_true
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb
new file mode 100644
index 000000000..ccd2488bc
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_that_passes.rb
@@ -0,0 +1,10 @@
+rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
+$:.unshift rspec_lib unless $:.include?(rspec_lib)
+require 'test/unit'
+require 'spec'
+
+describe "example group with passing examples" do
+ it "should pass" do
+ true.should be_true
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb
new file mode 100644
index 000000000..71427dbaa
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/spec_with_errors.rb
@@ -0,0 +1,10 @@
+rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
+$:.unshift rspec_lib unless $:.include?(rspec_lib)
+require 'test/unit'
+require 'spec'
+
+describe "example group with errors" do
+ it "should raise errors" do
+ raise "error raised in example group with errors"
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb
new file mode 100644
index 000000000..3fb6515a8
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_fails.rb
@@ -0,0 +1,10 @@
+rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
+$:.unshift rspec_lib unless $:.include?(rspec_lib)
+require 'test/unit'
+require 'spec'
+
+class TestCaseThatFails < Test::Unit::TestCase
+ def test_that_fails
+ false.should be_true
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb
new file mode 100644
index 000000000..69239c0b5
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_that_passes.rb
@@ -0,0 +1,10 @@
+rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
+$:.unshift rspec_lib unless $:.include?(rspec_lib)
+require 'test/unit'
+require 'spec'
+
+class TestCaseThatPasses < Test::Unit::TestCase
+ def test_that_passes
+ true.should be_true
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb
new file mode 100644
index 000000000..35dcb6b2e
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/test_case_with_errors.rb
@@ -0,0 +1,10 @@
+rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
+$:.unshift rspec_lib unless $:.include?(rspec_lib)
+require 'test/unit'
+require 'spec'
+
+class TestCaseWithErrors < Test::Unit::TestCase
+ def test_with_error
+ raise "error raised in TestCaseWithErrors"
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb
new file mode 100644
index 000000000..0c2167a99
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb
@@ -0,0 +1,38 @@
+rspec_lib = File.dirname(__FILE__) + "/../../../../../../lib"
+$:.unshift rspec_lib unless $:.include?(rspec_lib)
+require "test/unit"
+require "spec"
+
+module Test
+ module Unit
+ describe TestSuiteAdapter do
+ def create_adapter(group)
+ TestSuiteAdapter.new(group)
+ end
+
+ describe "#size" do
+ it "should return the number of examples in the example group" do
+ group = Class.new(Spec::ExampleGroup) do
+ describe("some examples")
+ it("bar") {}
+ it("baz") {}
+ end
+ adapter = create_adapter(group)
+ adapter.size.should == 2
+ end
+ end
+
+ describe "#delete" do
+ it "should do nothing" do
+ group = Class.new(Spec::ExampleGroup) do
+ describe("Some Examples")
+ it("does something") {}
+ end
+ adapter = create_adapter(group)
+ adapter.delete(adapter.examples.first)
+ adapter.should be_empty
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/spec_spec.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/spec_spec.rb
new file mode 100644
index 000000000..8a1e1300c
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/spec_spec.rb
@@ -0,0 +1,45 @@
+require File.dirname(__FILE__) + '/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.should include("1 example, 0 failures")
+ end
+
+ it "should return an exit code of 0" do
+ ruby("#{@dir}/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.should include("1 example, 1 failure")
+ end
+
+ it "should return an exit code of 256" do
+ ruby("#{@dir}/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.should include("1 example, 1 failure")
+ end
+
+ it "should return an exit code of 256" do
+ ruby("#{@dir}/spec_with_errors.rb")
+ $?.should == 256
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb
new file mode 100644
index 000000000..04d5d2713
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/test_unit_spec_helper.rb
@@ -0,0 +1,14 @@
+require File.dirname(__FILE__) + '/../../../../spec_helper'
+require File.dirname(__FILE__) + '/../../../../ruby_forker'
+
+module TestUnitSpecHelper
+ include RubyForker
+
+ def run_script(file_name)
+ output = ruby(file_name)
+ if !$?.success? || output.include?("FAILED") || output.include?("Error")
+ raise output
+ end
+ output
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/testcase_spec.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/testcase_spec.rb
new file mode 100644
index 000000000..f40111a58
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/testcase_spec.rb
@@ -0,0 +1,45 @@
+require File.dirname(__FILE__) + '/test_unit_spec_helper'
+
+describe "Test::Unit::TestCase" do
+ include TestUnitSpecHelper
+
+ before(:each) do
+ @dir = File.dirname(__FILE__) + "/resources"
+ end
+
+ describe "with passing test case" do
+ it "should output 0 failures" do
+ output = ruby("#{@dir}/test_case_that_passes.rb")
+ output.should include("1 example, 0 failures")
+ end
+
+ it "should return an exit code of 0" do
+ ruby("#{@dir}/test_case_that_passes.rb")
+ $?.should == 0
+ end
+ end
+
+ describe "with failing test case" do
+ it "should output 1 failure" do
+ output = ruby("#{@dir}/test_case_that_fails.rb")
+ output.should include("1 example, 1 failure")
+ end
+
+ it "should return an exit code of 256" do
+ ruby("#{@dir}/test_case_that_fails.rb")
+ $?.should == 256
+ end
+ end
+
+ describe "with test case that raises an error" do
+ it "should output 1 failure" do
+ output = ruby("#{@dir}/test_case_with_errors.rb")
+ output.should include("1 example, 1 failure")
+ end
+
+ it "should return an exit code of 256" do
+ ruby("#{@dir}/test_case_with_errors.rb")
+ $?.should == 256
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb b/vendor/gems/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb
new file mode 100644
index 000000000..722126bc9
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/interop/test/unit/testsuite_adapter_spec.rb
@@ -0,0 +1,9 @@
+require File.dirname(__FILE__) + '/test_unit_spec_helper'
+
+describe "TestSuiteAdapter" do
+ include TestUnitSpecHelper
+ it "should pass" do
+ dir = File.dirname(__FILE__)
+ run_script "#{dir}/resources/testsuite_adapter_spec_with_test_unit.rb"
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/matchers/be_spec.rb b/vendor/gems/rspec/spec/spec/matchers/be_spec.rb
index 84653873c..d40036c79 100644
--- a/vendor/gems/rspec/spec/spec/matchers/be_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/be_spec.rb
@@ -199,6 +199,21 @@ describe "should be ===" do
end
end
+describe "should be" do
+ it "should pass if actual is true or a set value" do
+ true.should be
+ 1.should be
+ end
+
+ it "should fail if actual is false" do
+ lambda {false.should be}.should fail_with("expected if to be satisfied, 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")
+ end
+end
+
describe "should be(value)" do
it "should pass if actual.equal?(value)" do
5.should be(5)
diff --git a/vendor/gems/rspec/spec/spec/matchers/change_spec.rb b/vendor/gems/rspec/spec/spec/matchers/change_spec.rb
index 70e55328e..d95aa6da4 100644
--- a/vendor/gems/rspec/spec/spec/matchers/change_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/change_spec.rb
@@ -133,6 +133,93 @@ describe "should change{ block }.by(expected)" do
end
end
+describe "should change(actual, message).by_at_least(expected)" do
+ before(:each) do
+ @instance = SomethingExpected.new
+ @instance.some_value = 5
+ 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)
+ 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)
+ 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")
+ end
+
+end
+
+describe "should change{ block }.by_at_least(expected)" do
+ before(:each) do
+ @instance = SomethingExpected.new
+ @instance.some_value = 5
+ 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)
+ 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)
+ 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")
+ end
+end
+
+
+describe "should change(actual, message).by_at_most(expected)" do
+ before(:each) do
+ @instance = SomethingExpected.new
+ @instance.some_value = 5
+ 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)
+ 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)
+ 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")
+ end
+
+end
+
+describe "should change{ block }.by_at_most(expected)" do
+ before(:each) do
+ @instance = SomethingExpected.new
+ @instance.some_value = 5
+ 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)
+ 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)
+ 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")
+ end
+end
+
describe "should change(actual, message).from(old)" do
before(:each) do
@instance = SomethingExpected.new
diff --git a/vendor/gems/rspec/spec/spec/matchers/description_generation_spec.rb b/vendor/gems/rspec/spec/spec/matchers/description_generation_spec.rb
index d1246ad04..c494e2165 100644
--- a/vendor/gems/rspec/spec/spec/matchers/description_generation_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/description_generation_spec.rb
@@ -1,148 +1,146 @@
require File.dirname(__FILE__) + '/../../spec_helper.rb'
describe "Matchers should be able to generate their own descriptions" do
- before(:each) do
- @desc = nil
- @callback = lambda { |desc| @desc = desc }
- Spec::Matchers.description_generated(@callback)
+ after(:each) do
+ Spec::Matchers.clear_generated_description
end
-
+
it "should == expected" do
"this".should == "this"
- @desc.should == "should == \"this\""
+ Spec::Matchers.generated_description.should == "should == \"this\""
end
it "should not == expected" do
"this".should_not == "that"
- @desc.should == "should not == \"that\""
+ Spec::Matchers.generated_description.should == "should not == \"that\""
end
it "should be empty (arbitrary predicate)" do
[].should be_empty
- @desc.should == "should be empty"
+ Spec::Matchers.generated_description.should == "should be empty"
end
it "should not be empty (arbitrary predicate)" do
[1].should_not be_empty
- @desc.should == "should not be empty"
+ Spec::Matchers.generated_description.should == "should not be empty"
end
it "should be true" do
true.should be_true
- @desc.should == "should be true"
+ Spec::Matchers.generated_description.should == "should be true"
end
it "should be false" do
false.should be_false
- @desc.should == "should be false"
+ Spec::Matchers.generated_description.should == "should be false"
end
it "should be nil" do
nil.should be_nil
- @desc.should == "should be nil"
+ Spec::Matchers.generated_description.should == "should be nil"
end
it "should be > n" do
5.should be > 3
- @desc.should == "should be > 3"
+ Spec::Matchers.generated_description.should == "should be > 3"
end
it "should be predicate arg1, arg2 and arg3" do
5.0.should be_between(0,10)
- @desc.should == "should be between 0 and 10"
+ 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)
- @desc.should == "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)
- @desc.should == "should be a kind of Fixnum"
+ Spec::Matchers.generated_description.should == "should be a kind of Fixnum"
5.should be_an_instance_of(Fixnum)
- @desc.should == "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)
- @desc.should == "should equal \"expected\""
+ Spec::Matchers.generated_description.should == "should equal \"expected\""
end
it "should_not equal" do
5.should_not equal(37)
- @desc.should == "should not equal 37"
+ Spec::Matchers.generated_description.should == "should not equal 37"
end
it "should eql" do
"string".should eql("string")
- @desc.should == "should eql \"string\""
+ Spec::Matchers.generated_description.should == "should eql \"string\""
end
it "should not eql" do
"a".should_not eql(:a)
- @desc.should == "should not eql :a"
+ Spec::Matchers.generated_description.should == "should not eql :a"
end
it "should have_key" do
{:a => "a"}.should have_key(:a)
- @desc.should == "should have key :a"
+ Spec::Matchers.generated_description.should == "should have key :a"
end
it "should have n items" do
team.should have(3).players
- @desc.should == "should have 3 players"
+ Spec::Matchers.generated_description.should == "should have 3 players"
end
it "should have at least n items" do
team.should have_at_least(2).players
- @desc.should == "should have at least 2 players"
+ Spec::Matchers.generated_description.should == "should have at least 2 players"
end
it "should have at most n items" do
team.should have_at_most(4).players
- @desc.should == "should have at most 4 players"
+ Spec::Matchers.generated_description.should == "should have at most 4 players"
end
it "should include" do
[1,2,3].should include(3)
- @desc.should == "should include 3"
+ Spec::Matchers.generated_description.should == "should include 3"
end
it "should match" do
"this string".should match(/this string/)
- @desc.should == "should match /this string/"
+ Spec::Matchers.generated_description.should == "should match /this string/"
end
it "should raise_error" do
lambda { raise }.should raise_error
- @desc.should == "should raise Exception"
+ Spec::Matchers.generated_description.should == "should raise Exception"
end
it "should raise_error with type" do
lambda { raise }.should raise_error(RuntimeError)
- @desc.should == "should raise RuntimeError"
+ Spec::Matchers.generated_description.should == "should raise RuntimeError"
end
it "should raise_error with type and message" do
lambda { raise "there was an error" }.should raise_error(RuntimeError, "there was an error")
- @desc.should == "should raise RuntimeError with \"there was an error\""
+ Spec::Matchers.generated_description.should == "should raise RuntimeError with \"there was an error\""
end
it "should respond_to" do
[].should respond_to(:insert)
- @desc.should == "should respond to #insert"
+ Spec::Matchers.generated_description.should == "should respond to #insert"
end
it "should throw symbol" do
lambda { throw :what_a_mess }.should throw_symbol
- @desc.should == "should throw a Symbol"
+ Spec::Matchers.generated_description.should == "should throw a Symbol"
end
it "should throw symbol (with named symbol)" do
lambda { throw :what_a_mess }.should throw_symbol(:what_a_mess)
- @desc.should == "should throw :what_a_mess"
+ Spec::Matchers.generated_description.should == "should throw :what_a_mess"
end
def team
@@ -152,8 +150,4 @@ describe "Matchers should be able to generate their own descriptions" do
end
end.new
end
-
- after(:each) do
- Spec::Matchers.unregister_description_generated(@callback)
- end
end
diff --git a/vendor/gems/rspec/spec/spec/matchers/exist_spec.rb b/vendor/gems/rspec/spec/spec/matchers/exist_spec.rb
index fcbdd9556..0a509726e 100644
--- a/vendor/gems/rspec/spec/spec/matchers/exist_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/exist_spec.rb
@@ -1,8 +1,5 @@
require File.dirname(__FILE__) + '/../../spec_helper.rb'
-# NOTE - this was initially handled by an explicit matcher, but is now
-# handled by a default set of predicate_matchers.
-
class Substance
def initialize exists, description
@exists = exists
@@ -16,33 +13,45 @@ class Substance
end
end
-describe "should exist" do
- before(:each) do
- @real = Substance.new true, 'something real'
- @imaginary = Substance.new false, 'something imaginary'
+class SubstanceTester
+ include Spec::Matchers
+ def initialize substance
+ @substance = substance
end
-
- it "should pass if target exists" do
- @real.should exist
- end
-
- it "should fail if target does not exist" do
- lambda { @imaginary.should exist }.
- should fail
+ def should_exist
+ @substance.should exist
end
end
-describe "should_not exist" do
+describe "should exist," do
+
before(:each) do
@real = Substance.new true, 'something real'
@imaginary = Substance.new false, 'something imaginary'
end
- it "should pass if target doesn't exist" do
- @imaginary.should_not exist
+
+ describe "within an example group" do
+
+ it "should pass if target exists" do
+ @real.should exist
+ end
+
+ it "should fail if target does not exist" do
+ lambda { @imaginary.should exist }.should fail
+ end
+
+ it "should pass if target doesn't exist" do
+ lambda { @real.should_not exist }.should fail
+ end
end
- it "should fail if target does exist" do
- lambda { @real.should_not exist }.
- should fail
+
+ describe "outside of an example group" do
+
+ it "should pass if target exists" do
+ real_tester = SubstanceTester.new @real
+ real_tester.should_exist
+ end
+
end
+
end
-
diff --git a/vendor/gems/rspec/spec/spec/matchers/handler_spec.rb b/vendor/gems/rspec/spec/spec/matchers/handler_spec.rb
index 9f04c6bed..ad4fe6f85 100644
--- a/vendor/gems/rspec/spec/spec/matchers/handler_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/handler_spec.rb
@@ -33,7 +33,7 @@ module ExampleExpectations
end
class PositiveOnlyMatcher < ArbitraryMatcher
- undef negative_failure_message
+ undef negative_failure_message rescue nil
end
def arbitrary_matcher(*args, &block)
@@ -55,6 +55,47 @@ module Spec
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
diff --git a/vendor/gems/rspec/spec/spec/matchers/have_spec.rb b/vendor/gems/rspec/spec/spec/matchers/have_spec.rb
index 84a75d98e..27083c294 100644
--- a/vendor/gems/rspec/spec/spec/matchers/have_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/have_spec.rb
@@ -47,6 +47,25 @@ describe "should have(n).items" do
end
end
+describe 'should have(1).item when Inflector is defined' do
+ include HaveSpecHelper
+
+ before do
+ unless Object.const_defined?(:Inflector)
+ class Inflector
+ def self.pluralize(string)
+ string.to_s + 's'
+ end
+ end
+ end
+ end
+
+ it 'should pluralize the collection name' do
+ owner = create_collection_owner_with(1)
+ owner.should have(1).item
+ end
+end
+
describe "should have(n).items where result responds to items but returns something other than a collection" do
it "should provide a meaningful error" do
owner = Class.new do
@@ -250,7 +269,7 @@ describe "have(n).items where target IS a collection" do
[1,2,3].should have(3).items
end
- it "should reference the number of items IN the collection" do
+ it "should fail when the number of items IN the collection is not as expected" do
lambda { [1,2,3].should have(7).items }.should fail_with("expected 7 items, got 3")
end
end
diff --git a/vendor/gems/rspec/spec/spec/matchers/match_spec.rb b/vendor/gems/rspec/spec/spec/matchers/match_spec.rb
index b8aa06b07..f69f7efad 100644
--- a/vendor/gems/rspec/spec/spec/matchers/match_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/match_spec.rb
@@ -5,12 +5,12 @@ describe "should match(expected)" do
"string".should match(/tri/)
end
- it "should fail when target (String) matches expected (Regexp)" do
+ it "should fail when target (String) does not match expected (Regexp)" 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")
@@ -19,7 +19,7 @@ describe "should match(expected)" do
end
describe "should_not match(expected)" do
- it "should pass when target (String) matches expected (Regexp)" do
+ it "should pass when target (String) matches does not match (Regexp)" do
"string".should_not match(/rings/)
end
diff --git a/vendor/gems/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb b/vendor/gems/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb
index bde48686a..1292918c7 100644
--- a/vendor/gems/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/mock_constraint_matchers_spec.rb
@@ -19,6 +19,6 @@ describe "The boolean() mock argument constraint matcher" do
end
describe "The an_instance_of() mock argument constraint matcher" do
- # NOTE - this is implemented as a predicate_matcher - see behaviour.rb
+ # 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/gems/rspec/spec/spec/matchers/operator_matcher_spec.rb b/vendor/gems/rspec/spec/spec/matchers/operator_matcher_spec.rb
index eaadc8fc8..1985df0d9 100644
--- a/vendor/gems/rspec/spec/spec/matchers/operator_matcher_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/operator_matcher_spec.rb
@@ -48,7 +48,7 @@ describe "should ===" do
Spec::Expectations.should_receive(:fail_with).with(%[expected: "orange",\n got: "apple" (using ===)], "orange", "apple")
subject.should === "orange"
end
-
+
end
describe "should_not ===" do
diff --git a/vendor/gems/rspec/spec/spec/matchers/raise_error_spec.rb b/vendor/gems/rspec/spec/spec/matchers/raise_error_spec.rb
index f33fba903..7cabf81e8 100644
--- a/vendor/gems/rspec/spec/spec/matchers/raise_error_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/raise_error_spec.rb
@@ -73,11 +73,17 @@ describe "should raise_error(NamedError)" do
}.should fail_with("expected NameError but nothing was raised")
end
- it "should fail if another error is raised" do
+ it "should fail if another error is raised (NameError)" do
lambda {
lambda { raise }.should raise_error(NameError)
}.should fail_with("expected NameError, got RuntimeError")
end
+
+ it "should fail if another error is raised (NameError)" do
+ lambda {
+ lambda { load "non/existent/file" }.should raise_error(NameError)
+ }.should fail_with(/expected NameError, got #<LoadError/)
+ end
end
describe "should_not raise_error(NamedError)" do
diff --git a/vendor/gems/rspec/spec/spec/matchers/simple_matcher_spec.rb b/vendor/gems/rspec/spec/spec/matchers/simple_matcher_spec.rb
new file mode 100644
index 000000000..b731af92d
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/matchers/simple_matcher_spec.rb
@@ -0,0 +1,31 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+module Spec
+ module Matchers
+ describe SimpleMatcher do
+ it "should match pass match arg to block" do
+ actual = nil
+ matcher = simple_matcher("message") do |given| actual = given end
+ matcher.matches?("foo")
+ actual.should == "foo"
+ end
+
+ it "should provide a stock failure message" do
+ matcher = simple_matcher("thing") do end
+ matcher.matches?("other")
+ matcher.failure_message.should =~ /expected \"thing\" but got \"other\"/
+ end
+
+ it "should provide a stock negative failure message" do
+ matcher = simple_matcher("thing") do end
+ matcher.matches?("other")
+ matcher.negative_failure_message.should =~ /expected not to get \"thing\", but got \"other\"/
+ end
+
+ it "should provide a description" do
+ matcher = simple_matcher("thing") do end
+ matcher.description.should =="thing"
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/matchers/throw_symbol_spec.rb b/vendor/gems/rspec/spec/spec/matchers/throw_symbol_spec.rb
index 1548ec6f0..74595659a 100644
--- a/vendor/gems/rspec/spec/spec/matchers/throw_symbol_spec.rb
+++ b/vendor/gems/rspec/spec/spec/matchers/throw_symbol_spec.rb
@@ -27,7 +27,7 @@ module Spec
it "should match if correct Symbol is thrown" do
@matcher.matches?(lambda{ throw :sym }).should be_true
end
- it "should not match no Symbol is thrown" do
+ 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
@@ -46,6 +46,9 @@ module Spec
@matcher.matches?(lambda{ throw :sym })
@matcher.negative_failure_message.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
end
end
diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_10263.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_10263.rb
new file mode 100644
index 000000000..e32192257
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_10263.rb
@@ -0,0 +1,24 @@
+describe "Mock" do
+ before do
+ @mock = mock("test mock")
+ end
+
+ specify "when one example has an expectation (non-mock) inside the block passed to the mock" do
+ @mock.should_receive(:msg) do |b|
+ b.should be_true #this call exposes the problem
+ end
+ @mock.msg(false) rescue nil
+ end
+
+ specify "then the next example should behave as expected instead of saying" do
+ @mock.should_receive(:foobar)
+ @mock.foobar
+ @mock.rspec_verify
+ begin
+ @mock.foobar
+ rescue Exception => e
+ e.message.should == "Mock 'test mock' received unexpected message :foobar with (no args)"
+ end
+ end
+end
+
diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_15719_spec.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_15719_spec.rb
new file mode 100644
index 000000000..82d49ea97
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_15719_spec.rb
@@ -0,0 +1,30 @@
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
+
+module Spec
+ module Mocks
+ describe "mock failure" do
+
+ it "should tell you when it receives the right message with the wrong args" do
+ m = mock("foo")
+ 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")})
+ m.bar("message") # allows the spec to pass
+ end
+
+ it "should tell you when it receives the right message with the wrong args if you stub the method" do
+ pending("fix bug 15719")
+ # NOTE - for whatever reason, if you use a the block style of pending here,
+ # rcov gets unhappy. Don't know why yet.
+ m = mock("foo")
+ m.stub!(:bar)
+ 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")})
+ m.bar("message") # allows the spec to pass
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/mocks/bug_report_8165_spec.rb b/vendor/gems/rspec/spec/spec/mocks/bug_report_8165_spec.rb
index 785546dca..7edc3c076 100644
--- a/vendor/gems/rspec/spec/spec/mocks/bug_report_8165_spec.rb
+++ b/vendor/gems/rspec/spec/spec/mocks/bug_report_8165_spec.rb
@@ -12,7 +12,7 @@ describe "An object where respond_to? is true and does not have method" do
# The fix was to keep track of whether :respond_to? had been proxied and, if
# so, call the munged copy of :respond_to? on the object.
- it "should not raise an exception" do
+ it "should not raise an exception for Object" do
obj = Object.new
obj.should_receive(:respond_to?).with(:foobar).and_return(true)
obj.should_receive(:foobar).and_return(:baz)
@@ -20,7 +20,7 @@ describe "An object where respond_to? is true and does not have method" do
obj.foobar.should == :baz
end
- it "should not raise an exception" do
+ it "should not raise an exception for mock" do
obj = mock("obj")
obj.should_receive(:respond_to?).with(:foobar).and_return(true)
obj.should_receive(:foobar).and_return(:baz)
diff --git a/vendor/gems/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb b/vendor/gems/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb
index f3c396283..db6dcea34 100644
--- a/vendor/gems/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb
+++ b/vendor/gems/rspec/spec/spec/mocks/failing_mock_argument_constraints_spec.rb
@@ -81,6 +81,7 @@ module Spec
before(:each) do
@mock = mock("test mock")
@reporter = Mock.new("reporter", :null_object => true)
+ Kernel.stub!(:warn)
end
after(:each) do
diff --git a/vendor/gems/rspec/spec/spec/mocks/mock_spec.rb b/vendor/gems/rspec/spec/spec/mocks/mock_spec.rb
index bfe36ed57..85a71e327 100644
--- a/vendor/gems/rspec/spec/spec/mocks/mock_spec.rb
+++ b/vendor/gems/rspec/spec/spec/mocks/mock_spec.rb
@@ -2,107 +2,96 @@ require File.dirname(__FILE__) + '/../../spec_helper'
module Spec
module Mocks
- describe "a Mock expectation" do
+ describe Mock do
- before do
+ before(:each) do
@mock = mock("test mock")
end
- after do
+ after(:each) do
@mock.rspec_reset
end
it "should report line number of expectation of unreceived message" do
- @mock.should_receive(:wont_happen).with("x", 3)
- #NOTE - this test is quite ticklish because it specifies that
- #the above statement appears on line 12 of this file.
-
+ expected_error_line = __LINE__; @mock.should_receive(:wont_happen).with("x", 3)
begin
@mock.rspec_verify
violated
rescue MockExpectationError => e
- e.backtrace[0].should match(/mock_spec\.rb:16/)
+ # 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)
@mock.not_expected
- begin
+ lambda {
@mock.rspec_verify
violated
- rescue MockExpectationError => e
- e.message.should == "Mock 'test mock' expected :not_expected with (any args) 0 times, but received it once"
- end
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (any 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")
@mock.not_expected("unexpected text")
- begin
+ lambda {
@mock.rspec_verify
violated
- rescue MockExpectationError => e
- e.message.should == "Mock 'test mock' expected :not_expected with (\"unexpected text\") 0 times, but received it once"
- end
+ }.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 dont match when method called" do
@mock.should_receive(:something).with("a","b","c").and_return("booh")
- begin
+ lambda {
@mock.something("a","d","c")
violated
- rescue MockExpectationError => e
- e.message.should == "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")"
- end
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (\"a\", \"b\", \"c\") but received it with (\"a\", \"d\", \"c\")")
end
-
+
it "should fail if unexpected method called" do
- begin
+ lambda {
@mock.something("a","b","c")
violated
- rescue MockExpectationError => e
- e.message.should == "Mock 'test mock' received unexpected message :something with (\"a\", \"b\", \"c\")"
- end
+ }.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"
@@ -112,71 +101,74 @@ 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}
- begin
+ lambda {
@mock.something false
- rescue MockExpectationError => e
- e.message.should match(/Mock 'test mock' received :something but passed block failed with: expected true, got false/)
- end
+ }.should raise_error(MockExpectationError, /Mock 'test mock' received :something but passed block failed with: expected true, got false/)
end
-
- it "should fail when method defined as never is received" do
+
+ it "should fail right away when method defined as never is received" do
+ pending "Used to pass (false positive). Which one is wrong, the spec or the actual behavior?"
+
@mock.should_receive(:not_expected).never
- begin
+ lambda {
@mock.not_expected
- rescue MockExpectationError => e
- e.message.should == "Mock 'test mock' expected :not_expected 0 times, but received it 1 times"
- end
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected 0 times, but received it 1 times")
end
+ it "should eventually fail when method defined as never is received" do
+ @mock.should_receive(:not_expected).never
+ @mock.not_expected
+
+ lambda {
+ @mock.rspec_verify
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :not_expected with (any 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)
- begin
+ lambda {
@mock.something
- rescue RuntimeError => e
- e.message.should eql("error message")
- end
+ }.should raise_error(RuntimeError, "error message")
end
-
+
it "should raise RuntimeError with passed message" do
@mock.should_receive(:something).and_raise("error message")
- begin
+ lambda {
@mock.something
- rescue RuntimeError => e
- e.message.should eql("error message")
- end
+ }.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 do
+ lambda {
@mock.something 1
- end.should raise_error(MockExpectationError)
+ }.should raise_error(MockExpectationError)
end
-
+
it "should throw when told to" do
@mock.should_receive(:something).and_throw(:blech)
- lambda do
+ lambda {
@mock.something
- end.should throw_symbol(:blech)
+ }.should throw_symbol(:blech)
end
-
+
it "should raise when explicit return and block constrained" do
- lambda do
+ lambda {
@mock.should_receive(:fruit) do |colour|
:strawberry
end.and_return :apple
- end.should raise_error(AmbiguousReturnError)
+ }.should raise_error(AmbiguousReturnError)
end
it "should ignore args on any args" do
@@ -190,22 +182,18 @@ module Spec
it "should fail on no args if any args received" do
@mock.should_receive(:something).with(no_args())
- begin
+ lambda {
@mock.something 1
- rescue MockExpectationError => e
- e.message.should == "Mock 'test mock' expected :something with (no args) but received it with (1)"
- end
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (no args) but received it with (1)")
end
-
+
it "should fail when args are expected but none are received" do
@mock.should_receive(:something).with(1)
- begin
+ lambda {
@mock.something
- rescue MockExpectationError => e
- e.message.should == "Mock 'test mock' expected :something with (1) but received it with (no args)"
- end
+ }.should raise_error(MockExpectationError, "Mock 'test mock' expected :something with (1) but received it with (no args)")
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
@@ -213,7 +201,17 @@ module Spec
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
+ a = nil
+ b = []
+ @mock.yield_back {|*a| b << a}
+ 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
@@ -221,7 +219,18 @@ module Spec
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).
+ and_yield("something fruity")
+ a = nil
+ b = []
+ @mock.yield_back {|*a| b << a}
+ 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
@@ -230,6 +239,17 @@ module Spec
@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).
+ and_yield("stop", 12, :red)
+ a = nil
+ b = []
+ @mock.yield_back {|*a| b << a}
+ 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
@@ -237,7 +257,18 @@ module Spec
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).
+ and_yield("something fruity")
+ a = nil
+ b = []
+ @mock.yield_back {|a| b << a}
+ 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
@@ -246,23 +277,41 @@ module Spec
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').
+ and_yield(14, 65)
+ a, b = nil
+ c = []
+ @mock.yield_back {|a,b| c << [a, b]}
+ 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')
- begin
+ lambda {
@mock.yield_back {|a|}
- rescue MockExpectationError => e
- e.message.should == "Mock 'test mock' yielded |\"wha\", \"zup\"| to block with arity of 1"
- end
+ }.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').
+ and_yield(14, 65)
+ lambda {
+ 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")
+ end
+
it "should fail when calling yielding method without block" do
@mock.should_receive(:yield_back).with(no_args()).once.and_yield('wha', 'zup')
- begin
+ lambda {
@mock.yield_back
- rescue MockExpectationError => e
- e.message.should == "Mock 'test mock' asked to yield |\"wha\", \"zup\"| but no block was passed"
- end
+ }.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
@@ -274,26 +323,23 @@ module Spec
it "should be able to raise from method calling yielding mock" do
@mock.should_receive(:yield_me).and_yield 44
- lambda do
+ lambda {
@mock.yield_me do |x|
raise "Bang"
end
- end.should raise_error(StandardError)
-
+ }.should raise_error(StandardError, "Bang")
+
@mock.rspec_verify
end
- # TODO - this is failing, but not if you run the file w/ --reverse - weird!!!!!!
- # specify "should clear expectations after verify" do
- # @mock.should_receive(:foobar)
- # @mock.foobar
- # @mock.rspec_verify
- # begin
- # @mock.foobar
- # rescue MockExpectationError => e
- # e.message.should == "Mock 'test mock' received unexpected message :foobar with (no args)"
- # end
- # 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)")
+ end
it "should restore objects to their original state on rspec_reset" do
mock = mock("this is a mock")
@@ -302,6 +348,58 @@ module Spec
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:
+ # * 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:
+ # * 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)
+ @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 temporarily replace a method stub on a non-mock" do
+ non_mock = Object.new
+ non_mock.stub!(:msg).and_return(:stub_value)
+ non_mock.should_receive(:msg).with(:arg).and_return(:mock_value)
+ non_mock.msg(:arg).should equal(:mock_value)
+ non_mock.msg.should equal(:stub_value)
+ non_mock.msg.should equal(:stub_value)
+ non_mock.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
diff --git a/vendor/gems/rspec/spec/spec/mocks/multiple_return_value_spec.rb b/vendor/gems/rspec/spec/spec/mocks/multiple_return_value_spec.rb
index 6e082abba..3e26b73f4 100644
--- a/vendor/gems/rspec/spec/spec/mocks/multiple_return_value_spec.rb
+++ b/vendor/gems/rspec/spec/spec/mocks/multiple_return_value_spec.rb
@@ -67,7 +67,7 @@ module Spec
describe "a Mock expectation with multiple return values specifying at_least less than the number of values" do
before(:each) do
@mock = Mock.new("mock")
- @mock.should_receive(:message).at_least(:twice).with(:no_args).and_return(11, 22)
+ @mock.should_receive(:message).at_least(:twice).with(no_args).and_return(11, 22)
end
it "should use last return value for subsequent calls" do
diff --git a/vendor/gems/rspec/spec/spec/mocks/options_hash_spec.rb b/vendor/gems/rspec/spec/spec/mocks/options_hash_spec.rb
index a1ec9ddf4..0bfab26d7 100644
--- a/vendor/gems/rspec/spec/spec/mocks/options_hash_spec.rb
+++ b/vendor/gems/rspec/spec/spec/mocks/options_hash_spec.rb
@@ -3,30 +3,42 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
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
- spec = Spec::DSL::Example.new "spec" do
+ example_definition = example_group.it "spec" do
mock = Spec::Mocks::Mock.new("a mock")
mock.should_receive(:message, :expected_from => "/path/to/blah.ext:37")
mock.rspec_verify
end
- reporter = mock("reporter", :null_object => true)
+ 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
- spec.run(reporter, nil, nil, nil, Object.new)
+ example.execute(options, {})
end
it "should use the message supplied with :message" do
- spec = Spec::DSL::Example.new "spec" 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
- reporter = mock("reporter", :null_object => true)
- reporter.should_receive(:example_finished) do |spec, error|
+ example = @example_group.new(example_definition)
+ @reporter.should_receive(:example_finished) do |spec, error|
error.message.should == "recebi nada"
end
- spec.run(reporter, nil, nil, nil, Object.new)
+ example.execute(@options, {})
end
end
end
diff --git a/vendor/gems/rspec/spec/spec/mocks/partial_mock_spec.rb b/vendor/gems/rspec/spec/spec/mocks/partial_mock_spec.rb
index c45b9054c..d7e5944c4 100644
--- a/vendor/gems/rspec/spec/spec/mocks/partial_mock_spec.rb
+++ b/vendor/gems/rspec/spec/spec/mocks/partial_mock_spec.rb
@@ -6,14 +6,14 @@ module Spec
before(:each) do
@object = Object.new
end
-
+
it "should name the class in the failure message" do
@object.should_receive(:foo)
lambda do
@object.rspec_verify
end.should raise_error(Spec::Mocks::MockExpectationError, /Object/)
end
-
+
it "should not conflict with @options in the object" do
@object.instance_eval { @options = Object.new }
@object.should_receive(:blah)
@@ -27,39 +27,39 @@ module Spec
@object.rspec_verify
end.should raise_error(Spec::Mocks::MockExpectationError)
end
-
+
it "should_not_receive should return a negative message expectation" do
@object.should_not_receive(:foobar).should be_kind_of(NegativeMessageExpectation)
end
-
+
it "should_receive should mock out the method" do
@object.should_receive(:foobar).with(:test_param).and_return(1)
@object.foobar(:test_param).should equal(1)
end
-
+
it "should_receive should handle a hash" do
@object.should_receive(:foobar).with(:key => "value").and_return(1)
@object.foobar(:key => "value").should equal(1)
end
-
+
it "should_receive should handle an inner hash" do
hash = {:a => {:key => "value"}}
@object.should_receive(:foobar).with(:key => "value").and_return(1)
@object.foobar(hash[:a]).should equal(1)
end
-
+
it "should_receive should return a message expectation" do
@object.should_receive(:foobar).should be_kind_of(MessageExpectation)
@object.foobar
end
-
+
it "should_receive should verify method was called" do
@object.should_receive(:foobar).with(:test_param).and_return(1)
lambda do
@object.rspec_verify
end.should raise_error(Spec::Mocks::MockExpectationError)
end
-
+
it "should_receive should also take a String argument" do
@object.should_receive('foobar')
@object.foobar
@@ -80,5 +80,27 @@ module Spec
end.should raise_error(Spec::Mocks::MockExpectationError, /NilClass.*expected :foobar with/)
end
end
+
+ describe "Partially mocking an object that defines ==, after another mock has been defined" do
+ before(:each) do
+ stub("existing mock", :foo => :foo)
+ end
+
+ class PartiallyMockedEquals
+ attr_reader :val
+ def initialize(val)
+ @val = val
+ end
+
+ def ==(other)
+ @val == other.val
+ end
+ end
+
+ it "should not raise an error when stubbing the object" do
+ o = PartiallyMockedEquals.new :foo
+ lambda { o.stub!(:bar) }.should_not raise_error(NoMethodError)
+ end
+ end
end
end
diff --git a/vendor/gems/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb b/vendor/gems/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb
index 2d631bde5..6de0a58f4 100644
--- a/vendor/gems/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb
+++ b/vendor/gems/rspec/spec/spec/mocks/passing_mock_argument_constraints_spec.rb
@@ -5,6 +5,7 @@ module Spec
describe "mock argument constraints", :shared => true do
before(:each) do
@mock = Mock.new("test mock")
+ Kernel.stub!(:warn)
end
after(:each) do
@@ -49,6 +50,11 @@ module Spec
@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
diff --git a/vendor/gems/rspec/spec/spec/mocks/stub_spec.rb b/vendor/gems/rspec/spec/spec/mocks/stub_spec.rb
index dc6fff89b..d6e23d71e 100644
--- a/vendor/gems/rspec/spec/spec/mocks/stub_spec.rb
+++ b/vendor/gems/rspec/spec/spec/mocks/stub_spec.rb
@@ -13,112 +13,74 @@ module Spec
:original_value
end
end
- @obj = @class.new
+ @instance = @class.new
end
- it "should allow for a mock expectation to temporarily replace a method stub on a mock" do
- mock = Spec::Mocks::Mock.new("a mock")
- mock.stub!(:msg).and_return(:stub_value)
- mock.should_receive(:msg).with(:arg).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 allow for a mock expectation to temporarily replace a method stub on a non-mock" do
- @obj.stub!(:msg).and_return(:stub_value)
- @obj.should_receive(:msg).with(:arg).and_return(:mock_value)
- @obj.msg(:arg).should equal(:mock_value)
- @obj.msg.should equal(:stub_value)
- @obj.msg.should equal(:stub_value)
- @obj.rspec_verify
+ 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
end
- it "should ignore when expected message is not received" do
- @obj.stub!(:msg)
+ it "should ignore when expected message is received" do
+ @instance.stub!(:msg)
+ @instance.msg
lambda do
- @obj.rspec_verify
+ @instance.rspec_verify
end.should_not raise_error
end
-
- it "should clear itself on rspec_verify" do
- @obj.stub!(:this_should_go).and_return(:blah)
- @obj.this_should_go.should == :blah
- @obj.rspec_verify
- lambda do
- @obj.this_should_go
- end.should raise_error
- end
-
- it "should ignore when expected message is received" do
- @obj.stub!(:msg)
- @obj.msg
- @obj.rspec_verify
- end
it "should ignore when message is received with args" do
- @obj.stub!(:msg)
- @obj.msg(:an_arg)
- @obj.rspec_verify
+ @instance.stub!(:msg)
+ @instance.msg(:an_arg)
+ lambda do
+ @instance.rspec_verify
+ end.should_not raise_error
end
- it "should not support with" do
+ it "should ignore when expected message is not received" do
+ @instance.stub!(:msg)
lambda do
- Spec::Mocks::Mock.new("a mock").stub!(:msg).with(:arg)
- end.should raise_error(NoMethodError)
+ @instance.rspec_verify
+ end.should_not raise_error
end
- it "should return expected value when expected message is received" do
- @obj.stub!(:msg).and_return(:return_value)
- @obj.msg.should equal(:return_value)
- @obj.rspec_verify
+ it "should clear itself when verified" do
+ @instance.stub!(:this_should_go).and_return(:blah)
+ @instance.this_should_go.should == :blah
+ @instance.rspec_verify
+ lambda do
+ @instance.this_should_go
+ end.should raise_error(NameError)
end
it "should return values in order to consecutive calls" do
return_values = ["1",2,Object.new]
- @obj.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
- @obj.msg.should == return_values[0]
- @obj.msg.should == return_values[1]
- @obj.msg.should == return_values[2]
+ @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
+ @instance.msg.should == return_values[0]
+ @instance.msg.should == return_values[1]
+ @instance.msg.should == return_values[2]
end
it "should keep returning last value in consecutive calls" do
return_values = ["1",2,Object.new]
- @obj.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
- @obj.msg.should == return_values[0]
- @obj.msg.should == return_values[1]
- @obj.msg.should == return_values[2]
- @obj.msg.should == return_values[2]
- @obj.msg.should == return_values[2]
- end
-
- it "should revert to original instance method if existed" do
- @obj.existing_instance_method.should equal(:original_value)
- @obj.stub!(:existing_instance_method).and_return(:mock_value)
- @obj.existing_instance_method.should equal(:mock_value)
- @obj.rspec_verify
- # TODO JRUBY: This causes JRuby to fail with:
- # NativeException in 'Stub should revert to original instance method if existed'
- # java.lang.ArrayIndexOutOfBoundsException: 0
- # org.jruby.internal.runtime.methods.IterateCallable.internalCall(IterateCallable.java:63)
- # org.jruby.internal.runtime.methods.AbstractCallable.call(AbstractCallable.java:64)
- # org.jruby.runtime.ThreadContext.yieldInternal(ThreadContext.java:574)
- # org.jruby.runtime.ThreadContext.yieldSpecificBlock(ThreadContext.java:549)
- # org.jruby.runtime.Block.call(Block.java:158)
- # org.jruby.RubyProc.call(RubyProc.java:118)
- # org.jruby.internal.runtime.methods.ProcMethod.internalCall(ProcMethod.java:69)
- # org.jruby.internal.runtime.methods.AbstractMethod.call(AbstractMethod.java:58)
- # org.jruby.RubyObject.callMethod(RubyObject.java:379)
- # org.jruby.RubyObject.callMethod(RubyObject.java:331)
- # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:472)
- # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:462)
- # org.jruby.evaluator.EvaluationState.evalInternal(EvaluationState.java:390)
- # org.jruby.evaluator.EvaluationState.eval(EvaluationState.java:133)
- @obj.existing_instance_method.should equal(:original_value)
+ @instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
+ @instance.msg.should == return_values[0]
+ @instance.msg.should == return_values[1]
+ @instance.msg.should == return_values[2]
+ @instance.msg.should == return_values[2]
+ @instance.msg.should == return_values[2]
+ end
+
+ it "should revert to original instance method if there is one" do
+ @instance.existing_instance_method.should equal(:original_value)
+ @instance.stub!(:existing_instance_method).and_return(:mock_value)
+ @instance.existing_instance_method.should equal(:mock_value)
+ @instance.rspec_verify
+ @instance.existing_instance_method.should equal(:original_value)
end
- it "should revert to original class method if existed" do
+ 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)
@class.existing_class_method.should equal(:mock_value)
@@ -126,34 +88,94 @@ module Spec
@class.existing_class_method.should equal(:original_value)
end
- it "should clear itself on rspec_verify" do
- @obj.stub!(:this_should_go).and_return(:blah)
- @obj.this_should_go.should == :blah
- @obj.rspec_verify
- lambda do
- @obj.this_should_go
- end.should raise_error
+ it "should yield a specified object" do
+ @instance.stub!(:method_that_yields).and_yield(:yielded_obj)
+ current_value = :value_before
+ @instance.method_that_yields {|val| current_value = val}
+ current_value.should == :yielded_obj
+ @instance.rspec_verify
+ end
+
+ it "should yield multiple times with multiple calls to and_yield" do
+ @instance.stub!(:method_that_yields_multiple_times).and_yield(:yielded_value).
+ and_yield(:another_value)
+ current_value = []
+ @instance.method_that_yields_multiple_times {|val| current_value << val}
+ current_value.should == [:yielded_value, :another_value]
+ @instance.rspec_verify
end
- it "should support yielding" do
- @obj.stub!(:method_that_yields).and_yield(:yielded_value)
- current_value = :value_before
- @obj.method_that_yields {|val| current_value = val}
- current_value.should == :yielded_value
- @obj.rspec_verify
+ it "should yield a specified object and return another specified object" do
+ yielded_obj = mock("my mock")
+ yielded_obj.should_receive(:foo).with(:bar)
+ @instance.stub!(:method_that_yields_and_returns).and_yield(yielded_obj).and_return(:baz)
+ @instance.method_that_yields_and_returns { |o| o.foo :bar }.should == :baz
end
it "should throw when told to" do
- @mock.stub!(:something).and_throw(:blech)
+ @mock.stub!(:something).and_throw(:up)
lambda do
@mock.something
- end.should throw_symbol(:blech)
+ end.should throw_symbol(:up)
end
- it "should support overriding w/ a new stub" do
+ 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
+ end
+
+ describe "A method stub with args" do
+ before(:each) do
+ @stub = Object.new
+ @stub.stub!(:foo).with("bar")
+ end
+
+ it "should not complain if not called" do
+ end
+
+ it "should not complain if called with arg" do
+ @stub.foo("bar")
+ end
+
+ it "should complain if called with no arg" do
+ lambda do
+ @stub.foo
+ end.should raise_error
+ end
+
+ it "should complain if called with other arg" do
+ lambda do
+ @stub.foo("other")
+ end.should raise_error
+ end
+
+ it "should not complain if also mocked w/ different args" do
+ @stub.should_receive(:foo).with("baz")
+ @stub.foo("bar")
+ @stub.foo("baz")
+ end
+
+ it "should complain if also mocked w/ different args AND called w/ a 3rd set of args" do
+ @stub.should_receive(:foo).with("baz")
+ @stub.foo("bar")
+ @stub.foo("baz")
+ lambda do
+ @stub.foo("other")
+ end.should raise_error
+ end
+
+ it "should support options" do
+ @stub.stub!(:foo, :expected_from => "bar")
+ end
end
+
end
end
diff --git a/vendor/gems/rspec/spec/spec/package/bin_spec_spec.rb b/vendor/gems/rspec/spec/spec/package/bin_spec_spec.rb
index 6eac5e8cb..44bfd96a0 100644
--- a/vendor/gems/rspec/spec/spec/package/bin_spec_spec.rb
+++ b/vendor/gems/rspec/spec/spec/package/bin_spec_spec.rb
@@ -1,12 +1,14 @@
-require "#{File.dirname(__FILE__)}/../../spec_helper"
+require File.dirname(__FILE__) + '/../../spec_helper'
+require File.dirname(__FILE__) + '/../../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 = nil
- IO.popen("ruby -w #{spec_path} --help 2>&1") do |io|
- output = io.read
- end
+
+ output = ruby "-w #{spec_path} --help 2>&1"
output.should_not =~ /warning/n
end
end
diff --git a/vendor/gems/rspec/spec/spec/runner/behaviour_runner_spec.rb b/vendor/gems/rspec/spec/spec/runner/behaviour_runner_spec.rb
deleted file mode 100644
index ff4890633..000000000
--- a/vendor/gems/rspec/spec/spec/runner/behaviour_runner_spec.rb
+++ /dev/null
@@ -1,229 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module Runner
- describe BehaviourRunner, "#add_behaviour affecting passed in behaviour" do
- before do
- @err = StringIO.new('')
- @out = StringIO.new('')
- @options = Options.new(@err,@out)
- @runner = BehaviourRunner.new(@options)
- class << @runner
- attr_reader :behaviours
- end
-
- @behaviour = ::Spec::DSL::Behaviour.new("A Behaviour") do
- it "runs 1" do
- end
- it "runs 2" do
- end
- end
- end
-
- it "removes examples not selected from Behaviour when options.examples is set" do
- @options.examples << "A Behaviour runs 1"
-
- @behaviour.number_of_examples.should == 2
-
- @runner.add_behaviour @behaviour
- @behaviour.number_of_examples.should == 1
- @behaviour.examples.first.send(:description).should == "runs 1"
- end
-
- it "keeps all examples when options.examples is nil" do
- @options.examples = nil
- @behaviour.number_of_examples.should == 2
-
- @runner.add_behaviour @behaviour
- @behaviour.number_of_examples.should == 2
- @behaviour.examples.collect {|example| example.send(:description) }.should == ['runs 1', 'runs 2']
- end
-
- it "keeps all examples when options.examples is empty" do
- @options.examples = []
- @behaviour.number_of_examples.should == 2
-
- @runner.add_behaviour @behaviour
- @behaviour.number_of_examples.should == 2
- @behaviour.examples.collect {|example| example.send(:description) }.should == ['runs 1', 'runs 2']
- end
- end
-
- describe BehaviourRunner, "#add_behaviour affecting behaviours" do
- before do
- @err = StringIO.new('')
- @out = StringIO.new('')
- @options = Options.new(@err,@out)
- @runner = BehaviourRunner.new(@options)
- class << @runner
- attr_reader :behaviours
- end
- end
-
- it "adds behaviour when behaviour has examples and is not shared" do
- @behaviour = ::Spec::DSL::Behaviour.new("A Behaviour") do
- it "uses this behaviour" do
- end
- end
-
- @behaviour.should_not be_shared
- @behaviour.number_of_examples.should be > 0
- @runner.add_behaviour @behaviour
-
- @runner.behaviours.length.should == 1
- end
-
- it "does not add the behaviour when number_of_examples is 0" do
- @behaviour = ::Spec::DSL::Behaviour.new("A Behaviour") do
- end
- @behaviour.number_of_examples.should == 0
- @runner.add_behaviour @behaviour
-
- @runner.behaviours.should be_empty
- end
-
- it "does not add the behaviour when behaviour is shared" do
- @behaviour = ::Spec::DSL::Behaviour.new("A Behaviour", :shared => true) do
- it "does not use this behaviour" do
- end
- end
- @behaviour.should be_shared
- @runner.add_behaviour @behaviour
-
- @runner.behaviours.should be_empty
- end
- end
-
- describe BehaviourRunner do
- before do
- @err = StringIO.new('')
- @out = StringIO.new('')
- @options = Options.new(@err,@out)
- end
-
- it "should only run behaviours with at least one example" do
- desired_behaviour = mock("desired behaviour")
- desired_behaviour.should_receive(:run)
- desired_behaviour.should_receive(:retain_examples_matching!)
- desired_behaviour.should_receive(:number_of_examples).twice.and_return(1)
- desired_behaviour.should_receive(:shared?).and_return(false)
- desired_behaviour.should_receive(:set_sequence_numbers).with(0, anything)
-
- other_behaviour = mock("other behaviour")
- other_behaviour.should_receive(:run).never
- other_behaviour.should_receive(:retain_examples_matching!)
- other_behaviour.should_receive(:number_of_examples).and_return(0)
-
- reporter = mock("reporter")
- @options.reporter = reporter
- @options.examples = ["desired behaviour legal spec"]
-
- runner = Spec::Runner::BehaviourRunner.new(@options)
- runner.add_behaviour(desired_behaviour)
- runner.add_behaviour(other_behaviour)
- reporter.should_receive(:start)
- reporter.should_receive(:end)
- reporter.should_receive(:dump)
- runner.run([], false)
- end
-
- it "should dump even if Interrupt exception is occurred" do
- behaviour = Spec::DSL::Behaviour.new("behaviour") do
- it "no error" do
- end
-
- it "should interrupt" do
- raise Interrupt
- end
- end
-
- reporter = mock("reporter")
- reporter.should_receive(:start)
- reporter.should_receive(:add_behaviour)
- reporter.should_receive(:example_started).twice
- reporter.should_receive(:example_finished).twice
- reporter.should_receive(:rspec_verify)
- reporter.should_receive(:rspec_reset)
- reporter.should_receive(:end)
- reporter.should_receive(:dump)
-
- @options.reporter = reporter
- runner = Spec::Runner::BehaviourRunner.new(@options)
- runner.add_behaviour(behaviour)
- runner.run([], false)
- end
-
- it "should heckle when options have heckle_runner" do
- behaviour = mock("behaviour", :null_object => true)
- behaviour.should_receive(:number_of_examples).twice.and_return(1)
- behaviour.should_receive(:run).and_return(0)
- behaviour.should_receive(:shared?).and_return(false)
-
- reporter = mock("reporter")
- reporter.should_receive(:start).with(1)
- reporter.should_receive(:end)
- reporter.should_receive(:dump).and_return(0)
-
- heckle_runner = mock("heckle_runner")
- heckle_runner.should_receive(:heckle_with)
-
- @options.reporter = reporter
- @options.heckle_runner = heckle_runner
-
- runner = Spec::Runner::BehaviourRunner.new(@options)
- runner.add_behaviour(behaviour)
- runner.run([], false)
- end
-
- it "should run examples backwards if options.reverse is true" do
- @options.reverse = true
-
- reporter = mock("reporter")
- reporter.should_receive(:start).with(3)
- reporter.should_receive(:end)
- reporter.should_receive(:dump).and_return(0)
- @options.reporter = reporter
-
- runner = Spec::Runner::BehaviourRunner.new(@options)
- b1 = mock("b1")
- b1.should_receive(:number_of_examples).twice.and_return(1)
- b1.should_receive(:shared?).and_return(false)
- b1.should_receive(:set_sequence_numbers).with(12, true).and_return(18)
-
- b2 = mock("b2")
- b2.should_receive(:number_of_examples).twice.and_return(2)
- b2.should_receive(:shared?).and_return(false)
- b2.should_receive(:set_sequence_numbers).with(0, true).and_return(12)
- b2.should_receive(:run) do
- b1.should_receive(:run)
- end
-
- runner.add_behaviour(b1)
- runner.add_behaviour(b2)
-
- runner.run([], false)
- end
-
- it "should yield global configuration" do
- Spec::Runner.configure do |config|
- config.should equal(Spec::Runner.configuration)
- end
- end
-
- it "should pass its Description to the reporter" do
- behaviour = Spec::DSL::Behaviour.new("behaviour") do
- it "should" do
- end
- end
-
- reporter = mock("reporter", :null_object => true)
- reporter.should_receive(:add_behaviour).with(an_instance_of(Spec::DSL::Description))
-
- @options.reporter = reporter
- runner = Spec::Runner::BehaviourRunner.new(@options)
- runner.add_behaviour(behaviour)
- runner.run([], false)
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/class_and_argument_parser_spec.rb b/vendor/gems/rspec/spec/spec/runner/class_and_argument_parser_spec.rb
new file mode 100644
index 000000000..b4e9e7f53
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/class_and_argument_parser_spec.rb
@@ -0,0 +1,23 @@
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
+
+module Spec
+ module Runner
+ describe ClassAndArgumentsParser, ".parse" do
+
+ it "should use a single : to separate class names from arguments" do
+ ClassAndArgumentsParser.parse('Foo').should == ['Foo', nil]
+ ClassAndArgumentsParser.parse('Foo:arg').should == ['Foo', 'arg']
+ ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg').should == ['Foo::Bar::Zap', 'arg']
+ ClassAndArgumentsParser.parse('Foo:arg1,arg2').should == ['Foo', 'arg1,arg2']
+ ClassAndArgumentsParser.parse('Foo::Bar::Zap:arg1,arg2').should == ['Foo::Bar::Zap', 'arg1,arg2']
+ ClassAndArgumentsParser.parse('Foo::Bar::Zap:drb://foo,drb://bar').should == ['Foo::Bar::Zap', 'drb://foo,drb://bar']
+ end
+
+ it "should raise an error when passed an empty string" do
+ lambda do
+ ClassAndArgumentsParser.parse('')
+ end.should raise_error("Couldn't parse \"\"")
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/spec/spec/runner/command_line_spec.rb b/vendor/gems/rspec/spec/spec/runner/command_line_spec.rb
index d78626399..3c3be8cea 100644
--- a/vendor/gems/rspec/spec/spec/runner/command_line_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/command_line_spec.rb
@@ -1,33 +1,147 @@
require File.dirname(__FILE__) + '/../../spec_helper.rb'
-describe "CommandLine" do
- it "should run directory" do
- file = File.dirname(__FILE__) + '/../../../examples'
- err = StringIO.new
- out = StringIO.new
- Spec::Runner::CommandLine.run([file], err, out, false, true)
-
- out.rewind
- out.read.should =~ /78 examples, 0 failures, 3 pending/n
- end
+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 file" do
- file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb'
- err = StringIO.new
- out = StringIO.new
- Spec::Runner::CommandLine.run([file], err, out, false, true)
-
- out.rewind
- out.read.should =~ /2 examples, 1 failure/n
- end
+ it "should run directory" do
+ file = File.dirname(__FILE__) + '/../../../examples/pure'
+ Spec::Runner::CommandLine.run(OptionParser.parse([file,"-p","**/*.rb"], @err, @out))
+
+ @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))
+
+ @out.rewind
+ @out.read.should =~ /2 examples, 1 failure/n
+ end
+
+ 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
+
+ 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 interrupt" do
+ raise Interrupt, "I'm interrupting"
+ 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)
+
+ 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
+ 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
+
+ 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)
+
+ 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
+
+ b1 = Class.new(Spec::Example::ExampleGroup)
+ b2 = Class.new(Spec::Example::ExampleGroup)
+
+ b2.should_receive(:run).ordered
+ b1.should_receive(:run).ordered
+
+ options.add_example_group(b1)
+ options.add_example_group(b2)
+
+ 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
+ end
+ end
+ 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::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
+ end
+
+ options.reporter.should_receive(:add_example_group).with(example_group)
+
+ options.add_example_group example_group
+ Spec::Runner::CommandLine.run(OptionParser.parse([], @err, @out))
- it "should raise when file does not exist" do
- file = File.dirname(__FILE__) + '/doesntexist'
- err = StringIO.new
- out = StringIO.new
+ should_has_run.should be_true
+ should_not_has_run.should be_false
+ end
- lambda {
- Spec::Runner::CommandLine.run([file], err, out, false, true)
- }.should raise_error
+ 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
+ end
+ end
end
-end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/runner/context_matching_spec.rb b/vendor/gems/rspec/spec/spec/runner/context_matching_spec.rb
deleted file mode 100644
index ad8017b64..000000000
--- a/vendor/gems/rspec/spec/spec/runner/context_matching_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module DSL
- describe Behaviour do
-
- before(:each) do
- @formatter = Spec::Mocks::Mock.new("formatter")
- @behaviour = Behaviour.new("behaviour") {}
- end
-
- it "should retain examples that don't match" do
- @behaviour.it("example1") {}
- @behaviour.it("example2") {}
- @behaviour.retain_examples_matching!(["behaviour"])
- @behaviour.number_of_examples.should == 2
- end
-
- it "should remove examples that match" do
- @behaviour.it("example1") {}
- @behaviour.it("example2") {}
- @behaviour.retain_examples_matching!(["behaviour example1"])
- @behaviour.number_of_examples.should == 1
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/drb_command_line_spec.rb b/vendor/gems/rspec/spec/spec/runner/drb_command_line_spec.rb
index d2d68499d..760ec37a9 100644
--- a/vendor/gems/rspec/spec/spec/runner/drb_command_line_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/drb_command_line_spec.rb
@@ -3,82 +3,90 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
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(['--version'], err, out, false)
-
+ DrbCommandLine.run(OptionParser.parse(['--version'], err, out))
+
err.rewind
err.read.should =~ /No server is running/
end
end
end
- describe DrbCommandLine, "with local server" do
+ class DrbCommandLineSpec < ::Spec::Example::ExampleGroup
+ describe DrbCommandLine, "with local server"
- unless Config::CONFIG['ruby_install_name'] == 'jruby'
+ 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", Spec::Runner::CommandLine)
- $drb_example_file_counter = 0
+ DRb.start_service("druby://localhost:8989", CommandLineForSpec)
+ @@drb_example_file_counter = 0
end
-
+
before(:each) do
create_dummy_spec_file
- $drb_example_file_counter = $drb_example_file_counter + 1
+ @@drb_example_file_counter = @@drb_example_file_counter + 1
end
-
+
after(:each) do
File.delete(@dummy_spec_filename)
end
-
+
after(:all) do
- DRb.stop_service
+ DRb.stop_service
end
it "should run against local server" do
out = run_spec_via_druby(['--version'])
out.should =~ /RSpec/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
+
+ 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"
+ @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
+ 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!")
- end
- end
- }
+ it "should be output with red bar" do
+ violated("I want to see a red bar!")
+ end
+ end
+ }
end
end
-
- def run_spec_via_druby(args)
+
+ def run_spec_via_druby(argv)
err, out = StringIO.new, StringIO.new
out.instance_eval do
def tty?; true end
end
- Spec::Runner::DrbCommandLine.run(args, err, out, false, true)
+ options = ::Spec::Runner::Options.new(err, out)
+ options.argv = argv
+ Spec::Runner::DrbCommandLine.run(options)
out.rewind; out.read
end
end
-
+
end
end
end
diff --git a/vendor/gems/rspec/spec/spec/runner/empty_file.txt b/vendor/gems/rspec/spec/spec/runner/empty_file.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/empty_file.txt
diff --git a/vendor/gems/rspec/spec/spec/runner/examples.txt b/vendor/gems/rspec/spec/spec/runner/examples.txt
new file mode 100644
index 000000000..2fcbd355d
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/examples.txt
@@ -0,0 +1,2 @@
+Sir, if you were my husband, I would poison your drink.
+Madam, if you were my wife, I would drink it. \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/runner/extensions/bug_report_10577_spec.rb b/vendor/gems/rspec/spec/spec/runner/extensions/bug_report_10577_spec.rb
deleted file mode 100644
index c4da69f4d..000000000
--- a/vendor/gems/rspec/spec/spec/runner/extensions/bug_report_10577_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-require 'delegate'
-
-module Bug10577
- class OCI8
- def describe(name)
- "Hello, #{name}"
- end
-
- def something(name)
- "Something, #{name}"
- end
- end
-
- class OCI8AutoRecover < DelegateClass(OCI8)
- def initialize
- @connection = OCI8.new
- super(@connection)
- end
- end
-
- class OCI8AutoRecover
- def describe(name)
- @connection.describe(name)
- end
- end
-
- describe Kernel do
- it "should not mask a delegate class' describe method" do
- bugger = OCI8AutoRecover.new
- bugger.describe('aslak').should == "Hello, aslak"
- bugger.something('aslak').should == "Something, aslak"
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/extensions/kernel_spec.rb b/vendor/gems/rspec/spec/spec/runner/extensions/kernel_spec.rb
deleted file mode 100644
index 6b253a06a..000000000
--- a/vendor/gems/rspec/spec/spec/runner/extensions/kernel_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-describe Kernel, "when extended by rspec" do
- it "should respond to :describe" do
- Object.new.should respond_to(:describe)
- Object.new.should respond_to(:context)
- end
-end
-
-describe Kernel, " when creating behaviours with describe" do
-
- it "should fail when no block given" do
- lambda { describe "foo" }.should raise_error(ArgumentError)
- end
-
- it "should fail when no description given" do
- lambda { describe do; end }.should raise_error(ArgumentError)
- end
-end
-
-describe Kernel, "#respond_to" do
- before(:each) do
- @kernel_impersonator = Class.new do
- include Kernel
- end.new
- end
-
- it "should return a Spec::Matchers::RespondTo" do
- @kernel_impersonator.respond_to.should be_an_instance_of(Spec::Matchers::RespondTo)
- end
-
- it "should pass the submitted names to the RespondTo instance" do
- Spec::Matchers::RespondTo.should_receive(:new).with(:a,'b','c?')
- @kernel_impersonator.respond_to(:a,'b','c?')
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/failed.txt b/vendor/gems/rspec/spec/spec/runner/failed.txt
new file mode 100644
index 000000000..07c5442cf
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/failed.txt
@@ -0,0 +1,3 @@
+heckler_spec.rb
+command_line_spec.rb
+reporter_spec.rb \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb
deleted file mode 100644
index de3246c54..000000000
--- a/vendor/gems/rspec/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-module Spec
- module Runner
- module Formatter
- describe "FailingBehavioursFormatter" do
- before(:each) do
- @io = StringIO.new
- @formatter = FailingBehavioursFormatter.new(@io)
- end
-
- def description(s)
- Spec::DSL::Description.new(s)
- end
-
- it "should add example name for each failure" do
- @formatter.add_behaviour(description("b 1"))
- @formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new))
- @formatter.add_behaviour(description("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))
- @io.string.should eql(<<-EOF
-b 1
-b 2
-EOF
-)
- end
-
- it "should remove druby url, which is used by Spec::Distributed" do
- @formatter.add_behaviour("something something (druby://99.99.99.99:99)")
- @formatter.example_failed("e 1", nil, Reporter::Failure.new(nil, RuntimeError.new))
- @io.string.should eql(<<-EOF
-something something
-EOF
-)
- end
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
new file mode 100644
index 000000000..a08b6e86d
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb
@@ -0,0 +1,44 @@
+require File.dirname(__FILE__) + '/../../../spec_helper'
+require 'spec/runner/formatter/failing_example_groups_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ describe FailingExampleGroupsFormatter do
+ attr_reader :example_group, :formatter, :io
+
+ before(:each) do
+ @io = StringIO.new
+ options = mock('options')
+ @formatter = FailingExampleGroupsFormatter.new(options, io)
+ @example_group = Class.new(::Spec::Example::ExampleGroup)
+ 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))
+ io.string.should == "b 1\nb 2\n"
+ end
+
+ it "should delimit ExampleGroup superclass descriptions with :" do
+ parent_example_group = Class.new(example_group).describe("Parent")
+ 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))
+ 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))
+ io.string.should == "something something\n"
+ end
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb
index 396e4b16e..fda64f95f 100644
--- a/vendor/gems/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/failing_examples_formatter_spec.rb
@@ -1,24 +1,29 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require File.dirname(__FILE__) + '/../../../spec_helper'
+require 'spec/runner/formatter/failing_examples_formatter'
module Spec
module Runner
module Formatter
- describe "FailingExamplesFormatter" do
+ describe FailingExamplesFormatter do
before(:each) do
@io = StringIO.new
- @formatter = FailingExamplesFormatter.new(@io)
+ options = mock('options')
+ @formatter = FailingExamplesFormatter.new(options, @io)
end
it "should add example name for each failure" do
- @formatter.add_behaviour("b 1")
- @formatter.example_failed(DSL::Example.new("e 1"), nil, Reporter::Failure.new(nil, RuntimeError.new))
- @formatter.add_behaviour("b 2")
- @formatter.example_failed(DSL::Example.new("e 2"), nil, Reporter::Failure.new(nil, RuntimeError.new))
- @formatter.example_failed(DSL::Example.new("e 3"), nil, Reporter::Failure.new(nil, RuntimeError.new))
+ example_group_1 = Class.new(ExampleGroup).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))
@io.string.should eql(<<-EOF
-b 1 e 1
-b 2 e 2
-b 2 e 3
+A a1
+A B b2
+A B b3
EOF
)
end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html
new file mode 100644
index 000000000..9cc458fdb
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.4.html
@@ -0,0 +1,365 @@
+<?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/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html
new file mode 100644
index 000000000..8bf1ed9cd
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html
@@ -0,0 +1,387 @@
+<?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/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html
new file mode 100644
index 000000000..cda7226bf
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.5.html
@@ -0,0 +1,371 @@
+<?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/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
new file mode 100644
index 000000000..466621865
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html
@@ -0,0 +1,381 @@
+<?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:
+/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>
+ </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>
+ </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>
+ </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:
+/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>
+ </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:
+/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>
+ <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>/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>
+ <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/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html
new file mode 100644
index 000000000..511495bcd
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatted-1.8.6.html
@@ -0,0 +1,365 @@
+<?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:18:
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:</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:18:
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:</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:18:
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:</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>
+
+ <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>
+
+ <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/mocking_example.rb:33:
+./spec/spec/runner/formatter/html_formatter_spec.rb:18:
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:</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/gems/rspec/spec/spec/runner/formatter/html_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatter_spec.rb
index fad3aed1a..5ba39f0e9 100644
--- a/vendor/gems/rspec/spec/spec/runner/formatter/html_formatter_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/html_formatter_spec.rb
@@ -1,56 +1,66 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-describe "HtmlFormatter" do
- ['--diff', '--dry-run'].each do |opt|
- it "should produce HTML identical to the one we designed manually with #{opt}" do
- root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
- suffix = PLATFORM == 'java' ? '-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)
- raise "There should be no absolute paths in html_formatted.html!!" if (expected_html =~ /\/Users/n || expected_html =~ /\/home/n)
-
- Dir.chdir(root) do
- args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/stubbing_example.rb', 'examples/pending_example.rb', '--format', 'html', opt]
- err = StringIO.new
- out = StringIO.new
- Spec::Runner::CommandLine.run(
- args,
- err,
- out,
- false
- )
-
- 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
+require File.dirname(__FILE__) + '/../../../spec_helper'
+require 'hpricot' # 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)
+ unless jruby?
+ raise "There should be no absolute paths in html_formatted.html!!" if (expected_html =~ /\/Users/n || expected_html =~ /\/home/n)
+ end
+
+ 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
+ end
end
- else
- html.should =~ /This was a dry-run/m
end
end
end
end
-
end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb
new file mode 100644
index 000000000..981805411
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/profile_formatter_spec.rb
@@ -0,0 +1,65 @@
+require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require 'spec/runner/formatter/profile_formatter'
+
+module Spec
+ module Runner
+ module Formatter
+ describe ProfileFormatter do
+ attr_reader :io, :formatter
+ before(:each) do
+ @io = StringIO.new
+ options = mock('options')
+ options.stub!(:colour).and_return(true)
+ @formatter = ProfileFormatter.new(options, io)
+ end
+
+ it "should print a heading" do
+ formatter.start(0)
+ io.string.should eql("Profiling enabled.\n")
+ end
+
+ it "should record the current time when starting a new example" do
+ now = Time.now
+ Time.stub!(:now).and_return(now)
+ formatter.example_started('should foo')
+ formatter.instance_variable_get("@time").should == now
+ end
+
+ 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')
+ child_example_group = Class.new(parent_example_group).describe('Child')
+
+ formatter.add_example_group(child_example_group)
+
+ formatter.example_started('when foo')
+ Time.stub!(:now).and_return(now+1)
+ formatter.example_passed(stub('foo', :description => 'i like ice cream'))
+
+ formatter.start_dump
+ io.string.should include('Parent Child')
+ end
+
+ it "should sort the results in descending order" do
+ formatter.instance_variable_set("@example_times", [['a', 'a', 0.1], ['b', 'b', 0.3], ['c', 'c', 0.2]])
+ formatter.start_dump
+ formatter.instance_variable_get("@example_times").should == [ ['b', 'b', 0.3], ['c', 'c', 0.2], ['a', 'a', 0.1]]
+ end
+
+ it "should print the top 10 results" do
+ example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup")
+ formatter.add_example_group(example_group)
+ formatter.instance_variable_set("@time", Time.now)
+
+ 15.times do
+ formatter.example_passed(stub('foo', :description => 'i like ice cream'))
+ end
+
+ io.should_receive(:print).exactly(10)
+ formatter.start_dump
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb
deleted file mode 100644
index 170fc441a..000000000
--- a/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-module Spec
- module Runner
- module Formatter
- describe ProgressBarFormatter, "dry run" do
- before(:each) do
- @io = StringIO.new
- @formatter = ProgressBarFormatter.new(@io)
- @formatter.dry_run = true
- end
-
- it "should not produce summary on dry run" do
- @formatter.dump_summary(3, 2, 1, 0)
- @io.string.should eql("")
- end
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb
deleted file mode 100644
index 04e3d9785..000000000
--- a/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-module Spec
- module Runner
- module Formatter
- describe "ProgressBarFormatter failure dump with NoisyBacktraceTweaker" do
- before(:each) do
- @io = StringIO.new
- @reporter = Reporter.new([ProgressBarFormatter.new(@io)], NoisyBacktraceTweaker.new)
- @reporter.add_behaviour(Spec::DSL::Description.new("context"))
- end
-
- it "should end with line break" do
- error=Spec::Expectations::ExpectationNotMetError.new("message")
- set_backtrace(error)
- @reporter.example_finished("spec", error, "spec")
- @reporter.dump
- @io.string.should match(/\n\z/)
- end
-
- it "should include context and spec name in backtrace if error in spec" do
- error=RuntimeError.new("message")
- set_backtrace(error)
- @reporter.example_finished("spec", error, "spec")
- @reporter.dump
- @io.string.should match(/RuntimeError in 'context spec'/)
- end
-
- def set_backtrace(error)
- error.set_backtrace(["/a/b/c/d/e.rb:34:in `whatever'"])
- end
-
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb
index 50fc12689..127a617c1 100644
--- a/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/progress_bar_formatter_spec.rb
@@ -1,4 +1,5 @@
require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require 'spec/runner/formatter/progress_bar_formatter'
module Spec
module Runner
@@ -6,7 +7,10 @@ module Spec
describe ProgressBarFormatter do
before(:each) do
@io = StringIO.new
- @formatter = ProgressBarFormatter.new(@io)
+ @options = mock('options')
+ @options.stub!(:dry_run).and_return(false)
+ @options.stub!(:colour).and_return(false)
+ @formatter = ProgressBarFormatter.new(@options, @io)
end
it "should produce line break on start dump" do
@@ -20,44 +24,41 @@ module Spec
end
it "should produce standard summary" do
- @formatter.example_pending("behaviour", "example", "message")
+ @formatter.example_pending("example_group", ExampleGroup.new("example"), "message")
@io.rewind
@formatter.dump_summary(3, 2, 1, 1)
@io.string.should eql(%Q|
Finished in 3 seconds
2 examples, 1 failure, 1 pending
-
-Pending:
-behaviour example (message)
|)
end
it "should push green dot for passing spec" do
@io.should_receive(:tty?).and_return(true)
- @formatter.colour = true
+ @options.should_receive(:colour).and_return(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)
- @formatter.colour = true
+ @options.should_receive(:colour).and_return(true)
@formatter.example_failed("spec", 98, Reporter::Failure.new("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)
- @formatter.colour = 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")
end
it "should push blue F for fixed pending spec" do
@io.should_receive(:tty?).and_return(true)
- @formatter.colour = true
- @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::DSL::PendingFixedError.new))
+ @options.should_receive(:colour).and_return(true)
+ @formatter.example_failed("spec", 98, Reporter::Failure.new("c s", Spec::Example::PendingExampleFixedError.new))
@io.string.should eql("\e[34mF\e[0m")
end
@@ -83,17 +84,18 @@ EOE
end
it "should dump pending" do
- @formatter.example_pending("behaviour", "example", "message")
+ @formatter.example_pending("example_group", ExampleGroup.new("example"), "message")
@formatter.dump_pending
- @io.string.should =~ /Pending\:\nbehaviour example \(message\)\n/
+ @io.string.should =~ /Pending\:\nexample_group example \(message\)\n/
end
end
describe "ProgressBarFormatter outputting to custom out" do
before(:each) do
@out = mock("out")
+ @options = mock('options')
@out.stub!(:puts)
- @formatter = ProgressBarFormatter.new(@out)
+ @formatter = ProgressBarFormatter.new(@options, @out)
@formatter.class.send :public, :output_to_tty?
end
@@ -106,6 +108,20 @@ EOE
@formatter.output_to_tty?.should be_false
end
end
+
+ describe ProgressBarFormatter, "dry run" do
+ before(:each) do
+ @io = StringIO.new
+ options = mock('options')
+ options.stub!(:dry_run).and_return(true)
+ @formatter = ProgressBarFormatter.new(options, @io)
+ end
+
+ it "should not produce summary on dry run" do
+ @formatter.dump_summary(3, 2, 1, 0)
+ @io.string.should eql("")
+ end
+ end
end
end
end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb
deleted file mode 100644
index c864162ed..000000000
--- a/vendor/gems/rspec/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-module Spec
-module Runner
-module Formatter
-describe "RdocFormatterDryRun" do
- before(:each) do
- @io = StringIO.new
- @formatter = RdocFormatter.new(@io)
- @formatter.dry_run = true
- end
- it "should not produce summary on dry run" do
- @formatter.dump_summary(3, 2, 1, 0)
- @io.string.should == ""
- end
-end
-end
-end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/rdoc_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/rdoc_formatter_spec.rb
deleted file mode 100644
index 728a515f1..000000000
--- a/vendor/gems/rspec/spec/spec/runner/formatter/rdoc_formatter_spec.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-module Spec
- module Runner
- module Formatter
- describe "RdocFormatter" do
- before(:each) do
- @io = StringIO.new
- @formatter = RdocFormatter.new(@io)
- @formatter.dry_run = true
- end
-
- it "should produce no summary" do
- @formatter.dump_summary(nil, nil, nil, nil)
- @io.string.should be_empty
- end
-
- it "should produce nothing on start dump" do
- @formatter.start_dump
- @io.string.should be_empty
- end
-
- it "should push out context" do
- @formatter.add_behaviour(Spec::DSL::Description.new("context"))
- @io.string.should eql("# context\n")
- end
-
- it "should push out failed spec" do
- @formatter.example_failed(DSL::Example.new("spec"), 98, nil)
- @io.string.should eql("# * spec [98 - FAILED]\n")
- end
-
- it "should push out spec" do
- @formatter.example_passed(DSL::Example.new("spec"))
- @io.string.should eql("# * spec\n")
- end
-
- it "should push out not pending example" do
- @formatter.example_pending("behaviour", "example", "reason")
- @io.string.should eql("# * behaviour example [PENDING: reason]\n")
- end
-
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb
index dce5c2ff2..4bb2f1585 100644
--- a/vendor/gems/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/snippet_extractor_spec.rb
@@ -1,11 +1,18 @@
require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require 'spec/runner/formatter/snippet_extractor'
-describe Spec::Runner::Formatter::SnippetExtractor do
- it "should fall back on a default message when it doesn't understand a line" do
- Spec::Runner::Formatter::SnippetExtractor.new.snippet_for("blech").should == ["# Couldn't get snippet for blech", 1]
- end
+module Spec
+ module Runner
+ module Formatter
+ describe SnippetExtractor do
+ it "should fall back on a default message when it doesn't understand a line" do
+ SnippetExtractor.new.snippet_for("blech").should == ["# Couldn't get snippet for blech", 1]
+ end
- it "should fall back on a default message when it doesn't find the file" do
- Spec::Runner::Formatter::SnippetExtractor.new.lines_around("blech", 8).should == "# Couldn't get snippet for blech"
+ it "should fall back on a default message when it doesn't find the file" do
+ SnippetExtractor.new.lines_around("blech", 8).should == "# Couldn't get snippet for blech"
+ end
+ end
+ end
end
-end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb
new file mode 100644
index 000000000..e782254e2
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/spec_mate_formatter_spec.rb
@@ -0,0 +1,103 @@
+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/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb
deleted file mode 100644
index c86899cb1..000000000
--- a/vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require File.dirname(__FILE__) + '/../../../spec_helper.rb'
-
-module Spec
-module Runner
-module Formatter
-describe "SpecdocFormatterDryRun" do
- before(:each) do
- @io = StringIO.new
- @formatter = SpecdocFormatter.new(@io)
- @formatter.dry_run = true
- end
- it "should not produce summary on dry run" do
- @formatter.dump_summary(3, 2, 1, 0)
- @io.string.should eql("")
-
- end
-
-end
-end
-end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb
index 14f436036..79995309d 100644
--- a/vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/specdoc_formatter_spec.rb
@@ -1,61 +1,125 @@
require File.dirname(__FILE__) + '/../../../spec_helper.rb'
+require 'spec/runner/formatter/specdoc_formatter'
module Spec
module Runner
module Formatter
- describe "SpecdocFormatter" do
+ describe SpecdocFormatter do
+ it_should_behave_like "sandboxed rspec_options"
+ attr_reader :io, :options, :formatter, :example_group
before(:each) do
@io = StringIO.new
- @formatter = SpecdocFormatter.new(@io)
+ options.stub!(:dry_run).and_return(false)
+ options.stub!(:colour).and_return(false)
+ @formatter = SpecdocFormatter.new(options, io)
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("ExampleGroup")
end
- it "should produce standard summary without pending when pending has a 0 count" do
- @formatter.dump_summary(3, 2, 1, 0)
- @io.string.should eql("\nFinished in 3 seconds\n\n2 examples, 1 failure\n")
- end
+ describe "where ExampleGroup has no superclasss with a description" do
+ before do
+ formatter.add_example_group(example_group)
+ end
- it "should produce standard summary" do
- @formatter.dump_summary(3, 2, 1, 4)
- @io.string.should eql("\nFinished in 3 seconds\n\n2 examples, 1 failure, 4 pending\n")
- end
+ 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 push context name" do
- @formatter.add_behaviour(Spec::DSL::Description.new("context"))
- @io.string.should eql("\ncontext\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
- it "should push failing spec name and failure number" do
- @formatter.example_failed(DSL::Example.new("spec"), 98, Reporter::Failure.new("c s", RuntimeError.new))
- @io.string.should eql("- spec (ERROR - 98)\n")
- end
+ it "should push ExampleGroup name" do
+ io.string.should eql("\nExampleGroup\n")
+ end
- it "should push nothing on start" do
- @formatter.start(5)
- @io.string.should eql("")
- end
+ it "when having an error, 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")
+ end
- it "should push nothing on start dump" do
- @formatter.start_dump
- @io.string.should eql("")
- end
+ it "when having an expectation failure, 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")
+ end
- it "should push passing spec name" do
- @formatter.example_passed(DSL::Example.new("spec"))
- @io.string.should eql("- spec\n")
- end
+ it "should push nothing on start" do
+ formatter.start(5)
+ io.string.should have_example_group_output("")
+ end
- it "should push pending example name and message" do
- @formatter.example_pending('behaviour', 'example','reason')
- @io.string.should eql("- example (PENDING: reason)\n")
- end
+ it "should push nothing on start dump" do
+ formatter.start_dump
+ io.string.should have_example_group_output("")
+ end
- it "should dump pending" do
- @formatter.example_pending('behaviour', 'example','reason')
- @io.rewind
- @formatter.dump_pending
- @io.string.should =~ /Pending\:\nbehaviour example \(reason\)\n/
+ it "should push passing spec name" do
+ formatter.example_passed(example_group.it("spec"))
+ io.string.should have_example_group_output("- spec\n")
+ end
+
+ it "should push pending example name and message" do
+ formatter.example_pending('example_group', ExampleGroup.new("example"), 'reason')
+ io.string.should have_example_group_output("- example (PENDING: reason)\n")
+ end
+
+ it "should dump pending" do
+ formatter.example_pending('example_group', ExampleGroup.new("example"), 'reason')
+ io.rewind
+ formatter.dump_pending
+ io.string.should =~ /Pending\:\nexample_group example \(reason\)\n/
+ end
+
+ def have_example_group_output(expected_output)
+ expected = "\nExampleGroup\n#{expected_output}"
+ ::Spec::Matchers::SimpleMatcher.new(expected) do |actual|
+ actual == expected
+ end
+ end
end
+ describe "where ExampleGroup has two superclasses with a description" do
+ attr_reader :child_example_group, :grand_child_example_group
+ before do
+ @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
+
+ specify "when having an error, 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")
+ end
+
+ specify "when having an expectation failure, 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")
+ 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
end
diff --git a/vendor/gems/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb
new file mode 100644
index 000000000..37fb7c670
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/story/html_formatter_spec.rb
@@ -0,0 +1,61 @@
+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/gems/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb b/vendor/gems/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb
new file mode 100644
index 000000000..9632b0606
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb
@@ -0,0 +1,335 @@
+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 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 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 the a failiure 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 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/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html b/vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html
new file mode 100644
index 000000000..3f263747a
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html
@@ -0,0 +1,365 @@
+<?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/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html b/vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html
new file mode 100644
index 000000000..8a2b12e7d
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html
@@ -0,0 +1,365 @@
+<?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:18:
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:</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:18:
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:</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:18:
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:</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>
+
+ <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>
+
+ <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/mocking_example.rb:33:
+./spec/spec/runner/formatter/html_formatter_spec.rb:18:
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:in `chdir'
+./spec/spec/runner/formatter/html_formatter_spec.rb:14:</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/gems/rspec/spec/spec/runner/heckle_runner_spec.rb b/vendor/gems/rspec/spec/spec/runner/heckle_runner_spec.rb
index 1f5d11759..539d908c2 100644
--- a/vendor/gems/rspec/spec/spec/runner/heckle_runner_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/heckle_runner_spec.rb
@@ -17,47 +17,62 @@ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
describe "HeckleRunner" do
before(:each) do
@heckle = mock("heckle", :null_object => true)
- @behaviour_runner = mock("behaviour_runner")
@heckle_class = mock("heckle_class")
end
it "should heckle all methods in all classes in a module" do
- @heckle_class.should_receive(:new).with("Foo::Bar", "one", behaviour_runner).and_return(@heckle)
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle)
- @heckle_class.should_receive(:new).with("Foo::Zap", "three", behaviour_runner).and_return(@heckle)
- @heckle_class.should_receive(:new).with("Foo::Zap", "four", behaviour_runner).and_return(@heckle)
+ @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_runner = Spec::Runner::HeckleRunner.new("Foo", @heckle_class)
- heckle_runner.heckle_with(behaviour_runner)
+ heckle_runner.heckle_with
end
it "should heckle all methods in a class" do
- @heckle_class.should_receive(:new).with("Foo::Bar", "one", behaviour_runner).and_return(@heckle)
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle)
+ @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_runner = Spec::Runner::HeckleRunner.new("Foo::Bar", @heckle_class)
- heckle_runner.heckle_with(behaviour_runner)
+ heckle_runner.heckle_with
end
it "should fail heckling when the class is not found" do
lambda do
heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bob", @heckle_class)
- heckle_runner.heckle_with(behaviour_runner)
+ heckle_runner.heckle_with
end.should raise_error(StandardError, "Heckling failed - \"Foo::Bob\" is not a known class or module")
end
it "should heckle specific method in a class (with #)" do
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle)
heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar#two", @heckle_class)
- heckle_runner.heckle_with(behaviour_runner)
+ heckle_runner.heckle_with
end
it "should heckle specific method in a class (with .)" do
- @heckle_class.should_receive(:new).with("Foo::Bar", "two", behaviour_runner).and_return(@heckle)
+ @heckle_class.should_receive(:new).with("Foo::Bar", "two", rspec_options).and_return(@heckle)
heckle_runner = Spec::Runner::HeckleRunner.new("Foo::Bar.two", @heckle_class)
- heckle_runner.heckle_with(behaviour_runner)
+ heckle_runner.heckle_with
+ end
+ end
+
+ describe "Heckler" do
+ it "should say yes to tests_pass? if specs pass" do
+ options = mock("options", :null_object => true)
+ options.should_receive(:run_examples).and_return(true)
+ heckler = Spec::Runner::Heckler.new("Foo", nil, options)
+ heckler.tests_pass?.should be_true
+ end
+
+ it "should say no to tests_pass? if specs fail" do
+ options = mock("options", :null_object => true)
+ options.should_receive(:run_examples).and_return(false)
+ heckler = Spec::Runner::Heckler.new("Foo", nil, options)
+ heckler.tests_pass?.should be_false
end
end
end
diff --git a/vendor/gems/rspec/spec/spec/runner/heckler_spec.rb b/vendor/gems/rspec/spec/spec/runner/heckler_spec.rb
index 31d33ab5e..7cf6606ec 100644
--- a/vendor/gems/rspec/spec/spec/runner/heckler_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/heckler_spec.rb
@@ -3,11 +3,10 @@ unless [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
require 'spec/runner/heckle_runner'
describe "Heckler" do
- it "should run behaviour_runner on tests_pass?" do
- behaviour_runner = mock("behaviour_runner")
- behaviour_runner.should_receive(:run).with([], false)
- heckler = Spec::Runner::Heckler.new('Array', 'push', behaviour_runner)
-
+ 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?
end
end
diff --git a/vendor/gems/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb b/vendor/gems/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb
index 522d346d9..e097f2ec0 100644
--- a/vendor/gems/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/noisy_backtrace_tweaker_spec.rb
@@ -11,32 +11,32 @@ module Spec
it "should leave anything in lib spec dir" do
["expectations", "mocks", "runner", "stubs"].each do |child|
@error.set_backtrace(["/lib/spec/#{child}/anything.rb"])
- @tweaker.tweak_backtrace(@error, "spec name")
+ @tweaker.tweak_backtrace(@error)
@error.backtrace.should_not be_empty
end
end
it "should leave anything in spec dir" do
@error.set_backtrace(["/lib/spec/expectations/anything.rb"])
- @tweaker.tweak_backtrace(@error, "spec name")
+ @tweaker.tweak_backtrace(@error)
@error.backtrace.should_not be_empty
end
it "should leave bin spec" do
@error.set_backtrace(["bin/spec:"])
- @tweaker.tweak_backtrace(@error, "spec name")
+ @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, "spec name")
+ @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"])
- @tweaker.tweak_backtrace(@error, "spec name")
+ @tweaker.tweak_backtrace(@error)
@error.backtrace.should include("/a/b/c/d.rb")
end
diff --git a/vendor/gems/rspec/spec/spec/runner/object_ext_spec.rb b/vendor/gems/rspec/spec/spec/runner/object_ext_spec.rb
deleted file mode 100644
index 0d8348bb2..000000000
--- a/vendor/gems/rspec/spec/spec/runner/object_ext_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require File.dirname(__FILE__) + '/../../spec_helper.rb'
-
-module Spec
- module Runner
- describe "ObjectExt" do
- it "should add copy_instance_variables_from to object" do
- Object.new.should respond_to(:copy_instance_variables_from)
- end
- end
- end
-end
diff --git a/vendor/gems/rspec/spec/spec/runner/option_parser_spec.rb b/vendor/gems/rspec/spec/spec/runner/option_parser_spec.rb
index 95e1f75a3..71619b8fc 100644
--- a/vendor/gems/rspec/spec/spec/runner/option_parser_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/option_parser_spec.rb
@@ -1,18 +1,21 @@
require File.dirname(__FILE__) + '/../../spec_helper.rb'
+require 'fileutils'
describe "OptionParser" do
before(:each) do
@out = StringIO.new
@err = StringIO.new
- @parser = Spec::Runner::OptionParser.new
+ @parser = Spec::Runner::OptionParser.new(@err, @out)
end
def parse(args)
- @parser.parse(args, @err, @out, true)
+ @parser.parse(args)
+ @parser.options
end
-
- def behaviour_runner(args)
- @parser.create_behaviour_runner(args, @err, @out, true)
+
+ it "should accept files to include" do
+ options = parse(["--pattern", "foo"])
+ options.filename_pattern.should == "foo"
end
it "should accept dry run option" do
@@ -48,6 +51,14 @@ describe "OptionParser" do
options.colour.should == false
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
+ end
+
it "should print help to stdout" do
options = parse(["--help"])
@out.rewind
@@ -55,19 +66,17 @@ describe "OptionParser" do
end
it "should print instructions about how to require missing formatter" do
- lambda { options = parse(["--format", "Custom::MissingFormatter"]) }.should raise_error(NameError)
+ lambda do
+ options = parse(["--format", "Custom::MissingFormatter"])
+ options.formatters
+ end.should raise_error(NameError)
@err.string.should match(/Couldn't find formatter class Custom::MissingFormatter/n)
end
- it "should print usage to err if no dir specified" do
- options = parse([])
- @err.string.should match(/Usage: spec/)
- end
-
it "should print version to stdout" do
options = parse(["--version"])
@out.rewind
- @out.read.should match(/RSpec-\d+\.\d+\.\d+.*\(r\d+\) - BDD for Ruby\nhttp:\/\/rspec.rubyforge.org\/\n/n)
+ @out.read.should match(/RSpec-\d+\.\d+\.\d+.*\(build \d+\) - BDD for Ruby\nhttp:\/\/rspec.rubyforge.org\/\n/n)
end
it "should require file when require specified" do
@@ -123,14 +132,25 @@ 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)
+ 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')
options.formatters[0].class.should equal(Spec::Runner::Formatter::HtmlFormatter)
options.formatters[0].close
@@ -157,16 +177,6 @@ describe "OptionParser" do
options.formatters[0].class.should equal(Spec::Runner::Formatter::ProgressBarFormatter)
end
- it "should use rdoc formatter when format is r" do
- options = parse(["--format", "r"])
- options.formatters[0].class.should equal(Spec::Runner::Formatter::RdocFormatter)
- end
-
- it "should use rdoc formatter when format is rdoc" do
- options = parse(["--format", "rdoc"])
- options.formatters[0].class.should equal(Spec::Runner::Formatter::RdocFormatter)
- 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)
@@ -195,9 +205,13 @@ describe "OptionParser" do
end
it "should use custom diff format option when format is a custom format" do
- options = parse(["--diff", "Custom::Formatter"])
+ Spec::Expectations.differ.should_not be_instance_of(Custom::Differ)
+
+ options = parse(["--diff", "Custom::Differ"])
+ options.parse_diff "Custom::Differ"
options.diff_format.should == :custom
- options.differ_class.should == Custom::Formatter
+ options.differ_class.should == Custom::Differ
+ Spec::Expectations.differ.should be_instance_of(Custom::Differ)
end
it "should print instructions about how to fix missing differ" do
@@ -205,62 +219,58 @@ describe "OptionParser" do
@err.string.should match(/Couldn't find differ class Custom::MissingFormatter/n)
end
- it "should support --line to identify spec" do
- spec_parser = mock("spec_parser")
- @parser.instance_variable_set('@spec_parser', spec_parser)
-
- file_factory = mock("File")
- file_factory.should_receive(:file?).and_return(true)
- file_factory.should_receive(:open).and_return("fake_io")
- @parser.instance_variable_set('@file_factory', file_factory)
-
- spec_parser.should_receive(:spec_name_for).with("fake_io", 169).and_return("some spec")
-
- options = parse(["some file", "--line", "169"])
- options.examples.should eql(["some spec"])
- File.rspec_verify
- end
-
- it "should fail with error message if file is dir along with --line" do
- spec_parser = mock("spec_parser")
- @parser.instance_variable_set('@spec_parser', spec_parser)
-
- file_factory = mock("File")
- file_factory.should_receive(:file?).and_return(false)
- file_factory.should_receive(:directory?).and_return(true)
- @parser.instance_variable_set('@file_factory', file_factory)
-
- options = parse(["some file", "--line", "169"])
- @err.string.should match(/You must specify one file, not a directory when using the --line option/n)
- end
+ 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"
+ @dir = File.dirname(file)
+ end
- it "should fail with error message if file is dir along with --line" do
- spec_parser = mock("spec_parser")
- @parser.instance_variable_set('@spec_parser', spec_parser)
+ after do
+ $rspec_options = @original_rspec_options
+ end
- file_factory = mock("File")
- file_factory.should_receive(:file?).and_return(false)
- file_factory.should_receive(:directory?).and_return(false)
- @parser.instance_variable_set('@file_factory', file_factory)
+ def parse(args)
+ options = super
+ $rspec_options = options
+ options.filename_pattern = "*_fixture.rb"
+ options
+ end
- options = parse(["some file", "--line", "169"])
- @err.string.should match(/some file does not exist/n)
- 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 more than one files are specified along with --line" do
- spec_parser = mock("spec_parser")
- @parser.instance_variable_set('@spec_parser', spec_parser)
+ 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
- options = parse(["some file", "some other file", "--line", "169"])
- @err.string.should match(/Only one file can be specified 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
+ options.run_examples
+ end.should raise_error
+ end
- it "should fail with error message if --example and --line are used simultaneously" do
- spec_parser = mock("spec_parser")
- @parser.instance_variable_set('@spec_parser', spec_parser)
+ 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)
+ end
- options = parse(["some file", "--example", "some example", "--line", "169"])
- @err.string.should match(/You cannot use both --line and --example/n)
+ 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)
+ end
end
if [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM}
@@ -277,18 +287,21 @@ describe "OptionParser" do
end
it "should read options from file when --options is specified" do
- Spec::Runner::CommandLine.should_receive(:run).with(["--diff", "--colour"], @err, @out, true, true)
options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
+ options.diff_format.should_not be_nil
+ options.colour.should be_true
end
- it "should append options from file when --options is specified" do
- Spec::Runner::CommandLine.should_receive(:run).with(["some/spec.rb", "--diff", "--colour"], @err, @out, true, true)
- options = parse(["some/spec.rb", "--options", File.dirname(__FILE__) + "/spec.opts"])
+ it "should default the formatter to ProgressBarFormatter when using options file" do
+ options = parse(["--options", File.dirname(__FILE__) + "/spec.opts"])
+ options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::ProgressBarFormatter)
end
-
+
it "should read spaced and multi-line options from file when --options is specified" do
- Spec::Runner::CommandLine.should_receive(:run).with(["--diff", "--colour", "--format", "s"], @err, @out, true, true)
options = parse(["--options", File.dirname(__FILE__) + "/spec_spaced.opts"])
+ options.diff_format.should_not be_nil
+ options.colour.should be_true
+ options.formatters.first.should be_instance_of(::Spec::Runner::Formatter::SpecdocFormatter)
end
it "should save config to file when --generate-options is specified" do
@@ -298,52 +311,68 @@ describe "OptionParser" do
FileUtils.rm 'test.spec.opts'
end
- it "should call DrbCommandLine when --drb is specified" do
- Spec::Runner::DrbCommandLine.should_receive(:run).with(["some/spec.rb", "--diff", "--colour"], @err, @out, true, true)
- options = parse(["some/spec.rb", "--diff", "--drb", "--colour"])
- end
-
- it "should not return an Options object when --drb is specified" do
- Spec::Runner::DrbCommandLine.stub!(:run)
- parse(["some/spec.rb", "--drb"]).should be_nil
+ it "should save config to file when -G is specified" do
+ FileUtils.rm 'test.spec.opts' if File.exist?('test.spec.opts')
+ options = parse(["--colour", "-G", "test.spec.opts", "--diff"])
+ IO.read('test.spec.opts').should == "--colour\n--diff\n"
+ FileUtils.rm 'test.spec.opts'
end
+ it "when --drb is specified, calls DrbCommandLine all of the other ARGV arguments" do
+ options = Spec::Runner::OptionParser.parse([
+ "some/spec.rb", "--diff", "--colour"
+ ], @err, @out)
+ Spec::Runner::DrbCommandLine.should_receive(:run).and_return do |options|
+ options.argv.should == ["some/spec.rb", "--diff", "--colour"]
+ end
+ parse(["some/spec.rb", "--diff", "--drb", "--colour"])
+ end
+
it "should reverse spec order when --reverse is specified" do
options = parse(["some/spec.rb", "--reverse"])
end
it "should set an mtime comparator when --loadby mtime" do
- behaviour_runner = behaviour_runner(["--loadby", 'mtime'])
+ options = parse(["--loadby", 'mtime'])
+ runner = Spec::Runner::ExampleGroupRunner.new(options)
+ Spec::Runner::ExampleGroupRunner.should_receive(:new).
+ with(options).
+ and_return(runner)
+ runner.should_receive(:load_files).with(["most_recent_spec.rb", "command_line_spec.rb"])
+
Dir.chdir(File.dirname(__FILE__)) do
+ options.files << 'command_line_spec.rb'
+ options.files << 'most_recent_spec.rb'
FileUtils.touch "most_recent_spec.rb"
- all_files = ['command_line_spec.rb', 'most_recent_spec.rb']
- sorted_files = behaviour_runner.sort_paths(all_files)
- sorted_files.should == ["most_recent_spec.rb", "command_line_spec.rb"]
+ options.run_examples
FileUtils.rm "most_recent_spec.rb"
end
end
it "should use the standard runner by default" do
+ runner = ::Spec::Runner::ExampleGroupRunner.new(@parser.options)
+ ::Spec::Runner::ExampleGroupRunner.should_receive(:new).
+ with(@parser.options).
+ and_return(runner)
options = parse([])
- options.create_behaviour_runner.class.should equal(Spec::Runner::BehaviourRunner)
+ options.run_examples
end
it "should use a custom runner when given" do
- options = parse(["--runner", "Custom::BehaviourRunner"])
- options.create_behaviour_runner.class.should equal(Custom::BehaviourRunner)
+ runner = Custom::ExampleGroupRunner.new(@parser.options, nil)
+ Custom::ExampleGroupRunner.should_receive(:new).
+ with(@parser.options, nil).
+ and_return(runner)
+ options = parse(["--runner", "Custom::ExampleGroupRunner"])
+ options.run_examples
end
it "should use a custom runner with extra options" do
- options = parse(["--runner", "Custom::BehaviourRunner:something"])
- options.create_behaviour_runner.class.should equal(Custom::BehaviourRunner)
- end
-
- it "should return the correct default behaviour runner" do
- @parser.create_behaviour_runner([], @err, @out, true).should be_instance_of(Spec::Runner::BehaviourRunner)
+ runner = Custom::ExampleGroupRunner.new(@parser.options, 'something')
+ Custom::ExampleGroupRunner.should_receive(:new).
+ with(@parser.options, 'something').
+ and_return(runner)
+ options = parse(["--runner", "Custom::ExampleGroupRunner:something"])
+ options.run_examples
end
-
- it "should return the correct default behaviour runner" do
- @parser.create_behaviour_runner(["--runner", "Custom::BehaviourRunner"], @err, @out, true).should be_instance_of(Custom::BehaviourRunner)
- end
-
end
diff --git a/vendor/gems/rspec/spec/spec/runner/options_spec.rb b/vendor/gems/rspec/spec/spec/runner/options_spec.rb
index 609d8d95c..6f0893751 100644
--- a/vendor/gems/rspec/spec/spec/runner/options_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/options_spec.rb
@@ -3,172 +3,361 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
module Spec
module Runner
describe Options do
- before do
+ before(:each) do
@err = StringIO.new('')
@out = StringIO.new('')
@options = Options.new(@err, @out)
end
- it "instantiates empty arrays" do
- @options.examples.should == []
- @options.formatters.should == []
+ after(:each) do
+ Spec::Expectations.differ = nil
end
- it "defaults to QuietBacktraceTweaker" do
- @options.backtrace_tweaker.class.should == QuietBacktraceTweaker
+ describe "#examples" do
+ it "should default to empty array" do
+ @options.examples.should == []
+ end
end
-
- it "defaults to no dry_run" do
- @options.dry_run.should == false
+
+ 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/")
+ @options.files << dir
+ @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
- it "parse_diff sets context_lines" do
- @options.parse_diff nil
- @options.context_lines.should == 3
+ it "should support comma separated values" 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
+
+ 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
- it "defaults diff to unified" do
- @options.parse_diff nil
- @options.diff_format.should == :unified
+ describe "#backtrace_tweaker" do
+ it "should default to QuietBacktraceTweaker" do
+ @options.backtrace_tweaker.class.should == QuietBacktraceTweaker
+ end
end
- it "should use unified diff format option when format is unified" do
- @options.parse_diff 'unified'
- @options.diff_format.should == :unified
- @options.differ_class.should equal(Spec::Expectations::Differs::Default)
+ describe "#dry_run" do
+ it "should default to false" do
+ @options.dry_run.should == false
+ end
end
- it "should use context diff format option when format is context" do
- @options.parse_diff 'context'
- @options.diff_format.should == :context
- @options.differ_class.should == Spec::Expectations::Differs::Default
+ describe "#context_lines" do
+ it "should default to 3" do
+ @options.context_lines.should == 3
+ end
end
- it "should use custom diff format option when format is a custom format" do
- @options.parse_diff "Custom::Formatter"
- @options.diff_format.should == :custom
- @options.differ_class.should == Custom::Formatter
+ describe "#parse_diff with nil" do
+ before(:each) do
+ @options.parse_diff nil
+ end
+
+ it "should make diff_format unified" do
+ @options.diff_format.should == :unified
+ end
+
+ it "should set Spec::Expectations.differ to be a default differ" do
+ Spec::Expectations.differ.class.should ==
+ ::Spec::Expectations::Differs::Default
+ end
end
- it "should print instructions about how to fix missing differ" do
- lambda { @options.parse_diff "Custom::MissingDiffer" }.should raise_error(NameError)
- @err.string.should match(/Couldn't find differ class Custom::MissingDiffer/n)
- end
+ describe "#parse_diff with 'unified'" do
+ before(:each) do
+ @options.parse_diff 'unified'
+ end
- it "should print instructions about how to fix bad formatter" do
- lambda do
- @options.parse_format "Custom::BadFormatter"
- end.should raise_error(NameError, /undefined local variable or method `bad_method'/)
- end
+ it "should make diff_format unified and uses default differ_class" do
+ @options.diff_format.should == :unified
+ @options.differ_class.should equal(Spec::Expectations::Differs::Default)
+ end
- it "parse_example sets single example when argument not a file" do
- example = "something or other"
- File.file?(example).should == false
- @options.parse_example example
- @options.examples.should eql(["something or other"])
+ it "should set Spec::Expectations.differ to be a default differ" do
+ Spec::Expectations.differ.class.should ==
+ ::Spec::Expectations::Differs::Default
+ end
end
- it "parse_example sets examples to contents of file" do
- example = "#{File.dirname(__FILE__)}/examples.txt"
- File.should_receive(:file?).with(example).and_return(true)
- file = StringIO.new("Sir, if you were my husband, I would poison your drink.\nMadam, if you were my wife, I would drink it.")
- File.should_receive(:open).with(example).and_return(file)
-
- @options.parse_example example
- @options.examples.should eql([
- "Sir, if you were my husband, I would poison your drink.",
- "Madam, if you were my wife, I would drink it."
- ])
- end
- end
+ describe "#parse_diff with 'context'" do
+ before(:each) do
+ @options.parse_diff 'context'
+ end
- describe Options, "splitting class names and args" do
- before do
- @err = StringIO.new('')
- @out = StringIO.new('')
- @options = Options.new(@err, @out)
- end
-
- it "should split class names with args" do
- @options.split_at_colon('Foo').should == ['Foo', nil]
- @options.split_at_colon('Foo:arg').should == ['Foo', 'arg']
- @options.split_at_colon('Foo::Bar::Zap:arg').should == ['Foo::Bar::Zap', 'arg']
- @options.split_at_colon('Foo:arg1,arg2').should == ['Foo', 'arg1,arg2']
- @options.split_at_colon('Foo::Bar::Zap:arg1,arg2').should == ['Foo::Bar::Zap', 'arg1,arg2']
- @options.split_at_colon('Foo::Bar::Zap:drb://foo,drb://bar').should == ['Foo::Bar::Zap', 'drb://foo,drb://bar']
- end
+ it "should make diff_format context and uses default differ_class" do
+ @options.diff_format.should == :context
+ @options.differ_class.should == Spec::Expectations::Differs::Default
+ end
- it "should raise error when splitting something starting with a number" do
- lambda { @options.split_at_colon('') }.should raise_error("Couldn't parse \"\"")
+ it "should set Spec::Expectations.differ to be a default differ" do
+ Spec::Expectations.differ.class.should ==
+ ::Spec::Expectations::Differs::Default
+ end
end
- it "should raise error when not class name" do
- lambda do
- @options.load_class('foo', 'fruit', '--food')
- end.should raise_error('"foo" is not a valid class name')
+ describe "#parse_diff with Custom::Differ" do
+ before(:each) do
+ @options.parse_diff 'Custom::Differ'
+ end
+
+ it "should use custom differ_class" do
+ @options.diff_format.should == :custom
+ @options.differ_class.should == Custom::Differ
+ Spec::Expectations.differ.should be_instance_of(Custom::Differ)
+ end
+
+ it "should set Spec::Expectations.differ to be a default differ" do
+ Spec::Expectations.differ.class.should ==
+ ::Custom::Differ
+ end
end
- end
- describe Options, "receiving create_behaviour_runner" do
- before do
- @err = StringIO.new
- @out = StringIO.new
- @options = Options.new(@err, @out)
+ describe "#parse_diff with missing class name" do
+ it "should raise error" do
+ lambda { @options.parse_diff "Custom::MissingDiffer" }.should raise_error(NameError)
+ @err.string.should match(/Couldn't find differ class Custom::MissingDiffer/n)
+ end
end
- it "should fail when custom runner not found" do
- @options.runner_arg = "Whatever"
- lambda { @options.create_behaviour_runner }.should raise_error(NameError)
- @err.string.should match(/Couldn't find behaviour runner class/)
+ describe "#parse_example" do
+ it "with argument thats not a file path, sets argument as the example" do
+ example = "something or other"
+ File.file?(example).should == false
+ @options.parse_example example
+ @options.examples.should eql(["something or other"])
+ end
+
+ it "with argument that is a file path, sets examples to contents of the file" do
+ example = "#{File.dirname(__FILE__)}/examples.txt"
+ File.should_receive(:file?).with(example).and_return(true)
+ file = StringIO.new("Sir, if you were my husband, I would poison your drink.\nMadam, if you were my wife, I would drink it.")
+ File.should_receive(:open).with(example).and_return(file)
+
+ @options.parse_example example
+ @options.examples.should eql([
+ "Sir, if you were my husband, I would poison your drink.",
+ "Madam, if you were my wife, I would drink it."
+ ])
+ end
end
- it "should fail when custom runner not valid class name" do
- @options.runner_arg = "whatever"
- lambda { @options.create_behaviour_runner }.should raise_error('"whatever" is not a valid class name')
- @err.string.should match(/"whatever" is not a valid class name/)
+ describe "#examples_should_not_be_run" do
+ it "should cause #run_examples to return true and do nothing" do
+ @options.examples_should_not_be_run
+ ExampleGroupRunner.should_not_receive(:new)
+
+ @options.run_examples.should be_true
+ end
end
- it "returns nil when generate is true" do
- @options.generate = true
- @options.create_behaviour_runner.should == nil
+ describe "#load_class" do
+ it "should raise error when not class name" do
+ lambda do
+ @options.send(:load_class, 'foo', 'fruit', '--food')
+ end.should raise_error('"foo" is not a valid class name')
+ end
end
- it "returns a BehaviourRunner by default" do
- runner = @options.create_behaviour_runner
- runner.class.should == BehaviourRunner
+ describe "#reporter" do
+ it "returns a Reporter" do
+ @options.reporter.should be_instance_of(Reporter)
+ @options.reporter.options.should === @options
+ end
end
- it "does not set Expectations differ when differ_class is not set" do
- @options.differ_class = nil
- Spec::Expectations.should_not_receive(:differ=)
- @options.create_behaviour_runner
+ describe "#add_example_group affecting passed in example_group" do
+ it "runs all examples when options.examples is nil" do
+ example_1_has_run = false
+ example_2_has_run = false
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
+ it "runs 1" do
+ example_1_has_run = true
+ end
+ it "runs 2" do
+ example_2_has_run = true
+ end
+ end
+
+ @options.examples = nil
+
+ @options.add_example_group @example_group
+ @options.run_examples
+ example_1_has_run.should be_true
+ example_2_has_run.should be_true
+ end
+
+ it "keeps all example_definitions 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
+ it "runs 1" do
+ example_1_has_run = true
+ end
+ it "runs 2" do
+ example_2_has_run = true
+ end
+ end
+
+ @options.examples = []
+
+ @options.add_example_group @example_group
+ @options.run_examples
+ example_1_has_run.should be_true
+ example_2_has_run.should be_true
+ end
end
- it "sets Expectations differ when differ_class is set" do
- @options.differ_class = Spec::Expectations::Differs::Default
- Spec::Expectations.should_receive(:differ=).with(anything()).and_return do |arg|
- arg.class.should == Spec::Expectations::Differs::Default
+ describe "#add_example_group affecting example_group" do
+ it "adds example_group when example_group has example_definitions and is not shared" do
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
+ it "uses this example_group" do
+ end
+ end
+
+ @options.number_of_examples.should == 0
+ @options.add_example_group @example_group
+ @options.number_of_examples.should == 1
+ @options.example_groups.length.should == 1
end
- @options.configure
end
- it "creates a Reporter" do
- formatter = ::Spec::Runner::Formatter::BaseFormatter.new(:somewhere)
- @options.formatters << formatter
- reporter = Reporter.new(@formatters, @backtrace_tweaker)
- Reporter.should_receive(:new).with(@options.formatters, @options.backtrace_tweaker).and_return(reporter)
- @options.configure
- @options.reporter.should === reporter
+ describe "#remove_example_group" do
+ it "should remove the ExampleGroup from the list of ExampleGroups" do
+ @example_group = Class.new(::Spec::Example::ExampleGroup).describe("Some Examples") do
+ end
+ @options.add_example_group @example_group
+ @options.example_groups.should include(@example_group)
+
+ @options.remove_example_group @example_group
+ @options.example_groups.should_not include(@example_group)
+ end
end
- it "sets colour and dry_run on the formatters" do
- @options.colour = true
- @options.dry_run = true
- formatter = ::Spec::Runner::Formatter::BaseTextFormatter.new(:somewhere)
- formatter.should_receive(:colour=).with(true)
- formatter.should_receive(:dry_run=).with(true)
- @options.formatters << formatter
- @options.configure
+ describe "#run_examples" do
+ it "should use the standard runner by default" do
+ runner = ::Spec::Runner::ExampleGroupRunner.new(@options)
+ ::Spec::Runner::ExampleGroupRunner.should_receive(:new).
+ with(@options).
+ and_return(runner)
+ @options.user_input_for_runner = nil
+
+ @options.run_examples
+ end
+
+ it "should use a custom runner when given" do
+ runner = Custom::ExampleGroupRunner.new(@options, nil)
+ Custom::ExampleGroupRunner.should_receive(:new).
+ with(@options, nil).
+ and_return(runner)
+ @options.user_input_for_runner = "Custom::ExampleGroupRunner"
+
+ @options.run_examples
+ end
+
+ it "should use a custom runner with extra options" do
+ runner = Custom::ExampleGroupRunner.new(@options, 'something')
+ Custom::ExampleGroupRunner.should_receive(:new).
+ with(@options, 'something').
+ and_return(runner)
+ @options.user_input_for_runner = "Custom::ExampleGroupRunner:something"
+
+ @options.run_examples
+ end
+
+ describe "when there are examples" do
+ before(:each) do
+ @options.add_example_group Class.new(::Spec::Example::ExampleGroup)
+ @options.formatters << Formatter::BaseTextFormatter.new(@options, @out)
+ end
+
+ it "runs the Examples and outputs the result" do
+ @options.run_examples
+ @out.string.should include("0 examples, 0 failures")
+ end
+
+ it "sets #examples_run? to true" do
+ @options.examples_run?.should be_false
+ @options.run_examples
+ @options.examples_run?.should be_true
+ end
+ end
+
+ describe "when there are no examples" do
+ before(:each) do
+ @options.formatters << Formatter::BaseTextFormatter.new(@options, @out)
+ end
+
+ it "does not run Examples and does not output a result" do
+ @options.run_examples
+ @out.string.should_not include("examples")
+ @out.string.should_not include("failures")
+ end
+
+ it "sets #examples_run? to false" do
+ @options.examples_run?.should be_false
+ @options.run_examples
+ @options.examples_run?.should be_false
+ end
+ end
end
end
end
diff --git a/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture.rb b/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture.rb
new file mode 100644
index 000000000..444730dc3
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture.rb
@@ -0,0 +1,7 @@
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
+
+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/gems/rspec/spec/spec/runner/output_one_time_fixture_runner.rb b/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture_runner.rb
new file mode 100644
index 000000000..a0e61316e
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/output_one_time_fixture_runner.rb
@@ -0,0 +1,8 @@
+dir = File.dirname(__FILE__)
+require "#{dir}/../../spec_helper"
+
+triggering_double_output = rspec_options
+options = Spec::Runner::OptionParser.parse(
+ ["#{dir}/output_one_time_fixture.rb"], $stderr, $stdout
+)
+Spec::Runner::CommandLine.run(options)
diff --git a/vendor/gems/rspec/spec/spec/runner/output_one_time_spec.rb b/vendor/gems/rspec/spec/spec/runner/output_one_time_spec.rb
new file mode 100644
index 000000000..8f67a380a
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/output_one_time_spec.rb
@@ -0,0 +1,16 @@
+require File.dirname(__FILE__) + '/../../spec_helper.rb'
+
+module Spec
+ module Runner
+ describe CommandLine do
+ 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
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb b/vendor/gems/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb
index 2578dbe6d..e47b6c735 100644
--- a/vendor/gems/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/quiet_backtrace_tweaker_spec.rb
@@ -10,13 +10,13 @@ module Spec
it "should not barf on nil backtrace" do
lambda do
- @tweaker.tweak_backtrace(@error, "spec name")
+ @tweaker.tweak_backtrace(@error)
end.should_not raise_error
end
it "should remove anything from textmate ruby bundle" do
@error.set_backtrace(["/Applications/TextMate.app/Contents/SharedSupport/Bundles/Ruby.tmbundle/Support/tmruby.rb:147"])
- @tweaker.tweak_backtrace(@error, "spec name")
+ @tweaker.tweak_backtrace(@error)
@error.backtrace.should be_empty
end
@@ -24,7 +24,7 @@ module Spec
["expectations", "mocks", "runner"].each do |child|
element="/lib/spec/#{child}/anything.rb"
@error.set_backtrace([element])
- @tweaker.tweak_backtrace(@error, "spec name")
+ @tweaker.tweak_backtrace(@error)
unless (@error.backtrace.empty?)
raise("Should have tweaked away '#{element}'")
end
@@ -34,7 +34,7 @@ module Spec
it "should remove mock_frameworks/rspec" do
element = "mock_frameworks/rspec"
@error.set_backtrace([element])
- @tweaker.tweak_backtrace(@error, "spec name")
+ @tweaker.tweak_backtrace(@error)
unless (@error.backtrace.empty?)
raise("Should have tweaked away '#{element}'")
end
@@ -42,13 +42,13 @@ module Spec
it "should remove bin spec" do
@error.set_backtrace(["bin/spec:"])
- @tweaker.tweak_backtrace(@error, "spec name")
+ @tweaker.tweak_backtrace(@error)
@error.backtrace.should be_empty
end
it "should clean up double slashes" do
@error.set_backtrace(["/a//b/c//d.rb"])
- @tweaker.tweak_backtrace(@error, "spec name")
+ @tweaker.tweak_backtrace(@error)
@error.backtrace.should include("/a/b/c/d.rb")
end
end
diff --git a/vendor/gems/rspec/spec/spec/runner/reporter_spec.rb b/vendor/gems/rspec/spec/spec/runner/reporter_spec.rb
index 574625ce8..52377e7f3 100644
--- a/vendor/gems/rspec/spec/spec/runner/reporter_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/reporter_spec.rb
@@ -2,203 +2,187 @@ require File.dirname(__FILE__) + '/../../spec_helper.rb'
module Spec
module Runner
-
- module ReporterSpecHelper
- def setup
- @io = StringIO.new
+ describe Reporter do
+ attr_reader :formatter_output, :options, :backtrace_tweaker, :formatter, :reporter, :example_group
+ before(:each) do
+ @formatter_output = StringIO.new
+ @options = Options.new(StringIO.new, StringIO.new)
@backtrace_tweaker = stub("backtrace tweaker", :tweak_backtrace => nil)
- @formatter = mock("formatter")
- @reporter = Reporter.new([@formatter], @backtrace_tweaker)
+ options.backtrace_tweaker = backtrace_tweaker
+ @formatter = ::Spec::Runner::Formatter::BaseTextFormatter.new(options, formatter_output)
+ options.formatters << formatter
+ @reporter = Reporter.new(options)
+ @example_group = create_example_group("example_group")
+ reporter.add_example_group example_group
end
def failure
Mocks::DuckTypeArgConstraint.new(:header, :exception)
end
-
- def description(s)
- Spec::DSL::Description.new(s)
+
+ def create_example_group(description_text)
+ example_group = Class.new(Spec::Example::ExampleGroup)
+ example_group.describe description_text
+ example_group
end
- end
-
- describe Reporter do
- include ReporterSpecHelper
- before(:each) {setup}
-
- it "should tell formatter when behaviour is added" do
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
- @reporter.add_behaviour(description("behaviour"))
+
+ 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)
end
- it "should handle multiple behaviours with same name" do
- @formatter.should_receive(:add_behaviour).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(:close).with(no_args)
- @formatter.should_receive(:dump_summary).with(anything(), 3, 0, 0)
- @reporter.add_behaviour(description("behaviour"))
- @reporter.example_started("spec 1")
- @reporter.example_finished("spec 1")
- @reporter.add_behaviour(description("behaviour"))
- @reporter.example_started("spec 2")
- @reporter.example_finished("spec 2")
- @reporter.add_behaviour(description("behaviour"))
- @reporter.example_started("spec 3")
- @reporter.example_finished("spec 3")
- @reporter.dump
+ it "should handle multiple example_groups with same name" do
+ formatter.should_receive(:add_example_group).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")
+ reporter.dump
end
it "should handle multiple examples with the same name" do
error=RuntimeError.new
- @formatter.should_receive(:add_behaviour).exactly(2).times
- @formatter.should_receive(:example_passed).with("example").exactly(2).times
- @formatter.should_receive(:example_failed).with("example", 1, failure)
- @formatter.should_receive(:example_failed).with("example", 2, failure)
- @formatter.should_receive(:dump_failure).exactly(2).times
- @formatter.should_receive(:start_dump)
- @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_behaviour(description("behaviour"))
- @reporter.example_finished("example")
- @reporter.example_finished("example", error)
- @reporter.add_behaviour(description("behaviour"))
- @reporter.example_finished("example")
- @reporter.example_finished("example", error)
- @reporter.dump
+ 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
+ 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)
+
+ reporter.add_example_group(create_example_group("example_group"))
+ reporter.example_finished(passing)
+ reporter.example_finished(failing, error)
+ reporter.dump
end
it "should push stats to formatter even with no data" do
- @formatter.should_receive(:start_dump)
- @formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0)
- @formatter.should_receive(:close).with(no_args)
- @reporter.dump
+ formatter.should_receive(:start_dump)
+ formatter.should_receive(:dump_pending)
+ formatter.should_receive(:dump_summary).with(anything(), 0, 0, 0)
+ 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)
- @formatter.should_receive(:close).with(no_args)
- @formatter.should_receive(:dump_summary) do |time, a, b|
+ formatter.should_receive(:start).with(5)
+ formatter.should_receive(:start_dump)
+ formatter.should_receive(:dump_pending)
+ formatter.should_receive(:close).with(no_args)
+ formatter.should_receive(:dump_summary) do |time, a, b|
time.to_s.should match(/[0-9].[0-9|e|-]+/)
end
- @reporter.start(5)
- @reporter.end
- @reporter.dump
- end
- end
-
- describe Reporter, "reporting one passing example" do
- include ReporterSpecHelper
- before(:each) {setup}
-
- it "should tell formatter example passed" do
- @formatter.should_receive(:example_passed)
- @reporter.example_finished("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.start(5)
+ reporter.end
+ reporter.dump
end
- it "should account for passing example in stats" do
- @formatter.should_receive(:example_passed)
- @formatter.should_receive(:start_dump)
- @formatter.should_receive(:dump_summary).with(anything(), 1, 0, 0)
- @formatter.should_receive(:close).with(no_args)
- @reporter.example_finished("example")
- @reporter.dump
- end
- end
+ describe Reporter, "reporting one passing example" do
+ it "should tell formatter example passed" do
+ formatter.should_receive(:example_passed)
+ reporter.example_finished("example")
+ end
- describe Reporter, "reporting one failing example" do
- include ReporterSpecHelper
- before(:each) {setup}
+ it "should not delegate to backtrace tweaker" do
+ formatter.should_receive(:example_passed)
+ backtrace_tweaker.should_not_receive(:tweak_backtrace)
+ reporter.example_finished("example")
+ end
- it "should tell formatter that example failed" do
- @formatter.should_receive(:example_failed)
- @reporter.example_finished("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("spec", RuntimeError.new)
+ 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.dump
+ end
end
- it "should account for failing example in stats" do
- @formatter.should_receive(:add_behaviour)
- @formatter.should_receive(:example_failed).with("example", 1, failure)
- @formatter.should_receive(:start_dump)
- @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.add_behaviour(description("behaviour"))
- @reporter.example_finished("example", RuntimeError.new)
- @reporter.dump
- end
-
- end
-
- describe Reporter, "reporting one pending example (Not Yet Implemented)" do
- include ReporterSpecHelper
- before(:each) {setup}
-
- it "should tell formatter example is pending" do
- @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "Not Yet Implemented")
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
- @reporter.add_behaviour(description('behaviour'))
- @reporter.example_finished("example", nil, nil, true)
- end
+ describe Reporter, "reporting one failing example" do
+ it "should tell formatter that example failed" do
+ formatter.should_receive(:example_failed)
+ reporter.example_finished(example_group, RuntimeError.new)
+ end
- it "should account for pending example in stats" do
- @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "Not Yet Implemented")
- @formatter.should_receive(:start_dump)
- @formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
- @formatter.should_receive(:close).with(no_args)
- @reporter.add_behaviour(description('behaviour'))
- @reporter.example_finished("example", nil, nil, true)
- @reporter.dump
- end
- 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)
+ end
- describe Reporter, "reporting one pending example (ExamplePendingError)" do
- include ReporterSpecHelper
- before(:each) {setup}
+ it "should account for failing example in stats" do
+ example = ExampleGroup.new("example")
+ formatter.should_receive(:example_failed).with(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.dump
+ end
- it "should tell formatter example is pending" do
- @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "reason")
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
- @reporter.add_behaviour(description('behaviour'))
- @reporter.example_finished("example", Spec::DSL::ExamplePendingError.new("reason"), nil, false)
end
- it "should account for pending example in stats" do
- @formatter.should_receive(:example_pending).with(description("behaviour"), "example", "reason")
- @formatter.should_receive(:start_dump)
- @formatter.should_receive(:dump_summary).with(anything(), 1, 0, 1)
- @formatter.should_receive(:close).with(no_args)
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
- @reporter.add_behaviour(description('behaviour'))
- @reporter.example_finished("example", Spec::DSL::ExamplePendingError.new("reason"), nil, false)
- @reporter.dump
- end
- end
+ describe Reporter, "reporting one pending example (ExamplePendingError)" do
+ it "should tell formatter example is pending" do
+ example = ExampleGroup.new("example")
+ formatter.should_receive(:example_pending).with(example_group.description, 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"))
+ end
- describe Reporter, "reporting one pending example (PendingFixedError)" do
- include ReporterSpecHelper
- before(:each) {setup}
+ it "should account for pending example in stats" do
+ example = ExampleGroup.new("example")
+ formatter.should_receive(:example_pending).with(example_group.description, 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"))
+ reporter.dump
+ end
+ end
- it "should tell formatter pending example is fixed" do
- @formatter.should_receive(:example_failed) do |name, counter, failure|
- failure.header.should == "'behaviour example' FIXED"
+ describe Reporter, "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 example' FIXED"
+ end
+ formatter.should_receive(:add_example_group).with(example_group)
+ reporter.add_example_group(example_group)
+ reporter.example_finished(ExampleGroup.new("example"), Spec::Example::PendingExampleFixedError.new("reason"))
end
- @formatter.should_receive(:add_behaviour).with(description("behaviour"))
- @reporter.add_behaviour(description('behaviour'))
- @reporter.example_finished("example", Spec::DSL::PendingFixedError.new("reason"), nil, false)
end
end
end
diff --git a/vendor/gems/rspec/spec/spec/runner/resources/a_bar.rb b/vendor/gems/rspec/spec/spec/runner/resources/a_bar.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/resources/a_bar.rb
diff --git a/vendor/gems/rspec/spec/spec/runner/resources/a_foo.rb b/vendor/gems/rspec/spec/spec/runner/resources/a_foo.rb
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/resources/a_foo.rb
diff --git a/vendor/gems/rspec/spec/spec/runner/resources/a_spec.rb b/vendor/gems/rspec/spec/spec/runner/resources/a_spec.rb
new file mode 100644
index 000000000..d9b67cc76
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/resources/a_spec.rb
@@ -0,0 +1 @@
+# Empty - used by ../options_spec.rb \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/runner/spec.opts b/vendor/gems/rspec/spec/spec/runner/spec.opts
new file mode 100644
index 000000000..fd816a424
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/spec.opts
@@ -0,0 +1,2 @@
+--diff
+--colour \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb b/vendor/gems/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb
new file mode 100644
index 000000000..14602d934
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/spec_parser/spec_parser_fixture.rb
@@ -0,0 +1,70 @@
+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/gems/rspec/spec/spec/runner/spec_parser_spec.rb b/vendor/gems/rspec/spec/spec/runner/spec_parser_spec.rb
index 6fb83dc35..3d8d9c2e9 100644
--- a/vendor/gems/rspec/spec/spec/runner/spec_parser_spec.rb
+++ b/vendor/gems/rspec/spec/spec/runner/spec_parser_spec.rb
@@ -1,93 +1,79 @@
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 "SpecParser" do
+ attr_reader :parser, :file
before(:each) do
- @p = Spec::Runner::SpecParser.new
+ @parser = Spec::Runner::SpecParser.new
+ @file = "#{File.dirname(__FILE__)}/spec_parser/spec_parser_fixture.rb"
+ require file
end
it "should find spec name for 'specify' at same line" do
- @p.spec_name_for(File.open(__FILE__), 5).should == "c 1"
+ parser.spec_name_for(file, 5).should == "c 1"
end
it "should find spec name for 'specify' at end of spec line" do
- @p.spec_name_for(File.open(__FILE__), 6).should == "c 1"
+ parser.spec_name_for(file, 6).should == "c 1"
end
it "should find context for 'context' above all specs" do
- @p.spec_name_for(File.open(__FILE__), 4).should == "c"
+ parser.spec_name_for(file, 4).should == "c"
end
it "should find spec name for 'it' at same line" do
- @p.spec_name_for(File.open(__FILE__), 15).should == "d 3"
+ parser.spec_name_for(file, 15).should == "d 3"
end
it "should find spec name for 'it' at end of spec line" do
- @p.spec_name_for(File.open(__FILE__), 16).should == "d 3"
+ parser.spec_name_for(file, 16).should == "d 3"
end
it "should find context for 'describe' above all specs" do
- @p.spec_name_for(File.open(__FILE__), 14).should == "d"
+ parser.spec_name_for(file, 14).should == "d"
end
it "should find nearest example name between examples" do
- @p.spec_name_for(File.open(__FILE__), 7).should == "c 1"
+ parser.spec_name_for(file, 7).should == "c 1"
end
it "should find nothing outside a context" do
- @p.spec_name_for(File.open(__FILE__), 2).should be_nil
+ parser.spec_name_for(file, 2).should be_nil
end
-
+
it "should find context name for type" do
- @p.spec_name_for(File.open(__FILE__), 26).should == "SpecParserSubject"
+ parser.spec_name_for(file, 26).should == "SpecParserSubject"
end
-
+
it "should find context and spec name for type" do
- @p.spec_name_for(File.open(__FILE__), 28).should == "SpecParserSubject 5"
+ parser.spec_name_for(file, 28).should == "SpecParserSubject 5"
end
it "should find context and description for type" do
- @p.spec_name_for(File.open(__FILE__), 33).should == "SpecParserSubject described"
+ parser.spec_name_for(file, 33).should == "SpecParserSubject described"
end
-
+
it "should find context and description and example for type" do
- @p.spec_name_for(File.open(__FILE__), 36).should == "SpecParserSubject described 6"
+ 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/gems/rspec/spec/spec/runner/spec_spaced.opts b/vendor/gems/rspec/spec/spec/runner/spec_spaced.opts
new file mode 100644
index 000000000..6b3efd20f
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner/spec_spaced.opts
@@ -0,0 +1,2 @@
+--diff --colour
+--format s \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/runner_spec.rb b/vendor/gems/rspec/spec/spec/runner_spec.rb
new file mode 100644
index 000000000..d75e66111
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/runner_spec.rb
@@ -0,0 +1,11 @@
+require File.dirname(__FILE__) + '/../spec_helper.rb'
+
+module Spec
+ describe Runner, ".configure" do
+ it "should yield global configuration" do
+ Spec::Runner.configure do |config|
+ config.should equal(Spec::Runner.configuration)
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/spec_classes.rb b/vendor/gems/rspec/spec/spec/spec_classes.rb
index 89eee72c4..c8900a789 100644
--- a/vendor/gems/rspec/spec/spec/spec_classes.rb
+++ b/vendor/gems/rspec/spec/spec/spec_classes.rb
@@ -51,6 +51,9 @@ module Spec
[1]
end
+ def items
+ @items_in_collection_with_size_method
+ end
end
class HandCodedMock
@@ -96,10 +99,12 @@ module Spec
end
module Custom
+ require 'spec/runner/formatter/base_text_formatter'
class Formatter < Spec::Runner::Formatter::BaseTextFormatter
- attr_reader :where
+ attr_reader :options, :where
- def initialize(where)
+ def initialize(options, where)
+ @options = options
@where = where
end
end
@@ -107,13 +112,22 @@ module Custom
class BadFormatter < Spec::Runner::Formatter::BaseTextFormatter
attr_reader :where
- def initialize(where)
+ def initialize(options, where)
bad_method
end
end
- class BehaviourRunner
- def initialize(options, arg=nil); 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/gems/rspec/spec/spec/story/builders.rb b/vendor/gems/rspec/spec/spec/story/builders.rb
new file mode 100644
index 000000000..77d50d53e
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/builders.rb
@@ -0,0 +1,46 @@
+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/gems/rspec/spec/spec/story/extensions/main_spec.rb b/vendor/gems/rspec/spec/spec/story/extensions/main_spec.rb
new file mode 100644
index 000000000..acdc341ce
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/extensions/main_spec.rb
@@ -0,0 +1,161 @@
+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/gems/rspec/spec/spec/story/extensions_spec.rb b/vendor/gems/rspec/spec/spec/story/extensions_spec.rb
new file mode 100644
index 000000000..612ddc72f
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/extensions_spec.rb
@@ -0,0 +1,14 @@
+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/gems/rspec/spec/spec/story/given_scenario_spec.rb b/vendor/gems/rspec/spec/spec/story/given_scenario_spec.rb
new file mode 100644
index 000000000..a688f88d5
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/given_scenario_spec.rb
@@ -0,0 +1,27 @@
+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/gems/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb
new file mode 100644
index 000000000..1d5f2e0c3
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/runner/plain_text_story_runner_spec.rb
@@ -0,0 +1,92 @@
+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
+ }.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
+ runner = PlainTextStoryRunner.new("path")
+ Spec::Story::Runner.should_receive(:story_runner).and_return(story_runner = mock("story runner"))
+ Spec::Story::Runner::StoryMediator.should_receive(:new).with(runner.steps, story_runner, {}).
+ and_return(mediator = stub("mediator", :run_stories => nil))
+ runner.run
+ end
+
+ it "should build up a parser with the mediator" do
+ runner = PlainTextStoryRunner.new("path")
+ Spec::Story::Runner.should_receive(:story_runner).and_return(story_runner = mock("story runner"))
+ 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
+ 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
+ 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
+ end
+
+ it "should tell you if you try to run with no path set" do
+ runner = PlainTextStoryRunner.new
+ lambda {
+ runner.run
+ }.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
+ 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
+ end
+
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/spec/spec/story/runner/scenario_collector_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/scenario_collector_spec.rb
new file mode 100644
index 000000000..042c41e8d
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/runner/scenario_collector_spec.rb
@@ -0,0 +1,27 @@
+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/gems/rspec/spec/spec/story/runner/scenario_runner_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/scenario_runner_spec.rb
new file mode 100644
index 000000000..a69ed4a99
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/runner/scenario_runner_spec.rb
@@ -0,0 +1,142 @@
+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
+
+ it 'should notify listeners when a scenario succeeds' 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
+ 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 notify listeners ONCE when a scenario raises an error' do
+ # given
+ error = RuntimeError.new('oops')
+ story = Story.new 'title', 'narrative' do end
+ scenario = Scenario.new story, 'scenario1' do
+ end
+ scenario_runner = ScenarioRunner.new
+ mock_listener = stub_everything('listener')
+ scenario_runner.add_listener(mock_listener)
+ world = stub_everything
+
+ # expect
+ world.should_receive(:errors).twice.and_return([error, error])
+ mock_listener.should_receive(:scenario_failed).with('title', 'scenario1', error).once
+
+ # when
+ scenario_runner.run scenario, world
+
+ # then
+ end
+
+ it 'should notify listeners when a scenario is pending' 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
+ mock_listener = mock('listener')
+ scenario_runner.add_listener(mock_listener)
+ world = stub_everything
+
+ # expect
+ world.should_receive(:errors).twice.and_return([pending_error, pending_error])
+ 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
+ end
+ end
+ end
+end
diff --git a/vendor/gems/rspec/spec/spec/story/runner/story_mediator_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/story_mediator_spec.rb
new file mode 100644
index 000000000..4192e483a
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/runner/story_mediator_spec.rb
@@ -0,0 +1,133 @@
+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/gems/rspec/spec/spec/story/runner/story_parser_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/story_parser_spec.rb
new file mode 100644
index 000000000..5efc8fd18
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/runner/story_parser_spec.rb
@@ -0,0 +1,384 @@
+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/gems/rspec/spec/spec/story/runner/story_runner_spec.rb b/vendor/gems/rspec/spec/spec/story/runner/story_runner_spec.rb
new file mode 100644
index 000000000..0fc46405a
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/runner/story_runner_spec.rb
@@ -0,0 +1,256 @@
+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 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 => 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 => 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/gems/rspec/spec/spec/story/runner_spec.rb b/vendor/gems/rspec/spec/spec/story/runner_spec.rb
new file mode 100644
index 000000000..81e852640
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/runner_spec.rb
@@ -0,0 +1,106 @@
+require File.dirname(__FILE__) + '/story_helper'
+
+module Spec
+ module Story
+ describe Runner, "module" do
+ def dev_null
+ io = StringIO.new
+ def io.write(str)
+ str.to_s.size
+ end
+ return io
+ end
+
+ before :each do
+ Kernel.stub!(:at_exit)
+ @stdout, $stdout = $stdout, dev_null
+ @argv = Array.new(ARGV)
+ @runner_module = Runner.dup
+ @world_creator = World.dup
+ @runner_module.module_eval { @run_options = @story_runner = @scenario_runner = @world_creator = nil }
+ end
+
+ after :each do
+ $stdout = @stdout
+ ARGV.replace @argv
+ @runner_module.module_eval { @run_options = @story_runner = @scenario_runner = @world_creator = nil }
+ 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
+ ARGV << '--dry-run'
+
+ # when
+ options = @runner_module.run_options
+
+ # then
+ options.dry_run.should be_true
+ end
+
+ it 'should add a reporter to the runner classes' 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::class_eval { @world_creator = world_creator }
+ @runner_module::StoryRunner.stub!(:new).and_return(story_runner)
+ @runner_module::ScenarioRunner.stub!(:new).and_return(scenario_runner)
+
+ # 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
+ # given
+ ARGV << "--format" << "html"
+ 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::class_eval { @world_creator = world_creator }
+ @runner_module::StoryRunner.stub!(:new).and_return(story_runner)
+ @runner_module::ScenarioRunner.stub!(:new).and_return(scenario_runner)
+
+ # 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
+ ARGV << "--format" << "html"
+ 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::class_eval { @world_creator = world_creator }
+ @runner_module::StoryRunner.stub!(:new).and_return(story_runner)
+ @runner_module::ScenarioRunner.stub!(:new).and_return(scenario_runner)
+
+ 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
diff --git a/vendor/gems/rspec/spec/spec/story/scenario_spec.rb b/vendor/gems/rspec/spec/spec/story/scenario_spec.rb
new file mode 100644
index 000000000..0cf7aff30
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/scenario_spec.rb
@@ -0,0 +1,20 @@
+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/gems/rspec/spec/spec/story/step_group_spec.rb b/vendor/gems/rspec/spec/spec/story/step_group_spec.rb
new file mode 100644
index 000000000..dd28bfa26
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/step_group_spec.rb
@@ -0,0 +1,157 @@
+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/gems/rspec/spec/spec/story/step_mother_spec.rb b/vendor/gems/rspec/spec/spec/story/step_mother_spec.rb
new file mode 100644
index 000000000..64efd7a6a
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/step_mother_spec.rb
@@ -0,0 +1,72 @@
+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/gems/rspec/spec/spec/story/step_spec.rb b/vendor/gems/rspec/spec/spec/story/step_spec.rb
new file mode 100644
index 000000000..0b6e515e9
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/step_spec.rb
@@ -0,0 +1,200 @@
+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 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
+
+ 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/gems/rspec/spec/spec/story/story_helper.rb b/vendor/gems/rspec/spec/spec/story/story_helper.rb
new file mode 100644
index 000000000..bb906f255
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/story_helper.rb
@@ -0,0 +1,2 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+require File.dirname(__FILE__) + '/builders'
diff --git a/vendor/gems/rspec/spec/spec/story/story_spec.rb b/vendor/gems/rspec/spec/spec/story/story_spec.rb
new file mode 100644
index 000000000..21257e9a7
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/story_spec.rb
@@ -0,0 +1,86 @@
+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 when error 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 => 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/gems/rspec/spec/spec/story/world_spec.rb b/vendor/gems/rspec/spec/spec/story/world_spec.rb
new file mode 100644
index 000000000..f5113dc42
--- /dev/null
+++ b/vendor/gems/rspec/spec/spec/story/world_spec.rb
@@ -0,0 +1,423 @@
+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/gems/rspec/spec/spec/translator_spec.rb b/vendor/gems/rspec/spec/spec/translator_spec.rb
index e11983a42..01293d9ee 100644
--- a/vendor/gems/rspec/spec/spec/translator_spec.rb
+++ b/vendor/gems/rspec/spec/spec/translator_spec.rb
@@ -1,4 +1,5 @@
require File.dirname(__FILE__) + '/../spec_helper.rb'
+require 'spec/translator'
describe "Translator" do
before do
@@ -7,7 +8,7 @@ describe "Translator" do
it "should translate files" do
from = File.dirname(__FILE__) + '/..'
- to = File.dirname(__FILE__) + '/../../translated_specs'
+ to = "#{Dir.tmpdir}/translated_specs"
@t.translate_dir(from, to)
end
diff --git a/vendor/gems/rspec/spec/spec_helper.rb b/vendor/gems/rspec/spec/spec_helper.rb
index a7a4a82db..1318176d5 100644
--- a/vendor/gems/rspec/spec/spec_helper.rb
+++ b/vendor/gems/rspec/spec/spec_helper.rb
@@ -1,5 +1,4 @@
require 'stringio'
-require 'rbconfig'
dir = File.dirname(__FILE__)
lib_path = File.expand_path("#{dir}/../lib")
@@ -8,9 +7,10 @@ $_spec_spec = true # Prevents Kernel.exit in various places
require 'spec'
require 'spec/mocks'
-require 'hpricot' # Needed to compare generated with wanted HTML
+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'
module Spec
module Matchers
@@ -40,7 +40,64 @@ module Spec
def pass
Pass.new
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
+ end
+
+ def load_files(files)
+ 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
+ attr_reader :options
+
+ before(:all) do
+ @original_rspec_options = $rspec_options
+ end
+
+ before(:each) do
+ @options = ::Spec::Runner::Options.new(StringIO.new, StringIO.new)
+ $rspec_options = options
+ end
+
+ after do
+ $rspec_options = @original_rspec_options
+ end
+end \ No newline at end of file
diff --git a/vendor/gems/rspec/stories/all.rb b/vendor/gems/rspec/stories/all.rb
new file mode 100644
index 000000000..c2428fdf8
--- /dev/null
+++ b/vendor/gems/rspec/stories/all.rb
@@ -0,0 +1,5 @@
+require File.join(File.dirname(__FILE__), *%w[helper])
+
+["example_groups","interop"].each do |dir|
+ require File.join(File.dirname(__FILE__), "#{dir}/stories")
+end
diff --git a/vendor/gems/rspec/stories/example_groups/autogenerated_docstrings b/vendor/gems/rspec/stories/example_groups/autogenerated_docstrings
new file mode 100644
index 000000000..b3ff68998
--- /dev/null
+++ b/vendor/gems/rspec/stories/example_groups/autogenerated_docstrings
@@ -0,0 +1,45 @@
+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/gems/rspec/stories/example_groups/example_group_with_should_methods b/vendor/gems/rspec/stories/example_groups/example_group_with_should_methods
new file mode 100644
index 000000000..3d2bc61eb
--- /dev/null
+++ b/vendor/gems/rspec/stories/example_groups/example_group_with_should_methods
@@ -0,0 +1,17 @@
+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/gems/rspec/stories/example_groups/nested_groups b/vendor/gems/rspec/stories/example_groups/nested_groups
new file mode 100644
index 000000000..ede978563
--- /dev/null
+++ b/vendor/gems/rspec/stories/example_groups/nested_groups
@@ -0,0 +1,17 @@
+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/gems/rspec/stories/example_groups/output b/vendor/gems/rspec/stories/example_groups/output
new file mode 100644
index 000000000..4947bdcaf
--- /dev/null
+++ b/vendor/gems/rspec/stories/example_groups/output
@@ -0,0 +1,25 @@
+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/gems/rspec/stories/example_groups/stories.rb b/vendor/gems/rspec/stories/example_groups/stories.rb
new file mode 100644
index 000000000..e45882a93
--- /dev/null
+++ b/vendor/gems/rspec/stories/example_groups/stories.rb
@@ -0,0 +1,7 @@
+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/gems/rspec/stories/helper.rb b/vendor/gems/rspec/stories/helper.rb
new file mode 100644
index 000000000..d9a105e76
--- /dev/null
+++ b/vendor/gems/rspec/stories/helper.rb
@@ -0,0 +1,6 @@
+$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/gems/rspec/stories/interop/examples_and_tests_together b/vendor/gems/rspec/stories/interop/examples_and_tests_together
new file mode 100644
index 000000000..6583f89c6
--- /dev/null
+++ b/vendor/gems/rspec/stories/interop/examples_and_tests_together
@@ -0,0 +1,30 @@
+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/gems/rspec/stories/interop/stories.rb b/vendor/gems/rspec/stories/interop/stories.rb
new file mode 100644
index 000000000..e45882a93
--- /dev/null
+++ b/vendor/gems/rspec/stories/interop/stories.rb
@@ -0,0 +1,7 @@
+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/gems/rspec/stories/interop/test_case_with_should_methods b/vendor/gems/rspec/stories/interop/test_case_with_should_methods
new file mode 100644
index 000000000..d618c50e2
--- /dev/null
+++ b/vendor/gems/rspec/stories/interop/test_case_with_should_methods
@@ -0,0 +1,17 @@
+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/gems/rspec/stories/pending_stories/README b/vendor/gems/rspec/stories/pending_stories/README
new file mode 100644
index 000000000..2f9b44314
--- /dev/null
+++ b/vendor/gems/rspec/stories/pending_stories/README
@@ -0,0 +1,3 @@
+This directory contains stories that are currently not passing
+because they are new or they represent regressions.
+
diff --git a/vendor/gems/rspec/stories/resources/helpers/cmdline.rb b/vendor/gems/rspec/stories/resources/helpers/cmdline.rb
new file mode 100644
index 000000000..ab86bd3e1
--- /dev/null
+++ b/vendor/gems/rspec/stories/resources/helpers/cmdline.rb
@@ -0,0 +1,9 @@
+$:.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/gems/rspec/stories/resources/helpers/story_helper.rb b/vendor/gems/rspec/stories/resources/helpers/story_helper.rb
new file mode 100644
index 000000000..e0aef5b45
--- /dev/null
+++ b/vendor/gems/rspec/stories/resources/helpers/story_helper.rb
@@ -0,0 +1,16 @@
+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/gems/rspec/stories/resources/matchers/smart_match.rb b/vendor/gems/rspec/stories/resources/matchers/smart_match.rb
new file mode 100644
index 000000000..7b1672bc0
--- /dev/null
+++ b/vendor/gems/rspec/stories/resources/matchers/smart_match.rb
@@ -0,0 +1,37 @@
+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/gems/rspec/stories/resources/spec/example_group_with_should_methods.rb b/vendor/gems/rspec/stories/resources/spec/example_group_with_should_methods.rb
new file mode 100644
index 000000000..4c0505d2a
--- /dev/null
+++ b/vendor/gems/rspec/stories/resources/spec/example_group_with_should_methods.rb
@@ -0,0 +1,12 @@
+$:.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/gems/rspec/stories/resources/spec/simple_spec.rb b/vendor/gems/rspec/stories/resources/spec/simple_spec.rb
new file mode 100644
index 000000000..2fb67ba49
--- /dev/null
+++ b/vendor/gems/rspec/stories/resources/spec/simple_spec.rb
@@ -0,0 +1,8 @@
+$:.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/gems/rspec/stories/resources/steps/running_rspec.rb b/vendor/gems/rspec/stories/resources/steps/running_rspec.rb
new file mode 100644
index 000000000..496847fe4
--- /dev/null
+++ b/vendor/gems/rspec/stories/resources/steps/running_rspec.rb
@@ -0,0 +1,50 @@
+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/gems/rspec/stories/resources/stories/failing_story.rb b/vendor/gems/rspec/stories/resources/stories/failing_story.rb
new file mode 100644
index 000000000..cc9506c66
--- /dev/null
+++ b/vendor/gems/rspec/stories/resources/stories/failing_story.rb
@@ -0,0 +1,15 @@
+$:.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/gems/rspec/stories/resources/test/spec_and_test_together.rb b/vendor/gems/rspec/stories/resources/test/spec_and_test_together.rb
new file mode 100644
index 000000000..eb2b4e074
--- /dev/null
+++ b/vendor/gems/rspec/stories/resources/test/spec_and_test_together.rb
@@ -0,0 +1,57 @@
+$:.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/gems/rspec/stories/resources/test/test_case_with_should_methods.rb b/vendor/gems/rspec/stories/resources/test/test_case_with_should_methods.rb
new file mode 100644
index 000000000..3912429e3
--- /dev/null
+++ b/vendor/gems/rspec/stories/resources/test/test_case_with_should_methods.rb
@@ -0,0 +1,30 @@
+$:.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