rspec 1.0.8 → 1.1.0
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/CHANGES +122 -2
- data/README +10 -9
- data/Rakefile +22 -49
- data/TODO +2 -0
- data/bin/spec +1 -1
- data/bin/spec_translator +8 -8
- data/examples/{auto_spec_description_example.rb → pure/autogenerated_docstrings_example.rb} +0 -0
- data/examples/{before_and_after_example.rb → pure/before_and_after_example.rb} +1 -0
- data/examples/{behave_as_example.rb → pure/behave_as_example.rb} +0 -0
- data/examples/{custom_expectation_matchers.rb → pure/custom_expectation_matchers.rb} +0 -0
- data/examples/{custom_formatter.rb → pure/custom_formatter.rb} +1 -0
- data/examples/{dynamic_spec.rb → pure/dynamic_spec.rb} +0 -0
- data/examples/{file_accessor.rb → pure/file_accessor.rb} +1 -0
- data/examples/{file_accessor_spec.rb → pure/file_accessor_spec.rb} +0 -0
- data/examples/{greeter_spec.rb → pure/greeter_spec.rb} +1 -0
- data/examples/{helper_method_example.rb → pure/helper_method_example.rb} +0 -0
- data/examples/{io_processor.rb → pure/io_processor.rb} +0 -0
- data/examples/{io_processor_spec.rb → pure/io_processor_spec.rb} +0 -0
- data/examples/{legacy_spec.rb → pure/legacy_spec.rb} +1 -0
- data/examples/{mocking_example.rb → pure/mocking_example.rb} +0 -0
- data/examples/pure/multi_threaded_behaviour_runner.rb +28 -0
- data/examples/pure/nested_classes_example.rb +36 -0
- data/examples/{partial_mock_example.rb → pure/partial_mock_example.rb} +0 -0
- data/examples/{pending_example.rb → pure/pending_example.rb} +0 -0
- data/examples/{predicate_example.rb → pure/predicate_example.rb} +0 -0
- data/examples/{priority.txt → pure/priority.txt} +0 -0
- data/examples/pure/shared_example_group_example.rb +66 -0
- data/examples/pure/shared_stack_examples.rb +38 -0
- data/examples/pure/spec_helper.rb +3 -0
- data/examples/{stack.rb → pure/stack.rb} +0 -0
- data/examples/{stack_spec.rb → pure/stack_spec.rb} +1 -35
- data/examples/pure/stack_spec_with_nested_example_groups.rb +67 -0
- data/examples/{stubbing_example.rb → pure/stubbing_example.rb} +0 -0
- data/examples/stories/adder.rb +13 -0
- data/examples/stories/addition +34 -0
- data/examples/stories/addition.rb +9 -0
- data/examples/stories/calculator.rb +65 -0
- data/examples/stories/game-of-life/README.txt +21 -0
- data/examples/stories/game-of-life/behaviour/everything.rb +6 -0
- data/examples/stories/game-of-life/behaviour/examples/examples.rb +3 -0
- data/examples/stories/game-of-life/behaviour/examples/game_behaviour.rb +35 -0
- data/examples/stories/game-of-life/behaviour/examples/grid_behaviour.rb +66 -0
- data/examples/stories/game-of-life/behaviour/stories/CellsWithLessThanTwoNeighboursDie.story +21 -0
- data/examples/stories/game-of-life/behaviour/stories/CellsWithMoreThanThreeNeighboursDie.story +21 -0
- data/examples/stories/game-of-life/behaviour/stories/EmptySpacesWithThreeNeighboursCreateACell.story +42 -0
- data/examples/stories/game-of-life/behaviour/stories/ICanCreateACell.story +42 -0
- data/examples/stories/game-of-life/behaviour/stories/ICanKillACell.story +17 -0
- data/examples/stories/game-of-life/behaviour/stories/TheGridWraps.story +53 -0
- data/examples/stories/game-of-life/behaviour/stories/create_a_cell.rb +52 -0
- data/examples/stories/game-of-life/behaviour/stories/helper.rb +6 -0
- data/examples/stories/game-of-life/behaviour/stories/kill_a_cell.rb +26 -0
- data/examples/stories/game-of-life/behaviour/stories/steps.rb +5 -0
- data/examples/stories/game-of-life/behaviour/stories/stories.rb +3 -0
- data/examples/stories/game-of-life/behaviour/stories/stories.txt +22 -0
- data/examples/stories/game-of-life/life.rb +3 -0
- data/examples/stories/game-of-life/life/game.rb +23 -0
- data/examples/stories/game-of-life/life/grid.rb +43 -0
- data/examples/stories/helper.rb +9 -0
- data/examples/stories/steps/addition_steps.rb +18 -0
- data/lib/autotest/rspec.rb +1 -2
- data/lib/spec.rb +30 -6
- data/lib/spec/example.rb +12 -0
- data/lib/spec/{dsl → example}/configuration.rb +48 -39
- data/lib/spec/{dsl → example}/errors.rb +2 -2
- data/lib/spec/example/example_group.rb +16 -0
- data/lib/spec/example/example_group_factory.rb +62 -0
- data/lib/spec/example/example_group_methods.rb +412 -0
- data/lib/spec/example/example_matcher.rb +42 -0
- data/lib/spec/example/example_methods.rb +101 -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 +58 -0
- data/lib/spec/expectations/differs/default.rb +15 -10
- data/lib/spec/expectations/errors.rb +7 -1
- data/lib/spec/expectations/extensions/object.rb +12 -7
- data/lib/spec/expectations/handler.rb +13 -4
- data/lib/spec/extensions.rb +2 -0
- data/lib/spec/extensions/class.rb +24 -0
- data/lib/spec/extensions/main.rb +54 -0
- data/lib/spec/extensions/object.rb +5 -1
- data/lib/spec/interop/test.rb +10 -0
- data/lib/spec/interop/test/unit/autorunner.rb +6 -0
- data/lib/spec/interop/test/unit/testcase.rb +61 -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 +60 -0
- data/lib/spec/matchers.rb +11 -15
- data/lib/spec/matchers/be.rb +23 -6
- data/lib/spec/matchers/change.rb +25 -1
- data/lib/spec/matchers/exist.rb +17 -0
- data/lib/spec/matchers/operator_matcher.rb +1 -0
- data/lib/spec/matchers/simple_matcher.rb +29 -0
- data/lib/spec/matchers/throw_symbol.rb +2 -0
- data/lib/spec/mocks.rb +5 -2
- data/lib/spec/mocks/argument_expectation.rb +1 -1
- data/lib/spec/mocks/message_expectation.rb +62 -44
- data/lib/spec/mocks/methods.rb +2 -2
- data/lib/spec/mocks/mock.rb +24 -3
- data/lib/spec/mocks/proxy.rb +26 -23
- data/lib/spec/mocks/space.rb +1 -1
- data/lib/spec/mocks/spec_methods.rb +20 -12
- data/lib/spec/rake/spectask.rb +19 -1
- data/lib/spec/rake/verify_rcov.rb +1 -1
- data/lib/spec/runner.rb +33 -10
- data/lib/spec/runner/backtrace_tweaker.rb +3 -3
- data/lib/spec/runner/class_and_arguments_parser.rb +16 -0
- data/lib/spec/runner/command_line.rb +18 -12
- data/lib/spec/runner/drb_command_line.rb +4 -5
- data/lib/spec/runner/example_group_runner.rb +59 -0
- data/lib/spec/runner/formatter/base_formatter.rb +10 -8
- data/lib/spec/runner/formatter/base_text_formatter.rb +18 -18
- data/lib/spec/runner/formatter/failing_example_groups_formatter.rb +31 -0
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +3 -5
- data/lib/spec/runner/formatter/html_formatter.rb +37 -27
- data/lib/spec/runner/formatter/profile_formatter.rb +47 -0
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +3 -4
- data/lib/spec/runner/formatter/specdoc_formatter.rb +27 -13
- data/lib/spec/runner/formatter/story/html_formatter.rb +124 -0
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +123 -0
- data/lib/spec/runner/formatter/text_mate_formatter.rb +16 -0
- data/lib/spec/runner/heckle_runner.rb +9 -9
- data/lib/spec/runner/option_parser.rb +140 -138
- data/lib/spec/runner/options.rb +168 -90
- data/lib/spec/runner/reporter.rb +58 -40
- data/lib/spec/runner/spec_parser.rb +11 -8
- data/lib/spec/story.rb +10 -0
- data/lib/spec/story/extensions.rb +1 -0
- data/lib/spec/story/extensions/main.rb +86 -0
- data/lib/spec/story/given_scenario.rb +14 -0
- data/lib/spec/story/runner.rb +58 -0
- data/lib/spec/story/runner/plain_text_story_runner.rb +48 -0
- data/lib/spec/story/runner/scenario_collector.rb +18 -0
- data/lib/spec/story/runner/scenario_runner.rb +46 -0
- data/lib/spec/story/runner/story_mediator.rb +123 -0
- data/lib/spec/story/runner/story_parser.rb +227 -0
- data/lib/spec/story/runner/story_runner.rb +67 -0
- data/lib/spec/story/scenario.rb +14 -0
- data/lib/spec/story/step.rb +48 -0
- data/lib/spec/story/step_group.rb +89 -0
- data/lib/spec/story/step_mother.rb +37 -0
- data/lib/spec/story/story.rb +42 -0
- data/lib/spec/story/world.rb +124 -0
- data/lib/spec/version.rb +4 -5
- data/plugins/mock_frameworks/rspec.rb +1 -1
- data/spec/autotest/rspec_spec.rb +13 -7
- data/spec/autotest_helper.rb +4 -3
- data/spec/rspec_suite.rb +7 -0
- data/spec/ruby_forker.rb +13 -0
- data/spec/spec/example/configuration_spec.rb +290 -0
- data/spec/spec/example/example_group_class_definition_spec.rb +48 -0
- data/spec/spec/example/example_group_factory_spec.rb +129 -0
- data/spec/spec/example/example_group_methods_spec.rb +465 -0
- data/spec/spec/example/example_group_spec.rb +711 -0
- data/spec/spec/{dsl → example}/example_matcher_spec.rb +23 -18
- data/spec/spec/example/example_methods_spec.rb +75 -0
- data/spec/spec/example/example_runner_spec.rb +194 -0
- data/spec/spec/example/example_spec.rb +53 -0
- data/spec/spec/example/nested_example_group_spec.rb +59 -0
- data/spec/spec/example/pending_module_spec.rb +31 -0
- data/spec/spec/{dsl → example}/predicate_matcher_spec.rb +1 -1
- data/spec/spec/example/shared_example_group_spec.rb +265 -0
- data/spec/spec/example/subclassing_example_group_spec.rb +25 -0
- data/spec/spec/expectations/differs/default_spec.rb +5 -3
- data/spec/spec/expectations/extensions/object_spec.rb +63 -2
- data/spec/spec/extensions/main_spec.rb +50 -0
- data/spec/spec/interop/test/unit/test_unit_spec_helper.rb +14 -0
- data/spec/spec/interop/test/unit/testcase_spec.rb +10 -0
- data/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb +20 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +9 -0
- data/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb +34 -0
- data/spec/spec/matchers/be_spec.rb +15 -0
- data/spec/spec/matchers/change_spec.rb +87 -0
- data/spec/spec/matchers/description_generation_spec.rb +31 -37
- data/spec/spec/matchers/exist_spec.rb +31 -22
- data/spec/spec/matchers/handler_spec.rb +42 -1
- data/spec/spec/matchers/have_spec.rb +1 -1
- data/spec/spec/matchers/mock_constraint_matchers_spec.rb +1 -1
- data/spec/spec/matchers/operator_matcher_spec.rb +1 -1
- data/spec/spec/matchers/simple_matcher_spec.rb +31 -0
- data/spec/spec/matchers/throw_symbol_spec.rb +4 -1
- data/spec/spec/mocks/bug_report_10263.rb +24 -0
- data/spec/spec/mocks/bug_report_15719_spec.rb +30 -0
- data/spec/spec/mocks/bug_report_8165_spec.rb +2 -2
- data/spec/spec/mocks/failing_mock_argument_constraints_spec.rb +1 -0
- data/spec/spec/mocks/mock_spec.rb +200 -102
- data/spec/spec/mocks/multiple_return_value_spec.rb +1 -1
- data/spec/spec/mocks/options_hash_spec.rb +19 -7
- data/spec/spec/mocks/partial_mock_spec.rb +31 -9
- data/spec/spec/mocks/passing_mock_argument_constraints_spec.rb +6 -0
- data/spec/spec/mocks/stub_spec.rb +120 -98
- data/spec/spec/package/bin_spec_spec.rb +7 -5
- data/spec/spec/runner/class_and_argument_parser_spec.rb +23 -0
- data/spec/spec/runner/command_line_spec.rb +140 -27
- data/spec/spec/runner/drb_command_line_spec.rb +39 -31
- data/spec/spec/runner/formatter/failing_example_groups_formatter_spec.rb +44 -0
- data/spec/spec/runner/formatter/failing_examples_formatter_spec.rb +16 -11
- data/spec/spec/runner/formatter/html_formatter_spec.rb +60 -50
- data/spec/spec/runner/formatter/profile_formatter_spec.rb +65 -0
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +29 -13
- data/spec/spec/runner/formatter/snippet_extractor_spec.rb +14 -7
- data/spec/spec/runner/formatter/spec_mate_formatter_spec.rb +103 -0
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +103 -39
- data/spec/spec/runner/formatter/story/html_formatter_spec.rb +56 -0
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +289 -0
- data/spec/spec/runner/heckle_runner_spec.rb +29 -14
- data/spec/spec/runner/heckler_spec.rb +4 -5
- data/spec/spec/runner/noisy_backtrace_tweaker_spec.rb +5 -5
- data/spec/spec/runner/option_parser_spec.rb +86 -58
- data/spec/spec/runner/options_spec.rb +239 -120
- 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 +6 -6
- data/spec/spec/runner/reporter_spec.rb +147 -163
- data/spec/spec/runner/spec_parser_spec.rb +31 -0
- data/spec/spec/runner_spec.rb +11 -0
- data/spec/spec/spec_classes.rb +12 -5
- data/spec/spec/story/builders.rb +46 -0
- data/spec/spec/story/extensions/main_spec.rb +161 -0
- data/spec/spec/story/extensions_spec.rb +14 -0
- data/spec/spec/story/given_scenario_spec.rb +27 -0
- data/spec/spec/story/runner/plain_text_story_runner_spec.rb +92 -0
- data/spec/spec/story/runner/scenario_collector_spec.rb +27 -0
- data/spec/spec/story/runner/scenario_runner_spec.rb +142 -0
- data/spec/spec/story/runner/story_mediator_spec.rb +133 -0
- data/spec/spec/story/runner/story_parser_spec.rb +384 -0
- data/spec/spec/story/runner/story_runner_spec.rb +219 -0
- data/spec/spec/story/runner_spec.rb +106 -0
- data/spec/spec/story/scenario_spec.rb +20 -0
- data/spec/spec/story/step_group_spec.rb +157 -0
- data/spec/spec/story/step_mother_spec.rb +72 -0
- data/spec/spec/story/step_spec.rb +147 -0
- data/spec/spec/story/story_helper.rb +2 -0
- data/spec/spec/story/story_spec.rb +86 -0
- data/spec/spec/story/world_spec.rb +416 -0
- data/spec/spec/translator_spec.rb +2 -1
- data/spec/spec_helper.rb +59 -2
- data/stories/all.rb +5 -0
- data/stories/example_groups/autogenerated_docstrings +26 -0
- data/stories/example_groups/example_group_with_should_methods +17 -0
- data/stories/example_groups/nested_groups +17 -0
- data/stories/example_groups/output +20 -0
- data/stories/example_groups/stories.rb +7 -0
- data/stories/helper.rb +6 -0
- data/stories/interop/examples_and_tests_together +30 -0
- data/stories/interop/stories.rb +7 -0
- data/stories/interop/test_case_with_should_methods +17 -0
- data/stories/pending_stories/README +3 -0
- data/stories/resources/helpers/cmdline.rb +9 -0
- data/stories/resources/helpers/story_helper.rb +16 -0
- data/stories/resources/matchers/smart_match.rb +37 -0
- data/stories/resources/spec/example_group_with_should_methods.rb +12 -0
- data/stories/resources/spec/simple_spec.rb +8 -0
- data/stories/resources/steps/running_rspec.rb +50 -0
- data/stories/resources/test/spec_and_test_together.rb +57 -0
- data/stories/resources/test/test_case_with_should_methods.rb +30 -0
- metadata +232 -106
- data/EXAMPLES.rd +0 -111
- data/examples/multi_threaded_behaviour_runner.rb +0 -25
- data/examples/shared_behaviours_example.rb +0 -39
- data/examples/spec_helper.rb +0 -1
- data/examples/test_case_adapter_example.rb +0 -26
- data/examples/test_case_spec.rb +0 -65
- data/lib/spec/dsl.rb +0 -11
- data/lib/spec/dsl/behaviour.rb +0 -220
- data/lib/spec/dsl/behaviour_callbacks.rb +0 -82
- data/lib/spec/dsl/behaviour_eval.rb +0 -231
- data/lib/spec/dsl/behaviour_factory.rb +0 -42
- data/lib/spec/dsl/composite_proc_builder.rb +0 -33
- data/lib/spec/dsl/description.rb +0 -76
- data/lib/spec/dsl/example.rb +0 -135
- data/lib/spec/dsl/example_matcher.rb +0 -40
- data/lib/spec/dsl/example_should_raise_handler.rb +0 -74
- data/lib/spec/runner/behaviour_runner.rb +0 -123
- data/lib/spec/runner/extensions/kernel.rb +0 -50
- data/lib/spec/runner/extensions/object.rb +0 -32
- data/lib/spec/runner/formatter.rb +0 -9
- data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +0 -29
- data/lib/spec/runner/formatter/rdoc_formatter.rb +0 -24
- data/lib/spec/test_case_adapter.rb +0 -10
- data/spec/spec/dsl/behaviour_eval_spec.rb +0 -79
- data/spec/spec/dsl/behaviour_factory_spec.rb +0 -48
- data/spec/spec/dsl/behaviour_spec.rb +0 -661
- data/spec/spec/dsl/composite_proc_builder_spec.rb +0 -44
- data/spec/spec/dsl/configuration_spec.rb +0 -55
- data/spec/spec/dsl/description_spec.rb +0 -89
- data/spec/spec/dsl/example_class_spec.rb +0 -24
- data/spec/spec/dsl/example_instance_spec.rb +0 -160
- data/spec/spec/dsl/example_should_raise_spec.rb +0 -137
- data/spec/spec/dsl/shared_behaviour_spec.rb +0 -252
- data/spec/spec/runner/behaviour_runner_spec.rb +0 -229
- data/spec/spec/runner/context_matching_spec.rb +0 -27
- data/spec/spec/runner/extensions/bug_report_10577_spec.rb +0 -35
- data/spec/spec/runner/extensions/kernel_spec.rb +0 -36
- data/spec/spec/runner/formatter/failing_behaviours_formatter_spec.rb +0 -40
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +0 -20
- data/spec/spec/runner/formatter/progress_bar_formatter_failure_dump_spec.rb +0 -36
- data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +0 -19
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +0 -46
- data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +0 -21
- data/spec/spec/runner/object_ext_spec.rb +0 -11
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Example
|
5
|
+
class ExampleGroupSubclass < ExampleGroup
|
6
|
+
class << self
|
7
|
+
attr_accessor :examples_ran
|
8
|
+
end
|
9
|
+
|
10
|
+
@@klass_variable_set = true
|
11
|
+
CONSTANT = :foobar
|
12
|
+
|
13
|
+
before do
|
14
|
+
@instance_variable = :hello
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should run" do
|
18
|
+
self.class.examples_ran = true
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have access to instance variables" do
|
22
|
+
@instance_variable.should == :hello
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should have access to class variables" do
|
26
|
+
@@klass_variable_set.should == true
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have access to constants" do
|
30
|
+
CONSTANT.should == :foobar
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have access to methods defined in the Example Group" do
|
34
|
+
a_method.should == 22
|
35
|
+
end
|
36
|
+
|
37
|
+
def a_method
|
38
|
+
22
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe ExampleGroupSubclass do
|
43
|
+
it "should run" do
|
44
|
+
ExampleGroupSubclass.examples_ran.should be_true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Example
|
5
|
+
describe ExampleGroupFactory, "with :foobar registered as custom type" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@example_group = Class.new(ExampleGroup)
|
9
|
+
ExampleGroupFactory.register(:foobar, @example_group)
|
10
|
+
end
|
11
|
+
|
12
|
+
after do
|
13
|
+
ExampleGroupFactory.reset
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should #get the default ExampleGroup type when passed nil" do
|
17
|
+
ExampleGroupFactory.get(nil).should == ExampleGroup
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should #get the default ExampleGroup for unregistered non-nil values" do
|
21
|
+
ExampleGroupFactory.get(:does_not_exist).should == ExampleGroup
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should #get custom type for :foobar" do
|
25
|
+
ExampleGroupFactory.get(:foobar).should == @example_group
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should #get the actual type when that is passed in" do
|
29
|
+
ExampleGroupFactory.get(@example_group).should == @example_group
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
describe ExampleGroupFactory, "#create_example_group" do
|
35
|
+
it "should create a uniquely named class" do
|
36
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {}
|
37
|
+
example_group.name.should =~ /Spec::Example::ExampleGroup::Subclass_\d+/
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should create a Spec::Example::Example subclass by default" do
|
41
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group("example_group") {}
|
42
|
+
example_group.superclass.should == Spec::Example::ExampleGroup
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should create a Spec::Example::Example when :type => :default" do
|
46
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
47
|
+
"example_group", :type => :default
|
48
|
+
) {}
|
49
|
+
example_group.superclass.should == Spec::Example::ExampleGroup
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should create a Spec::Example::Example when :type => :default" do
|
53
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
54
|
+
"example_group", :type => :default
|
55
|
+
) {}
|
56
|
+
example_group.superclass.should == Spec::Example::ExampleGroup
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should create specified type when :type => :something_other_than_default" do
|
60
|
+
klass = Class.new(ExampleGroup) do
|
61
|
+
def initialize(*args, &block); end
|
62
|
+
end
|
63
|
+
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
|
64
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
65
|
+
"example_group", :type => :something_other_than_default
|
66
|
+
) {}
|
67
|
+
example_group.superclass.should == klass
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should create a type indicated by :spec_path" do
|
71
|
+
klass = Class.new(ExampleGroup) do
|
72
|
+
def initialize(*args, &block); end
|
73
|
+
end
|
74
|
+
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
|
75
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
76
|
+
"example_group", :spec_path => "./spec/something_other_than_default/some_spec.rb"
|
77
|
+
) {}
|
78
|
+
example_group.superclass.should == klass
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should create a type indicated by :spec_path (with spec_path generated by caller on windows)" do
|
82
|
+
klass = Class.new(ExampleGroup) do
|
83
|
+
def initialize(*args, &block); end
|
84
|
+
end
|
85
|
+
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
|
86
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
87
|
+
"example_group", :spec_path => "./spec\\something_other_than_default\\some_spec.rb"
|
88
|
+
) {}
|
89
|
+
example_group.superclass.should == klass
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should create and register a Spec::Example::Example if :shared => true" do
|
93
|
+
shared_example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
94
|
+
"name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller, :shared => true
|
95
|
+
) {}
|
96
|
+
shared_example_group.should be_an_instance_of(Spec::Example::SharedExampleGroup)
|
97
|
+
SharedExampleGroup.shared_example_groups.should include(shared_example_group)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should favor the :type over the :spec_path" do
|
101
|
+
klass = Class.new(ExampleGroup) do
|
102
|
+
def initialize(*args, &block); end
|
103
|
+
end
|
104
|
+
Spec::Example::ExampleGroupFactory.register(:something_other_than_default, klass)
|
105
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group(
|
106
|
+
"name", :spec_path => '/blah/spec/models/blah.rb', :type => :something_other_than_default
|
107
|
+
) {}
|
108
|
+
example_group.superclass.should == klass
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should register ExampleGroup by default" do
|
112
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
|
113
|
+
end
|
114
|
+
rspec_options.example_groups.should include(example_group)
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should enable unregistering of ExampleGroups" do
|
118
|
+
example_group = Spec::Example::ExampleGroupFactory.create_example_group("The ExampleGroup") do
|
119
|
+
unregister
|
120
|
+
end
|
121
|
+
rspec_options.example_groups.should_not include(example_group)
|
122
|
+
end
|
123
|
+
|
124
|
+
after(:each) do
|
125
|
+
Spec::Example::ExampleGroupFactory.reset
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,465 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Example
|
5
|
+
describe ExampleGroupMethods do
|
6
|
+
it_should_behave_like "sandboxed rspec_options"
|
7
|
+
attr_reader :example_group, :result, :reporter
|
8
|
+
before(:each) do
|
9
|
+
options.formatters << mock("formatter", :null_object => true)
|
10
|
+
options.backtrace_tweaker = mock("backtrace_tweaker", :null_object => true)
|
11
|
+
@reporter = FakeReporter.new(@options)
|
12
|
+
options.reporter = reporter
|
13
|
+
@example_group = Class.new(ExampleGroup) do
|
14
|
+
describe("ExampleGroup")
|
15
|
+
it "does nothing"
|
16
|
+
end
|
17
|
+
class << example_group
|
18
|
+
public :include
|
19
|
+
end
|
20
|
+
@result = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
after(:each) do
|
24
|
+
ExampleGroup.reset
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#describe" do
|
28
|
+
attr_reader :child_example_group
|
29
|
+
before do
|
30
|
+
@child_example_group = @example_group.describe("Another ExampleGroup") do
|
31
|
+
it "should pass" do
|
32
|
+
true.should be_true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should create a subclass of the ExampleGroup when passed a block" do
|
38
|
+
child_example_group.superclass.should == @example_group
|
39
|
+
@options.example_groups.should include(child_example_group)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should not inherit examples" do
|
43
|
+
child_example_group.examples.length.should == 1
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#it" do
|
48
|
+
it "should should create an example instance" do
|
49
|
+
lambda {
|
50
|
+
@example_group.it("")
|
51
|
+
}.should change { @example_group.examples.length }.by(1)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#xit" do
|
56
|
+
before(:each) do
|
57
|
+
Kernel.stub!(:warn)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should NOT should create an example instance" do
|
61
|
+
lambda {
|
62
|
+
@example_group.xit("")
|
63
|
+
}.should_not change(@example_group.examples, :length)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should warn that it is disabled" do
|
67
|
+
Kernel.should_receive(:warn).with("Example disabled: foo")
|
68
|
+
@example_group.xit("foo")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#examples" do
|
73
|
+
it "should have Examples" do
|
74
|
+
example_group = Class.new(ExampleGroup) do
|
75
|
+
describe('example')
|
76
|
+
it "should pass" do
|
77
|
+
1.should == 1
|
78
|
+
end
|
79
|
+
end
|
80
|
+
example_group.examples.length.should == 1
|
81
|
+
example_group.examples.first.description.should == "should pass"
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should not include methods that begin with test (only when TU interop is loaded)" do
|
85
|
+
example_group = Class.new(ExampleGroup) do
|
86
|
+
describe('example')
|
87
|
+
def test_any_args(*args)
|
88
|
+
true.should be_true
|
89
|
+
end
|
90
|
+
def test_something
|
91
|
+
1.should == 1
|
92
|
+
end
|
93
|
+
def test
|
94
|
+
raise "This is not a real test"
|
95
|
+
end
|
96
|
+
def testify
|
97
|
+
raise "This is not a real test"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
example_group.examples.length.should == 0
|
101
|
+
example_group.run.should be_true
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should include methods that begin with should and has an arity of 0 in suite" do
|
105
|
+
example_group = Class.new(ExampleGroup) do
|
106
|
+
describe('example')
|
107
|
+
def shouldCamelCase
|
108
|
+
true.should be_true
|
109
|
+
end
|
110
|
+
def should_any_args(*args)
|
111
|
+
true.should be_true
|
112
|
+
end
|
113
|
+
def should_something
|
114
|
+
1.should == 1
|
115
|
+
end
|
116
|
+
def should_not_something
|
117
|
+
1.should_not == 2
|
118
|
+
end
|
119
|
+
def should
|
120
|
+
raise "This is not a real example"
|
121
|
+
end
|
122
|
+
def should_not
|
123
|
+
raise "This is not a real example"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
example_group = example_group.dup
|
127
|
+
example_group.examples.length.should == 4
|
128
|
+
descriptions = example_group.examples.collect {|example| example.description}.sort
|
129
|
+
descriptions.should include("shouldCamelCase")
|
130
|
+
descriptions.should include("should_any_args")
|
131
|
+
descriptions.should include("should_something")
|
132
|
+
descriptions.should include("should_not_something")
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should not include methods that begin with test_ and has an arity > 0 in suite" do
|
136
|
+
example_group = Class.new(ExampleGroup) do
|
137
|
+
describe('example')
|
138
|
+
def test_invalid(foo)
|
139
|
+
1.should == 1
|
140
|
+
end
|
141
|
+
def testInvalidCamelCase(foo)
|
142
|
+
1.should == 1
|
143
|
+
end
|
144
|
+
end
|
145
|
+
example_group.examples.length.should == 0
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should not include methods that begin with should_ and has an arity > 0 in suite" do
|
149
|
+
example_group = Class.new(ExampleGroup) do
|
150
|
+
describe('example')
|
151
|
+
def should_invalid(foo)
|
152
|
+
1.should == 2
|
153
|
+
end
|
154
|
+
def shouldInvalidCamelCase(foo)
|
155
|
+
1.should == 3
|
156
|
+
end
|
157
|
+
def should_not_invalid(foo)
|
158
|
+
1.should == 4
|
159
|
+
end
|
160
|
+
def should_valid
|
161
|
+
1.should == 1
|
162
|
+
end
|
163
|
+
end
|
164
|
+
example_group.examples.length.should == 1
|
165
|
+
example_group.run.should be_true
|
166
|
+
end
|
167
|
+
|
168
|
+
it "should run should_methods" do
|
169
|
+
example_group = Class.new(ExampleGroup) do
|
170
|
+
def should_valid
|
171
|
+
1.should == 2
|
172
|
+
end
|
173
|
+
end
|
174
|
+
example_group.examples.length.should == 1
|
175
|
+
example_group.run.should be_false
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
describe "#set_description" do
|
180
|
+
attr_reader :example_group
|
181
|
+
before do
|
182
|
+
class << example_group
|
183
|
+
public :set_description
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
describe "#set_description(String)" do
|
188
|
+
before(:each) do
|
189
|
+
example_group.set_description("abc")
|
190
|
+
end
|
191
|
+
|
192
|
+
specify ".description should return the String passed into .set_description" do
|
193
|
+
example_group.description.should == "abc"
|
194
|
+
end
|
195
|
+
|
196
|
+
specify ".described_type should provide nil as its type" do
|
197
|
+
example_group.described_type.should be_nil
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
describe "#set_description(Type)" do
|
202
|
+
before(:each) do
|
203
|
+
example_group.set_description(ExampleGroup)
|
204
|
+
end
|
205
|
+
|
206
|
+
specify ".description should return a String representation of that type (fully qualified) as its name" do
|
207
|
+
example_group.description.should == "Spec::Example::ExampleGroup"
|
208
|
+
end
|
209
|
+
|
210
|
+
specify ".described_type should return the passed in type" do
|
211
|
+
example_group.described_type.should == Spec::Example::ExampleGroup
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
describe "#set_description(String, Type)" do
|
216
|
+
before(:each) do
|
217
|
+
example_group.set_description("behaving", ExampleGroup)
|
218
|
+
end
|
219
|
+
|
220
|
+
specify ".description should return String then space then Type" do
|
221
|
+
example_group.description.should == "behaving Spec::Example::ExampleGroup"
|
222
|
+
end
|
223
|
+
|
224
|
+
specify ".described_type should return the passed in type" do
|
225
|
+
example_group.described_type.should == Spec::Example::ExampleGroup
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
describe "#set_description(Type, String not starting with a space)" do
|
230
|
+
before(:each) do
|
231
|
+
example_group.set_description(ExampleGroup, "behaving")
|
232
|
+
end
|
233
|
+
|
234
|
+
specify ".description should return the Type then space then String" do
|
235
|
+
example_group.description.should == "Spec::Example::ExampleGroup behaving"
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
describe "#set_description(Type, String starting with .)" do
|
240
|
+
before(:each) do
|
241
|
+
example_group.set_description(ExampleGroup, ".behaving")
|
242
|
+
end
|
243
|
+
|
244
|
+
specify ".description should return the Type then String" do
|
245
|
+
example_group.description.should == "Spec::Example::ExampleGroup.behaving"
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
describe "#set_description(Type, String containing .)" do
|
250
|
+
before(:each) do
|
251
|
+
example_group.set_description(ExampleGroup, "calling a.b")
|
252
|
+
end
|
253
|
+
|
254
|
+
specify ".description should return the Type then space then String" do
|
255
|
+
example_group.description.should == "Spec::Example::ExampleGroup calling a.b"
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
describe "#set_description(Type, String starting with .)" do
|
260
|
+
before(:each) do
|
261
|
+
example_group.set_description(ExampleGroup, ".behaving")
|
262
|
+
end
|
263
|
+
|
264
|
+
specify "should return the Type then String" do
|
265
|
+
example_group.description.should == "Spec::Example::ExampleGroup.behaving"
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
describe "#set_description(Type, String containing .)" do
|
270
|
+
before(:each) do
|
271
|
+
example_group.set_description(ExampleGroup, "is #1")
|
272
|
+
end
|
273
|
+
|
274
|
+
specify ".description should return the Type then space then String" do
|
275
|
+
example_group.description.should == "Spec::Example::ExampleGroup is #1"
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
describe "#set_description(String, Type, String)" do
|
280
|
+
before(:each) do
|
281
|
+
example_group.set_description("A", Hash, "with one entry")
|
282
|
+
end
|
283
|
+
|
284
|
+
specify ".description should return the first String then space then Type then second String" do
|
285
|
+
example_group.description.should == "A Hash with one entry"
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
describe "#set_description(Hash representing options)" do
|
290
|
+
before(:each) do
|
291
|
+
example_group.set_description(:a => "b", :spec_path => "blah")
|
292
|
+
end
|
293
|
+
|
294
|
+
it ".spec_path should expand the passed in :spec_path option passed into the constructor" do
|
295
|
+
example_group.spec_path.should == File.expand_path("blah")
|
296
|
+
end
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
describe "#description" do
|
301
|
+
it "should return the same description instance for each call" do
|
302
|
+
example_group.description.should eql(example_group.description)
|
303
|
+
end
|
304
|
+
|
305
|
+
it "should not add a space when description_text begins with #" do
|
306
|
+
child_example_group = Class.new(example_group) do
|
307
|
+
describe("#foobar", "Does something")
|
308
|
+
end
|
309
|
+
child_example_group.description.should == "ExampleGroup#foobar Does something"
|
310
|
+
end
|
311
|
+
|
312
|
+
it "should not add a space when description_text begins with ." do
|
313
|
+
child_example_group = Class.new(example_group) do
|
314
|
+
describe(".foobar", "Does something")
|
315
|
+
end
|
316
|
+
child_example_group.description.should == "ExampleGroup.foobar Does something"
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
320
|
+
describe "#description_parts" do
|
321
|
+
it "should return an Array of the current class description args" do
|
322
|
+
example_group.description_parts.should == [example_group.description]
|
323
|
+
end
|
324
|
+
|
325
|
+
it "should return an Array of the description args from each class in the hierarchy" do
|
326
|
+
child_example_group = Class.new(example_group)
|
327
|
+
child_example_group.describe("Child", ExampleGroup)
|
328
|
+
child_example_group.description.should_not be_empty
|
329
|
+
|
330
|
+
grand_child_example_group = Class.new(child_example_group)
|
331
|
+
grand_child_example_group.describe("GrandChild", ExampleGroup)
|
332
|
+
grand_child_example_group.description.should_not be_empty
|
333
|
+
|
334
|
+
grand_child_example_group.description_parts.should == [
|
335
|
+
"ExampleGroup",
|
336
|
+
"Child",
|
337
|
+
Spec::Example::ExampleGroup,
|
338
|
+
"GrandChild",
|
339
|
+
Spec::Example::ExampleGroup
|
340
|
+
]
|
341
|
+
end
|
342
|
+
end
|
343
|
+
|
344
|
+
describe "#described_type" do
|
345
|
+
it "should return passed in type" do
|
346
|
+
child_example_group = Class.new(example_group) do
|
347
|
+
describe Object
|
348
|
+
end
|
349
|
+
child_example_group.described_type.should == Object
|
350
|
+
end
|
351
|
+
|
352
|
+
it "should return #described_type of superclass when no passed in type" do
|
353
|
+
parent_example_group = Class.new(ExampleGroup) do
|
354
|
+
describe Object, "#foobar"
|
355
|
+
end
|
356
|
+
child_example_group = Class.new(parent_example_group) do
|
357
|
+
describe "not a type"
|
358
|
+
end
|
359
|
+
child_example_group.described_type.should == Object
|
360
|
+
end
|
361
|
+
end
|
362
|
+
|
363
|
+
describe "#remove_after" do
|
364
|
+
it "should unregister a given after(:each) block" do
|
365
|
+
after_all_ran = false
|
366
|
+
@example_group.it("example") {}
|
367
|
+
proc = Proc.new { after_all_ran = true }
|
368
|
+
ExampleGroup.after(:each, &proc)
|
369
|
+
@example_group.run
|
370
|
+
after_all_ran.should be_true
|
371
|
+
|
372
|
+
after_all_ran = false
|
373
|
+
ExampleGroup.remove_after(:each, &proc)
|
374
|
+
@example_group.run
|
375
|
+
after_all_ran.should be_false
|
376
|
+
end
|
377
|
+
end
|
378
|
+
|
379
|
+
describe "#include" do
|
380
|
+
it "should have accessible class methods from included module" do
|
381
|
+
mod1_method_called = false
|
382
|
+
mod1 = Module.new do
|
383
|
+
class_methods = Module.new do
|
384
|
+
define_method :mod1_method do
|
385
|
+
mod1_method_called = true
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
metaclass.class_eval do
|
390
|
+
define_method(:included) do |receiver|
|
391
|
+
receiver.extend class_methods
|
392
|
+
end
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
396
|
+
mod2_method_called = false
|
397
|
+
mod2 = Module.new do
|
398
|
+
class_methods = Module.new do
|
399
|
+
define_method :mod2_method do
|
400
|
+
mod2_method_called = true
|
401
|
+
end
|
402
|
+
end
|
403
|
+
|
404
|
+
metaclass.class_eval do
|
405
|
+
define_method(:included) do |receiver|
|
406
|
+
receiver.extend class_methods
|
407
|
+
end
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
@example_group.include mod1, mod2
|
412
|
+
|
413
|
+
@example_group.mod1_method
|
414
|
+
@example_group.mod2_method
|
415
|
+
mod1_method_called.should be_true
|
416
|
+
mod2_method_called.should be_true
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
420
|
+
describe "#number_of_examples" do
|
421
|
+
it "should count number of specs" do
|
422
|
+
proc do
|
423
|
+
@example_group.it("one") {}
|
424
|
+
@example_group.it("two") {}
|
425
|
+
@example_group.it("three") {}
|
426
|
+
@example_group.it("four") {}
|
427
|
+
end.should change {@example_group.number_of_examples}.by(4)
|
428
|
+
end
|
429
|
+
end
|
430
|
+
|
431
|
+
describe "#class_eval" do
|
432
|
+
it "should allow constants to be defined" do
|
433
|
+
example_group = Class.new(ExampleGroup) do
|
434
|
+
describe('example')
|
435
|
+
FOO = 1
|
436
|
+
it "should reference FOO" do
|
437
|
+
FOO.should == 1
|
438
|
+
end
|
439
|
+
end
|
440
|
+
example_group.run
|
441
|
+
Object.const_defined?(:FOO).should == false
|
442
|
+
end
|
443
|
+
end
|
444
|
+
|
445
|
+
describe '#register' do
|
446
|
+
it "should add ExampleGroup to set of ExampleGroups to be run" do
|
447
|
+
example_group.register
|
448
|
+
options.example_groups.should include(example_group)
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
describe '#unregister' do
|
453
|
+
before do
|
454
|
+
example_group.register
|
455
|
+
options.example_groups.should include(example_group)
|
456
|
+
end
|
457
|
+
|
458
|
+
it "should remove ExampleGroup from set of ExampleGroups to be run" do
|
459
|
+
example_group.unregister
|
460
|
+
options.example_groups.should_not include(example_group)
|
461
|
+
end
|
462
|
+
end
|
463
|
+
end
|
464
|
+
end
|
465
|
+
end
|