newbamboo-rspec 1.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.autotest +4 -0
- data/History.txt +1263 -0
- data/License.txt +22 -0
- data/Manifest.txt +327 -0
- data/README.txt +57 -0
- data/Rakefile +104 -0
- data/TODO.txt +18 -0
- data/bin/autospec +4 -0
- data/bin/spec +4 -0
- data/examples/failing/README.txt +7 -0
- data/examples/failing/diffing_spec.rb +36 -0
- data/examples/failing/failing_autogenerated_docstrings_example.rb +19 -0
- data/examples/failing/failure_in_after.rb +10 -0
- data/examples/failing/failure_in_before.rb +10 -0
- data/examples/failing/mocking_example.rb +40 -0
- data/examples/failing/mocking_with_flexmock.rb +26 -0
- data/examples/failing/mocking_with_mocha.rb +25 -0
- data/examples/failing/mocking_with_rr.rb +27 -0
- data/examples/failing/partial_mock_example.rb +20 -0
- data/examples/failing/predicate_example.rb +34 -0
- data/examples/failing/raising_example.rb +47 -0
- data/examples/failing/spec_helper.rb +3 -0
- data/examples/failing/syntax_error_example.rb +7 -0
- data/examples/failing/team_spec.rb +44 -0
- data/examples/failing/timeout_behaviour.rb +7 -0
- data/examples/passing/autogenerated_docstrings_example.rb +25 -0
- data/examples/passing/before_and_after_example.rb +40 -0
- data/examples/passing/behave_as_example.rb +45 -0
- data/examples/passing/custom_expectation_matchers.rb +54 -0
- data/examples/passing/custom_formatter.rb +12 -0
- data/examples/passing/dynamic_spec.rb +9 -0
- data/examples/passing/file_accessor.rb +19 -0
- data/examples/passing/file_accessor_spec.rb +38 -0
- data/examples/passing/greeter_spec.rb +31 -0
- data/examples/passing/helper_method_example.rb +14 -0
- data/examples/passing/io_processor.rb +8 -0
- data/examples/passing/io_processor_spec.rb +21 -0
- data/examples/passing/legacy_spec.rb +11 -0
- data/examples/passing/mocking_example.rb +27 -0
- data/examples/passing/multi_threaded_example_group_runner.rb +26 -0
- data/examples/passing/nested_classes_example.rb +36 -0
- data/examples/passing/partial_mock_example.rb +29 -0
- data/examples/passing/pending_example.rb +20 -0
- data/examples/passing/predicate_example.rb +27 -0
- data/examples/passing/priority.txt +1 -0
- data/examples/passing/shared_example_group_example.rb +81 -0
- data/examples/passing/shared_stack_examples.rb +36 -0
- data/examples/passing/simple_matcher_example.rb +31 -0
- data/examples/passing/spec_helper.rb +3 -0
- data/examples/passing/stack.rb +36 -0
- data/examples/passing/stack_spec.rb +64 -0
- data/examples/passing/stack_spec_with_nested_example_groups.rb +67 -0
- data/examples/passing/stubbing_example.rb +69 -0
- data/examples/passing/yielding_example.rb +33 -0
- data/examples/ruby1.9.compatibility/access_to_constants_spec.rb +86 -0
- data/features/before_and_after_blocks/before_and_after_blocks.feature +168 -0
- data/features/example_groups/autogenerated_docstrings.feature +45 -0
- data/features/example_groups/example_group_with_should_methods.feature +17 -0
- data/features/example_groups/nested_groups.feature +17 -0
- data/features/example_groups/output.feature +20 -0
- data/features/interop/examples_and_tests_together.feature +31 -0
- data/features/interop/test_but_not_test_unit.feature +14 -0
- data/features/interop/test_case_with_should_methods.feature +17 -0
- data/features/mock_framework_integration/use_flexmock.feature +27 -0
- data/features/step_definitions/running_rspec.rb +54 -0
- data/features/support/env.rb +26 -0
- data/features/support/helpers/cmdline.rb +9 -0
- data/features/support/matchers/smart_match.rb +37 -0
- data/init.rb +9 -0
- data/lib/adapters/mock_frameworks/flexmock.rb +24 -0
- data/lib/adapters/mock_frameworks/mocha.rb +20 -0
- data/lib/adapters/mock_frameworks/rr.rb +22 -0
- data/lib/adapters/mock_frameworks/rspec.rb +20 -0
- data/lib/autotest/discover.rb +3 -0
- data/lib/autotest/rspec.rb +47 -0
- data/lib/spec/dsl/main.rb +87 -0
- data/lib/spec/dsl.rb +1 -0
- data/lib/spec/example/before_and_after_hooks.rb +99 -0
- data/lib/spec/example/errors.rb +30 -0
- data/lib/spec/example/example_group.rb +26 -0
- data/lib/spec/example/example_group_factory.rb +98 -0
- data/lib/spec/example/example_group_methods.rb +376 -0
- data/lib/spec/example/example_matcher.rb +44 -0
- data/lib/spec/example/example_methods.rb +137 -0
- data/lib/spec/example/module_reopening_fix.rb +21 -0
- data/lib/spec/example/pending.rb +18 -0
- data/lib/spec/example/shared_example_group.rb +59 -0
- data/lib/spec/example.rb +187 -0
- data/lib/spec/expectations/differs/default.rb +66 -0
- data/lib/spec/expectations/errors.rb +12 -0
- data/lib/spec/expectations/extensions/object.rb +63 -0
- data/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
- data/lib/spec/expectations/extensions.rb +2 -0
- data/lib/spec/expectations/handler.rb +32 -0
- data/lib/spec/expectations.rb +60 -0
- data/lib/spec/interop/test/unit/autorunner.rb +6 -0
- data/lib/spec/interop/test/unit/testcase.rb +73 -0
- data/lib/spec/interop/test/unit/testresult.rb +6 -0
- data/lib/spec/interop/test/unit/testsuite_adapter.rb +34 -0
- data/lib/spec/interop/test/unit/ui/console/testrunner.rb +61 -0
- data/lib/spec/interop/test.rb +12 -0
- data/lib/spec/matchers/be.rb +208 -0
- data/lib/spec/matchers/be_close.rb +21 -0
- data/lib/spec/matchers/change.rb +148 -0
- data/lib/spec/matchers/eql.rb +25 -0
- data/lib/spec/matchers/equal.rb +25 -0
- data/lib/spec/matchers/errors.rb +5 -0
- data/lib/spec/matchers/exist.rb +16 -0
- data/lib/spec/matchers/generated_descriptions.rb +48 -0
- data/lib/spec/matchers/has.rb +15 -0
- data/lib/spec/matchers/have.rb +150 -0
- data/lib/spec/matchers/include.rb +80 -0
- data/lib/spec/matchers/match.rb +22 -0
- data/lib/spec/matchers/match_array.rb +79 -0
- data/lib/spec/matchers/method_missing.rb +9 -0
- data/lib/spec/matchers/operator_matcher.rb +70 -0
- data/lib/spec/matchers/raise_error.rb +128 -0
- data/lib/spec/matchers/respond_to.rb +71 -0
- data/lib/spec/matchers/satisfy.rb +47 -0
- data/lib/spec/matchers/simple_matcher.rb +132 -0
- data/lib/spec/matchers/throw_symbol.rb +106 -0
- data/lib/spec/matchers/wrap_expectation.rb +55 -0
- data/lib/spec/matchers.rb +141 -0
- data/lib/spec/mocks/argument_expectation.rb +49 -0
- data/lib/spec/mocks/argument_matchers.rb +237 -0
- data/lib/spec/mocks/error_generator.rb +82 -0
- data/lib/spec/mocks/errors.rb +10 -0
- data/lib/spec/mocks/extensions/object.rb +3 -0
- data/lib/spec/mocks/extensions.rb +1 -0
- data/lib/spec/mocks/framework.rb +15 -0
- data/lib/spec/mocks/message_expectation.rb +331 -0
- data/lib/spec/mocks/methods.rb +51 -0
- data/lib/spec/mocks/mock.rb +55 -0
- data/lib/spec/mocks/order_group.rb +29 -0
- data/lib/spec/mocks/proxy.rb +230 -0
- data/lib/spec/mocks/space.rb +28 -0
- data/lib/spec/mocks/spec_methods.rb +55 -0
- data/lib/spec/mocks.rb +200 -0
- data/lib/spec/rake/spectask.rb +225 -0
- data/lib/spec/rake/verify_rcov.rb +52 -0
- data/lib/spec/ruby.rb +9 -0
- data/lib/spec/runner/backtrace_tweaker.rb +58 -0
- data/lib/spec/runner/class_and_arguments_parser.rb +14 -0
- data/lib/spec/runner/command_line.rb +35 -0
- data/lib/spec/runner/configuration.rb +166 -0
- data/lib/spec/runner/drb_command_line.rb +20 -0
- data/lib/spec/runner/example_group_runner.rb +70 -0
- data/lib/spec/runner/formatter/base_formatter.rb +79 -0
- data/lib/spec/runner/formatter/base_text_formatter.rb +127 -0
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +27 -0
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +20 -0
- data/lib/spec/runner/formatter/html_formatter.rb +340 -0
- data/lib/spec/runner/formatter/nested_text_formatter.rb +65 -0
- data/lib/spec/runner/formatter/profile_formatter.rb +51 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +34 -0
- data/lib/spec/runner/formatter/snippet_extractor.rb +52 -0
- data/lib/spec/runner/formatter/specdoc_formatter.rb +39 -0
- data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
- data/lib/spec/runner/heckle_runner.rb +74 -0
- data/lib/spec/runner/heckle_runner_unsupported.rb +10 -0
- data/lib/spec/runner/option_parser.rb +204 -0
- data/lib/spec/runner/options.rb +320 -0
- data/lib/spec/runner/reporter.rb +167 -0
- data/lib/spec/runner/spec_parser.rb +73 -0
- data/lib/spec/runner.rb +88 -0
- data/lib/spec/version.rb +15 -0
- data/lib/spec.rb +7 -0
- data/resources/rake/examples.rake +7 -0
- data/resources/rake/examples_with_rcov.rake +9 -0
- data/resources/rake/failing_examples_with_html.rake +9 -0
- data/resources/rake/verify_rcov.rake +7 -0
- data/resources/spec/example_group_with_should_methods.rb +12 -0
- data/resources/spec/simple_spec.rb +8 -0
- data/resources/test/spec_and_test_together.rb +57 -0
- data/resources/test/spec_including_test_but_not_unit.rb +11 -0
- data/resources/test/test_case_with_should_methods.rb +30 -0
- data/rspec.gemspec +32 -0
- data/spec/README.jruby +15 -0
- data/spec/autotest/autotest_helper.rb +6 -0
- data/spec/autotest/autotest_matchers.rb +47 -0
- data/spec/autotest/discover_spec.rb +8 -0
- data/spec/autotest/failed_results_re_spec.rb +24 -0
- data/spec/autotest/rspec_spec.rb +114 -0
- data/spec/rspec_suite.rb +6 -0
- data/spec/ruby_forker.rb +13 -0
- data/spec/spec/dsl/main_spec.rb +88 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +49 -0
- data/spec/spec/example/example_group_factory_spec.rb +224 -0
- data/spec/spec/example/example_group_methods_spec.rb +653 -0
- data/spec/spec/example/example_group_spec.rb +661 -0
- data/spec/spec/example/example_matcher_spec.rb +79 -0
- data/spec/spec/example/example_methods_spec.rb +204 -0
- data/spec/spec/example/helper_method_spec.rb +24 -0
- data/spec/spec/example/nested_example_group_spec.rb +71 -0
- data/spec/spec/example/pending_module_spec.rb +139 -0
- data/spec/spec/example/predicate_matcher_spec.rb +21 -0
- data/spec/spec/example/shared_example_group_spec.rb +257 -0
- data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
- data/spec/spec/expectations/differs/default_spec.rb +127 -0
- data/spec/spec/expectations/extensions/object_spec.rb +45 -0
- data/spec/spec/expectations/fail_with_spec.rb +71 -0
- data/spec/spec/expectations/wrap_expectation_spec.rb +30 -0
- data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_with_options_hash.rb +13 -0
- data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
- data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
- data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
- data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
- data/spec/spec/interop/test/unit/spec_spec.rb +48 -0
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +18 -0
- data/spec/spec/interop/test/unit/testcase_spec.rb +49 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
- data/spec/spec/matchers/be_close_spec.rb +41 -0
- data/spec/spec/matchers/be_spec.rb +303 -0
- data/spec/spec/matchers/change_spec.rb +329 -0
- data/spec/spec/matchers/description_generation_spec.rb +172 -0
- data/spec/spec/matchers/eql_spec.rb +29 -0
- data/spec/spec/matchers/equal_spec.rb +29 -0
- data/spec/spec/matchers/exist_spec.rb +57 -0
- data/spec/spec/matchers/handler_spec.rb +111 -0
- data/spec/spec/matchers/has_spec.rb +63 -0
- data/spec/spec/matchers/have_spec.rb +399 -0
- data/spec/spec/matchers/include_spec.rb +88 -0
- data/spec/spec/matchers/match_array_spec.rb +83 -0
- data/spec/spec/matchers/match_spec.rb +37 -0
- data/spec/spec/matchers/matcher_methods_spec.rb +66 -0
- data/spec/spec/matchers/operator_matcher_spec.rb +191 -0
- data/spec/spec/matchers/raise_error_spec.rb +333 -0
- data/spec/spec/matchers/respond_to_spec.rb +116 -0
- data/spec/spec/matchers/satisfy_spec.rb +36 -0
- data/spec/spec/matchers/simple_matcher_spec.rb +93 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +96 -0
- data/spec/spec/mocks/any_number_of_times_spec.rb +36 -0
- data/spec/spec/mocks/argument_expectation_spec.rb +23 -0
- data/spec/spec/mocks/at_least_spec.rb +97 -0
- data/spec/spec/mocks/at_most_spec.rb +93 -0
- data/spec/spec/mocks/bug_report_10260_spec.rb +8 -0
- data/spec/spec/mocks/bug_report_10263_spec.rb +24 -0
- data/spec/spec/mocks/bug_report_11545_spec.rb +32 -0
- data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
- data/spec/spec/mocks/bug_report_496.rb +19 -0
- data/spec/spec/mocks/bug_report_600_spec.rb +22 -0
- data/spec/spec/mocks/bug_report_7611_spec.rb +19 -0
- data/spec/spec/mocks/bug_report_7805_spec.rb +22 -0
- data/spec/spec/mocks/bug_report_8165_spec.rb +31 -0
- data/spec/spec/mocks/bug_report_8302_spec.rb +26 -0
- data/spec/spec/mocks/failing_argument_matchers_spec.rb +95 -0
- data/spec/spec/mocks/hash_including_matcher_spec.rb +90 -0
- data/spec/spec/mocks/hash_not_including_matcher_spec.rb +67 -0
- data/spec/spec/mocks/mock_ordering_spec.rb +84 -0
- data/spec/spec/mocks/mock_space_spec.rb +54 -0
- data/spec/spec/mocks/mock_spec.rb +579 -0
- data/spec/spec/mocks/multiple_return_value_spec.rb +113 -0
- data/spec/spec/mocks/nil_expectation_warning_spec.rb +53 -0
- data/spec/spec/mocks/null_object_mock_spec.rb +54 -0
- data/spec/spec/mocks/once_counts_spec.rb +53 -0
- data/spec/spec/mocks/options_hash_spec.rb +35 -0
- data/spec/spec/mocks/partial_mock_spec.rb +149 -0
- data/spec/spec/mocks/partial_mock_using_mocks_directly_spec.rb +66 -0
- data/spec/spec/mocks/passing_argument_matchers_spec.rb +145 -0
- data/spec/spec/mocks/precise_counts_spec.rb +52 -0
- data/spec/spec/mocks/record_messages_spec.rb +26 -0
- data/spec/spec/mocks/stub_spec.rb +194 -0
- data/spec/spec/mocks/stubbed_message_expectations_spec.rb +14 -0
- data/spec/spec/mocks/twice_counts_spec.rb +67 -0
- data/spec/spec/package/bin_spec_spec.rb +22 -0
- data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
- data/spec/spec/runner/command_line_spec.rb +141 -0
- data/spec/spec/runner/configuration_spec.rb +301 -0
- data/spec/spec/runner/drb_command_line_spec.rb +97 -0
- data/spec/spec/runner/empty_file.txt +0 -0
- data/spec/spec/runner/example_group_runner_spec.rb +33 -0
- data/spec/spec/runner/examples.txt +2 -0
- data/spec/spec/runner/failed.txt +3 -0
- data/spec/spec/runner/formatter/base_formatter_spec.rb +23 -0
- data/spec/spec/runner/formatter/base_text_formatter_spec.rb +23 -0
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +45 -0
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +33 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +379 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.7.html +379 -0
- data/spec/spec/runner/formatter/html_formatted-1.9.1.html +379 -0
- data/spec/spec/runner/formatter/html_formatter_spec.rb +62 -0
- data/spec/spec/runner/formatter/nested_text_formatter_spec.rb +318 -0
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +145 -0
- data/spec/spec/runner/formatter/snippet_extractor_spec.rb +18 -0
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +104 -0
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +159 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +373 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.7.html +373 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.9.1.html +373 -0
- data/spec/spec/runner/heckle_runner_spec.rb +78 -0
- data/spec/spec/runner/heckler_spec.rb +20 -0
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +45 -0
- data/spec/spec/runner/option_parser_spec.rb +396 -0
- data/spec/spec/runner/options_spec.rb +469 -0
- data/spec/spec/runner/output_one_time_fixture.rb +7 -0
- data/spec/spec/runner/output_one_time_fixture_runner.rb +8 -0
- data/spec/spec/runner/output_one_time_spec.rb +16 -0
- data/spec/spec/runner/quiet_backtrace_tweaker_spec.rb +62 -0
- data/spec/spec/runner/reporter_spec.rb +238 -0
- data/spec/spec/runner/resources/a_bar.rb +0 -0
- data/spec/spec/runner/resources/a_foo.rb +0 -0
- data/spec/spec/runner/resources/a_spec.rb +1 -0
- data/spec/spec/runner/resources/custom_example_group_runner.rb +14 -0
- data/spec/spec/runner/resources/utf8_encoded.rb +7 -0
- data/spec/spec/runner/spec.opts +2 -0
- data/spec/spec/runner/spec_drb.opts +1 -0
- data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
- data/spec/spec/runner/spec_parser_spec.rb +91 -0
- data/spec/spec/runner/spec_spaced.opts +2 -0
- data/spec/spec/runner_spec.rb +11 -0
- data/spec/spec/spec_classes.rb +133 -0
- data/spec/spec/spec_spec.rb +21 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +107 -0
- metadata +388 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
Feature: before and after blocks
|
|
2
|
+
|
|
3
|
+
As a developer using RSpec
|
|
4
|
+
I want to execute arbitrary code before and after each example
|
|
5
|
+
So that I can control the environment in which it is run
|
|
6
|
+
|
|
7
|
+
This is supported by the before and after methods which each take a symbol
|
|
8
|
+
indicating the scope, and a block of code to execute.
|
|
9
|
+
|
|
10
|
+
before(:each) blocks are run before each example
|
|
11
|
+
before(:all) blocks are run once before all of the examples in a group
|
|
12
|
+
before(:suite) blocks are run once before the entire suite
|
|
13
|
+
|
|
14
|
+
after(:each) blocks are run after each example
|
|
15
|
+
after(:all) blocks are run once after all of the examples in a group
|
|
16
|
+
after(:suite) blocks are run once after the entire suite
|
|
17
|
+
|
|
18
|
+
Before and after blocks are called in the following order:
|
|
19
|
+
before suite
|
|
20
|
+
before all
|
|
21
|
+
before each
|
|
22
|
+
after each
|
|
23
|
+
after all
|
|
24
|
+
after suite
|
|
25
|
+
|
|
26
|
+
Before and after blocks can be defined in the example groups to which they
|
|
27
|
+
apply or in a configuration. When defined in a configuration, they can be
|
|
28
|
+
applied to all groups or subsets of all groups defined by example group
|
|
29
|
+
types.
|
|
30
|
+
|
|
31
|
+
Scenario: define before(:each) block in example group
|
|
32
|
+
Given the following spec:
|
|
33
|
+
"""
|
|
34
|
+
class Thing
|
|
35
|
+
def widgets
|
|
36
|
+
@widgets ||= []
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe Thing do
|
|
41
|
+
before(:each) do
|
|
42
|
+
@thing = Thing.new
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context "initialized in before(:each)" do
|
|
46
|
+
it "has 0 widgets" do
|
|
47
|
+
@thing.should have(0).widgets
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "can get accept new widgets" do
|
|
51
|
+
@thing.widgets << Object.new
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "does not share state across examples" do
|
|
55
|
+
@thing.should have(0).widgets
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
"""
|
|
60
|
+
When I run it with the spec command
|
|
61
|
+
Then the stdout should match "3 examples, 0 failures"
|
|
62
|
+
|
|
63
|
+
Scenario: define before(:all) block in example group
|
|
64
|
+
Given the following spec:
|
|
65
|
+
"""
|
|
66
|
+
class Thing
|
|
67
|
+
def widgets
|
|
68
|
+
@widgets ||= []
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe Thing do
|
|
73
|
+
before(:all) do
|
|
74
|
+
@thing = Thing.new
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
context "initialized in before(:all)" do
|
|
78
|
+
it "has 0 widgets" do
|
|
79
|
+
@thing.should have(0).widgets
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "can get accept new widgets" do
|
|
83
|
+
@thing.widgets << Object.new
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "shares state across examples" do
|
|
87
|
+
@thing.should have(1).widgets
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
"""
|
|
92
|
+
When I run it with the spec command
|
|
93
|
+
Then the stdout should match "3 examples, 0 failures"
|
|
94
|
+
|
|
95
|
+
Scenario: define before and after blocks in configuration
|
|
96
|
+
Given the following spec:
|
|
97
|
+
"""
|
|
98
|
+
Spec::Runner.configure do |config|
|
|
99
|
+
config.before(:suite) do
|
|
100
|
+
$before_suite = "before suite"
|
|
101
|
+
end
|
|
102
|
+
config.before(:each) do
|
|
103
|
+
@before_each = "before each"
|
|
104
|
+
end
|
|
105
|
+
config.before(:all) do
|
|
106
|
+
@before_all = "before all"
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
describe "stuff in before blocks" do
|
|
111
|
+
describe "with :suite" do
|
|
112
|
+
it "should be available in the example" do
|
|
113
|
+
$before_suite.should == "before suite"
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
describe "with :all" do
|
|
117
|
+
it "should be available in the example" do
|
|
118
|
+
@before_all.should == "before all"
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
describe "with :each" do
|
|
122
|
+
it "should be available in the example" do
|
|
123
|
+
@before_each.should == "before each"
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
"""
|
|
128
|
+
When I run it with the spec command
|
|
129
|
+
Then the stdout should match "3 examples, 0 failures"
|
|
130
|
+
|
|
131
|
+
Scenario: before/after blocks are run in order
|
|
132
|
+
Given the following spec:
|
|
133
|
+
"""
|
|
134
|
+
Spec::Runner.configure do |config|
|
|
135
|
+
config.before(:suite) do
|
|
136
|
+
puts "before suite"
|
|
137
|
+
end
|
|
138
|
+
config.after(:suite) do
|
|
139
|
+
puts "after suite"
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
describe "before and after callbacks" do
|
|
144
|
+
before(:all) do
|
|
145
|
+
puts "before all"
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
before(:each) do
|
|
149
|
+
puts "before each"
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
after(:each) do
|
|
153
|
+
puts "after each"
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
after(:all) do
|
|
157
|
+
puts "after all"
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
it "gets run in order" do
|
|
161
|
+
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
"""
|
|
165
|
+
|
|
166
|
+
When I run it with the spec command
|
|
167
|
+
Then the stdout should match /before suite\nbefore all\nbefore each\nafter each\n\.after all\n.*after suite/m
|
|
168
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Feature: autogenerated docstrings
|
|
2
|
+
|
|
3
|
+
As an RSpec user
|
|
4
|
+
I want examples to generate their own names
|
|
5
|
+
So that I can reduce duplication between example names and example code
|
|
6
|
+
|
|
7
|
+
Scenario: run passing examples with ruby
|
|
8
|
+
Given the file ../../examples/passing/autogenerated_docstrings_example.rb
|
|
9
|
+
|
|
10
|
+
When I run it with the ruby interpreter -fs
|
|
11
|
+
|
|
12
|
+
Then the stdout should match /should equal 5/
|
|
13
|
+
And the stdout should match /should be < 5/
|
|
14
|
+
And the stdout should match /should include "a"/
|
|
15
|
+
And the stdout should match /should respond to #size/
|
|
16
|
+
|
|
17
|
+
Scenario: run failing examples with ruby
|
|
18
|
+
Given the file ../../examples/failing/failing_autogenerated_docstrings_example.rb
|
|
19
|
+
|
|
20
|
+
When I run it with the ruby interpreter -fs
|
|
21
|
+
|
|
22
|
+
Then the stdout should match /should equal 2/
|
|
23
|
+
And the stdout should match /should be > 5/
|
|
24
|
+
And the stdout should match /should include "b"/
|
|
25
|
+
And the stdout should match /should not respond to #size/
|
|
26
|
+
|
|
27
|
+
Scenario: run passing examples with spec
|
|
28
|
+
Given the file ../../examples/passing/autogenerated_docstrings_example.rb
|
|
29
|
+
|
|
30
|
+
When I run it with the spec command -fs
|
|
31
|
+
|
|
32
|
+
Then the stdout should match /should equal 5/
|
|
33
|
+
And the stdout should match /should be < 5/
|
|
34
|
+
And the stdout should match /should include "a"/
|
|
35
|
+
And the stdout should match /should respond to #size/
|
|
36
|
+
|
|
37
|
+
Scenario: run failing examples with spec
|
|
38
|
+
Given the file ../../examples/failing/failing_autogenerated_docstrings_example.rb
|
|
39
|
+
|
|
40
|
+
When I run it with the spec command -fs
|
|
41
|
+
|
|
42
|
+
Then the stdout should match /should equal 2/
|
|
43
|
+
And the stdout should match /should be > 5/
|
|
44
|
+
And the stdout should match /should include "b"/
|
|
45
|
+
And the stdout should match /should not respond to #size/
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Feature: Spec::ExampleGroup with should methods
|
|
2
|
+
|
|
3
|
+
As an RSpec adopter accustomed to classes and methods
|
|
4
|
+
I want to use should_* methods in an ExampleGroup
|
|
5
|
+
So that I use RSpec with classes and methods that look more like RSpec examples
|
|
6
|
+
|
|
7
|
+
Scenario: Run with ruby
|
|
8
|
+
Given the file ../../resources/spec/example_group_with_should_methods.rb
|
|
9
|
+
When I run it with the ruby interpreter
|
|
10
|
+
Then the exit code should be 256
|
|
11
|
+
And the stdout should match "2 examples, 1 failure"
|
|
12
|
+
|
|
13
|
+
Scenario: Run with spec
|
|
14
|
+
Given the file ../../resources/spec/example_group_with_should_methods.rb
|
|
15
|
+
When I run it with the spec command
|
|
16
|
+
Then the exit code should be 256
|
|
17
|
+
And the stdout should match "2 examples, 1 failure"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Feature: Nested example groups
|
|
2
|
+
|
|
3
|
+
As an RSpec user
|
|
4
|
+
I want to nest examples groups
|
|
5
|
+
So that I can better organize my examples
|
|
6
|
+
|
|
7
|
+
Scenario: Run with ruby
|
|
8
|
+
Given the file ../../examples/passing/stack_spec_with_nested_example_groups.rb
|
|
9
|
+
When I run it with the ruby interpreter -fs
|
|
10
|
+
Then the stdout should match /Stack \(empty\)/
|
|
11
|
+
And the stdout should match /Stack \(full\)/
|
|
12
|
+
|
|
13
|
+
Scenario: Run with spec
|
|
14
|
+
Given the file ../../examples/passing/stack_spec_with_nested_example_groups.rb
|
|
15
|
+
When I run it with the spec command -fs
|
|
16
|
+
Then the stdout should match /Stack \(empty\)/
|
|
17
|
+
And the stdout should match /Stack \(full\)/
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Feature: Getting correct output
|
|
2
|
+
|
|
3
|
+
As an RSpec user
|
|
4
|
+
I want to see output only once
|
|
5
|
+
So that I don't get confused
|
|
6
|
+
|
|
7
|
+
Scenario: Run with ruby
|
|
8
|
+
Given the file ../../resources/spec/simple_spec.rb
|
|
9
|
+
When I run it with the ruby interpreter
|
|
10
|
+
Then the exit code should be 0
|
|
11
|
+
And the stdout should not match /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/m
|
|
12
|
+
And the stdout should match "1 example, 0 failures"
|
|
13
|
+
|
|
14
|
+
Scenario: Run with CommandLine object
|
|
15
|
+
Given the file ../../resources/spec/simple_spec.rb
|
|
16
|
+
When I run it with the CommandLine object
|
|
17
|
+
Then the exit code should be 0
|
|
18
|
+
And the stdout should not match "Loaded suite"
|
|
19
|
+
And the stdout should not match /\d+ tests, \d+ assertions, \d+ failures, \d+ errors/m
|
|
20
|
+
And the stdout should match "1 example, 0 failures"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
Feature: Spec and test together
|
|
2
|
+
|
|
3
|
+
As an RSpec adopter with existing Test::Unit tests
|
|
4
|
+
I want to run a few specs alongside my existing Test::Unit tests
|
|
5
|
+
So that I can experience a smooth, gradual migration path
|
|
6
|
+
|
|
7
|
+
Scenario: Run with ruby
|
|
8
|
+
Given the file ../../resources/test/spec_and_test_together.rb
|
|
9
|
+
|
|
10
|
+
When I run it with the ruby interpreter -fs
|
|
11
|
+
|
|
12
|
+
Then the exit code should be 256
|
|
13
|
+
And the stdout should match "ATest"
|
|
14
|
+
And the stdout should match "Test::Unit::AssertionFailedError in 'An Example should fail with assert'"
|
|
15
|
+
And the stdout should match "'An Example should fail with should' FAILED"
|
|
16
|
+
And the stdout should match "10 examples, 6 failures"
|
|
17
|
+
And the stdout should match /expected: 40,\s*got: 4/m
|
|
18
|
+
And the stdout should match /expected: 50,\s*got: 5/m
|
|
19
|
+
|
|
20
|
+
Scenario: Run with spec
|
|
21
|
+
Given the file ../../resources/test/spec_and_test_together.rb
|
|
22
|
+
|
|
23
|
+
When I run it with the spec command -fs
|
|
24
|
+
|
|
25
|
+
Then the exit code should be 256
|
|
26
|
+
And the stdout should match "ATest"
|
|
27
|
+
And the stdout should match "Test::Unit::AssertionFailedError in 'An Example should fail with assert'"
|
|
28
|
+
And the stdout should match "'An Example should fail with should' FAILED"
|
|
29
|
+
And the stdout should match "10 examples, 6 failures"
|
|
30
|
+
And the stdout should match /expected: 40,\s*got: 4/m
|
|
31
|
+
And the stdout should match /expected: 50,\s*got: 5/m
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Story: Test is defined, but not Test::Unit
|
|
2
|
+
|
|
3
|
+
As an RSpec user who has my own library named Test (but not Test::Unit)
|
|
4
|
+
I want to run examples without getting Test::Unit NameErrors
|
|
5
|
+
|
|
6
|
+
Scenario: Run with ruby
|
|
7
|
+
Given the file ../../resources/test/spec_including_test_but_not_unit.rb
|
|
8
|
+
When I run it with the ruby interpreter
|
|
9
|
+
Then the stderr should not match "Test::Unit"
|
|
10
|
+
|
|
11
|
+
Scenario: Run with spec
|
|
12
|
+
Given the file ../../resources/test/spec_including_test_but_not_unit.rb
|
|
13
|
+
When I run it with the spec command
|
|
14
|
+
Then the stderr should not match "Test::Unit"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Story: Test::Unit::TestCase extended by rspec with should methods
|
|
2
|
+
|
|
3
|
+
As an RSpec adopter with existing Test::Unit tests
|
|
4
|
+
I want to use should_* methods in a Test::Unit::TestCase
|
|
5
|
+
So that I use RSpec with classes and methods that look more like RSpec examples
|
|
6
|
+
|
|
7
|
+
Scenario: Run with ruby
|
|
8
|
+
Given the file ../../resources/test/test_case_with_should_methods.rb
|
|
9
|
+
When I run it with the ruby interpreter
|
|
10
|
+
Then the exit code should be 256
|
|
11
|
+
And the stdout should match "5 examples, 3 failures"
|
|
12
|
+
|
|
13
|
+
Scenario: Run with spec
|
|
14
|
+
Given the file ../../resources/test/test_case_with_should_methods.rb
|
|
15
|
+
When I run it with the spec command
|
|
16
|
+
Then the exit code should be 256
|
|
17
|
+
And the stdout should match "5 examples, 3 failures"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
Feature: mock with flexmock
|
|
2
|
+
|
|
3
|
+
As an RSpec user who prefers flexmock
|
|
4
|
+
I want to be able to use flexmock without rspec mocks interfering
|
|
5
|
+
|
|
6
|
+
Scenario: Mock with flexmock
|
|
7
|
+
Given the following spec:
|
|
8
|
+
"""
|
|
9
|
+
Spec::Runner.configure do |config|
|
|
10
|
+
config.mock_with :flexmock
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "plugging in flexmock" do
|
|
14
|
+
it "allows flexmock to be used" do
|
|
15
|
+
target = Object.new
|
|
16
|
+
flexmock(target).should_receive(:foo).once
|
|
17
|
+
target.foo
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "does not include rspec mocks" do
|
|
21
|
+
Spec.const_defined?(:Mocks).should be_false
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
"""
|
|
25
|
+
When I run it with the spec command
|
|
26
|
+
Then the exit code should be 0
|
|
27
|
+
And the stdout should match "2 examples, 0 failures"
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
Given /^the file (.*)$/ do |relative_path|
|
|
2
|
+
@path = File.expand_path(File.join(File.dirname(__FILE__), "..", "support", relative_path))
|
|
3
|
+
unless File.exist?(@path)
|
|
4
|
+
raise "could not find file at #{@path}"
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
Given /^the following spec:$/ do |spec|
|
|
9
|
+
@path = "/tmp/example_spec.rb"
|
|
10
|
+
File.open(@path, "w") do |f|
|
|
11
|
+
f.write spec
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
When /^I run it with the (.*)$/ do |interpreter|
|
|
16
|
+
stderr_file = Tempfile.new('rspec')
|
|
17
|
+
stderr_file.close
|
|
18
|
+
@stdout = case(interpreter)
|
|
19
|
+
when /^ruby interpreter/
|
|
20
|
+
args = interpreter.gsub('ruby interpreter','')
|
|
21
|
+
ruby("#{@path}#{args}", stderr_file.path)
|
|
22
|
+
when /^spec command/
|
|
23
|
+
args = interpreter.gsub('spec command','')
|
|
24
|
+
spec("#{@path}#{args}", stderr_file.path)
|
|
25
|
+
when 'CommandLine object' then cmdline(@path, stderr_file.path)
|
|
26
|
+
else raise "Unknown interpreter: #{interpreter}"
|
|
27
|
+
end
|
|
28
|
+
@stderr = IO.read(stderr_file.path)
|
|
29
|
+
@exit_code = $?.to_i
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
Then /^the (.*) should match (.*)$/ do |stream, string_or_regex|
|
|
33
|
+
written = case(stream)
|
|
34
|
+
when 'stdout' then @stdout
|
|
35
|
+
when 'stderr' then @stderr
|
|
36
|
+
else raise "Unknown stream: #{stream}"
|
|
37
|
+
end
|
|
38
|
+
written.should smart_match(string_or_regex)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
Then /^the (.*) should not match (.*)$/ do |stream, string_or_regex|
|
|
42
|
+
written = case(stream)
|
|
43
|
+
when 'stdout' then @stdout
|
|
44
|
+
when 'stderr' then @stderr
|
|
45
|
+
else raise "Unknown stream: #{stream}"
|
|
46
|
+
end
|
|
47
|
+
written.should_not smart_match(string_or_regex)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
Then /^the exit code should be (\d+)$/ do |exit_code|
|
|
51
|
+
if @exit_code != exit_code.to_i
|
|
52
|
+
raise "Did not exit with #{exit_code}, but with #{@exit_code}. Standard error:\n#{@stderr}"
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'tempfile'
|
|
2
|
+
require File.dirname(__FILE__) + '/../../spec/ruby_forker'
|
|
3
|
+
require File.dirname(__FILE__) + '/matchers/smart_match'
|
|
4
|
+
|
|
5
|
+
$:.push File.join(File.dirname(__FILE__), "/../../lib")
|
|
6
|
+
require 'spec/expectations'
|
|
7
|
+
require 'spec/matchers'
|
|
8
|
+
|
|
9
|
+
module RspecWorld
|
|
10
|
+
include Spec::Expectations
|
|
11
|
+
include Spec::Matchers
|
|
12
|
+
include RubyForker
|
|
13
|
+
|
|
14
|
+
def spec(args, stderr)
|
|
15
|
+
ruby("#{File.dirname(__FILE__) + '/../../bin/spec'} #{args}", stderr)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def cmdline(args, stderr)
|
|
19
|
+
ruby("#{File.dirname(__FILE__) + '/helpers/cmdline.rb'} #{args}", stderr)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
World do |world|
|
|
24
|
+
world.extend(RspecWorld)
|
|
25
|
+
world
|
|
26
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
$:.push File.join(File.dirname(__FILE__), *%w[.. .. .. lib])
|
|
2
|
+
require 'spec'
|
|
3
|
+
|
|
4
|
+
# Uncommenting next line will break the output feature (no output!!)
|
|
5
|
+
# rspec_options
|
|
6
|
+
options = Spec::Runner::OptionParser.parse(
|
|
7
|
+
ARGV, $stderr, $stdout
|
|
8
|
+
)
|
|
9
|
+
Spec::Runner::CommandLine.run(options)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module Spec
|
|
2
|
+
module Matchers
|
|
3
|
+
class SmartMatch
|
|
4
|
+
def initialize(expected)
|
|
5
|
+
@expected = expected
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def matches?(actual)
|
|
9
|
+
@actual = actual
|
|
10
|
+
# Satisfy expectation here. Return false or raise an error if it's not met.
|
|
11
|
+
|
|
12
|
+
if @expected =~ /^\/.*\/?$/ || @expected =~ /^".*"$/
|
|
13
|
+
regex_or_string = eval(@expected)
|
|
14
|
+
if Regexp === regex_or_string
|
|
15
|
+
(@actual =~ regex_or_string) ? true : false
|
|
16
|
+
else
|
|
17
|
+
@actual.index(regex_or_string) != nil
|
|
18
|
+
end
|
|
19
|
+
else
|
|
20
|
+
false
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def failure_message
|
|
25
|
+
"expected #{@actual.inspect} to smart_match #{@expected.inspect}, but it didn't"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def negative_failure_message
|
|
29
|
+
"expected #{@actual.inspect} not to smart_match #{@expected.inspect}, but it did"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def smart_match(expected)
|
|
34
|
+
SmartMatch.new(expected)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
data/init.rb
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Placeholder to satisfy Rails.
|
|
2
|
+
#
|
|
3
|
+
# Do NOT add any require statements to this file. Doing
|
|
4
|
+
# so will cause Rails to load this plugin all of the time.
|
|
5
|
+
#
|
|
6
|
+
# Running 'ruby script/generate rspec' will
|
|
7
|
+
# generate spec/spec_helper.rb, which includes the necessary
|
|
8
|
+
# require statements and configuration. This file should
|
|
9
|
+
# be required by all of your spec files.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# Created by Jim Weirich on 2007-04-10.
|
|
4
|
+
# Copyright (c) 2007. All rights reserved.
|
|
5
|
+
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
require 'flexmock/rspec'
|
|
8
|
+
|
|
9
|
+
module Spec
|
|
10
|
+
module Adapters
|
|
11
|
+
module MockFramework
|
|
12
|
+
include FlexMock::MockContainer
|
|
13
|
+
def setup_mocks_for_rspec
|
|
14
|
+
# No setup required
|
|
15
|
+
end
|
|
16
|
+
def verify_mocks_for_rspec
|
|
17
|
+
flexmock_verify
|
|
18
|
+
end
|
|
19
|
+
def teardown_mocks_for_rspec
|
|
20
|
+
flexmock_close
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'mocha/standalone'
|
|
3
|
+
require 'mocha/object'
|
|
4
|
+
|
|
5
|
+
module Spec
|
|
6
|
+
module Adapters
|
|
7
|
+
module MockFramework
|
|
8
|
+
include Mocha::Standalone
|
|
9
|
+
def setup_mocks_for_rspec
|
|
10
|
+
mocha_setup
|
|
11
|
+
end
|
|
12
|
+
def verify_mocks_for_rspec
|
|
13
|
+
mocha_verify
|
|
14
|
+
end
|
|
15
|
+
def teardown_mocks_for_rspec
|
|
16
|
+
mocha_teardown
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'rr'
|
|
3
|
+
|
|
4
|
+
patterns = ::Spec::Runner::QuietBacktraceTweaker::IGNORE_PATTERNS
|
|
5
|
+
patterns.push(RR::Errors::BACKTRACE_IDENTIFIER)
|
|
6
|
+
|
|
7
|
+
module Spec
|
|
8
|
+
module Adapters
|
|
9
|
+
module MockFramework
|
|
10
|
+
include RR::Extensions::InstanceMethods
|
|
11
|
+
def setup_mocks_for_rspec
|
|
12
|
+
RR::Space.instance.reset
|
|
13
|
+
end
|
|
14
|
+
def verify_mocks_for_rspec
|
|
15
|
+
RR::Space.instance.verify_doubles
|
|
16
|
+
end
|
|
17
|
+
def teardown_mocks_for_rspec
|
|
18
|
+
RR::Space.instance.reset
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "spec", "mocks"))
|
|
2
|
+
require 'spec/mocks/framework'
|
|
3
|
+
require 'spec/mocks/extensions'
|
|
4
|
+
|
|
5
|
+
module Spec
|
|
6
|
+
module Adapters
|
|
7
|
+
module MockFramework
|
|
8
|
+
include Spec::Mocks::ExampleMethods
|
|
9
|
+
def setup_mocks_for_rspec
|
|
10
|
+
$rspec_mocks ||= Spec::Mocks::Space.new
|
|
11
|
+
end
|
|
12
|
+
def verify_mocks_for_rspec
|
|
13
|
+
$rspec_mocks.verify_all
|
|
14
|
+
end
|
|
15
|
+
def teardown_mocks_for_rspec
|
|
16
|
+
$rspec_mocks.reset_all
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'autotest'
|
|
2
|
+
|
|
3
|
+
Autotest.add_hook :initialize do |at|
|
|
4
|
+
at.clear_mappings
|
|
5
|
+
# watch out: Ruby bug (1.8.6):
|
|
6
|
+
# %r(/) != /\//
|
|
7
|
+
at.add_mapping(%r%^spec/.*_spec.rb$%) { |filename, _|
|
|
8
|
+
filename
|
|
9
|
+
}
|
|
10
|
+
at.add_mapping(%r%^lib/(.*)\.rb$%) { |_, m|
|
|
11
|
+
["spec/#{m[1]}_spec.rb"]
|
|
12
|
+
}
|
|
13
|
+
at.add_mapping(%r%^spec/(spec_helper|shared/.*)\.rb$%) {
|
|
14
|
+
at.files_matching %r%^spec/.*_spec\.rb$%
|
|
15
|
+
}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class RspecCommandError < StandardError; end
|
|
19
|
+
|
|
20
|
+
class Autotest::Rspec < Autotest
|
|
21
|
+
|
|
22
|
+
def initialize
|
|
23
|
+
super
|
|
24
|
+
self.failed_results_re = /^\d+\)\n(?:\e\[\d*m)?(?:.*?in )?'([^\n]*)'(?: FAILED)?(?:\e\[\d*m)?\n(.*?)\n\n/m
|
|
25
|
+
self.completed_re = /\n(?:\e\[\d*m)?\d* examples?/m
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def consolidate_failures(failed)
|
|
29
|
+
filters = new_hash_of_arrays
|
|
30
|
+
failed.each do |spec, trace|
|
|
31
|
+
if trace =~ /\n(\.\/)?(.*spec\.rb):[\d]+:/
|
|
32
|
+
filters[$2] << spec
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
return filters
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def make_test_cmd(files_to_test)
|
|
39
|
+
return '' if files_to_test.empty?
|
|
40
|
+
spec_program = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'bin', 'spec'))
|
|
41
|
+
return "#{ruby} #{spec_program} #{files_to_test.keys.flatten.join(' ')} #{add_options_if_present}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def add_options_if_present # :nodoc:
|
|
45
|
+
File.exist?("spec/spec.opts") ? "-O spec/spec.opts " : ""
|
|
46
|
+
end
|
|
47
|
+
end
|